From e3d76eba1dc21e5451eed83734a0939d169ed22f Mon Sep 17 00:00:00 2001 From: test Date: Mon, 18 May 2026 13:10:28 +0300 Subject: [PATCH] Add README with deployment and operations guide. --- README.md | 238 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..d35fada --- /dev/null +++ b/README.md @@ -0,0 +1,238 @@ +# Lineage 2 Essence — развёртывание сервера (Docker) + +Окружение для **Lineage 2 Essence** с клиентом **protocol 520**, **PostgreSQL 17** и интерактивными скриптами установки/управления. Подходит как база под сборки в духе **L2J Mobius / Samurai Crow** (JAR login + game подключаете сами). + +Репозиторий: [https://git.evilfox.cc/test/Lineage-2](https://git.evilfox.cc/test/Lineage-2) + +## Что входит в проект + +| Компонент | Описание | +|-----------|----------| +| **PostgreSQL 17** | Одна БД `l2essence`: login + game + справочники классов | +| **install.sh** | Пошаговая установка (Docker, `.env`, БД, опционально login/game) | +| **manage.sh** | Остановка, запуск, перезапуск сервисов | +| **config/** | Шаблоны `LoginServer.properties`, `Server.properties`, `ipconfig.xml`, hexid | +| **docker/initdb/** | SQL-схема и тестовые данные при первом создании тома | +| **server/login**, **server/game** | Сюда кладутся `LoginServer.jar` и `GameServer.jar` | + +## Требования + +- **Ubuntu** 22.04 / 24.04 (рекомендуется) или другой Linux с Docker +- **Docker Engine** + плагин **Compose v2** +- **2+ GB RAM**, свободные порты: `5432`, `2106`, `9014`, `7777` +- Сборка сервера (login + game + datapack) с поддержкой **PostgreSQL** и протокола **520** +- Клиент Lineage 2 Essence с **protocol revision 520** + +## Быстрый старт + +```bash +git clone https://git.evilfox.cc/test/Lineage-2.git +cd Lineage-2 + +chmod +x install.sh manage.sh scripts/*.sh docker/initdb/*.sh +./install.sh +``` + +На каждом шаге `install.sh` спрашивает **y/n**. По умолчанию поднимается только **PostgreSQL**; login/game — по желанию (шаг 7), если JAR уже лежат в `server/`. + +## Подробное развёртывание + +### 1. Клонирование и права + +```bash +git clone https://git.evilfox.cc/test/Lineage-2.git +cd Lineage-2 +chmod +x install.sh manage.sh scripts/*.sh docker/initdb/*.sh +``` + +### 2. Установка через мастер + +```bash +./install.sh +``` + +| Шаг | Действие | +|-----|----------| +| 0 | Подтверждение начала | +| 1 | Проверка Ubuntu | +| 2 | Установка Docker (если нет) | +| 3 | Создание `.env` (логин/пароль БД, имя БД, порт) | +| 4 | `docker compose pull` | +| 5 | Запуск **PostgreSQL** и ожидание готовности | +| 6 | Подстановка пароля БД в `config/login` и `config/game` | +| 7 | Запуск **login** + **game** (`--profile l2`), если есть JAR | + +Файл `.env` создаётся из `.env.example` и **не коммитится** в Git. + +### 3. Серверные JAR и datapack + +1. Скопируйте **LoginServer.jar** (и `libs/`) в `server/login/`. +2. Скопируйте **GameServer.jar** (и `libs/`, datapack) в `server/game/`. +3. В `libs/` обоих серверов должен быть драйвер **PostgreSQL**: `postgresql-42.x.jar`. +4. Убедитесь, что в сборке в конфиге указан **protocol 520** (см. `config/game/Server.properties` → `AllowedProtocolRevisions = 520`). + +Синхронизация пароля БД в конфигах: + +```bash +./scripts/sync-config-password.sh +``` + +### 4. HexID (связь Login ↔ Game) + +Значение **hexid** должно совпадать в трёх местах: + +- `server/hexid/default.txt` +- `config/game/hexid.txt` +- таблица `gameservers` в БД (сид в `docker/initdb/03_seed_essence520.sql`) + +По умолчанию: `a1b2c3d4e5f6789012345678901234ef`, **RequestServerID = 1**. + +После смены hex перезапустите login и game: + +```bash +docker compose --profile l2 restart login game +``` + +### 5. Запуск Login и Game + +```bash +docker compose --profile l2 up -d login game +docker compose --profile l2 ps +docker compose logs -f login +docker compose logs -f game +``` + +Только БД: + +```bash +docker compose up -d postgres +``` + +### 6. Управление сервером + +```bash +./manage.sh +``` + +Интерактивно: статус, остановка, запуск, перезапуск PostgreSQL / login / game, полный down. + +Полезные команды: + +```bash +docker compose logs -f postgres +docker compose --profile l2 down +docker compose down -v # удалить том БД (все данные!) +``` + +## Подключение клиента + +| Параметр | Значение | +|----------|----------| +| Протокол | **520** | +| Login | IP сервера, порт **2106** | +| Game | IP сервера, порт **7777** | + +На VPS в `config/login/ipconfig.xml` и `config/game/ipconfig.xml` замените `127.0.0.1` на **внешний IP** сервера. + +В `l2.ini` / системном файле клиента укажите тот же IP и порты. + +## Тестовые аккаунты + +| Логин | Пароль | Примечание | +|-------|--------|------------| +| `admin` | `admin` | accessLevel 100 | +| `test` | `test` | обычный аккаунт | + +Хеш пароля: **Base64(SHA1(UTF-8 пароль))** (как в L2J Mobius). + +## База данных + +### Автоинициализация (новый том) + +При **первом** `docker compose up` postgres выполняет скрипты из `docker/initdb/`: + +- `01_login_essence520.sql` — accounts, gameservers, … +- `02_game_essence520_minimal.sql` — characters, items, … +- `02b_game_classes_ref.sql` — расы, классы, стартовая экипировка +- `03_seed_essence520.sql` — аккаунты, gameserver +- `04_seed_classes_essence520.sql` — классы и стартовые скиллы +- `99_grant_app_user.sh` — права пользователю БД из `.env` + +### Уже существующая БД + +Если том создавался раньше, init-скрипты **не повторяются**. Примените схему вручную: + +```bash +./scripts/apply-essence-schema.sh +``` + +Или пересоздайте том (удалит все данные): + +```bash +docker compose down -v +./install.sh +``` + +### Создаваемые классы (protocol 520) + +Базовые classId на экране создания персонажа: +`0, 10, 18, 25, 31, 38, 44, 49, 53, 123, 124, 182, 183` +(см. таблицы `ref_classes`, `ref_races`, `class_list`). + +Полные шаблоны персонажей и предметы обычно берутся из **datapack (XML)** вашей сборки; SQL в репозитории — минимальный каркас. + +## Структура каталогов + +``` +Lineage-2/ +├── install.sh # Установка +├── manage.sh # Управление +├── docker-compose.yml +├── .env.example +├── config/ +│ ├── login/ # LoginServer.properties, servername.xml, ipconfig.xml +│ └── game/ # Server.properties, hexid.txt, ipconfig.xml +├── server/ +│ ├── login/ # LoginServer.jar +│ ├── game/ # GameServer.jar + datapack +│ └── hexid/default.txt +├── docker/initdb/ # SQL при первом старте БД +└── scripts/ + ├── apply-essence-schema.sh + └── sync-config-password.sh +``` + +## Частые проблемы + +**Docker: permission denied** +Добавьте пользователя в группу `docker`, перелогиньтесь: +`sudo usermod -aG docker $USER` + +**Login не пускает / неверный пароль** +Проверьте формат хеша в `accounts.password` и алгоритм в вашей сборке. При необходимости пересоздайте аккаунт через SQL или `AutoCreateAccounts = True` в login config. + +**Клиент «Protocol mismatch»** +В `Server.properties` должно быть `AllowedProtocolRevisions = 520` и клиент с тем же протоколом. + +**GameServer не регистрируется на Login** +Сверьте hexid, `RequestServerID`, порты 9014, что login запущен раньше game. + +**Ошибки SQL с `IF(...)` в login** +Стандартный L2J MySQL-запрос; нужна **PostgreSQL-адаптированная** сборка или полный SQL из вашего дистрибутива. + +**Нет LoginServer.jar / GameServer.jar в контейнере** +Контейнеры ждут JAR в `server/login` и `server/game`; без них в логе будет сообщение и `sleep infinity`. + +## Обновление с Git + +```bash +cd Lineage-2 +git pull +./scripts/apply-essence-schema.sh # при новых SQL, если том БД старый +./scripts/sync-config-password.sh # при смене .env +docker compose --profile l2 up -d +``` + +## Лицензия и ответственность + +Серверные JAR и клиент Lineage 2 — собственность правообладателей. Репозиторий содержит только инфраструктуру развёртывания; используйте в соответствии с законодательством и лицензиями вашей сборки.