Авто-развертывание сервера L2 interlude через Docker (Ubuntu 18.04 - Тест)
Свой домашний сервер Lineage 2 Interlude (Часть1)
Установка сервера Lineage 2 Interlude на Ubuntu 18.04 в Hyper-V (Часть 2)
Это были просто тесты, по этому гарантий дать не могу.
Сайт откуда взял инструкцию (он был для Windows) на poloman.pro, он уже не работает.
Изначально я запускал сервер Ubuntu 18.04 и работал он для тестов около года изредка…
после сервер сломался и никак не смог, на основном ПК починить, вот и сделал две тестовые установки на отдельном ПК, а раз оригинальной инструкции больше нет.
Сделаю тут в 2-3 вариантах, сервер Запустился и с Docker и Без него на Тестовом ПК.
При переносе на другой компьютер достаточно скопировать папку проекта и изменить IP-адрес в файле .env.
Свой домашний сервер Lineage 2 Interlude (Часть1)
Установка сервера Lineage 2 Interlude на Ubuntu 18.04 в Hyper-V (Часть 2)
Это были просто тесты, по этому гарантий дать не могу.
Сайт откуда взял инструкцию (он был для Windows) на poloman.pro, он уже не работает.
Изначально я запускал сервер Ubuntu 18.04 и работал он для тестов около года изредка…
после сервер сломался и никак не смог, на основном ПК починить, вот и сделал две тестовые установки на отдельном ПК, а раз оригинальной инструкции больше нет.
Сделаю тут в 2-3 вариантах, сервер Запустился и с Docker и Без него на Тестовом ПК.
При переносе на другой компьютер достаточно скопировать папку проекта и изменить IP-адрес в файле .env.
1. Установка Docker и Docker Compose
# Добавление пользователя в группу docker (чтобы не использовать sudo)
Перезайдите в сессию или выполните newgrp docker, чтобы права применились.
2. Подготовка файлов сборки
Рекомендуется загружать сервер одним архивом и распаковывать на сервере, чтобы избежать ошибок.
Загрузите архив (например, l2docker.rar) в /home/ваш_пользователь/ через FileZilla (режим бинарной передачи).
Распакуйте и переместите папки authserver и gameserver в рабочую директорию проекта:
cd /home/ваш_пользователь
3. Структура каталогов проекта
После перемещения папок ваша рабочая директория /srv/l2docker/ должна содержать:
Установите правильные права, чтобы работать без sudo (замените ваш_пользователь на свой логин):
sudo chown -R ваш_пользователь:ваш_пользователь /srv/l2docker
4. Переменные окружения .env
Создайте файл в корне проекта:
Вставьте (формат ini):
Важно:
DB_ROOT_PASSWORD – пароль root MySQL, DB_PASSWORD – пароль пользователя l2juser. Они могут различаться. В конце файла не должно быть лишних пробелов.
5. Конфигурация контейнеров docker-compose.yml
Создайте файл:
Полный рабочий вариант:
Обратите внимание:
Образ Java – eclipse-temurin:8-jre (работает, в отличие от удалённого openjdk).
Classpath -cp config:./*:lib/* правильно подхватывает jar-файлы в корне и в подпапке lib.
command: --ssl=0 для MySQL 5.7 решает проблему несовместимости со старыми драйверами.
Символ > позволяет записать команду Java в несколько строк, избегая ошибок YAML.
6. Исправление конфигурационных файлов сервера
Найдите и исправьте следующие параметры:
# Клиентский порт – слушаем все интерфейсы
# Внутренний порт для связи с геймсервером – слушаем все интерфейсы
# Отключаем второй пароль / пин-код
# (опционально) Авторегистрация новых геймсерверов – уже зарегистрирован вручную, Но.
gameserver/config/server.properties (Чере File Zilla) или:
Исправьте:
# Адрес authserver – используем имя Docker-сервиса
Важно:
DatabaseHost = db (без SSL-параметров, SSL отключён в самом MySQL).
LoginHost = 0.0.0.0 в authserver заставляет слушать все интерфейсы внутри контейнера.
LoginHost = authserver в gameserver направляет его к контейнеру authserver.
7. Скрипт инициализации базы данных 01-init.sh
Создайте папку и сам скрипт через nano (не через FileZilla, чтобы избежать Windows-окончаний строк):
Содержимое:
# 3. Регистрация игрового сервера
Сделайте скрипт исполняемым:
8. Устранение ошибки D-Bus (опционально, если появляется)
Если при запуске docker-compose возникает ошибка Cannot autolaunch D-Bus, выполните:
И для root:
Теперь можно запускать проект.
9. Запуск сервера
Из папки проекта:
Первое развёртывание займёт некоторое время (MySQL инициализирует БД, скрипт импорта отработает).
Смотрите логи:
Успешный запуск:
authserver пишет Listening for clients on *:2106
gameserver соединяется с authserver:9014 и регистрируется.
10. Управление сервером (Docker Compose команды)
Все команды выполняются из директории /srv/l2docker.
Действие
Команда
Запустить все контейнеры (в фоне)
Остановить контейнеры (без удаления)
Перезапустить все контейнеры
Перезапустить отдельный сервис (Можно в отдельном окне терминала)
Перезапустить отдельный сервис (Можно в отдельном окне терминала)
Остановить и удалить контейнеры (БД сохранится)
Полный сброс (удаление БД и всех данных)
Просмотр логов всех сервисов
Логи конкретного сервиса (Можно в отдельном окне терминала)
Логи конкретного сервиса (Можно в отдельном окне терминала)
Состояние контейнеров
Зайти в контейнер с БД
Рекомендация:
Если после перезагрузки хост-машины сервер не стартует, выполните docker-compose down и docker-compose up -d заново – это гарантирует корректный порядок запуска.
Итог: изолированный сервер Lineage 2 в Docker.
Для переноса на другой компьютер достаточно скопировать папку /srv/l2docker и изменить EXTERNAL_IP в .env.
Как восстановить на другой машине с Linux
Установите Docker и Docker Compose (пункт 1 гайда).
Сохраните и скопируйте архив в /srv и распакуйте:
Зайдите в папку и запусти:
Экспорт базы (создаст файл interlude_dump.sql в домашней папке):
Этот файл можно будет потом импортировать в чистую базу командой:
Удаление копии сервера:
Все изменения конфигурации (рейты, дроп, опции) вносятся в привычные .properties файлы внутри authserver/config/ и gameserver/config/,
после чего требуется перезапуск соответствующего контейнера.
Код:
sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl enable --now docker
# Добавление пользователя в группу docker (чтобы не использовать sudo)
Код:
sudo usermod -aG docker $USER
newgrp docker
Перезайдите в сессию или выполните newgrp docker, чтобы права применились.
2. Подготовка файлов сборки
Рекомендуется загружать сервер одним архивом и распаковывать на сервере, чтобы избежать ошибок.
Код:
sudo apt install unrar -y
Загрузите архив (например, l2docker.rar) в /home/ваш_пользователь/ через FileZilla (режим бинарной передачи).
Распакуйте и переместите папки authserver и gameserver в рабочую директорию проекта:
cd /home/ваш_пользователь
Код:
sudo apt update
sudo apt install unrar -y (установить архиватор)
unrar x l2docker.rar -p'пароль_архива' # если нет пароля архива, просто опустите -p
mkdir -p /srv/l2docker
mv authserver /srv/l2docker/
mv gameserver /srv/l2docker/
3. Структура каталогов проекта
После перемещения папок ваша рабочая директория /srv/l2docker/ должна содержать:
Код:
/srv/l2docker/
├── docker-compose.yml
├── .env
├── init-db/
│ └── 01-init.sh
├── authserver/ ← содержимое папки authserver вашей сборки
└── gameserver/ ← содержимое папки gameserver вашей сборки
Установите правильные права, чтобы работать без sudo (замените ваш_пользователь на свой логин):
sudo chown -R ваш_пользователь:ваш_пользователь /srv/l2docker
4. Переменные окружения .env
Создайте файл в корне проекта:
Код:
nano /srv/l2docker/.env
Вставьте (формат ini):
Код:
DB_ROOT_PASSWORD=StrongRootPass123 # (Тут тупанул с паролем извиняйте - оставлю, переташил из гайда донара для Ubuntu и еще удивлялся потом О_о)
DB_NAME=interlude
DB_USER=l2juser
DB_PASSWORD=Poloman
EXTERNAL_IP=192.168.*.* # ваш внешний IP - Закрепите в ОС
SERVER_NAME=Bartz
Важно:
DB_ROOT_PASSWORD – пароль root MySQL, DB_PASSWORD – пароль пользователя l2juser. Они могут различаться. В конце файла не должно быть лишних пробелов.
5. Конфигурация контейнеров docker-compose.yml
Создайте файл:
Код:
nano /srv/l2docker/docker-compose.yml
Полный рабочий вариант:
Код:
yaml
services:
db:
image: mysql:5.7
container_name: l2-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
EXTERNAL_IP: ${EXTERNAL_IP}
SERVER_NAME: ${SERVER_NAME}
ports:
- "3306:3306" # для внешнего доступа (Navicat и т.п.)
volumes:
- db_data:/var/lib/mysql
- ./init-db:/docker-entrypoint-initdb.d:ro
- ./authserver/sql/install:/app_sql/authserver:ro
- ./gameserver/sql/install:/app_sql/gameserver:ro
command: --ssl=0 # отключаем SSL для старых драйверов
authserver:
image: eclipse-temurin:8-jre
container_name: l2-authserver
restart: always
depends_on:
- db
ports:
- "2106:2106"
volumes:
- ./authserver:/app
working_dir: /app
command: >
java -server -Dfile.encoding=UTF-8 -Xmx256m
-cp config:./*:lib/*
l2.authserver.AuthServer
gameserver:
image: eclipse-temurin:8-jre
container_name: l2-gameserver
restart: always
depends_on:
- db
ports:
- "7777:7777"
volumes:
- ./gameserver:/app
working_dir: /app
command: >
java -server -Dfile.encoding=UTF-8 -Xmx3G
-cp config:./*:lib/*
l2.gameserver.GameServer
volumes:
db_data:
Обратите внимание:
Образ Java – eclipse-temurin:8-jre (работает, в отличие от удалённого openjdk).
Classpath -cp config:./*:lib/* правильно подхватывает jar-файлы в корне и в подпапке lib.
command: --ssl=0 для MySQL 5.7 решает проблему несовместимости со старыми драйверами.
Символ > позволяет записать команду Java в несколько строк, избегая ошибок YAML.
6. Исправление конфигурационных файлов сервера
Код:
authserver/config/authserver.properties
nano /srv/l2docker/authserver/config/authserver.properties
Найдите и исправьте следующие параметры:
Код:
properties
DatabaseHost = db
DatabasePort = 3306
DatabaseName = interlude
DatabaseUser = l2juser
DatabasePassword = Poloman
# Клиентский порт – слушаем все интерфейсы
Код:
LoginserverHostname = *
LoginserverPort = 2106
# Внутренний порт для связи с геймсервером – слушаем все интерфейсы
Код:
LoginHost = 0.0.0.0
LoginPort = 9014
# Отключаем второй пароль / пин-код
Код:
UseSecondPasswordAuth = False
# (опционально) Авторегистрация новых геймсерверов – уже зарегистрирован вручную, Но.
Код:
AcceptNewGameServer = True
gameserver/config/server.properties (Чере File Zilla) или:
Код:
nano /srv/l2docker/gameserver/config/server.properties
Исправьте:
Код:
properties
DatabaseHost = db
DatabasePort = 3306
DatabaseName = interlude
DatabaseUser = l2juser
DatabasePassword = Poloman
Код:
GameserverHostname = *
GameserverPort = 7777
Код:
ExternalHostname = 192.168.*.* (Изменить на свои)
InternalHostname = 192.168.*.* (Изменить на свои)
# Адрес authserver – используем имя Docker-сервиса
Код:
LoginHost = authserver
LoginPort = 9014
LoginUseCrypt = True
RequestServerID = 1
AcceptAlternateID = True
Важно:
DatabaseHost = db (без SSL-параметров, SSL отключён в самом MySQL).
LoginHost = 0.0.0.0 в authserver заставляет слушать все интерфейсы внутри контейнера.
LoginHost = authserver в gameserver направляет его к контейнеру authserver.
7. Скрипт инициализации базы данных 01-init.sh
Создайте папку и сам скрипт через nano (не через FileZilla, чтобы избежать Windows-окончаний строк):
Код:
mkdir -p /srv/l2docker/init-db
nano /srv/l2docker/init-db/01-init.sh
Содержимое:
Код:
#!/bin/bash
echo "=== Старт автоматического импорта базы данных L2 ==="
# 1. Импорт таблиц AuthServer
echo "Импорт таблиц AuthServer..."
mysql -u root -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE" < /app_sql/authserver/account_log.sql
mysql -u root -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE" < /app_sql/authserver/accounts.sql
mysql -u root -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE" < /app_sql/authserver/gameservers.sql
# 2. Импорт таблиц GameServer
echo "Импорт таблиц GameServer..."
for file in /app_sql/gameserver/*.sql; do
echo "Импортируем файл: $file"
mysql -u root -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE" < "$file"
done
# 3. Регистрация игрового сервера
Код:
echo "Регистрация игрового сервера: IP $EXTERNAL_IP, Название $SERVER_NAME"
mysql -u root -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE" -e "INSERT INTO gameservers (server_id, host, server_name) VALUES (1, '$EXTERNAL_IP', '$SERVER_NAME') ON DUPLICATE KEY UPDATE host='$EXTERNAL_IP', server_name='$SERVER_NAME';" 2>/dev/null || \
mysql -u root -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE" -e "INSERT INTO gameservers (server_id, host) VALUES (1, '$EXTERNAL_IP') ON DUPLICATE KEY UPDATE host='$EXTERNAL_IP';"
echo "=== Импорт базы данных успешно завершен ==="
Сделайте скрипт исполняемым:
Код:
chmod +x /srv/l2docker/init-db/01-init.sh
8. Устранение ошибки D-Bus (опционально, если появляется)
Если при запуске docker-compose возникает ошибка Cannot autolaunch D-Bus, выполните:
Код:
mkdir -p ~/.docker
echo '{"credsStore": ""}' > ~/.docker/config.json
И для root:
Код:
sudo mkdir -p /root/.docker
echo '{"credsStore": ""}' | sudo tee /root/.docker/config.json
sudo systemctl restart docker
Теперь можно запускать проект.
9. Запуск сервера
Из папки проекта:
Код:
cd /srv/l2docker
DOCKER_CREDS_STORE="" docker-compose up -d
Первое развёртывание займёт некоторое время (MySQL инициализирует БД, скрипт импорта отработает).
Смотрите логи:
Код:
docker-compose logs -f
Успешный запуск:
authserver пишет Listening for clients on *:2106
gameserver соединяется с authserver:9014 и регистрируется.
10. Управление сервером (Docker Compose команды)
Все команды выполняются из директории /srv/l2docker.
Действие
Команда
Запустить все контейнеры (в фоне)
Код:
DOCKER_CREDS_STORE="" docker-compose up -d
Остановить контейнеры (без удаления)
Код:
docker-compose stop
Перезапустить все контейнеры
Код:
docker-compose restart
Перезапустить отдельный сервис (Можно в отдельном окне терминала)
Код:
docker-compose restart authserver
Перезапустить отдельный сервис (Можно в отдельном окне терминала)
Код:
docker-compose restart gameserver
Остановить и удалить контейнеры (БД сохранится)
Код:
docker-compose down
Полный сброс (удаление БД и всех данных)
Код:
docker-compose down -v
Просмотр логов всех сервисов
Код:
docker-compose logs -f
Логи конкретного сервиса (Можно в отдельном окне терминала)
Код:
docker-compose logs -f authserver
Логи конкретного сервиса (Можно в отдельном окне терминала)
Код:
docker-compose logs -f gameserver
Состояние контейнеров
Код:
docker-compose ps
Зайти в контейнер с БД
Код:
docker exec -it l2-db mysql -u root -pStrongRootPass123 interlude
Рекомендация:
Если после перезагрузки хост-машины сервер не стартует, выполните docker-compose down и docker-compose up -d заново – это гарантирует корректный порядок запуска.
Итог: изолированный сервер Lineage 2 в Docker.
Для переноса на другой компьютер достаточно скопировать папку /srv/l2docker и изменить EXTERNAL_IP в .env.
Как восстановить на другой машине с Linux
Установите Docker и Docker Compose (пункт 1 гайда).
Сохраните и скопируйте архив в /srv и распакуйте:
Код:
cd /srv
sudo tar -czvf ~/l2docker-backup.tar.gz l2docker/
sudo tar -xzvf l2docker-backup.tar.gz -C /srv/
Зайдите в папку и запусти:
Код:
cd /srv/l2docker
DOCKER_CREDS_STORE="" docker-compose up -d
Экспорт базы (создаст файл interlude_dump.sql в домашней папке):
Код:
docker exec l2-db mysqldump -u root -pStrongRootPass123 interlude > ~/interlude_dump.sql
Этот файл можно будет потом импортировать в чистую базу командой:
Код:
docker exec -i l2-db mysql -u root -pStrongRootPass123 interlude < interlude_dump.sql
Удаление копии сервера:
Код:
rm ~/l2docker-backup.tar.gz
Все изменения конфигурации (рейты, дроп, опции) вносятся в привычные .properties файлы внутри authserver/config/ и gameserver/config/,
после чего требуется перезапуск соответствующего контейнера.