# 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": [":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 act_runner daemon ``` ### 2.2. Добавить Secrets в Gitea В репозитории: `Settings → Secrets → Add secret` | Secret | Значение | |--------|----------| | `REGISTRY_ADDR` | `: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 (`:5000/barotrauma-server:latest`) 3. По SSH подключается к серверу 4. Останавливает старый контейнер 5. Запускает новый контейнер с пробросом порта `27015` ### 3.3. Проверка сервера ```bash # На сервере: docker logs -f barotrauma # Или через Steam, подключившись к :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 :5000/barotrauma-server:latest # Ручное обновление # На ПК: python3 scripts/autogen_config.py # Обновить config_player.xml docker compose up --build # Локальный тест ```