fix(Docker): windows improvements and permissions fix (#5444)
This commit is contained in:
parent
5954d9c739
commit
e4fafc61dd
@ -10,3 +10,4 @@
|
|||||||
!/env/docker/etc/worldserver.conf.dockerdist
|
!/env/docker/etc/worldserver.conf.dockerdist
|
||||||
/.env*
|
/.env*
|
||||||
.idea
|
.idea
|
||||||
|
!.gitkeep
|
||||||
|
|||||||
7
.gitattributes
vendored
7
.gitattributes
vendored
@ -1,10 +1,5 @@
|
|||||||
# Auto detect text files and perform LF normalization
|
# Auto detect text files and perform LF normalization
|
||||||
* text=auto
|
* text eol=lf
|
||||||
|
|
||||||
# End of line rules
|
|
||||||
*.sh eol=lf
|
|
||||||
*.sh.dist eol=lf
|
|
||||||
bin/* eol=lf
|
|
||||||
|
|
||||||
# Whitespace rules
|
# Whitespace rules
|
||||||
# strict (no trailing, no tabs)
|
# strict (no trailing, no tabs)
|
||||||
|
|||||||
@ -1,11 +0,0 @@
|
|||||||
WORLDSERVER_DATA=./docker/worldserver/data
|
|
||||||
WORLDSERVER_ETC=./docker/worldserver/etc
|
|
||||||
WORLDSERVER_LOGS=./docker/worldserver/logs
|
|
||||||
|
|
||||||
AUTHSERVER_ETC=./docker/authserver/etc
|
|
||||||
AUTHSERVER_LOGS=./docker/authserver/logs
|
|
||||||
|
|
||||||
WORLD_EXTERNAL_PORT=8085
|
|
||||||
AUTH_EXTERNAL_PORT=3724
|
|
||||||
DB_EXTERNAL_PORT=9000
|
|
||||||
DB_ROOT_PASSWORD=password
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
cp apps/ci/docker/.env.dist .env
|
|
||||||
@ -1,16 +1,11 @@
|
|||||||
|
|
||||||
function comp_clean() {
|
function comp_clean() {
|
||||||
echo "Cleaning build files"
|
DIRTOCLEAN=${BUILDPATH:-var/build/obj}
|
||||||
|
PATTERN="$DIRTOCLEAN/*"
|
||||||
|
|
||||||
CWD=$(pwd)
|
echo "Cleaning build files in $DIRTOCLEAN"
|
||||||
|
|
||||||
cd $BUILDPATH
|
[ -d "$DIRTOCLEAN" ] && rm -rf $PATTERN
|
||||||
|
|
||||||
make -f Makefile clean || true
|
|
||||||
make clean || true
|
|
||||||
find -iname '*cmake*' -not -name CMakeLists.txt -exec rm -rf {} \+
|
|
||||||
|
|
||||||
cd $CWD
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function comp_configure() {
|
function comp_configure() {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ function dbasm_waitMysqlConn() {
|
|||||||
echo "DBASM Timeout: Cannot ping mysql!" 1>&2
|
echo "DBASM Timeout: Cannot ping mysql!" 1>&2
|
||||||
exit 64
|
exit 64
|
||||||
fi
|
fi
|
||||||
echo "Cannot ping mysql, retry in $DBASM_WAIT_TIMEOUT seconds (remaining: $COUNT/$DBASM_WAIT_RETRIES)..."
|
echo "Cannot ping mysql on $DBHOST:$DBPORT, retry in $DBASM_WAIT_TIMEOUT seconds (remaining: $COUNT/$DBASM_WAIT_RETRIES)..."
|
||||||
sleep $DBASM_WAIT_TIMEOUT
|
sleep $DBASM_WAIT_TIMEOUT
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,11 +5,12 @@
|
|||||||
#
|
#
|
||||||
#=================================================================
|
#=================================================================
|
||||||
|
|
||||||
FROM ubuntu:20.04 as dev
|
FROM ubuntu:20.04 as base
|
||||||
ARG USER_ID=1000
|
ARG USER_ID=1000
|
||||||
ARG GROUP_ID=1000
|
ARG GROUP_ID=1000
|
||||||
|
ARG DOCKER_USER=acore
|
||||||
|
|
||||||
LABEL description="AC Worldserver Debug Container for use with Visual Studio"
|
LABEL description="AC base image for dev containers"
|
||||||
|
|
||||||
# List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
# List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||||
|
|
||||||
@ -21,15 +22,14 @@ ENV TZ=Etc/UTC
|
|||||||
# set noninteractive mode so tzdata doesn't ask to set timezone on install
|
# set noninteractive mode so tzdata doesn't ask to set timezone on install
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
# install essentials
|
# Do not use acore dashboard to install
|
||||||
RUN apt-get update && apt-get install -y gdb gdbserver git dos2unix lsb-core sudo curl unzip
|
# since it's not cacheable by docker
|
||||||
|
RUN apt-get update && apt-get install -y gdb gdbserver git dos2unix lsb-core sudo curl unzip \
|
||||||
# copy everything so we can work directly within the container
|
make cmake clang libmysqlclient-dev libace-dev \
|
||||||
# using tools such as vscode dev-container
|
build-essential libtool cmake-data openssl libgoogle-perftools-dev \
|
||||||
COPY . /azerothcore
|
libssl-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev mysql-client \
|
||||||
|
libncurses5-dev ccache \
|
||||||
# install the required dependencies to run the worldserver
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
RUN /azerothcore/acore.sh install-deps
|
|
||||||
|
|
||||||
# change timezone in container
|
# change timezone in container
|
||||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata
|
||||||
@ -40,27 +40,36 @@ RUN addgroup --gid $GROUP_ID acore && \
|
|||||||
passwd -d acore && \
|
passwd -d acore && \
|
||||||
echo 'acore ALL=(ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
|
echo 'acore ALL=(ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
|
||||||
|
|
||||||
RUN mkdir -p /azerothcore
|
# must be created to set the correct permissions on them
|
||||||
|
RUN mkdir -p /azerothcore/env/dist/data
|
||||||
|
RUN mkdir -p /azerothcore/env/dist/logs
|
||||||
|
RUN mkdir -p /azerothcore/env/dist/etc
|
||||||
|
RUN mkdir -p /azerothcore/var/build
|
||||||
|
|
||||||
# Correct permissions for non-root operations
|
# Correct permissions for non-root operations
|
||||||
RUN chown -R acore:acore \
|
RUN chown -R $DOCKER_USER:$DOCKER_USER /home/acore
|
||||||
/run \
|
RUN chown -R $DOCKER_USER:$DOCKER_USER /run
|
||||||
/home/acore \
|
RUN chown -R $DOCKER_USER:$DOCKER_USER /opt
|
||||||
/opt/ \
|
RUN chown -R $DOCKER_USER:$DOCKER_USER /azerothcore
|
||||||
/azerothcore
|
|
||||||
|
|
||||||
USER acore
|
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
|
||||||
|
|
||||||
WORKDIR /azerothcore
|
WORKDIR /azerothcore
|
||||||
|
|
||||||
#================================================================
|
#================================================================
|
||||||
#
|
#
|
||||||
# BUILD STAGE: to prepare binaries for the production services
|
# Dev: create dev server image
|
||||||
#
|
#
|
||||||
#=================================================================
|
#=================================================================
|
||||||
FROM dev as build
|
|
||||||
|
|
||||||
RUN bash acore.sh compiler build
|
FROM base as dev
|
||||||
|
|
||||||
|
LABEL description="AC dev image for dev containers"
|
||||||
|
|
||||||
#================================================================
|
#================================================================
|
||||||
#
|
#
|
||||||
@ -70,6 +79,12 @@ RUN bash acore.sh compiler build
|
|||||||
|
|
||||||
FROM ubuntu:20.04 as servicebase
|
FROM ubuntu:20.04 as servicebase
|
||||||
|
|
||||||
|
ARG USER_ID=1000
|
||||||
|
ARG GROUP_ID=1000
|
||||||
|
ARG DOCKER_USER=acore
|
||||||
|
|
||||||
|
LABEL description="AC service image for server applications"
|
||||||
|
|
||||||
# List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
# List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||||
|
|
||||||
# set timezone environment variable
|
# set timezone environment variable
|
||||||
@ -78,51 +93,105 @@ ENV TZ=Etc/UTC
|
|||||||
# set noninteractive mode so tzdata doesn't ask to set timezone on install
|
# set noninteractive mode so tzdata doesn't ask to set timezone on install
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
COPY --from=build /azerothcore/env /azerothcore/env
|
# Create a non-root user
|
||||||
|
RUN addgroup --gid $GROUP_ID acore && \
|
||||||
|
adduser --disabled-password --gecos '' --uid $USER_ID --gid $GROUP_ID acore && \
|
||||||
|
passwd -d acore && \
|
||||||
|
echo 'acore ALL=(ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
|
||||||
|
|
||||||
# copy the sources from the host machine
|
# install the required dependencies to run the server
|
||||||
COPY apps /azerothcore/apps
|
RUN apt-get update && apt-get install -y dos2unix gdb gdbserver net-tools tzdata libmysqlclient-dev libace-dev mysql-client curl unzip && rm -rf /var/lib/apt/lists/* ;
|
||||||
COPY bin /azerothcore/bin
|
|
||||||
COPY conf /azerothcore/conf
|
|
||||||
COPY data /azerothcore/data
|
|
||||||
COPY deps /azerothcore/deps
|
|
||||||
COPY acore.json /azerothcore/acore.json
|
|
||||||
COPY acore.sh /azerothcore/acore.sh
|
|
||||||
|
|
||||||
# install the required dependencies to run the authserver
|
|
||||||
RUN apt-get update && apt-get install -y gdb gdbserver net-tools tzdata libmysqlclient-dev libace-dev mysql-client curl unzip;
|
|
||||||
|
|
||||||
# change timezone in container
|
# change timezone in container
|
||||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata
|
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
|
||||||
|
|
||||||
|
USER $DOCKER_USER
|
||||||
|
|
||||||
|
# must be created to avoid permissions errors
|
||||||
|
RUN mkdir -p /azerothcore/env/dist/data
|
||||||
|
RUN mkdir -p /azerothcore/env/dist/logs
|
||||||
|
RUN mkdir -p /azerothcore/env/dist/etc
|
||||||
|
RUN mkdir -p /azerothcore/env/dist/bin
|
||||||
|
|
||||||
WORKDIR /azerothcore/
|
WORKDIR /azerothcore/
|
||||||
|
|
||||||
RUN cp -n "/azerothcore/env/docker/etc/worldserver.conf.dockerdist" "/azerothcore/env/dist/etc/worldserver.conf"
|
#================================================================
|
||||||
RUN cp -n "/azerothcore/env/docker/etc/authserver.conf.dockerdist" "/azerothcore/env/dist/etc/authserver.conf"
|
#
|
||||||
|
# AUTH & WORLD local: images used for local services
|
||||||
|
# These images don't include binaries by default
|
||||||
|
#
|
||||||
|
#=================================================================
|
||||||
|
|
||||||
|
FROM servicebase as authserver-local
|
||||||
|
|
||||||
|
LABEL description="AC authserver image for local environment"
|
||||||
|
|
||||||
|
CMD ./acore.sh run-authserver
|
||||||
|
|
||||||
|
FROM servicebase as worldserver-local
|
||||||
|
|
||||||
|
LABEL description="AC worldserver image for local environment"
|
||||||
|
|
||||||
|
CMD ./acore.sh run-worldserver
|
||||||
|
|
||||||
|
#================================================================
|
||||||
|
#
|
||||||
|
# BUILD: compile sources
|
||||||
|
#
|
||||||
|
#=================================================================
|
||||||
|
FROM base as build
|
||||||
|
|
||||||
|
LABEL description="AC Image used by the build stage to generate production images"
|
||||||
|
|
||||||
|
RUN bash bin/acore-docker-build
|
||||||
|
|
||||||
#================================================================
|
#================================================================
|
||||||
#
|
#
|
||||||
# AUTH SERVICE: create a ready-to-use authserver image
|
# AUTH SERVICE: create a ready-to-use authserver image
|
||||||
|
# with binaries included
|
||||||
#
|
#
|
||||||
#=================================================================
|
#=================================================================
|
||||||
|
FROM authserver-local as authserver
|
||||||
|
|
||||||
FROM servicebase as authserver
|
LABEL description="AC Production ready authserver"
|
||||||
|
|
||||||
CMD ./acore.sh run-authserver
|
ARG DOCKER_USER=acore
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
#================================================================
|
#================================================================
|
||||||
#
|
#
|
||||||
# WORLD SERVICE: create a ready-to-use worldserver image
|
# WORLD SERVICE: create a ready-to-use worldserver image
|
||||||
|
# with binaries and data included
|
||||||
#
|
#
|
||||||
#=================================================================
|
#=================================================================
|
||||||
|
FROM authserver-local as worldserver
|
||||||
|
|
||||||
FROM servicebase as worldserver
|
LABEL description="AC Production ready worldserver"
|
||||||
|
|
||||||
|
ARG DOCKER_USER=acore
|
||||||
|
|
||||||
|
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/worldserver /azerothcore/env/dist/bin/worldserver
|
||||||
|
|
||||||
ENV DATAPATH=/azerothcore/env/dist/data
|
ENV DATAPATH=/azerothcore/env/dist/data
|
||||||
|
|
||||||
RUN /azerothcore/acore.sh client-data
|
RUN /azerothcore/acore.sh client-data
|
||||||
|
|
||||||
CMD ./acore.sh run-worldserver
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -7,59 +7,98 @@ import {
|
|||||||
|
|
||||||
const program = new Command();
|
const program = new Command();
|
||||||
|
|
||||||
program.name("acore.sh docker")
|
program
|
||||||
|
.name("acore.sh docker")
|
||||||
.description("Shell scripts for docker")
|
.description("Shell scripts for docker")
|
||||||
.version("1.0.0");
|
.version("1.0.0");
|
||||||
|
|
||||||
shellCommandFactory(
|
shellCommandFactory(
|
||||||
"start:app",
|
"start:app",
|
||||||
"Startup the authserver and worldserver apps",
|
"Startup the authserver and worldserver apps",
|
||||||
"docker-compose --profile app up",
|
["docker-compose --profile app up"],
|
||||||
);
|
);
|
||||||
|
|
||||||
shellCommandFactory(
|
shellCommandFactory(
|
||||||
"start:app:d",
|
"start:app:d",
|
||||||
"Startup the authserver and worldserver apps in detached mode",
|
"Startup the authserver and worldserver apps in detached mode",
|
||||||
"docker-compose --profile app up -d",
|
["docker-compose --profile app up -d"],
|
||||||
);
|
);
|
||||||
|
|
||||||
shellCommandFactory(
|
shellCommandFactory("build", "Build the authserver and worldserver", [
|
||||||
"start:dev",
|
"docker-compose --profile all build",
|
||||||
"Startup the dev server",
|
"docker image prune -f",
|
||||||
"docker-compose --profile dev up",
|
"docker-compose run --rm ac-build bash bin/acore-docker-update",
|
||||||
);
|
]);
|
||||||
|
|
||||||
shellCommandFactory(
|
|
||||||
"build",
|
|
||||||
"Build the authserver and worldserver",
|
|
||||||
`docker-compose run --rm ac-dev-server bash bin/acore-docker-build`,
|
|
||||||
);
|
|
||||||
|
|
||||||
shellCommandFactory(
|
shellCommandFactory(
|
||||||
"build:clean",
|
"build:clean",
|
||||||
"Clean build data",
|
"Clean and run build",
|
||||||
`docker-compose run --rm ac-dev-server bash rm -rf var/build`,
|
[
|
||||||
|
"docker-compose --profile all build",
|
||||||
|
"docker image prune -f",
|
||||||
|
`docker-compose run --rm ac-build bash acore.sh compiler clean`,
|
||||||
|
"docker-compose run --rm ac-build bash bin/acore-docker-update",
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
shellCommandFactory(
|
||||||
|
"build:nocache",
|
||||||
|
"Build the authserver and worldserver without docker cache",
|
||||||
|
[
|
||||||
|
"docker-compose --profile all build --no-cache",
|
||||||
|
"docker image prune -f",
|
||||||
|
"docker-compose run --rm ac-build bash bin/acore-docker-update",
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
shellCommandFactory(
|
||||||
|
"build:compile",
|
||||||
|
"Run the compilation process only, without rebuilding all docker images and importing db",
|
||||||
|
[
|
||||||
|
"docker-compose build ac-build",
|
||||||
|
"docker image prune -f",
|
||||||
|
"docker-compose run --rm ac-build bash acore.sh compiler build",
|
||||||
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
shellCommandFactory(
|
shellCommandFactory(
|
||||||
"client-data",
|
"client-data",
|
||||||
"Download client data inside the ac-data volume",
|
"Download client data inside the ac-data volume",
|
||||||
"docker-compose run --rm ac-dev-server bash acore.sh client-data",
|
["docker-compose run --rm ac-worldserver bash acore.sh client-data"],
|
||||||
);
|
);
|
||||||
|
|
||||||
shellCommandFactory(
|
shellCommandFactory(
|
||||||
"db-import",
|
"db-import",
|
||||||
"Create and upgrade the database with latest updates",
|
"Create and upgrade the database with latest updates",
|
||||||
"docker-compose run --rm ac-dev-server bash acore.sh db-assembler import-all",
|
["docker-compose run --rm ac-build bash acore.sh db-assembler import-all"],
|
||||||
);
|
);
|
||||||
|
|
||||||
shellCommandFactory(
|
shellCommandFactory(
|
||||||
"dashboard [args...]",
|
"dev:up",
|
||||||
"Execute acore dashboard within a running ac-dev-server",
|
"Start the dev server container",
|
||||||
"docker-compose exec ac-dev-server bash acore.sh",
|
["docker-compose up ac-dev-server"],
|
||||||
);
|
);
|
||||||
|
|
||||||
program.command("attach [service]")
|
shellCommandFactory(
|
||||||
|
"dev:build",
|
||||||
|
"Build using the dev server, it uses volumes to compile which can be faster on linux & WSL",
|
||||||
|
["docker-compose run --rm ac-dev-server bash acore.sh compiler build"],
|
||||||
|
);
|
||||||
|
|
||||||
|
shellCommandFactory(
|
||||||
|
"dev:dash [args...]",
|
||||||
|
"Execute acore dashboard within a running ac-dev-server",
|
||||||
|
["docker-compose run --rm ac-dev-server bash acore.sh"],
|
||||||
|
);
|
||||||
|
|
||||||
|
shellCommandFactory(
|
||||||
|
"dev:shell [args...]",
|
||||||
|
"Open an interactive shell within the dev server",
|
||||||
|
["docker-compose run --rm ac-dev-server bash"],
|
||||||
|
);
|
||||||
|
|
||||||
|
program
|
||||||
|
.command("attach [service]")
|
||||||
.description("attach to a service")
|
.description("attach to a service")
|
||||||
.action(async (service: string | undefined) => {
|
.action(async (service: string | undefined) => {
|
||||||
const { run } = Deno;
|
const { run } = Deno;
|
||||||
@ -84,6 +123,11 @@ program.command("attach [service]")
|
|||||||
|
|
||||||
let services = new TextDecoder().decode(output).split("\n");
|
let services = new TextDecoder().decode(output).split("\n");
|
||||||
|
|
||||||
|
if (!services) {
|
||||||
|
console.error("No services available!");
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
services.pop();
|
services.pop();
|
||||||
services = services.slice(2);
|
services = services.slice(2);
|
||||||
|
|
||||||
@ -99,6 +143,11 @@ program.command("attach [service]")
|
|||||||
selService = services[0];
|
selService = services[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!selService) {
|
||||||
|
console.log(`Service ${service} is not available`)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
command = `docker attach ${selService.split(" ")[0]}`;
|
command = `docker attach ${selService.split(" ")[0]}`;
|
||||||
|
|
||||||
console.log(ink.colorize(`<green>>>>>> Running: ${command}</green>`));
|
console.log(ink.colorize(`<green>>>>>> Running: ${command}</green>`));
|
||||||
@ -121,9 +170,12 @@ program.command("attach [service]")
|
|||||||
shellCmd.close();
|
shellCmd.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
program.command("quit").description("Close docker command").action(()=> {
|
program
|
||||||
process.exit(0)
|
.command("quit")
|
||||||
})
|
.description("Close docker command")
|
||||||
|
.action(() => {
|
||||||
|
process.exit(0);
|
||||||
|
});
|
||||||
|
|
||||||
// Handle it however you like
|
// Handle it however you like
|
||||||
// e.g. display usage
|
// e.g. display usage
|
||||||
@ -133,42 +185,63 @@ while (true) {
|
|||||||
const command = await Input.prompt({
|
const command = await Input.prompt({
|
||||||
message: "Enter the command:",
|
message: "Enter the command:",
|
||||||
});
|
});
|
||||||
|
console.log(command)
|
||||||
await program.parseAsync(command.split(" "));
|
await program.parseAsync(command.split(" "));
|
||||||
} else {
|
} else {
|
||||||
await program.parseAsync(Deno.args);
|
await program.parseAsync(Deno.args);
|
||||||
process.exit(0)
|
process.exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* @param description
|
||||||
|
* @param commands you can pass one or more commands, they will be executed sequentially
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
function shellCommandFactory(
|
function shellCommandFactory(
|
||||||
name: string,
|
name: string,
|
||||||
description: string,
|
description: string,
|
||||||
command: string,
|
commands: string[],
|
||||||
): Command {
|
): Command {
|
||||||
return program.command(name)
|
return program
|
||||||
|
.command(name)
|
||||||
.description(
|
.description(
|
||||||
`${description}. Command: \n"${ink.colorize(`<green>${command}</green>`)}"\n`,
|
`${description}. Command: \n"${
|
||||||
|
ink.colorize(
|
||||||
|
`<green>${commands.join(" && ")}</green>`,
|
||||||
|
)
|
||||||
|
}"\n`,
|
||||||
)
|
)
|
||||||
.action(async (args: any[] | undefined) => {
|
.action(async (args: any[] | undefined) => {
|
||||||
const { run } = Deno;
|
const { run } = Deno;
|
||||||
|
|
||||||
console.log(ink.colorize(`<green>>>>>> Running: ${command}</green>`));
|
for (const command of commands) {
|
||||||
|
console.log(
|
||||||
|
ink.colorize(`<green>>>>>> Running: ${command}</green>`),
|
||||||
|
);
|
||||||
|
|
||||||
const cmd = command.split(" ");
|
const cmd = command.split(" ");
|
||||||
|
|
||||||
if (Array.isArray(args)) {
|
if (Array.isArray(args)) {
|
||||||
cmd.push(...args);
|
cmd.push(...args);
|
||||||
|
}
|
||||||
|
|
||||||
|
const shellCmd = run({
|
||||||
|
cmd,
|
||||||
|
cwd: process.cwd(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const status = await shellCmd.status();
|
||||||
|
|
||||||
|
if (!status.success) {
|
||||||
|
throw new Error(`Failed with error: ${status.code}, however,
|
||||||
|
it's not related to this Deno script directly. An error occurred within
|
||||||
|
the script called by the command itself`);
|
||||||
|
}
|
||||||
|
|
||||||
|
shellCmd.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
const shellCmd = run({
|
|
||||||
cmd,
|
|
||||||
cwd: process.cwd(),
|
|
||||||
});
|
|
||||||
|
|
||||||
await shellCmd.status();
|
|
||||||
|
|
||||||
shellCmd.close();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,9 +9,9 @@ sudo apt-get update -y
|
|||||||
if [[ $DEBIAN_VERSION -eq "10" ]]; then
|
if [[ $DEBIAN_VERSION -eq "10" ]]; then
|
||||||
sudo apt-get install -y git cmake make gcc g++ clang default-libmysqlclient-dev \
|
sudo apt-get install -y git cmake make gcc g++ clang default-libmysqlclient-dev \
|
||||||
libssl-dev libbz2-dev libreadline-dev libncurses-dev mariadb-server \
|
libssl-dev libbz2-dev libreadline-dev libncurses-dev mariadb-server \
|
||||||
libace-6.* libace-dev curl unzip
|
libace-6.* libace-dev curl unzip gdb gdbserver
|
||||||
else # Debian 8 and 9 should work using this
|
else # Debian 8 and 9 should work using this
|
||||||
sudo apt-get install -y git cmake make gcc g++ clang libmysqlclient-dev \
|
sudo apt-get install -y git cmake make gcc g++ clang libmysqlclient-dev \
|
||||||
libssl1.0-dev libbz2-dev libreadline-dev libncurses-dev \
|
libssl1.0-dev libbz2-dev libreadline-dev libncurses-dev \
|
||||||
mysql-server libace-6.* libace-dev curl unzip
|
mysql-server libace-6.* libace-dev curl unzip gdb gdbserver
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -15,7 +15,7 @@ if [[ $CONTINUOUS_INTEGRATION || $DOCKER ]]; then
|
|||||||
libssl-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev mysql-client \
|
libssl-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev mysql-client \
|
||||||
libncurses5-dev ccache curl unzip
|
libncurses5-dev ccache curl unzip
|
||||||
else
|
else
|
||||||
sudo apt-get install -y git gcc g++ \
|
sudo apt-get install -y git gcc g++ gdb gdbserver \
|
||||||
libssl-dev libbz2-dev libreadline-dev libncurses-dev \
|
libssl-dev libbz2-dev libreadline-dev libncurses-dev \
|
||||||
mysql-server libace-6.*
|
mysql-server libace-6.*
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -1,15 +1,20 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
bash acore.sh compiler build && bash acore.sh db-assembler import-all
|
cd /azerothcore
|
||||||
|
|
||||||
CUR_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
bash acore.sh compiler build
|
||||||
|
|
||||||
ENV_PATH=$(readlink -f "$CUR_PATH/../env")
|
|
||||||
|
|
||||||
echo "Generating confs..."
|
echo "Generating confs..."
|
||||||
cp -n "$ENV_PATH/docker/etc/worldserver.conf.dockerdist" "$ENV_PATH/dist/etc/worldserver.conf"
|
cp -n "env/docker/etc/worldserver.conf.dockerdist" "env/dist/etc/worldserver.conf"
|
||||||
cp -n "$ENV_PATH/docker/etc/authserver.conf.dockerdist" "$ENV_PATH/dist/etc/authserver.conf"
|
cp -n "env/docker/etc/authserver.conf.dockerdist" "env/dist/etc/authserver.conf"
|
||||||
|
|
||||||
echo "Fixing EOL..."
|
echo "Fixing EOL..."
|
||||||
dos2unix "$ENV_PATH/dist/etc/"*
|
# using -n (new file mode) should also fix the issue
|
||||||
|
# when the file is created with the default acore user but you
|
||||||
|
# set a different user into the docker configurations
|
||||||
|
for file in "env/dist/etc/"*
|
||||||
|
do
|
||||||
|
dos2unix -n $file $file
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
7
bin/acore-docker-update
Normal file
7
bin/acore-docker-update
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
CUR_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
source "$CUR_PATH/acore-docker-build"
|
||||||
|
|
||||||
|
bash acore.sh db-assembler import-all
|
||||||
2
conf/dist/config.sh
vendored
2
conf/dist/config.sh
vendored
@ -102,7 +102,7 @@ readarray -td, DATABASES <<<"$DBLIST";
|
|||||||
|
|
||||||
OUTPUT_FOLDER=${OUTPUT_FOLDER:-"$AC_PATH_ROOT/env/dist/sql/"}
|
OUTPUT_FOLDER=${OUTPUT_FOLDER:-"$AC_PATH_ROOT/env/dist/sql/"}
|
||||||
|
|
||||||
DBASM_WAIT_TIMEOUT=${DBASM_WAIT_TIMEOUT:-1}
|
DBASM_WAIT_TIMEOUT=${DBASM_WAIT_TIMEOUT:-5}
|
||||||
DBASM_WAIT_RETRIES=${DBASM_WAIT_RETRIES:-3}
|
DBASM_WAIT_RETRIES=${DBASM_WAIT_RETRIES:-3}
|
||||||
|
|
||||||
####### BACKUP
|
####### BACKUP
|
||||||
|
|||||||
24
conf/dist/env.docker
vendored
24
conf/dist/env.docker
vendored
@ -5,19 +5,23 @@
|
|||||||
|
|
||||||
DOCKER_AC_ENV_FILE=
|
DOCKER_AC_ENV_FILE=
|
||||||
|
|
||||||
DOCKER_DATA=./env/docker/data
|
DOCKER_VOL_DATA=
|
||||||
DOCKER_ETC=./env/docker/etc
|
DOCKER_VOL_ETC=
|
||||||
DOCKER_LOGS=./env/docker/logs
|
DOCKER_VOL_LOGS=
|
||||||
DOCKER_CONF=./conf
|
DOCKER_VOL_CONF=
|
||||||
|
|
||||||
DOCKER_WORLD_EXTERNAL_PORT=8085
|
DOCKER_WORLD_EXTERNAL_PORT=
|
||||||
DOCKER_AUTH_EXTERNAL_PORT=3724
|
DOCKER_SOAP_EXTERNAL_PORT=
|
||||||
DOCKER_DB_EXTERNAL_PORT=3306
|
DOCKER_AUTH_EXTERNAL_PORT=
|
||||||
DOCKER_DB_ROOT_PASSWORD=password
|
DOCKER_DB_EXTERNAL_PORT=
|
||||||
DOCKER_SOAP_EXTERNAL_PORT=7878
|
DOCKER_DB_ROOT_PASSWORD=
|
||||||
|
|
||||||
|
DOCKER_USER=
|
||||||
|
DOCKER_USER_ID=
|
||||||
|
DOCKER_GROUP_ID=
|
||||||
|
|
||||||
# To maximize the performance on MAC you can change the DOCKER_EXTENDS_BIND variable
|
# 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.
|
# 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
|
# It means that you need to work directly within the container using a tool
|
||||||
# like the VScode dev-container of the remote-extension suite
|
# like the VScode dev-container of the remote-extension suite
|
||||||
DOCKER_EXTENDS_BIND=abstract-bind
|
DOCKER_EXTENDS_BIND=
|
||||||
|
|||||||
@ -27,11 +27,11 @@ services:
|
|||||||
# we cannot use /env/dist to avoid permission issues
|
# we cannot use /env/dist to avoid permission issues
|
||||||
- ac-env:/azerothcore/env
|
- ac-env:/azerothcore/env
|
||||||
# expose some dist folder outside allowing the host to use them
|
# expose some dist folder outside allowing the host to use them
|
||||||
- ${DOCKER_CONF:-./conf}:/azerothcore/conf
|
- ${DOCKER_VOL_CONF:-./conf}:/azerothcore/conf
|
||||||
- ${DOCKER_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc
|
- ${DOCKER_VOL_ETC:-./env/docker/etc}:/azerothcore/env/dist/etc
|
||||||
# [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544
|
# [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544
|
||||||
- ${DOCKER_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated
|
- ${DOCKER_VOL_LOGS:-./env/docker/logs}:/azerothcore/env/dist/logs:delegated
|
||||||
- ${DOCKER_DATA:-./env/docker/data}:/azerothcore/env/dist/data:delegated
|
- ${DOCKER_VOL_DATA:-./env/docker/data}:/azerothcore/env/dist/data:delegated
|
||||||
profiles: [abstract-service] # do not run this
|
profiles: [abstract-service] # do not run this
|
||||||
|
|
||||||
abstract-no-bind:
|
abstract-no-bind:
|
||||||
@ -63,9 +63,9 @@ services:
|
|||||||
target: /var/lib/mysql
|
target: /var/lib/mysql
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: "/usr/bin/mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\""
|
test: "/usr/bin/mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\""
|
||||||
interval: 2s
|
interval: 5s
|
||||||
timeout: 20s
|
timeout: 10s
|
||||||
retries: 10
|
retries: 40
|
||||||
|
|
||||||
|
|
||||||
ac-worldserver:
|
ac-worldserver:
|
||||||
@ -78,11 +78,19 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
|
${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
|
||||||
|
user: ${DOCKER_USER:-acore}
|
||||||
privileged: true
|
privileged: true
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
target: ${DOCKER_BUILD_WORLD_TARGET:-dev}
|
target: ${DOCKER_BUILD_WORLD_TARGET:-worldserver-local}
|
||||||
dockerfile: ./apps/docker/Dockerfile
|
dockerfile: ./apps/docker/Dockerfile
|
||||||
|
args:
|
||||||
|
USER_ID: ${DOCKER_USER_ID:-1000}
|
||||||
|
GROUP_ID: ${DOCKER_GROUP_ID:-1000}
|
||||||
|
DOCKER_USER: ${DOCKER_USER:-acore}
|
||||||
|
cache_from:
|
||||||
|
- acore/authserver:${DOCKER_IMAGE_TAG:-master}
|
||||||
|
- acore/dev-server:${DOCKER_IMAGE_TAG:-master}
|
||||||
ports:
|
ports:
|
||||||
- ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085
|
- ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085
|
||||||
- ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878
|
- ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878
|
||||||
@ -97,10 +105,18 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
|
${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
|
||||||
|
user: ${DOCKER_USER:-acore}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
target: ${DOCKER_BUILD_AUTH_TARGET:-dev}
|
target: ${DOCKER_BUILD_AUTH_TARGET:-authserver-local}
|
||||||
dockerfile: ./apps/docker/Dockerfile
|
dockerfile: ./apps/docker/Dockerfile
|
||||||
|
args:
|
||||||
|
USER_ID: ${DOCKER_USER_ID:-1000}
|
||||||
|
GROUP_ID: ${DOCKER_GROUP_ID:-1000}
|
||||||
|
DOCKER_USER: ${DOCKER_USER:-acore}
|
||||||
|
cache_from:
|
||||||
|
- acore/worldserver:${DOCKER_IMAGE_TAG:-master}
|
||||||
|
- acore/dev-server:${DOCKER_IMAGE_TAG:-master}
|
||||||
ports:
|
ports:
|
||||||
- ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724
|
- ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724
|
||||||
profiles: [all, app, authserver]
|
profiles: [all, app, authserver]
|
||||||
@ -110,13 +126,10 @@ services:
|
|||||||
# Dev services
|
# Dev services
|
||||||
#
|
#
|
||||||
#======================
|
#======================
|
||||||
|
ac-build:
|
||||||
ac-dev-server:
|
|
||||||
<<: *ac-shared-conf
|
<<: *ac-shared-conf
|
||||||
tty: true
|
extends: ${DOCKER_EXTENDS_BIND:-abstract-bind}
|
||||||
image: acore/dev-server:${DOCKER_IMAGE_TAG:-master}
|
image: acore/dev-server:${DOCKER_IMAGE_TAG:-master}
|
||||||
security_opt:
|
|
||||||
- seccomp:unconfined
|
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
target: dev
|
target: dev
|
||||||
@ -124,9 +137,40 @@ services:
|
|||||||
args:
|
args:
|
||||||
USER_ID: ${DOCKER_USER_ID:-1000}
|
USER_ID: ${DOCKER_USER_ID:-1000}
|
||||||
GROUP_ID: ${DOCKER_GROUP_ID:-1000}
|
GROUP_ID: ${DOCKER_GROUP_ID:-1000}
|
||||||
extends: ${DOCKER_EXTENDS_BIND:-abstract-bind}
|
DOCKER_USER: ${DOCKER_USER:-acore}
|
||||||
|
cache_from:
|
||||||
|
- acore/dev-server:${DOCKER_IMAGE_TAG:-master}
|
||||||
env_file:
|
env_file:
|
||||||
${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
|
${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
|
||||||
|
working_dir: /azerothcore/
|
||||||
|
volumes:
|
||||||
|
- ac-build:/azerothcore/var/build
|
||||||
|
# use internal copied files instead of volumes
|
||||||
|
- /azerothcore/src
|
||||||
|
- /azerothcore/data
|
||||||
|
- /azerothcore/modules
|
||||||
|
profiles: [all, build]
|
||||||
|
|
||||||
|
ac-dev-server:
|
||||||
|
<<: *ac-shared-conf
|
||||||
|
extends: ${DOCKER_EXTENDS_BIND:-abstract-bind}
|
||||||
|
tty: true
|
||||||
|
image: acore/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:
|
||||||
|
- acore/dev-server:${DOCKER_IMAGE_TAG:-master}
|
||||||
|
security_opt:
|
||||||
|
- seccomp:unconfined
|
||||||
|
env_file:
|
||||||
|
${DOCKER_AC_ENV_FILE:-conf/dist/env.ac}
|
||||||
|
user: ${DOCKER_USER:-acore}
|
||||||
environment:
|
environment:
|
||||||
DBLIST: AUTH,CHARACTERS,WORLD
|
DBLIST: AUTH,CHARACTERS,WORLD
|
||||||
ports:
|
ports:
|
||||||
@ -134,14 +178,24 @@ services:
|
|||||||
- ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085
|
- ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085
|
||||||
- ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878
|
- ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878
|
||||||
volumes:
|
volumes:
|
||||||
- ac-build:/azerothcore/var/build
|
- ac-build-dev:/azerothcore/var/build
|
||||||
profiles: [all, dev]
|
profiles: [all, dev]
|
||||||
|
depends_on:
|
||||||
|
ac-database:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
ac-database:
|
ac-database:
|
||||||
ac-env:
|
ac-env:
|
||||||
|
ac-build-dev:
|
||||||
ac-build:
|
ac-build:
|
||||||
ac-proj:
|
ac-proj:
|
||||||
|
# not used, but you can use them by setting
|
||||||
|
# the DOCKER_VOL_* env variabiles
|
||||||
|
ac-conf:
|
||||||
|
ac-etc:
|
||||||
|
ac-logs:
|
||||||
|
ac-client-data:
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
ac-network:
|
ac-network:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user