production setup
This commit is contained in:
+160
@@ -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 вместе с игровыми аккаунтами и персонажами.
|
||||
Reference in New Issue
Block a user