diff options
author | Mike Delago <32778141+michaeldelago@users.noreply.github.com> | 2023-10-15 08:47:09 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-15 17:47:09 +0200 |
commit | c4dc20a814451a27aef8113e829809a2b6587e3b (patch) | |
tree | a7480e17d2fdaa24eb71433d5efcd546a43bc20e /docker-compose.yml | |
parent | d1d46074a6d959d03c54de584db96e893cd0b5c4 (diff) |
refactor(Docker): remove prod container distinction (#17419)
* refactor(Docker): remove prod containers
* workflows: use buildx
* properly set tags
* comment in Dockerfile
* set docker build context
* minor CI changes
* CI: docker build args shouldnt have quotes
* CI: using matrix and caching is too much work
* CI: I hate yaml
* CI: It was a typo
* CI: extra build removed
* CI: appease the linter
* fixup! CI: appease the linter
* fixup! CI: appease the linter
* apps: docker: remove extraneous files
Diffstat (limited to 'docker-compose.yml')
-rw-r--r-- | docker-compose.yml | 400 |
1 files changed, 92 insertions, 308 deletions
diff --git a/docker-compose.yml b/docker-compose.yml index 4624cb2c88..6e6d59cbdd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,57 +1,17 @@ -version: '3.9' - -# extension field: https://docs.docker.com/compose/compose-file/compose-file-v3/#extension-fields -x-networks: &networks - networks: - - ac-network - -x-build-params: &build-params - context: . - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - # BUILDKIT_INLINE_CACHE: 1 - cache_from: - - acore/ac-wotlk-authserver:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-authserver-local:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-worldserver-local:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-tools:${DOCKER_IMAGE_TAG:-master} - # Need to fix reduced space on GH actions first - # - acore/ac-wotlk-client-data:${DOCKER_IMAGE_TAG:-master} - -x-ac-shared-conf: &ac-shared-conf - <<: *networks - working_dir: /azerothcore - environment: - AC_DISABLE_INTERACTIVE: "1" - -x-ac-service-conf: &ac-service-conf - <<: *ac-shared-conf - # List can't be merged. See: https://forums.docker.com/t/how-to-merge-a-list-of-volumes-from-an-extension-field-into-the-service-definition/77454 - # volumes: - # - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc - # # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - # - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated - - -services: -#======================= +# docker-compose.yml for AzerothCore. # -# DATABASE +# Start the server with `docker compose up -d --build` # -#======================= - +# Don't make changes this file! make a `docker-compose.override.yml` and make your +# changes there instead. +version: '3' +services: ac-database: - <<: *networks + container_name: ac-database image: mysql:8.0 - restart: unless-stopped - cap_add: - - SYS_NICE # CAP_SYS_NICE + networks: + - ac-network ports: - ${DOCKER_DB_EXTERNAL_PORT:-3306}:3306 environment: @@ -60,123 +20,47 @@ services: - type: volume source: ac-database target: /var/lib/mysql + restart: unless-stopped healthcheck: test: "/usr/bin/mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\"" interval: 5s timeout: 10s retries: 40 -#====================== -# -# Dev services -# -#====================== - - # - # Used for the build process to avoid the host binding of the /azerothcore - # and speedup the compilation by avoiding the host-container filesystem conversion issue - # on non-ext filesystems. Reference https://stackoverflow.com/a/63437557/1964544 - # - ac-dev-build: - <<: [ *ac-shared-conf ] # merge with - image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} - user: ${DOCKER_USER:-root} - cap_add: - - SYS_NICE # CAP_SYS_NICE - build: - target: dev - <<: *build-params - security_opt: - - seccomp:unconfined - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - volumes: - # expose some dist folder outside allowing the host to use them - - ${DOCKER_VOL_CONF:-./conf}:/azerothcore/conf - - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin - - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc - - ac-build-dev:/azerothcore/var/build - - ac-ccache-dev:/azerothcore/var/ccache - profiles: [dev-build] - - # - # Dev server with the ./azerothcore folder binded from the host - # Please use Linux, WSL2 or any ext-compatible filesystem - # to avoid performance issues - # - ac-dev-server: - <<: [ *ac-shared-conf ] # merge with - tty: true - image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} - user: ${DOCKER_USER:-root} - cap_add: - - SYS_NICE # CAP_SYS_NICE - build: - target: dev - <<: *build-params - security_opt: - - seccomp:unconfined - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - environment: - AC_DATA_DIR: "/azerothcore/env/dist/data" - AC_LOGS_DIR: "/azerothcore/env/dist/logs" - AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" - AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" - AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" - ports: - - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 - - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 - volumes: - - ${DOCKER_VOL_ROOT:-.}:/azerothcore:cached - # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - - ac-build-dev:/azerothcore/var/build - - ac-ccache-dev:/azerothcore/var/ccache - # this is not the directory of the extracted data! It's the client folder used by the extractors - - ${DOCKER_AC_CLIENT_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data - profiles: [dev] - depends_on: - ac-database: - condition: service_healthy - ac-db-import: - <<: *ac-shared-conf - image: acore/ac-wotlk-worldserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - command: ./env/dist/bin/dbimport + container_name: ac-db-import + image: acore/ac-wotlk-db-import:${DOCKER_IMAGE_TAG:-master} + networks: + - ac-network + build: + context: . + target: db-import + dockerfile: apps/docker/Dockerfile environment: AC_DATA_DIR: "/azerothcore/env/dist/data" AC_LOGS_DIR: "/azerothcore/env/dist/logs" AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" volumes: - # read-only binaries compiled by ac-dev-server - - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro - - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc:ro + - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated - profiles: [local, app, db-import-local] depends_on: ac-database: condition: service_healthy -#======================= -# -# APP Services -# -#======================= - ac-worldserver: - <<: *ac-service-conf # merge with ac-service-conf + container_name: ac-worldserver + image: acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} + build: + context: . + target: worldserver + dockerfile: apps/docker/Dockerfile + networks: + - ac-network stdin_open: true tty: true - cap_add: - - SYS_NICE # CAP_SYS_NICE - command: ./acore.sh run-worldserver - image: acore/ac-wotlk-worldserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally restart: unless-stopped env_file: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} @@ -186,35 +70,33 @@ services: AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" - user: ${DOCKER_USER:-root} - privileged: true - build: - target: worldserver-local - <<: *build-params ports: - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 volumes: - # read-only binaries compiled by ac-dev-server - - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro - - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc:ro + - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated # client data - - ${DOCKER_VOL_DATA:-./env/dist/data/}:/azerothcore/env/dist/data/ - profiles: [local, app, worldserver] + - ${DOCKER_VOL_DATA:-ac-client-data}:/azerothcore/env/dist/data/:ro depends_on: ac-database: condition: service_healthy ac-db-import: condition: service_completed_successfully + ac-client-data-init: + condition: service_completed_successfully ac-authserver: - <<: *ac-service-conf # merge with ac-service-conf + container_name: ac-authserver + image: acore/ac-wotlk-authserver:${DOCKER_IMAGE_TAG:-master} + build: + context: . + target: authserver + dockerfile: apps/docker/Dockerfile + networks: + - ac-network tty: true - command: ./acore.sh run-authserver - image: acore/ac-wotlk-authserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally restart: unless-stopped env_file: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} @@ -222,199 +104,101 @@ services: AC_LOGS_DIR: "/azerothcore/env/dist/logs" AC_TEMP_DIR: "/azerothcore/env/dist/temp" AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" - AC_SQLDRIVER_LOG_FILE: "SQLDriver.log" - AC_SQLDRIVER_QUERY_LOGGING: "1" - user: ${DOCKER_USER:-root} - build: - target: authserver-local - <<: *build-params volumes: - # read-only binaries compiled by ac-dev-server - - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated ports: - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 - profiles: [local, app, authserver] depends_on: ac-database: condition: service_healthy ac-db-import: condition: service_completed_successfully -#====================== -# -# Production services -# -# The following services are used to test the production images -# Do not use them unless you know what you're doing! -# We do not offer support for them -# -# For a production-ready docker-compose, please check the official repo: https://github.com/azerothcore/acore-docker -# -#====================== - - ac-database-prod: - <<: *networks - image: mysql:8.0 - restart: unless-stopped - cap_add: - - SYS_NICE # CAP_SYS_NICE - ports: - - ${DOCKER_DB_EXTERNAL_PORT:-3306}:3306 - environment: - - MYSQL_ROOT_PASSWORD=${DOCKER_DB_ROOT_PASSWORD:-password} - volumes: - - type: volume - source: ac-database-prod - target: /var/lib/mysql - healthcheck: - test: "/usr/bin/mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\"" - interval: 5s - timeout: 10s - retries: 40 - profiles: [prod] - - ac-worldserver-prod: - <<: *ac-service-conf # merge with ac-service-conf - stdin_open: true - tty: true - cap_add: - - SYS_NICE # CAP_SYS_NICE - command: ./acore.sh run-worldserver - image: acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - restart: unless-stopped - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - environment: - AC_DATA_DIR: "/azerothcore/env/dist/data" - AC_LOGS_DIR: "/azerothcore/env/dist/logs" - AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" - AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" - AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" - user: ${DOCKER_USER:-root} - privileged: true - build: - target: worldserver - <<: *build-params - ports: - - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 - volumes: - - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated - - ${DOCKER_VOL_CLIENT_DATA_PROD:-ac-client-data-prod}:/azerothcore/env/dist/data:ro - profiles: [prod, prod-app, prod-worldserver] - depends_on: - ac-database-prod: - condition: service_healthy - ac-db-import-prod: - condition: service_completed_successfully - ac-client-data-init: - condition: service_started - - ac-authserver-prod: - <<: *ac-service-conf # merge with ac-service-conf - tty: true - command: ./acore.sh run-authserver - image: acore/ac-wotlk-authserver:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - restart: unless-stopped - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - environment: - AC_LOGS_DIR: "/azerothcore/env/dist/logs" - AC_TEMP_DIR: "/azerothcore/env/dist/temp" - AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" - AC_SQLDRIVER_LOG_FILE: "SQLDriver.log" - AC_SQLDRIVER_QUERY_LOGGING: "1" - user: ${DOCKER_USER:-root} - build: - target: authserver - <<: *build-params - volumes: - - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated - ports: - - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 - profiles: [prod, prod-app, prod-authserver] - depends_on: - ac-database-prod: - condition: service_healthy - ac-db-import-prod: - condition: service_completed_successfully - ac-client-data-init: - image: acore/ac-wotlk-client-data:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally + container_name: ac-client-data-init + image: acore/ac-wotlk-client-data:${DOCKER_IMAGE_TAG:-master} user: ${DOCKER_USER:-root} build: + context: . target: client-data - <<: *build-params + dockerfile: apps/docker/Dockerfile args: USER_ID: ${DOCKER_USER_ID:-1000} GROUP_ID: ${DOCKER_GROUP_ID:-1000} DOCKER_USER: ${DOCKER_USER:-acore} - # BUILDKIT_INLINE_CACHE: 1 volumes: - - ${DOCKER_VOL_CLIENT_DATA_PROD:-ac-client-data-prod}:/azerothcore/env/dist/data:ro - profiles: [prod, prod-app, clientdata] + - ${DOCKER_VOL_CLIENT_DATA:-ac-client-data}:/azerothcore/env/dist/data + # used for extracting maps from files shipped with game client + # Most of the time this shouldn't be needed ac-tools: - image: acore/ac-wotlk-tools:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally + container_name: ac-tools + image: acore/ac-wotlk-tools:${DOCKER_IMAGE_TAG:-master} user: ${DOCKER_USER:-root} build: + context: . target: tools - <<: *build-params + dockerfile: apps/docker/Dockerfile working_dir: /azerothcore/env/client/ volumes: # this is not the directory of the extracted data! It's the client folder used by the extractors - ${DOCKER_AC_CLIENT_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data - profiles: [prod, tools] + # Activate with `docker compose --profile tools ...` + profiles: [tools] - ac-db-import-prod: - <<: *ac-shared-conf - image: acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - command: ./env/dist/bin/dbimport + # Dev server with the ./azerothcore folder binded from the host + # Please use Linux, WSL2 or any ext-compatible filesystem + # to avoid performance issues + # + # This is primarily intended for use with the "devcontainer" project + # + # This is provided primarily for development, though it doesn't receive + # first-class support + ac-dev-server: + tty: true + image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} + user: ${DOCKER_USER:-root} + build: + context: . + dockerfile: ./apps/docker/Dockerfile.dev-server + args: + USER_ID: ${DOCKER_USER_ID:-1000} + GROUP_ID: ${DOCKER_GROUP_ID:-1000} + DOCKER_USER: ${DOCKER_USER:-acore} + target: dev + env_file: + ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} environment: AC_DATA_DIR: "/azerothcore/env/dist/data" AC_LOGS_DIR: "/azerothcore/env/dist/logs" AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" - profiles: [prod, prod-app, db-import-prod] - - # - # Only for internal tests - # - ac-build-prod: - <<: *ac-shared-conf - build: - target: build - <<: *build-params - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - working_dir: /azerothcore/ - profiles: [prod-build] + ports: + - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 + - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 + - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 + volumes: + - ${DOCKER_VOL_ROOT:-.}:/azerothcore:cached + # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 + - ac-build-dev:/azerothcore/var/build + - ac-ccache-dev:/azerothcore/var/ccache + # this is not the directory of the extracted data! It's the client folder used by the extractors + - ${DOCKER_AC_CLIENT_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data + # Activate with `docker compose --profile dev ...` + profiles: [dev] + depends_on: + ac-database: + condition: service_healthy volumes: ac-database: - ac-database-prod: - ac-bin-dev: + ac-client-data: + # Used for dev server ac-build-dev: ac-ccache-dev: - ac-proj: - ac-client-data-prod: - # not used, but you can use them by setting - # the DOCKER_VOL_* env variabiles - ac-root: - ac-conf: - ac-etc: - ac-logs: - ac-client-data-cameras: - ac-client-data-dbc: - ac-client-data-maps: - ac-client-data-vmaps: - ac-client-data-mmaps: networks: ac-network: |