168 lines
5.3 KiB
Markdown
168 lines
5.3 KiB
Markdown
# CI/CD для Barotrauma Dedicated Server
|
||
|
||
## Архитектура
|
||
|
||
```
|
||
ПК (разработка):
|
||
Barotrauma + моды → autogen_config.py → git commit → push в release
|
||
|
||
Gitea Actions (CI):
|
||
Триггер: push в release → docker build → push в локальный registry → SSH деплой
|
||
|
||
Сервер Ubuntu 24.04:
|
||
Docker → docker run barotrauma-server → порт 27015 UDP/TCP
|
||
```
|
||
|
||
## 1. Подготовка сервера (Ubuntu 24.04)
|
||
|
||
### 1.1. Установка Docker
|
||
|
||
```bash
|
||
curl -fsSL https://get.docker.com | sh
|
||
sudo usermod -aG docker $USER
|
||
# Выйти и зайти заново (или newgrp docker)
|
||
```
|
||
|
||
### 1.2. Запуск локального Docker registry
|
||
|
||
```bash
|
||
docker run -d --restart always -p 5000:5000 --name registry registry:2
|
||
```
|
||
|
||
### 1.3. Настройка insecure registry
|
||
|
||
Создать/редактировать `/etc/docker/daemon.json`:
|
||
|
||
```json
|
||
{
|
||
"insecure-registries": ["<IP_СЕРВЕРА>:5000"]
|
||
}
|
||
```
|
||
|
||
Перезапустить Docker:
|
||
|
||
```bash
|
||
sudo systemctl restart docker
|
||
```
|
||
|
||
### 1.4. Добавление SSH ключа для CI
|
||
|
||
Сгенерировать ключ (если нет):
|
||
|
||
```bash
|
||
ssh-keygen -t ed25519 -f ~/.ssh/ci_deploy -N ""
|
||
cat ~/.ssh/ci_deploy.pub >> ~/.ssh/authorized_keys
|
||
chmod 600 ~/.ssh/authorized_keys
|
||
```
|
||
|
||
Приватный ключ (`~/.ssh/ci_deploy`) понадобится в Gitea Secrets.
|
||
|
||
## 2. Настройка Gitea Actions
|
||
|
||
### 2.1. Включить Actions в Gitea
|
||
|
||
`Site Administration → Actions → Enable Actions`
|
||
|
||
Убедиться, что есть Gitea Runner. Если нет — установить:
|
||
|
||
```bash
|
||
# На сервере или отдельной машине:
|
||
sudo wget -O /usr/local/bin/act_runner https://gitea.com/gitea/act_runner/releases/latest/download/act_runner-linux-amd64
|
||
sudo chmod +x /usr/local/bin/act_runner
|
||
act_runner register --instance https://<ВАШ_GITEA> --token <TOKEN>
|
||
act_runner daemon
|
||
```
|
||
|
||
### 2.2. Добавить Secrets в Gitea
|
||
|
||
В репозитории: `Settings → Secrets → Add secret`
|
||
|
||
| Secret | Значение |
|
||
|--------|----------|
|
||
| `REGISTRY_ADDR` | `<IP_СЕРВЕРА>:5000` (например `192.168.1.100:5000`) |
|
||
| `SERVER_HOST` | IP-адрес сервера |
|
||
| `SERVER_USER` | Пользователь для SSH (обычно `root` или ваш user) |
|
||
| `SSH_KEY` | **Приватный** ключ из `~/.ssh/ci_deploy` |
|
||
|
||
## 3. Рабочий процесс
|
||
|
||
### 3.1. На ПК: подготовка сборки
|
||
|
||
```bash
|
||
# 1. Скопировать моды из Steam Workshop в LocalMods/:
|
||
# Каждый мод — отдельная папка, внутри filelist.xml
|
||
# Пример: LocalMods/MyMod/filelist.xml
|
||
|
||
# 2. Сгенерировать конфиг:
|
||
python3 scripts/autogen_config.py
|
||
# → Будет создан config_player.xml с путями ко всем модам
|
||
|
||
# 3. (Опционально) Проверить локально:
|
||
# docker compose up --build
|
||
|
||
# 4. Закоммитить и запушить:
|
||
git add -A
|
||
git commit -m "feat: update mods"
|
||
git push origin release
|
||
```
|
||
|
||
### 3.2. CI: автоматический деплой
|
||
|
||
После push в `release` Gitea Actions автоматически:
|
||
|
||
1. Собирает Docker образ (`Dockerfile`)
|
||
2. Пушит образ в локальный registry (`<SERVER>:5000/barotrauma-server:latest`)
|
||
3. По SSH подключается к серверу
|
||
4. Останавливает старый контейнер
|
||
5. Запускает новый контейнер с пробросом порта `27015`
|
||
|
||
### 3.3. Проверка сервера
|
||
|
||
```bash
|
||
# На сервере:
|
||
docker logs -f barotrauma
|
||
# Или через Steam, подключившись к <IP_СЕРВЕРА>:27015
|
||
```
|
||
|
||
## 4. Структура файлов
|
||
|
||
```
|
||
BarotraumaMod/
|
||
├── scripts/
|
||
│ └── autogen_config.py # Скрипт генерации config_player.xml
|
||
├── .gitea/workflows/
|
||
│ └── deploy.yml # Gitea Actions workflow
|
||
├── Dockerfile # Сборка Docker образа
|
||
├── docker-compose.yml # Локальное тестирование
|
||
├── config_player.xml # Конфиг (генерируется autogen_config.py)
|
||
├── LocalMods/ # Моды (каждый мод в своей папке)
|
||
│ ├── LuaCsForBarotrauma/
|
||
│ │ └── filelist.xml
|
||
│ ├── Mod1/
|
||
│ │ └── filelist.xml
|
||
│ └── ...
|
||
└── ... # Остальные файлы сервера
|
||
```
|
||
|
||
## 5. Порты
|
||
|
||
| Порт | Протокол | Назначение |
|
||
|------|----------|-----------|
|
||
| 27015 | UDP | Основной игровой трафик Barotrauma |
|
||
| 27015 | TCP | Steam-подключения |
|
||
| 5000 | TCP | Локальный Docker registry |
|
||
|
||
## 6. Полезные команды
|
||
|
||
```bash
|
||
# На сервере:
|
||
docker logs barotrauma # Логи сервера
|
||
docker restart barotrauma # Перезапуск
|
||
docker stop barotrauma && docker rm barotrauma # Удаление
|
||
docker pull <IP>:5000/barotrauma-server:latest # Ручное обновление
|
||
|
||
# На ПК:
|
||
python3 scripts/autogen_config.py # Обновить config_player.xml
|
||
docker compose up --build # Локальный тест
|
||
```
|