production setup

This commit is contained in:
2026-08-31 21:32:14 +04:00
parent e1ccf30afc
commit d7701b5b98
18 changed files with 38663 additions and 0 deletions
+160
View File
@@ -0,0 +1,160 @@
# FelWell — Legion 7.3.5
Production-сборка SylvaniaCore для realm **FelWell**. Сервер рассчитан на
клиент World of Warcraft Legion **7.3.5 build 26972** и публикуется по адресу
`legion.moon-well.online`.
## Что входит в сборку
- SylvaniaCore: `worldserver` и `bnetserver`;
- MariaDB 11.4 с базами `auth`, `characters`, `world`, `hotfixes` и `shop`;
- Docker Compose для сборки и запуска всего стека;
- автоматическая настройка `auth.realmlist` из переменных окружения;
- русская локализация дополнительных `broadcast_text`;
- постоянные Docker volumes для базы данных и журналов.
## Требования к VPS
- Ubuntu 24.04;
- Docker Engine с Compose plugin;
- DNS-запись `legion.moon-well.online`, направленная на публичный IP VPS;
- открытые входящие TCP-порты `1119`, `8081` и `8085`;
- игровой порт MariaDB `3306` не должен быть открыт в Интернет.
В каталоге `data/` должны находиться данные, извлечённые из клиента
7.3.5.26972: `dbc`, `maps`, `vmaps`, `mmaps`, `cameras` и `gt`.
## Первый запуск
Создайте production-конфигурацию:
```bash
cp .env.production.example .env.production
nano .env.production
```
Обязательно замените `DB_ROOT_PASSWORD` и `DB_PASSWORD` на разные длинные
случайные пароли. Затем положите полные дампы `world` и `hotfixes` в
`docker/db-dumps/` и запустите сервер:
```bash
docker compose --env-file .env.production up --build -d
docker compose --env-file .env.production ps
docker compose --env-file .env.production logs -f bnetserver worldserver
```
При запуске запись realm автоматически получает следующие значения:
```text
name = FelWell
address = legion.moon-well.online
port = 8085
gamebuild = 26972
```
## Русские переводы
Дополнительные переводы находятся в `sql/translations/ruRU/`. Их можно
импортировать после инициализации базы:
```bash
set -a
. ./.env.production
set +a
for file in sql/translations/ruRU/broadcast_text_locale_ruRU_part_*.sql; do
docker compose --env-file .env.production exec -T database \
mariadb --binary-mode -uroot "-p${DB_ROOT_PASSWORD}" hotfixes < "$file"
done
docker compose --env-file .env.production restart worldserver
```
Импорт идемпотентный: существующие строки не перезаписываются.
## Свой Git-сервер и обновления GitHub
Используется стандартная схема с двумя remote:
- `origin` — ваш собственный Git-сервер, основное место хранения;
- `upstream` — публичный GitHub-репозиторий SylvaniaCore, только источник
обновлений.
GitHub уже настроен как `upstream`. Добавьте свой сервер, подставив настоящий
SSH URL:
```bash
git remote add origin git@YOUR_GIT_SERVER:YOUR_GROUP/SylvaniaCore.git
git push -u origin master
git remote -v
```
Рабочие изменения сначала коммитятся и отправляются только в ваш `origin`:
```bash
git add .
git commit -m "Configure FelWell production deployment"
git push origin master
```
Для получения очередных обновлений GitHub:
```bash
git status
git fetch upstream --prune
git switch master
git branch "backup/before-upstream-$(date +%F-%H%M)"
git merge upstream/sylvaniacore
```
Если возникли конфликты, разрешите их, сохраняя FelWell-настройки в
`compose.yaml`, `docker/`, `.env.production.example` и SQL-миграциях. После
сборки и проверки отправьте результат на собственный сервер:
```bash
docker compose --env-file .env.production build
docker compose --env-file .env.production up -d
docker compose --env-file .env.production logs --tail=200 worldserver bnetserver
git push origin master
```
Не выполняйте обновление при незакоммиченных изменениях. Файлы `.env`,
`.env.production`, игровые данные и полные дампы БД исключены из Git.
## Резервное копирование базы
Перед обновлением создайте дамп всех игровых баз:
```bash
set -a
. ./.env.production
set +a
docker compose --env-file .env.production exec -T database \
mariadb-dump -uroot "-p${DB_ROOT_PASSWORD}" \
--single-transaction --routines --events \
--databases auth characters world hotfixes shop \
| gzip > "felwell-$(date +%F-%H%M).sql.gz"
```
Храните резервные копии вне VPS. Docker volume защищает данные при пересоздании
контейнеров, но не заменяет внешнюю резервную копию.
## Полезные команды
```bash
# Состояние контейнеров
docker compose --env-file .env.production ps
# Последние журналы
docker compose --env-file .env.production logs --tail=200 worldserver bnetserver
# Перезапуск серверов без удаления БД
docker compose --env-file .env.production restart bnetserver worldserver
# Остановка стека с сохранением volumes
docker compose --env-file .env.production down
```
Не запускайте `docker compose down -v` на production: ключ `-v` удаляет volume
MariaDB вместе с игровыми аккаунтами и персонажами.