FROM ubuntu:24.04 AS builder ENV DEBIAN_FRONTEND="noninteractive" ARG TIMEZONE="${WOW_TIMEZONE}" ENV TZ="${TIMEZONE}" RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ \ apt-get update \ && apt-get install -y --no-install-recommends \ tzdata \ && ln -snf "/usr/share/zoneinfo/${TIMEZONE}" /etc/localtime \ && echo "${TIMEZONE}" > /etc/timezone \ && dpkg-reconfigure --frontend noninteractive tzdata \ \ && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ cmake \ g++-14 \ git-core \ libboost-filesystem-dev \ libboost-program-options-dev \ libboost-regex-dev \ libboost-serialization-dev \ libboost-system-dev \ libboost-thread-dev \ libmariadb-dev-compat \ libssl-dev \ mariadb-client \ \ && update-alternatives --install /usr/bin/gcc gcc \ /usr/bin/gcc-14 14 \ --slave /usr/bin/g++ g++ \ /usr/bin/g++-14 \ \ && rm -rf /tmp/* ARG EXPANSION ARG MANGOS_SHA1="latest" ARG DATABASE_SHA1="latest" ENV HOME_DIR="/home/mangos" ENV MANGOS_DIR="${HOME_DIR}/mangos" ENV DATABASE_DIR="${HOME_DIR}/${EXPANSION}-db" RUN mkdir -p "${MANGOS_DIR}" \ "${DATABASE_DIR}" \ \ && cd /tmp \ && if [ "${MANGOS_SHA1}" = "latest" ]; \ then \ git clone "https://github.com/cmangos/mangos-${EXPANSION}.git" \ --branch "master" \ --single-branch \ --depth 1 \ "${MANGOS_DIR}"; \ else \ git clone "https://github.com/cmangos/mangos-${EXPANSION}.git" \ --branch "master" \ --single-branch \ cmangos-mangos \ && cd cmangos-mangos \ && git archive "${MANGOS_SHA1}" | tar xC "${MANGOS_DIR}"; \ fi \ \ && cd /tmp \ && if [ "${DATABASE_SHA1}" = "latest" ]; \ then \ git clone "https://github.com/cmangos/${EXPANSION}-db.git" \ --branch "master" \ --single-branch \ --depth 1 \ "${DATABASE_DIR}"; \ else \ git clone "https://github.com/cmangos/${EXPANSION}-db.git" \ --branch "master" \ --single-branch \ cmangos-db \ && cd cmangos-db \ && git archive "${DATABASE_SHA1}" | tar xC "${DATABASE_DIR}"; \ fi \ \ && rm -rf /tmp/* # TODO: Add here as building arguments all `cmake` parameters. # - CMAKE_INSTALL_PREFIX Path where the server should be installed to # - PCH Use precompiled headers # - DEBUG Include additional debug-code in core # - WARNINGS Show all warnings during compile # - POSTGRESQL Use PostgreSQL instead of mysql # - BUILD_EXTRACTORS Build map/dbc/vmap/mmap extractor # - BUILD_SCRIPTDEV Build scriptdev. (Disable it to speedup build in dev mode by not including scripts) # - BUILD_PLAYERBOTS Build Playerbot mod # - BUILD_AHBOT Build Auction House Bot mod # - BUILD_METRICS Build Metrics, generate data for Grafana # - BUILD_RECASTDEMOMOD Build map/vmap/mmap viewer # - BUILD_GIT_ID Build git_id # - BUILD_DOCS Build documentation with doxygen # ARG THREADS="1" RUN mkdir -p "${HOME_DIR}/build" \ "${HOME_DIR}/run" \ \ && cd "${HOME_DIR}/build" \ && cmake ../mangos/ \ -D CMAKE_INSTALL_PREFIX=../run \ -D PCH=1 \ -D DEBUG=0 \ -D BUILD_EXTRACTORS=ON \ && make -j "${THREADS}" \ && make install \ \ && cd "${HOME_DIR}/run/bin/tools" \ && chmod +x ExtractResources.sh \ MoveMapGen.sh RUN useradd --comment "MaNGOS" \ --home "${HOME_DIR}" \ --user-group mangos WORKDIR "${HOME_DIR}" ENV MYSQL_SUPERUSER="root" ENV MYSQL_SUPERPASS="" ENV MANGOS_DBHOST="host.docker.internal" ENV MANGOS_DBPORT="3306" ENV MANGOS_DBUSER="mangos" ENV MANGOS_DBPASS="" ENV MANGOS_WORLD_DBNAME="${EXPANSION}mangos" ENV MANGOS_CHARACTERS_DBNAME="${EXPANSION}characters" ENV MANGOS_LOGS_DBNAME="${EXPANSION}logs" ENV MANGOS_REALMD_DBNAME="${EXPANSION}realmd" COPY entrypoint-builder.sh /entrypoint.sh COPY InstallFullDB.config "${DATABASE_DIR}/" ENTRYPOINT ["/entrypoint.sh"] CMD ["bash"] ENV VOLUME_DIR="/home/mangos/data" ENV TMPDIR="${VOLUME_DIR}/tmp" VOLUME ["${VOLUME_DIR}"] FROM ubuntu:24.04 AS runner ENV DEBIAN_FRONTEND="noninteractive" ARG TIMEZONE="Etc/UTC" ENV TZ="${TIMEZONE}" RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ \ apt-get update \ && apt-get install -y --no-install-recommends \ tzdata \ && ln -snf "/usr/share/zoneinfo/${TIMEZONE}" /etc/localtime \ && echo "${TIMEZONE}" > /etc/timezone \ && dpkg-reconfigure --frontend noninteractive tzdata \ \ && apt-get install -y --no-install-recommends \ gosu \ libmariadb-dev \ libssl3 \ wait-for-it \ screen \ \ && rm -rf /tmp/* ENV HOME_DIR="/home/mangos" ENV MANGOS_DIR="/opt/mangos" RUN useradd --home "${HOME_DIR}" --create-home \ --comment "MaNGOS" \ --user-group mangos WORKDIR "${MANGOS_DIR}" ARG EXPANSION COPY --from=builder "${HOME_DIR}/run" "${MANGOS_DIR}" COPY entrypoint-runner.sh /entrypoint.sh ENV VOLUME_DIR="/var/lib/mangos" ENV TMPDIR="${VOLUME_DIR}/tmp" RUN mkdir "${VOLUME_DIR}" \ && sed -i '/^DataDir/c\DataDir = "'"${VOLUME_DIR}"'"' etc/mangosd.conf.dist ENV MANGOS_DBHOST="host.docker.internal" ENV MANGOS_DBPORT="3306" ENV MANGOS_DBUSER="mangos" ENV MANGOS_DBPASS="" ENV MANGOS_WORLD_DBNAME="${EXPANSION}mangos" ENV MANGOS_CHARACTERS_DBNAME="${EXPANSION}characters" ENV MANGOS_LOGS_DBNAME="${EXPANSION}logs" ENV MANGOS_REALMD_DBNAME="${EXPANSION}realmd" ENTRYPOINT ["/entrypoint.sh"] CMD ["bash"] EXPOSE 3443 3724 7878 8085 8086 VOLUME ["${VOLUME_DIR}"] ARG VERSION LABEL org.opencontainers.image.title="CMaNGOS Runner \"${EXPANSION}\" version" LABEL org.opencontainers.image.description="A CMaNGOS \"${EXPANSION}\" version Docker image ready-to-use to host your emulated private server for WoW wherever you want." LABEL org.opencontainers.image.licenses="GPL-2.0" LABEL org.opencontainers.image.version="${VERSION}" ARG MANGOS_SHA1 LABEL "net.cmangos.mangos-${EXPANSION}.revision"="${MANGOS_SHA1}" LABEL "net.cmangos.mangos-${EXPANSION}.source"="https://github.com/cmangos/mangos-${EXPANSION}" LABEL "net.cmangos.mangos-${EXPANSION}.url"="https://github.com/cmangos/mangos-${EXPANSION}" ARG DATABASE_SHA1 LABEL "net.cmangos.${EXPANSION}-db.revision"="${DATABASE_SHA1}" LABEL "net.cmangos.${EXPANSION}-db.source"="https://github.com/cmangos/${EXPANSION}-db" LABEL "net.cmangos.${EXPANSION}-db.url"="https://github.com/cmangos/${EXPANSION}-db"