239 lines
9.6 KiB
Markdown
239 lines
9.6 KiB
Markdown
# 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 — собственность правообладателей. Репозиторий содержит только инфраструктуру развёртывания; используйте в соответствии с законодательством и лицензиями вашей сборки.
|