mirror of
				https://ceregatti.org/git/daniel/dayzdockerserver.git
				synced 2025-11-03 23:03:35 +00:00 
			
		
		
		
	Add support for two servers. This is a breaking change from before, as it creates new volumes with 1 and 2 in their names, allowing for 3, 4, ..., n.
This commit is contained in:
		
							parent
							
								
									a905435bfc
								
							
						
					
					
						commit
						6fbb9bf2ad
					
				
					 4 changed files with 84 additions and 34 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
.idea
 | 
					.idea
 | 
				
			||||||
*.iml
 | 
					*.iml
 | 
				
			||||||
.env
 | 
					.env*
 | 
				
			||||||
node_modules/
 | 
					node_modules/
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										47
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										47
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
					@ -30,12 +30,33 @@ git clone https://ceregatti.org/git/daniel/dayzdockerserver.git
 | 
				
			||||||
cd dayzdockerserver
 | 
					cd dayzdockerserver
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Create a `.env` file that contains your user id. Usually the `${UID}` shell variable has this:
 | 
					Create a `.env` file for the web container that contains your user id. Usually the `${UID}` shell variable has this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
echo "export USER_ID=${UID}" | tee .env
 | 
					echo "export USER_ID=${UID}" | tee .env
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Repeat the above for server1, which uses .env1 (and so on):
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					echo "export USER_ID=${UID}" | tee .env1
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					But each server must also set its own unique ports:
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					echo "export SERVER_PORT=2302" | tee -a .env1
 | 
				
			||||||
 | 
					echo "export RCON_PORT=2303" | tee -a .env1
 | 
				
			||||||
 | 
					echo "export STEAM_PORT=27016" | tee -a .env1
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Repeat the above for each server you want to run, making sure the ports are unique across all servers:
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					echo "export USER_ID=${UID}" | tee .env2
 | 
				
			||||||
 | 
					echo "export SERVER_PORT=2312" | tee -a .env2
 | 
				
			||||||
 | 
					echo "export RCON_PORT=2313" | tee -a .env2
 | 
				
			||||||
 | 
					echo "export STEAM_PORT=27116" | tee -a .env2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
Build the Docker images:
 | 
					Build the Docker images:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
| 
						 | 
					@ -76,7 +97,7 @@ hostname = "Something other than Server Name";   // Server name
 | 
				
			||||||
Install the server config file:
 | 
					Install the server config file:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
docker compose run --rm server dz c
 | 
					docker compose run --rm server1 dz c
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The maintenance of the config file is a work in progress. The goal is to create a facility for merging changes into the config file and maintain a paper trail of changes.
 | 
					The maintenance of the config file is a work in progress. The goal is to create a facility for merging changes into the config file and maintain a paper trail of changes.
 | 
				
			||||||
| 
						 | 
					@ -86,18 +107,18 @@ Launch the stack into the background:
 | 
				
			||||||
