Add README with deployment and operations guide.

This commit is contained in:
test
2026-05-18 13:10:28 +03:00
parent c9e584bf2b
commit e3d76eba1d
+238
View File
@@ -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 — собственность правообладателей. Репозиторий содержит только инфраструктуру развёртывания; используйте в соответствии с законодательством и лицензиями вашей сборки.