Add README with deployment and operations guide.
This commit is contained in:
@@ -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 — собственность правообладателей. Репозиторий содержит только инфраструктуру развёртывания; используйте в соответствии с законодательством и лицензиями вашей сборки.
|
||||
Reference in New Issue
Block a user