docker compose up -d
 | 
					docker compose up -d
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There will be nothing in mpmissions when the server container starts for the first time. A pristine copy of `dayzOffline.chernarusplus` will be copied from the `mpmission` volume to the server container. This will be the default map. To install other maps, see [Maps](#maps).
 | 
					There will be nothing in mpmissions when a server container starts for the first time. A pristine copy of `dayzOffline.chernarusplus` will be copied from the `mpmission` volume to the server container. This will be the default map. To install other maps, see [Maps](#maps).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To see the server log:
 | 
					To see the server log:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
docker compose logs -f server
 | 
					docker compose logs -f server1
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
## Stopping the server
 | 
					## Stopping the server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To stop the DayZ server:
 | 
					To stop the DayZ server:
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
docker compose exec server dz stop
 | 
					docker compose exec server1 dz stop
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If it exits cleanly, the container will also stop. Otherwise a crash is presumed and the server will restart. Ideally, the server would always exit cleanly, but... it's DayZ.
 | 
					If it exits cleanly, the container will also stop. Otherwise a crash is presumed and the server will restart. Ideally, the server would always exit cleanly, but... it's DayZ.
 | 
				
			||||||
| 
						 | 
					@ -126,13 +147,13 @@ A terminal-based RCON client is included: https://github.com/indepth666/py3rcon.
 | 
				
			||||||
The dz script manages what's necessary to configure and run it:
 | 
					The dz script manages what's necessary to configure and run it:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
docker compose exec server dz rcon
 | 
					docker compose exec server1 dz rcon
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To reset the RCON password in the Battle Eye configuration file, simply delete it, and a random one will be generated on the next server startup:
 | 
					To reset the RCON password in the Battle Eye configuration file, simply delete it, and a random one will be generated on the next server startup:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
docker compose run --rm server rm serverfiles/battleye/baserver_x64_active*
 | 
					docker compose run --rm server1 rm serverfiles/battleye/baserver_x64_active*
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Don't expect much from this RCON at this time.
 | 
					Don't expect much from this RCON at this time.
 | 
				
			||||||
| 
						 | 
					@ -159,13 +180,13 @@ Don't forget to [bring it back up](#run).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To stop the server:
 | 
					To stop the server:
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
docker compose exec server dz stop
 | 
					docker compose exec server1 dz stop
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The above sends the SIGINT signal to the server process. The server sometimes fails to stop with this signal. It may be necessary to force stop it with the SIGKILL:
 | 
					The above sends the SIGINT signal to the server process. The server sometimes fails to stop with this signal. It may be necessary to force stop it with the SIGKILL:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
docker compose exec server dz force
 | 
					docker compose exec server1 dz force
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When the server exits cleanly, i.e. exit code 0, the container also stops. Otherwise, a crash is presumed, and the server will be automatically restarted.
 | 
					When the server exits cleanly, i.e. exit code 0, the container also stops. Otherwise, a crash is presumed, and the server will be automatically restarted.
 | 
				
			||||||
| 
						 | 
					@ -180,8 +201,8 @@ docker compose down
 | 
				
			||||||
Interactive interface for managing mods. 
 | 
					Interactive interface for managing mods. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
docker compose exec server dz activate id | add id1 | deactivate id | list | modupdate | remove id
 | 
					docker compose exec server1 dz activate id | add id1 | deactivate id | list | modupdate | remove id
 | 
				
			||||||
docker compose exec server dz a id | add id1 | d id | l | m | r id
 | 
					docker compose exec server1 dz a id | add id1 | d id | l | m | r id
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Look for mods in the [DayZ Workshop](https://steamcommunity.com/app/221100/workshop/). Browse to one. In its URL will be
 | 
					Look for mods in the [DayZ Workshop](https://steamcommunity.com/app/221100/workshop/). Browse to one. In its URL will be
 | 
				
			||||||
| 
						 | 
					@ -232,9 +253,7 @@ This allows access to the server container using exec. You can then start and st
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```shell
 | 
					```shell
 | 
				
			||||||
# Go into the server container
 | 
					# Go into the server container
 | 
				
			||||||
docker compose exec shell bash
 | 
					docker compose exec server1 bash
 | 
				
			||||||
# Because this is now in the environment and keeping the server from starting, it'd still keep the server from starting unless we unset it
 | 
					 | 
				
			||||||
unset DEVELOPMENT
 | 
					 | 
				
			||||||
# See what the server status is
 | 
					# See what the server status is
 | 
				
			||||||
dz s
 | 
					dz s
 | 
				
			||||||
# Start it
 | 
					# Start it
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,18 +1,24 @@
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  # For steamcmd files and resource files used by the scripts
 | 
					  # Only in the web container.
 | 
				
			||||||
 | 
					  # For steamcmd files and resource files used by the scripts.
 | 
				
			||||||
  homedir_main:
 | 
					  homedir_main:
 | 
				
			||||||
  # For Steam, for now
 | 
					  # Shared by all containers.
 | 
				
			||||||
  homedir_server:
 | 
					  # Mods.
 | 
				
			||||||
 | 
					  mods:
 | 
				
			||||||
  # Where the server files will be installed
 | 
					  # Where the server files will be installed
 | 
				
			||||||
  serverfiles:
 | 
					  serverfiles:
 | 
				
			||||||
  # Server profile files
 | 
					 | 
				
			||||||
  profiles:
 | 
					 | 
				
			||||||
  # Upstream mission files
 | 
					  # Upstream mission files
 | 
				
			||||||
  servermpmissions:
 | 
					  servermpmissions:
 | 
				
			||||||
 | 
					  # Server-specific volumes
 | 
				
			||||||
 | 
					  # For Steam, for now
 | 
				
			||||||
 | 
					  homedir_server1:
 | 
				
			||||||
 | 
					  homedir_server2:
 | 
				
			||||||
  # Server mission files
 | 
					  # Server mission files
 | 
				
			||||||
  mpmissions:
 | 
					  mpmissions1:
 | 
				
			||||||
  # Mods
 | 
					  mpmissions2:
 | 
				
			||||||
  mods:
 | 
					  # Server profile files
 | 
				
			||||||
 | 
					  profiles1:
 | 
				
			||||||
 | 
					  profiles2:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
services:
 | 
					services:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,21 +43,23 @@ services:
 | 
				
			||||||
    env_file:
 | 
					    env_file:
 | 
				
			||||||
      - .env
 | 
					      - .env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  server:
 | 
					  server1:
 | 
				
			||||||
    build:
 | 
					    build:
 | 
				
			||||||
      context: server
 | 
					      context: server
 | 
				
			||||||
      args:
 | 
					      args:
 | 
				
			||||||
        - USER_ID
 | 
					        - USER_ID
 | 
				
			||||||
    user: ${USER_ID}
 | 
					    user: ${USER_ID}
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - homedir_server:/home/user
 | 
					      # Common volumes
 | 
				
			||||||
 | 
					      - ./files:/files
 | 
				
			||||||
 | 
					      - mods:/mods
 | 
				
			||||||
 | 
					      - ./server:/server
 | 
				
			||||||
      - serverfiles:/serverfiles
 | 
					      - serverfiles:/serverfiles
 | 
				
			||||||
      - servermpmissions:/mpmissions:ro
 | 
					      - servermpmissions:/mpmissions:ro
 | 
				
			||||||
      - mods:/mods
 | 
					      # Server-specific volumes
 | 
				
			||||||
      - mpmissions:/serverfiles/mpmissions
 | 
					      - homedir_server1:/home/user
 | 
				
			||||||
      - profiles:/profiles
 | 
					      - mpmissions1:/serverfiles/mpmissions
 | 
				
			||||||
      - ./files:/files
 | 
					      - profiles1:/profiles
 | 
				
			||||||
      - ./server:/server
 | 
					 | 
				
			||||||
    # To have the server show up in the LAN tab of the DayZ launcher,
 | 
					    # To have the server show up in the LAN tab of the DayZ launcher,
 | 
				
			||||||
    # it must run under host mode.
 | 
					    # it must run under host mode.
 | 
				
			||||||
    network_mode: host
 | 
					    network_mode: host
 | 
				
			||||||
| 
						 | 
					@ -77,4 +85,27 @@ services:
 | 
				
			||||||
#        soft: -1
 | 
					#        soft: -1
 | 
				
			||||||
#        hard: -1
 | 
					#        hard: -1
 | 
				
			||||||
    env_file:
 | 
					    env_file:
 | 
				
			||||||
      - .env
 | 
					      - .env1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Copy and paste this for every other server you want to run, replacing 2 with 3, and so on.
 | 
				
			||||||
 | 
					  server2: # <-- here
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      context: server
 | 
				
			||||||
 | 
					      args:
 | 
				
			||||||
 | 
					        - USER_ID
 | 
				
			||||||
 | 
					    user: ${USER_ID}
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      # Common volumes
 | 
				
			||||||
 | 
					      - ./files:/files
 | 
				
			||||||
 | 
					      - mods:/mods
 | 
				
			||||||
 | 
					      - ./server:/server
 | 
				
			||||||
 | 
					      - serverfiles:/serverfiles
 | 
				
			||||||
 | 
					      - servermpmissions:/mpmissions:ro
 | 
				
			||||||
 | 
					      # Server-specific volumes
 | 
				
			||||||
 | 
					      - homedir_server2:/home/user # <-- here
 | 
				
			||||||
 | 
					      - mpmissions2:/serverfiles/mpmissions # <-- here
 | 
				
			||||||
 | 
					      - profiles2:/profiles # <-- here
 | 
				
			||||||
 | 
					    network_mode: host
 | 
				
			||||||
 | 
					    restart: no
 | 
				
			||||||
 | 
					    env_file:
 | 
				
			||||||
 | 
					      - .env2 # <-- here
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,9 +5,9 @@ set -eEa
 | 
				
			||||||
# If you want/need the server and rcon ports to be different, set them here.
 | 
					# If you want/need the server and rcon ports to be different, set them here.
 | 
				
			||||||
# The steam query port is set in serverDZ.cfg.
 | 
					# The steam query port is set in serverDZ.cfg.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Server port
 | 
					# Server port. Set these in the .env file for the container.
 | 
				
			||||||
port=2302
 | 
					port=${SERVER_PORT}
 | 
				
			||||||
rcon_port=2303
 | 
					rcon_port=${RCON_PORT}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Don't change anything else.
 | 
					# Don't change anything else.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue