summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.devcontainer/devcontainer.json2
-rw-r--r--.editorconfig2
-rw-r--r--.github/workflows/build_dbimport.yml1
-rw-r--r--.github/workflows/core_build.yml2
-rw-r--r--.github/workflows/core_matrix_build.yml11
-rw-r--r--.github/workflows/core_modules_build.yml11
-rw-r--r--.github/workflows/docker_build.yml87
-rw-r--r--.github/workflows/import_pending.yml2
-rw-r--r--.github/workflows/issue-labeler.yml2
-rw-r--r--.github/workflows/macos_build.yml5
-rw-r--r--.github/workflows/tools_build.yml2
-rw-r--r--.github/workflows/windows_build.yml5
-rw-r--r--apps/bash_shared/common.sh2
-rw-r--r--apps/ci/ci-conf-core.sh3
-rw-r--r--apps/ci/ci-conf-db.sh3
-rw-r--r--apps/ci/ci-install.sh3
-rwxr-xr-xapps/compiler/compiler.sh2
-rw-r--r--apps/compiler/includes/functions.sh4
-rw-r--r--apps/docker/Dockerfile71
-rw-r--r--apps/docker/config-docker.sh2
-rw-r--r--apps/docker/docker-cmd.ts38
-rw-r--r--apps/installer/main.sh6
-rw-r--r--apps/installer/main.ts43
-rw-r--r--apps/installer/utils.ts17
-rw-r--r--conf/dist/env.ac12
-rw-r--r--conf/dist/env.docker14
-rw-r--r--docker-compose.yml353
-rw-r--r--env/docker/data/Cameras/.gitkeep0
-rw-r--r--env/docker/data/dbc/.gitkeep0
-rw-r--r--env/docker/data/maps/.gitkeep0
-rw-r--r--env/docker/data/mmaps/.gitkeep0
-rw-r--r--env/docker/data/vmaps/.gitkeep0
-rw-r--r--env/docker/etc/authserver.conf.dockerdist2
-rw-r--r--env/docker/etc/dbimport.conf.dockerdist1
-rw-r--r--env/docker/etc/worldserver.conf.dockerdist1
-rw-r--r--var/extractors/Cameras/.gitkeep0
36 files changed, 486 insertions, 223 deletions
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 15221f1aa5..a7cc6c6813 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -49,5 +49,5 @@
// "postCreateCommand": "apt-get update && apt-get install -y curl",
// Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root.
- "remoteUser": "acore"
+ "remoteUser": "root"
}
diff --git a/.editorconfig b/.editorconfig
index 4a0e9e6141..66e87791e3 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -7,7 +7,7 @@ insert_final_newline = true
trim_trailing_whitespace = true
max_line_length = 80
-[*.{json,ts,js}]
+[*.{json,ts,js,yml}]
charset = utf-8
indent_style = space
indent_size = 2
diff --git a/.github/workflows/build_dbimport.yml b/.github/workflows/build_dbimport.yml
index c4016339e7..45d988ff87 100644
--- a/.github/workflows/build_dbimport.yml
+++ b/.github/workflows/build_dbimport.yml
@@ -21,6 +21,7 @@ jobs:
name: ${{ matrix.compiler }}
env:
COMPILER: ${{ matrix.compiler }}
+ if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v2
- name: Cache
diff --git a/.github/workflows/core_build.yml b/.github/workflows/core_build.yml
index 7c43a1bb7c..53135ab89f 100644
--- a/.github/workflows/core_build.yml
+++ b/.github/workflows/core_build.yml
@@ -21,7 +21,7 @@ jobs:
name: ${{ matrix.os }}-${{ matrix.compiler }}
env:
COMPILER: ${{ matrix.compiler }}
- if: github.repository == 'azerothcore/azerothcore-wotlk'
+ if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v2
- name: Cache
diff --git a/.github/workflows/core_matrix_build.yml b/.github/workflows/core_matrix_build.yml
index a0f4d47f93..e0f6e40ac4 100644
--- a/.github/workflows/core_matrix_build.yml
+++ b/.github/workflows/core_matrix_build.yml
@@ -29,7 +29,16 @@ jobs:
name: ${{ matrix.os }}-${{ matrix.compiler }}
env:
COMPILER: ${{ matrix.compiler }}
- if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'file-cpp') || github.event.label.name == 'file-cpp' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
+ if: |
+ github.repository == 'azerothcore/azerothcore-wotlk'
+ && !github.event.pull_request.draft
+ && (
+ github.ref == 'refs/heads/master'
+ || contains(github.event.pull_request.labels.*.name, 'file-cpp'
+ || github.event.label.name == 'file-cpp'
+ || contains(github.event.pull_request.labels.*.name, 'run-build')
+ || github.event.label.name == 'run-build')
+ )
steps:
- uses: actions/checkout@v2
- name: Cache
diff --git a/.github/workflows/core_modules_build.yml b/.github/workflows/core_modules_build.yml
index 7003d96f9e..6f50e7306b 100644
--- a/.github/workflows/core_modules_build.yml
+++ b/.github/workflows/core_modules_build.yml
@@ -23,7 +23,16 @@ jobs:
name: ${{ matrix.os }}-${{ matrix.compiler }}-${{ matrix.modules }}-modules
env:
COMPILER: ${{ matrix.compiler }}
- if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'file-cpp') || github.event.label.name == 'file-cpp' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
+ if: |
+ github.repository == 'azerothcore/azerothcore-wotlk'
+ && !github.event.pull_request.draft
+ && (
+ github.ref == 'refs/heads/master'
+ || contains(github.event.pull_request.labels.*.name, 'file-cpp'
+ || github.event.label.name == 'file-cpp'
+ || contains(github.event.pull_request.labels.*.name, 'run-build')
+ || github.event.label.name == 'run-build')
+ )
steps:
- uses: actions/checkout@v2
- name: Checkout modules
diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml
index 1c91ef860b..850f7affef 100644
--- a/.github/workflows/docker_build.yml
+++ b/.github/workflows/docker_build.yml
@@ -11,13 +11,16 @@ concurrency:
cancel-in-progress: true
jobs:
- docker-build-n-deploy:
+ docker-build-n-deploy-dev:
strategy:
fail-fast: true
matrix:
os: [ubuntu-20.04]
runs-on: ${{ matrix.os }}
- if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
+ if: |
+ github.repository == 'azerothcore/azerothcore-wotlk'
+ && !github.event.pull_request.draft
+ && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
env:
COMPOSE_DOCKER_CLI_BUILD: 1
DOCKER_BUILDKIT: 1
@@ -40,14 +43,6 @@ jobs:
docker --version
docker compose --version
- # TODO: make it work
- # - uses: whoan/docker-build-with-cache-action@v5
- # with:
- # image_tag: master
- # username: ${{ secrets.DOCKERHUB_USERNAME }}
- # password: ${{ secrets.DOCKERHUB_TOKEN }}
- # compose_file: docker-compose.yml
-
- name: Login to Docker Hub
if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master'
uses: docker/login-action@v1
@@ -55,19 +50,17 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
- # before cache
- # needed to avoid ccache injected into these images
- name: Build Dev
if: github.repository == 'azerothcore/azerothcore-wotlk'
env:
#DOCKER_IMAGE_TAG: ${{ steps.extract_branch.outputs.branch }}
- DOCKER_EXTENDS_BIND: abstract-no-bind
DOCKER_CLIENT_TIMEOUT: 400
COMPOSE_HTTP_TIMEOUT: 400
run: |
export DOCKER_USER_ID=$(id -u)
export DOCKER_GROUP_ID=$(id -u)
+ # pull the images first to load the docker cache layers
+ ./acore.sh docker pull
./acore.sh docker build
- name: Deploy Dev
@@ -76,6 +69,47 @@ jobs:
if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master'
run: |
docker compose --profile dev --profile local push
+ output=$(./acore.sh version | grep "AzerothCore Rev.") && version=${output#"AzerothCore Rev."}
+ DOCKER_IMAGE_TAG=$version docker compose --profile local push
+
+ docker-build-n-deploy-prod:
+ strategy:
+ fail-fast: true
+ matrix:
+ os: [ubuntu-20.04]
+ runs-on: ${{ matrix.os }}
+ if: |
+ github.repository == 'azerothcore/azerothcore-wotlk'
+ && !github.event.pull_request.draft
+ && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
+ env:
+ COMPOSE_DOCKER_CLI_BUILD: 1
+ DOCKER_BUILDKIT: 1
+ BUILDKIT_INLINE_CACHE: 1
+
+ steps:
+ - name: Extract branch name
+ shell: bash
+ run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
+ id: extract_branch
+
+ - uses: actions/checkout@v2
+
+ - name: Configure
+ run: |
+ sudo rm -rf /usr/local/lib/android
+ sudo rm -rf /usr/share/dotnet
+ sudo rm -rf /opt/ghc
+ sudo rm -rf "$AGENT_TOOLSDIRECTORY"
+ docker --version
+ docker compose --version
+
+ - name: Login to Docker Hub
+ if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master'
+ uses: docker/login-action@v1
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Cache
uses: actions/cache@v2
@@ -90,16 +124,17 @@ jobs:
if: github.repository == 'azerothcore/azerothcore-wotlk'
env:
#DOCKER_IMAGE_TAG: ${{ steps.extract_branch.outputs.branch }}
- DOCKER_EXTENDS_BIND: abstract-no-bind
- DOCKER_AC_BUILD_TARGET: build
DOCKER_CLIENT_TIMEOUT: 220
COMPOSE_HTTP_TIMEOUT: 220
run: |
export DOCKER_USER_ID=$(id -u)
export DOCKER_GROUP_ID=$(id -u)
+ # pull the images first to load the docker cache layers
+ ./acore.sh docker prod:pull
./acore.sh docker prod:build
- docker compose run --no-deps --name build ac-build echo "image created"
- docker cp build:/azerothcore/var/ccache var/docker/
+ # create the container to allow the copy right after
+ docker compose create ac-build-prod
+ docker compose cp ac-build-prod:/azerothcore/var/ccache var/docker/
echo "ccache exported"
- name: Deploy Production images
@@ -108,3 +143,19 @@ jobs:
if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master'
run: |
docker compose --profile prod push
+ output=$(./acore.sh version | grep "AzerothCore Rev.") && version=${output#"AzerothCore Rev."}
+ DOCKER_IMAGE_TAG=$version docker compose --profile prod push
+
+
+ dispatch-acore-docker:
+ needs: [ docker-build-n-deploy-prod , docker-build-n-deploy-dev]
+ runs-on: ubuntu-latest
+ steps:
+ - name: Repository Dispatch
+ if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master'
+ uses: peter-evans/repository-dispatch@v2
+ with:
+ token: ${{ secrets.ACORE_DOCKER_REPO_ACCESS_TOKEN }}
+ repository: azerothcore/acore-docker
+ # event-type: my-event
+ client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}'
diff --git a/.github/workflows/import_pending.yml b/.github/workflows/import_pending.yml
index 60f211da70..c9a7ffaafb 100644
--- a/.github/workflows/import_pending.yml
+++ b/.github/workflows/import_pending.yml
@@ -9,7 +9,7 @@ jobs:
strategy:
fail-fast: false
runs-on: ubuntu-20.04
- if: github.repository == 'azerothcore/azerothcore-wotlk'
+ if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v2
with:
diff --git a/.github/workflows/issue-labeler.yml b/.github/workflows/issue-labeler.yml
index e91fda799b..cc032a770e 100644
--- a/.github/workflows/issue-labeler.yml
+++ b/.github/workflows/issue-labeler.yml
@@ -5,7 +5,7 @@ on:
jobs:
issue_labeler:
- if: github.repository == 'azerothcore/azerothcore-wotlk'
+ if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
runs-on: ubuntu-latest
name: Issue Labeler
steps:
diff --git a/.github/workflows/macos_build.yml b/.github/workflows/macos_build.yml
index 5d58a15e69..984fe91326 100644
--- a/.github/workflows/macos_build.yml
+++ b/.github/workflows/macos_build.yml
@@ -20,7 +20,10 @@ jobs:
- macos-12
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}
- if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
+ if: |
+ github.repository == 'azerothcore/azerothcore-wotlk'
+ && !github.event.pull_request.draft
+ && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
steps:
- uses: actions/checkout@v2
- name: Cache
diff --git a/.github/workflows/tools_build.yml b/.github/workflows/tools_build.yml
index 73aecd18b9..242dea7486 100644
--- a/.github/workflows/tools_build.yml
+++ b/.github/workflows/tools_build.yml
@@ -21,7 +21,7 @@ jobs:
name: ${{ matrix.os }}-${{ matrix.compiler }}
env:
COMPILER: ${{ matrix.compiler }}
- if: github.repository == 'azerothcore/azerothcore-wotlk'
+ if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v2
- name: Cache
diff --git a/.github/workflows/windows_build.yml b/.github/workflows/windows_build.yml
index 527abc33ea..04f42a702f 100644
--- a/.github/workflows/windows_build.yml
+++ b/.github/workflows/windows_build.yml
@@ -20,7 +20,10 @@ jobs:
name: ${{ matrix.os }}
env:
BOOST_ROOT: C:\local\boost_1_79_0
- if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
+ if: |
+ github.repository == 'azerothcore/azerothcore-wotlk'
+ && !github.event.pull_request.draft
+ && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
steps:
- uses: actions/checkout@v2
- name: Configure OS
diff --git a/apps/bash_shared/common.sh b/apps/bash_shared/common.sh
index c8d8880cf8..027a49bed3 100644
--- a/apps/bash_shared/common.sh
+++ b/apps/bash_shared/common.sh
@@ -9,7 +9,7 @@ USER_CONF_PATH=${USER_CONF_PATH:-"$AC_PATH_CONF/config.sh"}
if [ -f "$USER_CONF_PATH" ]; then
source "$USER_CONF_PATH" # should overwrite previous
else
- echo "NOTICE: file <$USER_CONF_PATH> has not been found, you should create and configure it."
+ echo "NOTICE: file <$USER_CONF_PATH> not found, we use default configuration only."
fi
#
diff --git a/apps/ci/ci-conf-core.sh b/apps/ci/ci-conf-core.sh
index 4fd3fa4c23..591ad7078d 100644
--- a/apps/ci/ci-conf-core.sh
+++ b/apps/ci/ci-conf-core.sh
@@ -14,9 +14,6 @@ CBUILD_TESTING=ON
CSCRIPTPCH=OFF
CCOREPCH=OFF
CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"'
-DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
-DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
-DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
CONFIG_SH
case $COMPILER in
diff --git a/apps/ci/ci-conf-db.sh b/apps/ci/ci-conf-db.sh
index e0fc17bce7..2bcfb9deb2 100644
--- a/apps/ci/ci-conf-db.sh
+++ b/apps/ci/ci-conf-db.sh
@@ -12,9 +12,6 @@ CTOOLS_BUILD=db-only
CSCRIPTPCH=OFF
CCOREPCH=OFF
CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"'
-DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
-DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
-DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
CONFIG_SH
case $COMPILER in
diff --git a/apps/ci/ci-install.sh b/apps/ci/ci-install.sh
index c333d9685c..ce0372cb8b 100644
--- a/apps/ci/ci-install.sh
+++ b/apps/ci/ci-install.sh
@@ -14,9 +14,6 @@ CTOOLS=ON
CSCRIPTPCH=OFF
CCOREPCH=OFF
CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"'
-DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
-DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
-DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
CONFIG_SH
time sudo apt-get update -y
diff --git a/apps/compiler/compiler.sh b/apps/compiler/compiler.sh
index 140d5fa974..dcb94a6b65 100755
--- a/apps/compiler/compiler.sh
+++ b/apps/compiler/compiler.sh
@@ -29,6 +29,7 @@ comp_options=(
"compile: Compile only"
"all: clean, configure and compile"
"ccacheClean: Clean ccache files, normally not needed"
+ "ccacheShowStats: show ccache statistics"
"quit: Close this menu")
comp_functions=(
"comp_build"
@@ -37,6 +38,7 @@ comp_functions=(
"comp_compile"
"comp_all"
"comp_ccacheClean"
+ "comp_ccacheShowStats"
"comp_quit")
PS3='[ Please enter your choice ]: '
diff --git a/apps/compiler/includes/functions.sh b/apps/compiler/includes/functions.sh
index 842f65b85b..25cc507bcc 100644
--- a/apps/compiler/includes/functions.sh
+++ b/apps/compiler/includes/functions.sh
@@ -17,6 +17,8 @@ function comp_ccacheEnable() {
export CCACHE_CPP2=${CCACHE_CPP2:-true} # optimization for clang
export CCACHE_COMPRESS=${CCACHE_COMPRESS:-1}
export CCACHE_COMPRESSLEVEL=${CCACHE_COMPRESSLEVEL:-9}
+ export CCACHE_COMPILERCHECK=${CCACHE_COMPILERCHECK:-content}
+ export CCACHE_LOGFILE=${CCACHE_LOGFILE:-"$CCACHE_DIR/cache.debug"}
#export CCACHE_NODIRECT=true
export CCUSTOMOPTIONS="$CCUSTOMOPTIONS -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
@@ -106,6 +108,8 @@ function comp_compile() {
cd $BUILDPATH
+ comp_ccacheEnable
+
comp_ccacheResetStats
time cmake --build . --config $CTYPE -j $MTHREADS
diff --git a/apps/docker/Dockerfile b/apps/docker/Dockerfile
index c70a2b1187..97aed784eb 100644
--- a/apps/docker/Dockerfile
+++ b/apps/docker/Dockerfile
@@ -45,7 +45,11 @@ RUN addgroup --gid $GROUP_ID acore && \
# must be created to set the correct permissions on them
RUN mkdir -p /azerothcore/env/dist/bin
-RUN mkdir -p /azerothcore/env/dist/data
+RUN mkdir -p /azerothcore/env/dist/data/Cameras
+RUN mkdir -p /azerothcore/env/dist/data/dbc
+RUN mkdir -p /azerothcore/env/dist/data/maps
+RUN mkdir -p /azerothcore/env/dist/data/mmaps
+RUN mkdir -p /azerothcore/env/dist/data/vmaps
RUN mkdir -p /azerothcore/env/dist/logs
RUN mkdir -p /azerothcore/env/dist/temp
RUN mkdir -p /azerothcore/env/dist/etc
@@ -59,10 +63,14 @@ RUN chown -R $DOCKER_USER:$DOCKER_USER /azerothcore
USER $DOCKER_USER
-# copy everything so we can work directly within the container
-# using tools such as vscode dev-container
-# NOTE: this folder is different by the /azerothcore (which is binded instead)
-COPY --chown=$DOCKER_USER:$DOCKER_USER . /azerothcore
+# copy only necessary files for the acore dashboard
+COPY --chown=$DOCKER_USER:$DOCKER_USER apps /azerothcore/apps
+COPY --chown=$DOCKER_USER:$DOCKER_USER bin /azerothcore/bin
+COPY --chown=$DOCKER_USER:$DOCKER_USER conf /azerothcore/conf
+COPY --chown=$DOCKER_USER:$DOCKER_USER data /azerothcore/data
+COPY --chown=$DOCKER_USER:$DOCKER_USER deps /azerothcore/deps
+COPY --chown=$DOCKER_USER:$DOCKER_USER acore.json /azerothcore/acore.json
+COPY --chown=$DOCKER_USER:$DOCKER_USER acore.sh /azerothcore/acore.sh
# Download deno and make sure the dashboard works
RUN bash /azerothcore/acore.sh quit
@@ -79,6 +87,13 @@ FROM base as dev
LABEL description="AC dev image for dev containers"
+USER $DOCKER_USER
+
+# copy everything so we can work directly within the container
+# using tools such as vscode dev-container
+# NOTE: this folder is different by the /azerothcore (which is binded instead)
+COPY --chown=$DOCKER_USER:$DOCKER_USER . /azerothcore
+
#================================================================
#
# SERVICE BASE: prepare the OS for the production-ready services
@@ -115,26 +130,21 @@ RUN apt-get update && apt-get install -y dos2unix gdb gdbserver google-perftools
# change timezone in container
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata
-# copy the sources from the host machine
-COPY --chown=$DOCKER_USER:$DOCKER_USER apps /azerothcore/apps
-COPY --chown=$DOCKER_USER:$DOCKER_USER bin /azerothcore/bin
-COPY --chown=$DOCKER_USER:$DOCKER_USER conf /azerothcore/conf
-COPY --chown=$DOCKER_USER:$DOCKER_USER data /azerothcore/data
-COPY --chown=$DOCKER_USER:$DOCKER_USER deps /azerothcore/deps
-COPY --chown=$DOCKER_USER:$DOCKER_USER acore.json /azerothcore/acore.json
-COPY --chown=$DOCKER_USER:$DOCKER_USER acore.sh /azerothcore/acore.sh
-
# Correct permissions for non-root operations
RUN chown -R $DOCKER_USER:$DOCKER_USER /home/acore
RUN chown -R $DOCKER_USER:$DOCKER_USER /run
RUN chown -R $DOCKER_USER:$DOCKER_USER /opt
-RUN chown $DOCKER_USER:$DOCKER_USER /azerothcore
+COPY --chown=$DOCKER_USER:$DOCKER_USER --from=base /azerothcore /azerothcore
USER $DOCKER_USER
# must be created to avoid permissions errors
-RUN mkdir -p /azerothcore/env/dist/data
+RUN mkdir -p /azerothcore/env/dist/data/Cameras
+RUN mkdir -p /azerothcore/env/dist/data/dbc
+RUN mkdir -p /azerothcore/env/dist/data/maps
+RUN mkdir -p /azerothcore/env/dist/data/mmaps
+RUN mkdir -p /azerothcore/env/dist/data/vmaps
RUN mkdir -p /azerothcore/env/dist/logs
RUN mkdir -p /azerothcore/env/dist/etc
RUN mkdir -p /azerothcore/env/dist/bin
@@ -157,12 +167,16 @@ LABEL description="AC authserver image for local environment"
CMD ./acore.sh run-authserver
+USER $DOCKER_USER
+
FROM servicebase as worldserver-local
LABEL description="AC worldserver image for local environment"
CMD ./acore.sh run-worldserver
+USER $DOCKER_USER
+
#================================================================
#
# BUILD: compile sources
@@ -171,12 +185,20 @@ CMD ./acore.sh run-worldserver
FROM base as build
ARG DOCKER_USER=acore
+USER $DOCKER_USER
LABEL description="AC Image used by the build stage to generate production images"
RUN mkdir -p /azerothcore/env/etc/
+# .git is needed by the compiler
+COPY --chown=$DOCKER_USER:$DOCKER_USER ./.git /azerothcore/.git
+COPY --chown=$DOCKER_USER:$DOCKER_USER ./CMakeLists.txt /azerothcore/CMakeLists.txt
+COPY --chown=$DOCKER_USER:$DOCKER_USER ./deps /azerothcore/deps
+COPY --chown=$DOCKER_USER:$DOCKER_USER ./src /azerothcore/src
+COPY --chown=$DOCKER_USER:$DOCKER_USER ./modules /azerothcore/modules
# check if we have ccache files available outside
+RUN rm -rf /azerothcore/var/ccache/*
COPY --chown=$DOCKER_USER:$DOCKER_USER var/docker/ccache /azerothcore/var/ccache
COPY --chown=$DOCKER_USER:$DOCKER_USER env/docker/etc/authserver.conf.dockerdist /azerothcore/env/dist/etc/authserver.conf.dockerdist
COPY --chown=$DOCKER_USER:$DOCKER_USER env/docker/etc/worldserver.conf.dockerdist /azerothcore/env/dist/etc/worldserver.conf.dockerdist
@@ -207,6 +229,7 @@ FROM authserver-local as authserver
LABEL description="AC Production: authserver"
ARG DOCKER_USER=acore
+USER $DOCKER_USER
COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/etc /azerothcore/env/dist/etc
COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/authserver /azerothcore/env/dist/bin/authserver
@@ -222,6 +245,7 @@ FROM worldserver-local as worldserver
LABEL description="AC Production: worldserver"
ARG DOCKER_USER=acore
+USER $DOCKER_USER
RUN mkdir -p /azerothcore/env/dist/bin/lua_scripts
COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/etc /azerothcore/env/dist/etc
@@ -258,9 +282,8 @@ RUN addgroup --gid $GROUP_ID acore && \
ENV DATAPATH=/azerothcore/env/dist/data
ENV DATAPATH_ZIP=/tmp/data.zip
-RUN --mount=type=bind,target=/azerothcore-temp,readwrite /azerothcore-temp/acore.sh client-data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore
-
-RUN apt-get remove --purge -y tzdata curl unzip && apt-get autoremove -y
+RUN mkdir -p "$DATAPATH"
+RUN --mount=type=bind,target=/azerothcore-temp,readwrite --mount=type=cache,target=/azerothcore/env/dist/data /azerothcore-temp/acore.sh client-data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore
USER $DOCKER_USER
@@ -302,14 +325,14 @@ USER $DOCKER_USER
WORKDIR /azerothcore/env/client/
+RUN mkdir -p /azerothcore/env/client/Cameras
RUN mkdir -p /azerothcore/env/client/dbc
RUN mkdir -p /azerothcore/env/client/maps
RUN mkdir -p /azerothcore/env/client/mmaps
RUN mkdir -p /azerothcore/env/client/vmaps
-# Need fix
-# COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mapextractor /azerothcore/env/client/mapextractor
-# COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mmaps_generator /azerothcore/env/client/mmaps_generator
-# COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4assembler /azerothcore/env/client/vmap4assembler
-# COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4extractor /azerothcore/env/client/vmap4extractor
+COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/map_extractor /azerothcore/env/client/map_extractor
+COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mmaps_generator /azerothcore/env/client/mmaps_generator
+COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4_assembler /azerothcore/env/client/vmap4_assembler
+COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4_extractor /azerothcore/env/client/vmap4_extractor
diff --git a/apps/docker/config-docker.sh b/apps/docker/config-docker.sh
index 8c3ac42067..7f5482480d 100644
--- a/apps/docker/config-docker.sh
+++ b/apps/docker/config-docker.sh
@@ -1,5 +1,7 @@
CUR_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+CTOOLS_BUILD=all
+
# allow the user to override configs
if [ -f "$AC_PATH_CONF/config.sh" ]; then
source "$AC_PATH_CONF/config.sh" # should overwrite previous
diff --git a/apps/docker/docker-cmd.ts b/apps/docker/docker-cmd.ts
index ce03f34ced..43884f956d 100644
--- a/apps/docker/docker-cmd.ts
+++ b/apps/docker/docker-cmd.ts
@@ -39,31 +39,30 @@ shellCommandFactory(
"build",
"Build the authserver and worldserver",
[
- "docker compose --profile local build --parallel",
+ "docker compose --profile local --profile dev --profile dev-build build --parallel",
"docker image prune -f",
- "docker compose run --rm ac-build bash apps/docker/docker-build-dev.sh",
+ "docker compose run --rm --no-deps ac-dev-build bash apps/docker/docker-build-dev.sh",
],
env
);
shellCommandFactory(
- "build:nocache",
- "Build the authserver and worldserver without docker cache",
+ "pull",
+ "Pull build and local images",
[
- "docker compose --profile local build --no-cache --parallel",
+ "docker compose --profile local --profile dev --profile dev-build pull --parallel",
"docker image prune -f",
- "docker compose run --rm ac-build bash apps/docker/docker-build-dev.sh",
],
env
);
shellCommandFactory(
- "build:compile",
- "Run the compilation process only, without rebuilding all docker images",
+ "build:nocache",
+ "Build the authserver and worldserver without docker cache",
[
- "docker compose build --parallel ac-build",
+ "docker compose --profile local --profile dev --profile dev-build build --no-cache --parallel",
"docker image prune -f",
- "docker compose run --rm ac-build bash apps/docker/docker-build-dev.sh",
+ "docker compose run --rm --no-deps ac-dev-build bash apps/docker/docker-build-dev.sh",
],
env
);
@@ -73,7 +72,8 @@ shellCommandFactory(
"Clean build files",
[
"docker image prune -f",
- `docker compose run --rm ac-build bash acore.sh compiler clean`,
+ `docker compose run --rm --no-deps ac-dev-server bash acore.sh compiler clean`,
+ `docker compose run --rm --no-deps ac-dev-server bash acore.sh compiler ccacheClean`,
],
env
);
@@ -81,7 +81,7 @@ shellCommandFactory(
shellCommandFactory(
"client-data",
"Download client data inside the ac-data volume",
- ["docker compose run --rm ac-build bash acore.sh client-data"],
+ ["docker compose run --rm --no-deps ac-dev-server bash acore.sh client-data"],
env
);
@@ -94,7 +94,7 @@ shellCommandFactory(
shellCommandFactory(
"dev:build",
- "Build using the dev server, it uses volumes to compile which can be faster on linux & WSL",
+ "Build using the dev server",
["docker compose run --rm ac-dev-server bash acore.sh compiler build"],
env
);
@@ -118,28 +118,28 @@ shellCommandFactory(
shellCommandFactory(
"prod:build",
- "Build producion services",
+ "[TEST ONLY] Build producion services",
["docker compose --profile prod build --parallel", "docker image prune -f"],
env
);
shellCommandFactory(
"prod:pull",
- "Pull production services from the remote registry",
+ "[TEST ONLY] Pull production services from the remote registry",
["docker compose --profile prod pull"],
env
);
shellCommandFactory(
"prod:up",
- "Start production services (foreground)",
+ "[TEST ONLY] Start production services (foreground)",
["docker compose --profile prod-app up"],
env
);
shellCommandFactory(
"prod:up:d",
- "Start production services (background)",
+ "[TEST ONLY] Start production services (background)",
["docker compose --profile prod-app up -d"],
env
);
@@ -176,7 +176,7 @@ program
}
services.pop();
- services = services.slice(2);
+ services = services.slice(1);
res.close(); // Don't forget to close it
@@ -304,8 +304,6 @@ async function checkDockerVersion() {
}
async function main() {
- // Handle it however you like
- // e.g. display usage
while (true) {
const version = await checkDockerVersion();
if (version !== true) {
diff --git a/apps/installer/main.sh b/apps/installer/main.sh
index 7475c8f2ff..91d6cb1dc6 100644
--- a/apps/installer/main.sh
+++ b/apps/installer/main.sh
@@ -67,7 +67,11 @@ function _switch() {
DOCKER=1 denoRunFile "$AC_PATH_APPS/docker/docker-cmd.ts" "${@:2}"
exit
;;
- ""|"quit"|"14")
+ ""|"v"|"version"|"14")
+ denoRunFile "$AC_PATH_APPS/installer/main.ts" "version"
+ exit
+ ;;
+ ""|"quit"|"15")
echo "Goodbye!"
exit
;;
diff --git a/apps/installer/main.ts b/apps/installer/main.ts
new file mode 100644
index 0000000000..135ccc6452
--- /dev/null
+++ b/apps/installer/main.ts
@@ -0,0 +1,43 @@
+import { Command } from "https://cdn.deno.land/cmd/versions/v1.2.0/raw/mod.ts";
+import { getAcoreReleaseVersion } from "./utils.ts";
+import { Input } from "https://deno.land/x/cliffy@v0.25.2/prompt/mod.ts";
+
+const program = new Command();
+
+program
+ .name("acore.sh")
+ .description("Shell scripts for docker")
+ .version("1.0.0");
+
+// program
+// .command("quit")
+// .description("Close docker command")
+// .action(() => {
+// process.exit(0);
+// });
+
+program
+ .command("version")
+ .description("Get the version of the current AzerothCore revision")
+ .action(async () => {
+ console.log(await getAcoreReleaseVersion());
+ });
+
+async function main() {
+ let exit = false;
+ do {
+ if (Deno.args.length === 0) {
+ program.outputHelp();
+ const command = await Input.prompt({
+ message: "Enter the command:",
+ });
+ console.log(command);
+ await program.parseAsync(command.split(" "));
+ } else {
+ exit = true;
+ await program.parseAsync(Deno.args);
+ process.exit(0);
+ }
+ } while (!exit);
+}
+main();
diff --git a/apps/installer/utils.ts b/apps/installer/utils.ts
new file mode 100644
index 0000000000..90d70ec6a8
--- /dev/null
+++ b/apps/installer/utils.ts
@@ -0,0 +1,17 @@
+import * as path from "https://deno.land/std/path/mod.ts";
+import makeloc from "https://deno.land/x/dirname@1.1.2/mod.ts";
+
+const { __dirname } = makeloc(import.meta);
+
+// specify the needed paths here
+const ACORE_JSON = path.resolve(__dirname + "/../../acore.json");
+
+export async function getAcoreReleaseVersion() {
+ // read the acore.json file to work with the versioning
+ const decoder = new TextDecoder("utf-8");
+ //console.debug(`Open ${ACORE_JSON}`)
+ const data = await Deno.readFile(ACORE_JSON);
+ const acoreInfo = JSON.parse(decoder.decode(data));
+
+ return `AzerothCore Rev. ${acoreInfo.version}`;
+}
diff --git a/conf/dist/env.ac b/conf/dist/env.ac
index ed6169223f..3f17c4d820 100644
--- a/conf/dist/env.ac
+++ b/conf/dist/env.ac
@@ -14,18 +14,6 @@ CSCRIPTS=static
AC_CCACHE=true
#
-# DATABASE
-#
-
-OUTPUT_FOLDER=/azerothcore/var/build/sql/
-
-DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='password'; MYSQL_HOST='ac-database'; MYSQL_PORT='3306';"
-
-DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='password'; MYSQL_HOST='ac-database'; MYSQL_PORT='3306';"
-
-DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='password'; MYSQL_HOST='ac-database'; MYSQL_PORT='3306';"
-
-#
# SIMPLE RESTARTER
#
AC_RESTARTER_BINPATH=
diff --git a/conf/dist/env.docker b/conf/dist/env.docker
index 61f8fd965f..030f20d9f3 100644
--- a/conf/dist/env.docker
+++ b/conf/dist/env.docker
@@ -5,10 +5,15 @@
DOCKER_AC_ENV_FILE=
-DOCKER_VOL_DATA=
+DOCKER_VOL_ROOT=
+DOCKER_VOL_CONF=
DOCKER_VOL_ETC=
DOCKER_VOL_LOGS=
-DOCKER_VOL_CONF=
+DOCKER_VOL_DATA_CAMERAS=
+DOCKER_VOL_DATA_DBC=
+DOCKER_VOL_DATA_MAPS=
+DOCKER_VOL_DATA_VMAPS=
+DOCKER_VOL_DATA_MMAPS=
DOCKER_WORLD_EXTERNAL_PORT=
DOCKER_SOAP_EXTERNAL_PORT=
@@ -20,8 +25,3 @@ DOCKER_USER=
DOCKER_USER_ID=
DOCKER_GROUP_ID=
-# To maximize the performance on MAC you can change the DOCKER_EXTENDS_BIND variable
-# to "abstract-no-bind", however it won't bind the host directory inside the container.
-# It means that you need to work directly within the container using a tool
-# like the VScode dev-container of the remote-extension suite
-DOCKER_EXTENDS_BIND=
diff --git a/docker-compose.yml b/docker-compose.yml
index 6217ed7be7..416d424a5e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -20,36 +20,17 @@ x-ac-shared-conf: &ac-shared-conf
working_dir: /azerothcore
environment:
AC_DISABLE_INTERACTIVE: "1"
- depends_on:
- ac-database:
- condition: service_healthy
-services:
-#============================
-#
-# Abstract services to extend
-#
-#============================
-
- abstract-bind:
- image: local/azerothcore/abstract-bind
- volumes:
- - .:/azerothcore
- # expose some dist folder outside allowing the host to use them
- - ${DOCKER_VOL_CONF:-./conf}:/azerothcore/conf
- - ${DOCKER_VOL_BIN:-ac-bin}:/azerothcore/env/dist/bin
- - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc
- # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544
- - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated
- - ${DOCKER_VOL_DATA:-./env/docker/data}:/azerothcore/env/dist/data:delegated
- profiles: [abstract-service] # do not run this
+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/docker/etc}:/azerothcore/env/dist/etc
+ # # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544
+ # - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated
- abstract-no-bind:
- image: local/azerothcore/abstract-no-bind
- volumes:
- - ac-proj:/azerothcore
- profiles: [abstract-service] # do not run this
+services:
#=======================
#
# DATABASE
@@ -77,6 +58,118 @@ services:
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:
+ context: .
+ target: dev
+ dockerfile: ./apps/docker/Dockerfile
+ args:
+ USER_ID: ${DOCKER_USER_ID:-1000}
+ GROUP_ID: ${DOCKER_GROUP_ID:-1000}
+ DOCKER_USER: ${DOCKER_USER:-acore}
+ <<: *cache-from
+ 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/docker/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:
+ context: .
+ target: dev
+ dockerfile: ./apps/docker/Dockerfile
+ args:
+ USER_ID: ${DOCKER_USER_ID:-1000}
+ GROUP_ID: ${DOCKER_GROUP_ID:-1000}
+ DOCKER_USER: ${DOCKER_USER:-acore}
+ <<: *cache-from
+ security_opt:
+ - seccomp:unconfined
+ env_file:
+ ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
+ 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
+ # 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/docker/etc}:/azerothcore/env/dist/etc
+ # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544
+ - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated
+ - ac-build-dev:/azerothcore/var/build
+ - ac-ccache-dev:/azerothcore/var/ccache
+ # client data
+ - ${DOCKER_VOL_DATA_CAMERAS:-./env/docker/data/Cameras}:/azerothcore/env/dist/data/Cameras
+ - ${DOCKER_VOL_DATA_DBC:-./env/docker/data/dbc}:/azerothcore/env/dist/data/dbc
+ - ${DOCKER_VOL_DATA_MAPS:-./env/docker/data/maps}:/azerothcore/env/dist/data/maps
+ - ${DOCKER_VOL_DATA_VMAPS:-./env/docker/data/vmaps}:/azerothcore/env/dist/data/vmaps
+ - ${DOCKER_VOL_DATA_MMAPS:-./env/docker/data/mmaps}:/azerothcore/env/dist/data/mmaps
+ # remount again for the extractors
+ - ${DOCKER_VOL_DATA_CAMERAS:-./env/docker/data/Cameras}:/azerothcore/env/dist/bin/Cameras
+ - ${DOCKER_VOL_DATA_DBC:-./env/docker/data/dbc}:/azerothcore/env/dist/bin/dbc
+ - ${DOCKER_VOL_DATA_MAPS:-./env/docker/data/maps}:/azerothcore/env/dist/bin/maps
+ - ${DOCKER_VOL_DATA_VMAPS:-./env/docker/data/vmaps}:/azerothcore/env/dist/bin/vmaps
+ - ${DOCKER_VOL_DATA_MMAPS:-./env/docker/data/mmaps}:/azerothcore/env/dist/bin/mmaps
+ # 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
+ volumes:
+ # read-only binaries compiled by ac-dev-server
+ - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro
+ - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc
+ # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544
+ - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated
+ profiles: [local, app, db-import-local]
+ depends_on:
+ ac-database:
+ condition: service_healthy
+
#=======================
#
# APP Services
@@ -84,16 +177,17 @@ services:
#=======================
ac-worldserver:
- <<: *ac-shared-conf
- extends: ${DOCKER_EXTENDS_BIND:-abstract-bind}
+ <<: *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-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}
- user: ${DOCKER_USER:-acore}
+ user: ${DOCKER_USER:-root}
privileged: true
build:
context: .
@@ -107,18 +201,34 @@ services:
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/docker/etc}:/azerothcore/env/dist/etc
+ # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544
+ - ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated
+ # client data
+ - ${DOCKER_VOL_DATA_CAMERAS:-./env/docker/data/Cameras}:/azerothcore/env/dist/data/Cameras
+ - ${DOCKER_VOL_DATA_DBC:-./env/docker/data/dbc}:/azerothcore/env/dist/data/dbc
+ - ${DOCKER_VOL_DATA_MAPS:-./env/docker/data/maps}:/azerothcore/env/dist/data/maps
+ - ${DOCKER_VOL_DATA_VMAPS:-./env/docker/data/vmaps}:/azerothcore/env/dist/data/vmaps
+ - ${DOCKER_VOL_DATA_MMAPS:-./env/docker/data/mmaps}:/azerothcore/env/dist/data/mmaps
profiles: [local, app, worldserver]
+ depends_on:
+ ac-database:
+ condition: service_healthy
+ ac-db-import:
+ condition: service_completed_successfully
ac-authserver:
- <<: *ac-shared-conf
- extends: ${DOCKER_EXTENDS_BIND:-abstract-bind}
+ <<: *ac-service-conf # merge with ac-service-conf
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}
- user: ${DOCKER_USER:-acore}
+ user: ${DOCKER_USER:-root}
build:
context: .
target: authserver-local
@@ -128,89 +238,66 @@ services:
GROUP_ID: ${DOCKER_GROUP_ID:-1000}
DOCKER_USER: ${DOCKER_USER:-acore}
<<: *cache-from
+ volumes:
+ # read-only binaries compiled by ac-dev-server
+ - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro
+ - ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc
+ # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544
+ - ${DOCKER_VOL_LOGS:-./env/docker/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
#======================
#
-# Dev services
+# 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-build:
- <<: *ac-shared-conf
- extends: ${DOCKER_EXTENDS_BIND:-abstract-bind}
- image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master}
- build:
- context: .
- target: ${DOCKER_AC_BUILD_TARGET:-dev}
- dockerfile: ./apps/docker/Dockerfile
- args:
- USER_ID: ${DOCKER_USER_ID:-1000}
- GROUP_ID: ${DOCKER_GROUP_ID:-1000}
- DOCKER_USER: ${DOCKER_USER:-acore}
- <<: *cache-from
- env_file:
- ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
- working_dir: /azerothcore/
- volumes:
- - ${DOCKER_VOL_BUILD:-ac-build}:/azerothcore/var/build
- # with this conf you can use an external path for it (useful for CI)
- - ${DOCKER_VOL_CCACHE:-ac-ccache}:/azerothcore/var/ccache
- # use internal copied files instead of volumes
- - /azerothcore/src
- - /azerothcore/data
- - /azerothcore/modules
- profiles: [local, build]
- ac-dev-server:
- <<: *ac-shared-conf
- extends: ${DOCKER_EXTENDS_BIND:-abstract-bind}
- tty: true
- image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master}
- build:
- context: .
- target: dev
- dockerfile: ./apps/docker/Dockerfile
- args:
- USER_ID: ${DOCKER_USER_ID:-1000}
- GROUP_ID: ${DOCKER_GROUP_ID:-1000}
- DOCKER_USER: ${DOCKER_USER:-acore}
- <<: *cache-from
- security_opt:
- - seccomp:unconfined
- env_file:
- ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
- user: ${DOCKER_USER:-acore}
- environment:
- DBLIST: AUTH,CHARACTERS,WORLD
+ ac-database-prod:
+ <<: *networks
+ image: mysql:8.0
+ restart: unless-stopped
+ cap_add:
+ - SYS_NICE # CAP_SYS_NICE
ports:
- - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724
- - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085
- - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878
+ - ${DOCKER_DB_EXTERNAL_PORT:-3306}:3306
+ environment:
+ - MYSQL_ROOT_PASSWORD=${DOCKER_DB_ROOT_PASSWORD:-password}
volumes:
- - 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_CLIENT_DATA_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data
- profiles: [dev]
-
-#======================
-#
-# Production services
-#
-#======================
+ - 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-shared-conf
+ <<: *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}
- user: ${DOCKER_USER:-acore}
+ user: ${DOCKER_USER:-root}
privileged: true
build:
context: .
@@ -226,21 +313,25 @@ services:
- ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878
volumes:
- ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated
- volumes_from:
- - ac-client-data-server:ro
- depends_on:
- - ac-client-data-server
+ - ${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-shared-conf
+ <<: *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}
- user: ${DOCKER_USER:-acore}
+ user: ${DOCKER_USER:-root}
build:
context: .
target: authserver
@@ -255,10 +346,16 @@ services:
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-server:
+ ac-client-data-init:
image: acore/ac-wotlk-client-data:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally
- user: ${DOCKER_USER:-acore}
+ user: ${DOCKER_USER:-root}
build:
context: .
target: client-data
@@ -269,12 +366,12 @@ services:
DOCKER_USER: ${DOCKER_USER:-acore}
<<: *cache-from
volumes:
- - /azerothcore/env/dist/data
+ - ${DOCKER_VOL_CLIENT_DATA_PROD:-ac-client-data-prod}:/azerothcore/env/dist/data:ro
profiles: [prod, prod-app, clientdata]
ac-tools:
image: acore/ac-wotlk-tools:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally
- user: ${DOCKER_USER:-acore}
+ user: ${DOCKER_USER:-root}
build:
context: .
target: tools
@@ -286,34 +383,54 @@ services:
<<: *cache-from
working_dir: /azerothcore/env/client/
volumes:
- - ${DOCKER_CLIENT_DATA_FOLDER:-./var/client}:/azerothcore/env/client/Data
- - ${DOCKER_VOL_TOOLS_DBC:-./var/extractors/dbc}:/azerothcore/env/client/dbc
- - ${DOCKER_VOL_TOOLS_MAPS:-./var/extractors/maps}:/azerothcore/env/client/maps
- - ${DOCKER_VOL_TOOLS_VMAPS:-./var/extractors/vmaps}:/azerothcore/env/client/vmaps
- - ${DOCKER_VOL_TOOLS_MMAPS:-./var/extractors/mmaps}:/azerothcore/env/client/mmaps
+ # 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]
- ac-db-import:
+ 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
- profiles: [db-import]
+ profiles: [prod, prod-app, db-import-prod]
+
+ #
+ # Only for internal tests
+ #
+ ac-build-prod:
+ <<: *ac-shared-conf
+ build:
+ context: .
+ target: build
+ dockerfile: ./apps/docker/Dockerfile
+ args:
+ USER_ID: ${DOCKER_USER_ID:-1000}
+ GROUP_ID: ${DOCKER_GROUP_ID:-1000}
+ DOCKER_USER: ${DOCKER_USER:-acore}
+ <<: *cache-from
+ env_file:
+ ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
+ working_dir: /azerothcore/
+ profiles: [prod-build]
volumes:
ac-database:
- ac-bin:
+ ac-database-prod:
+ ac-bin-dev:
ac-build-dev:
- ac-build:
ac-ccache-dev:
- ac-ccache:
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:
- ac-client-data-prod:
+ ac-client-data-cameras:
+ ac-client-data-dbc:
+ ac-client-data-maps:
+ ac-client-data-vmaps:
+ ac-client-data-mmaps:
networks:
ac-network:
diff --git a/env/docker/data/Cameras/.gitkeep b/env/docker/data/Cameras/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/env/docker/data/Cameras/.gitkeep
diff --git a/env/docker/data/dbc/.gitkeep b/env/docker/data/dbc/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/env/docker/data/dbc/.gitkeep
diff --git a/env/docker/data/maps/.gitkeep b/env/docker/data/maps/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/env/docker/data/maps/.gitkeep
diff --git a/env/docker/data/mmaps/.gitkeep b/env/docker/data/mmaps/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/env/docker/data/mmaps/.gitkeep
diff --git a/env/docker/data/vmaps/.gitkeep b/env/docker/data/vmaps/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/env/docker/data/vmaps/.gitkeep
diff --git a/env/docker/etc/authserver.conf.dockerdist b/env/docker/etc/authserver.conf.dockerdist
index 1a470661e2..15eb0e1073 100644
--- a/env/docker/etc/authserver.conf.dockerdist
+++ b/env/docker/etc/authserver.conf.dockerdist
@@ -16,7 +16,7 @@ TempDir = "/azerothcore/env/dist/temp"
LoginDatabaseInfo = "ac-database;3306;root;password;acore_auth"
# Add more configuration overwrites by copying settings from from authserver.conf.dist
-LogLevel = 3
+
SQLDriverLogFile = "SQLDriver.log"
SQLDriverQueryLogging = 1
diff --git a/env/docker/etc/dbimport.conf.dockerdist b/env/docker/etc/dbimport.conf.dockerdist
index 183cf873e7..e9f97375a5 100644
--- a/env/docker/etc/dbimport.conf.dockerdist
+++ b/env/docker/etc/dbimport.conf.dockerdist
@@ -13,7 +13,6 @@ WorldDatabaseInfo = "ac-database;3306;root;password;acore_world"
CharacterDatabaseInfo = "ac-database;3306;root;password;acore_characters"
# Add more configuration overwrites by copying settings from worldserver.conf.dist
-LogLevel = 2
# Disable idle connections automatic kick since it doesn't work well on macOS + Docker
CloseIdleConnections = 0
diff --git a/env/docker/etc/worldserver.conf.dockerdist b/env/docker/etc/worldserver.conf.dockerdist
index c5dc18fe50..a51ef16d5a 100644
--- a/env/docker/etc/worldserver.conf.dockerdist
+++ b/env/docker/etc/worldserver.conf.dockerdist
@@ -18,7 +18,6 @@ WorldDatabaseInfo = "ac-database;3306;root;password;acore_world"
CharacterDatabaseInfo = "ac-database;3306;root;password;acore_characters"
# Add more configuration overwrites by copying settings from worldserver.conf.dist
-LogLevel = 2
# Disable idle connections automatic kick since it doesn't work well on macOS + Docker
CloseIdleConnections = 0
diff --git a/var/extractors/Cameras/.gitkeep b/var/extractors/Cameras/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/var/extractors/Cameras/.gitkeep