From 072ab742311336a9de269834600aa162df88cc86 Mon Sep 17 00:00:00 2001 From: Vladimir Zagainov Date: Mon, 12 Jan 2026 16:47:54 +0300 Subject: [PATCH] docs: add webhook configuration instructions to CI_CD.md --- .drone.yml | 48 +++++++++++++++++++++++++++++++----------- Caddyfile | 25 ++++++++-------------- docker-compose.yml | 12 ++++++++++- docs/CI_CD.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++ frontend | 2 +- 5 files changed, 109 insertions(+), 30 deletions(-) create mode 100644 docs/CI_CD.md diff --git a/.drone.yml b/.drone.yml index 00fa5aa..2210491 100644 --- a/.drone.yml +++ b/.drone.yml @@ -86,7 +86,36 @@ steps: - ${DRONE_COMMIT_SHA:0:7} --- -# --- Пайплайн №3: Развертывание на продакшен-сервере --- +# --- Пайплайн №3: Сборка Docker-образа для frontend --- +kind: pipeline +type: docker +name: build-frontend + +clone: + depth: 0 + recursive: true + +trigger: + event: [push, pull_request] + path: + - frontend/** + +steps: + - name: build-and-publish-frontend + image: plugins/docker + settings: + repo: gitea.mrixs.me/minecraft-platform/frontend + registry: gitea.mrixs.me + dockerfile: frontend/Dockerfile + context: frontend + username: { from_secret: gitea_username } + password: { from_secret: gitea_password } + tags: + - latest + - ${DRONE_COMMIT_SHA:0:7} + +--- +# --- Пайплайн №4: Развертывание на продакшен-сервере --- kind: pipeline type: ssh name: deploy-production @@ -100,6 +129,7 @@ trigger: depends_on: - build-backend - build-ping-helper + - build-frontend # Настройки подключения к вашему серверу server: @@ -115,16 +145,10 @@ commands: - echo "1. Updating repository..." - git pull origin main # Обновляем основной репозиторий - git submodule update --init --recursive # Обновляем все субмодули - - echo "2. Building frontend static files..." - # Запускаем одноразовый контейнер для сборки фронтенда - - docker run --rm -v $(pwd)/frontend:/app -v /app/node_modules -w /app node:18-alpine sh -c "npm install && npm run build" - # Перемещаем собранную статику в папку data/frontend, которую использует Caddy - - rm -rf ./data/frontend/* - - mv ./frontend/dist/* ./data/frontend/ - - echo "3. Pulling new Docker images..." - - docker-compose pull # Скачиваем свежесобранные образы backend и ping-helper - - echo "4. Restarting services..." - - docker-compose up -d # Перезапускаем все сервисы в фоновом режиме - - echo "5. Cleaning up old images..." + - echo "2. Pulling new Docker images..." + - docker-compose pull # Скачиваем свежесобранные образы (backend, frontend, ping-helper) + - echo "3. Restarting services..." + - docker-compose up -d --remove-orphans # Перезапускаем все сервисы + - echo "4. Cleaning up old images..." - docker image prune -f # Удаляем неиспользуемые образы - echo "--- Deployment finished ---" diff --git a/Caddyfile b/Caddyfile index 24aba72..5359e62 100644 --- a/Caddyfile +++ b/Caddyfile @@ -1,20 +1,16 @@ -# Глобальный блок настроек -{ - # Email для получения SSL-сертификатов от Let's Encrypt - acme_email mrixs@mrixs.me -} + # Основной блок для вашего домена -mc.mrixs.me { - # Включаем сжатие для ускорения загрузки +{$APP_DOMAIN} { + # Включаем сжатие для ускорение загрузки encode zstd gzip # --- Маршрутизация запросов --- # 1. API бэкенда (Yggdrasil, Web, Admin) - handle_path /api/* /authserver/* /sessionserver/* { - reverse_proxy backend:8080 - } + reverse_proxy /api/* backend:8080 + reverse_proxy /authserver/* backend:8080 + reverse_proxy /sessionserver/* backend:8080 # 2. WebSocket для измерения пинга handle_path /ws/ping* { @@ -31,12 +27,9 @@ mc.mrixs.me { # 4. Раздача статики фронтенда (Vue.js SPA) # Этот блок обрабатывает все остальные запросы - handle { - root * /srv/frontend - # Если файл не найден, отдаем index.html (стандартное поведение для SPA) - try_files {path} /index.html - file_server - } + # 4. Раздача статики фронтенда (Vue.js SPA) + # Этот блок обрабатывает все остальные запросы (Nginx container) + reverse_proxy * frontend:80 # --- Заголовки безопасности (рекомендация из ТЗ) --- header { diff --git a/docker-compose.yml b/docker-compose.yml index 9eab7a7..1686a54 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,11 +11,20 @@ services: - "443:443/udp" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - - ./data/frontend:/srv/frontend - ./data/textures:/srv/files/textures - ./data/modpack_files:/srv/files/modpacks - caddy_data:/data - caddy_config:/config + depends_on: + - frontend + - backend + networks: + - platform-net + + frontend: + image: gitea.mrixs.me/minecraft-platform/frontend:latest + container_name: platform-frontend + restart: unless-stopped networks: - platform-net @@ -58,6 +67,7 @@ volumes: caddy_data: caddy_config: + networks: platform-net: driver: bridge diff --git a/docs/CI_CD.md b/docs/CI_CD.md new file mode 100644 index 0000000..bea5670 --- /dev/null +++ b/docs/CI_CD.md @@ -0,0 +1,52 @@ +# Настройка CI/CD (Drone CI) + +Проект настроен для автоматической сборки Docker-образов и их развертывания с помощью Drone CI. + +## Обзор пайплайна (.drone.yml) + +Конфигурация состоит из 4-х пайплайнов: + +1. **build-backend**: Собирает образ `backend`, тегирует его (latest + commit SHA) и пушит в Docker Registry. +2. **build-frontend**: Многоэтапная сборка (Node.js build -> Nginx image), пуш в Registry. +3. **build-ping-helper**: Сборка микросервиса `ping-helper`. +4. **deploy-production**: Запускается только при пуше в `main` после успешного завершения всех сборок. Подключается к серверу по SSH, обновляет код, скачивает новые образы и перезапускает контейнеры. + +## Настройка интеграции (Gitea + Drone) + +1. **Активация репозитория**: + * Зайдите в ваш Drone CI. + * Найдите репозиторий `minecraft-platform/platform` и нажмите "Activate". + +2. **Настройка секретов (Secrets)**: + В настройках репозитория в Drone добавьте следующие секреты: + + | Имя Секрета | Описание | + | :--- | :--- | + | `gitea_username` | Логин пользователя Gitea, от имени которого будут пушиться образы в Registry. | + | `gitea_password` | Пароль (или токен) этого пользователя. | + | `ssh_host` | IP адрес или домен вашего продакшен-сервера. | + | `ssh_user` | Имя пользователя на сервере (например, `root` или `ubuntu`). | + | `ssh_key` | **Приватный** SSH ключ для доступа к серверу (Private Key, который соответствует Public Key в `~/.ssh/authorized_keys` на сервере). | + +3. **Docker Registry**: + Убедитесь, что `gitea.mrixs.me` поддерживает Docker Registry и у пользователя есть права на запись в пакеты `minecraft-platform/backend`, `frontend`, `ping-helper`. + +4. **Настройка Вебхука (Webhooks)**: + Чтобы Drone автоматически запускал сборку при пуше (push): + * В Gitea перейдите в **Settings** (Настройки) репозитория -> **Webhooks**. + * Проверьте, есть ли там вебхук для Drone. Если нет, он должен был создаться автоматически при активации репозитория в Drone. + * Если вебхука нет, добавьте его вручную: + * **Target URL**: `https://drone.mrixs.me/hook` (адрес вашего Drone сервера) + * **HTTP Method**: `POST` + * **Content Type**: `application/json` + * **Trigger On**: `All Events` (или как минимум Push и Pull Request) + * Нажмите "Test Delivery", чтобы проверить связь. Обратите внимание на код ответа (должен быть 200 OK). + +## Процесс развертывания + +1. Сделайте изменения в коде. +2. Закоммитьте и запушьте в ветку `main`. +3. Drone автоматически: + * Соберет новые образы. + * Запушит их в Registry. + * Зайдет на сервер, сделает `docker-compose pull` и `docker-compose up -d`. diff --git a/frontend b/frontend index ede741d..e28d5f2 160000 --- a/frontend +++ b/frontend @@ -1 +1 @@ -Subproject commit ede741df4f058924540cf78709863ce8509b39c0 +Subproject commit e28d5f26582439d480a0d88d1a34cedb10976ca5