├── .gitignore ├── .dockerignore ├── entrypoint.sh ├── README.md ├── .github └── workflows │ └── master.yml └── Dockerfile /.gitignore: -------------------------------------------------------------------------------- 1 | test/ 2 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | README.md 2 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | function updateGame() { 5 | steamcmd \ 6 | +login ${STEAM_CMD_USER} ${STEAM_CMD_PASSWORD} \ 7 | +force_install_dir ${SERVER_DIR} \ 8 | +app_update ${APP_ID} \ 9 | ${EXTRA_UPDATE_ARGS} \ 10 | +quit 11 | } 12 | 13 | function startGame() { 14 | cd ${SERVER_DIR} 15 | ./DayZServer \ 16 | -config="serverDZ.cfg" \ 17 | ${EXTRA_START_ARGS} 18 | } 19 | 20 | case "$1" in 21 | start) 22 | updateGame 23 | startGame 24 | ;; 25 | update) 26 | updateGame 27 | ;; 28 | *) 29 | exec "$@" 30 | ;; 31 | esac 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker Image for DayZ Standalone Server 2 | 3 | > Currently only Experimental Server since linux server is not yet released to stable 4 | 5 | ### Run the image 6 | 7 | The default startup command will update/install the server using the steamcmd (with anonymous login). 8 | 9 | Everything steam cmd downloads will be located in the `/dayz/server` directory, so make sure to create a volume for this dir or map it to the host file system. 10 | 11 | Example: 12 | ``` 13 | docker run -d -P \\ 14 | -v "${PWD}:/dayz/server" \\ 15 | --restart unless-stopped \\ 16 | senfo/dayz-sa-server-docker \\ 17 | ``` 18 | 19 | ### Environment 20 | 21 | | Variable | Description | Default | 22 | | --- | --- | --- | 23 | | STEAM_CMD_USER | the username for steam cmd login | anonymous | 24 | | STEAM_CMD_PASSWORD | the password for steam cmd login | | 25 | | UPDATE_EXTRA_ARGS | args passed to the steam cmd update command, i.e. workshop items | | 26 | | START_EXTRA_ARGS | args passed to the server start command i.e. server profile etc | | 27 | | APP_ID | the steam app id for the dayz server | 1042420 (experimental) | 28 | -------------------------------------------------------------------------------- /.github/workflows/master.yml: -------------------------------------------------------------------------------- 1 | name: Build master 2 | 3 | on: 4 | push: 5 | branches: 6 | - 'master' 7 | tags: 8 | - '*' 9 | 10 | jobs: 11 | docker: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - 15 | name: Checkout 16 | uses: actions/checkout@v2 17 | - 18 | name: Docker meta 19 | id: meta 20 | uses: docker/metadata-action@v3 21 | with: 22 | images: senfo/dayz-sa-server-docker 23 | tags: | 24 | type=ref,event=branch 25 | type=ref,event=pr 26 | type=semver,pattern={{version}} 27 | type=semver,pattern={{major}}.{{minor}} 28 | type=semver,pattern={{major}} 29 | type=sha 30 | - 31 | name: Set up QEMU 32 | uses: docker/setup-qemu-action@v1 33 | - 34 | name: Set up Docker Buildx 35 | uses: docker/setup-buildx-action@v1 36 | - 37 | name: Login to DockerHub 38 | if: startsWith(github.ref, 'refs/tags/v') 39 | uses: docker/login-action@v1 40 | with: 41 | username: ${{ secrets.DOCKERHUB_USERNAME }} 42 | password: ${{ secrets.DOCKERHUB_TOKEN }} 43 | - 44 | name: Build and push 45 | uses: docker/build-push-action@v2 46 | with: 47 | context: . 48 | push: ${{ startsWith(github.ref, 'refs/tags/v') }} 49 | tags: ${{ steps.meta.outputs.tags }} 50 | labels: ${{ steps.meta.outputs.labels }} 51 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM steamcmd/steamcmd:ubuntu-18 2 | # steamcmd doesnt work properly on ubuntu 20 due to misssing 32 bit deps 3 | 4 | ENV DEBIAN_FRONTEND=noninteractive 5 | 6 | # install deps 7 | RUN apt-get update && \ 8 | apt-get upgrade -y && \ 9 | apt-get install -y apt-utils && \ 10 | apt-get install -y \ 11 | lib32gcc1 \ 12 | libcap-dev \ 13 | libcurl4 \ 14 | libcurl4-openssl-dev \ 15 | && \ 16 | apt-get autoremove && \ 17 | rm -rf /var/lib/apt/lists/* 18 | 19 | # steam cmd and directory conf 20 | ENV USER dayz 21 | ENV BASE_DIR /dayz 22 | ENV HOME ${BASE_DIR}/home 23 | ENV SERVER_DIR ${BASE_DIR}/server 24 | ENV STEAM_CMD_USER anonymous 25 | ENV STEAM_CMD_PASSWORD="" 26 | 27 | # base dirs 28 | RUN mkdir -p ${BASE_DIR} && \ 29 | groupadd dayz && \ 30 | useradd -m -d ${HOME} -s /bin/bash -g dayz dayz && \ 31 | mkdir -p ${SERVER_DIR} 32 | 33 | # permissions 34 | RUN chown -R dayz:dayz ${BASE_DIR} && \ 35 | chown -R :dayz /usr/bin/steamcmd 36 | 37 | # game 38 | EXPOSE 2302/udp 39 | EXPOSE 2303/udp 40 | EXPOSE 2304/udp 41 | EXPOSE 2305/udp 42 | # steam 43 | EXPOSE 8766/udp 44 | EXPOSE 27016/udp 45 | # rcon (preferred) 46 | EXPOSE 2310 47 | 48 | WORKDIR ${BASE_DIR} 49 | VOLUME ${BASE_DIR} 50 | USER dayz 51 | 52 | # update steamcmd & validate user permissions 53 | RUN steamcmd +quit 54 | 55 | # currently linux server is experimental only 56 | ENV APP_ID="1042420" 57 | 58 | # reset cmd & define entrypoint 59 | CMD [ "start" ] 60 | COPY entrypoint.sh /dayz/entrypoint.sh 61 | ENTRYPOINT [ "/dayz/entrypoint.sh" ] 62 | --------------------------------------------------------------------------------