В современном мире нам уже не обязательно заблаговременно сидеть и мучать себя подготовкой окружения под работу с тем или инным серверным П.О. , когда за нас это всё может сделать Docker, спаковав всё в контейнер.
Разберём существующий пример по компиляции:
Для начала нам нужно извлечь все данные из клиента при помощи extractorTools и vmapAssembler и запаковать их в tar.gz архив cmangos-data.tar.gz (корнем архива должна быть папка data с содержимым)
Dockerfile:
# Download base image ubuntu 18.04
FROM ubuntu:18.04
# Update Ubuntu Software repository
RUN apt update
# Install nginx, php-fpm and supervisord from ubuntu repository
ARG DEBIAN_FRONTEND=noninteractive
RUN apt install -q -y git-core build-essential binutils gcc g++ cpp automake autoconf make libmysql++-dev libtool libssl-dev libcurl4-openssl-dev unrar-free unzip patch zlibc libc6 git-core openssl pkg-config cmake libboost-dev libboost-program-options-dev libboost-system-dev libboost-thread-dev libboost-dev libboost-regex-dev && \
rm -rf /var/lib/apt/lists/*
# Prepare Sources
RUN mkdir -p /opt/src && \
git clone https://github.com/cmangos/mangos-tbc.git /opt/src/cmangos
# Build Software
RUN mkdir -p /opt/cmangos/logs /opt/src/cmangos/build && \
cd /opt/src/cmangos/build && \
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/cmangos -DBUILD_LOGIN_SERVER=OFF -DBUILD_AHBOT=ON && \
make -j 4 && make install
# Prepare Config Files
RUN cd /opt/cmangos/etc && mv -v mangosd.conf.dist mangosd.conf && cp -v /opt/src/cmangos/src/game/AuctionHouseBot/ahbot.conf.dist.in ahbot.conf
RUN cd /opt/cmangos/etc && \
sed -i 's/LogsDir \= ""/LogsDir \= "\/opt\/cmangos\/logs"/g' mangosd.conf && \
sed -i 's/DataDir \= "."/DataDir \= "\/opt\/cmangos"/g' mangosd.conf && \
sed -i 's/MaxPingTime \= 30/MaxPingTime \= 5/g' mangosd.conf && \
sed -i 's/Console\.Enable \= 1/Console\.Enable \= 0/g' mangosd.conf
# Copy the runtime files
COPY cmangos-data.tar.gz /opt/cmangos
# Extract runtime files and cleanup
RUN cd /opt/cmangos && tar -xvzf cmangos-data.tar.gz && rm -vf cmangos-data.tar.gz && rm -rfv /opt/src
# Volume configuration
VOLUME ["/opt/cmangos/etc", "/opt/cmangos/logs"]
# Env Variables
## Databases
ENV CHARACTERS_DB characters_db_name
ENV MANGOSD_DB world_db_name
ENV REALMD_DB realmd_db_name
## World Credentials
ENV DB_USER mangos
ENV DB_PASS mangos
## Realmd Credentials
ENV REALMD_USER mangos
ENV REALMD_PASS mangos
## Database Servers
ENV DB_SERVER database
ENV REALMD_SERVER database
EXPOSE 3443 7878 8085
Естественно, как минимум, требуется изменить данные для подключения к Вашей БД, чтобы всё работало)
в конкретном примере создаётся контейнер на базе операционной системы Ubuntu 18.04, обновляются репозитории, устанавливаются требуемые пакеты и компилируется ядро.
После компиляции ядра проводятся настройтроки файлов конфигураци и добавление заранее извлечённых статичных данных (maps, vmaps и т.д.) и установка данных для подключения.
По сути, запуская сборку контейнера на основании файла, Вы автоматизируете подготовку рабочего огружения для Вашего сервера. Более того, Вы можете это делать на любой машине снова и снова, не тратя время на ручную установку и настройку пакетов.
Остаётся собрать и запустить контейнер. Находясь в папке с Dockerfile, вводим
всё, контейнер собран, и запущен, если все шаги соблюдены верно.
В данном примере для Вас будет собрано чистое ядро (игровой мир) под TBC клиент, и подготовлены выходные порты для контейнера. По сути, сервер полностью готов к работе!
p.s. гайд сырой до нельзя. Если Вам есть, чем его дополнить, милости прошу! 🙂
Не ругайте сильно, но наш стек уже обмазан Ансиблом и более сложный)