docs: add webhook configuration instructions to CI_CD.md
This commit is contained in:
48
.drone.yml
48
.drone.yml
@@ -86,7 +86,36 @@ steps:
|
|||||||
- ${DRONE_COMMIT_SHA:0:7}
|
- ${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
|
kind: pipeline
|
||||||
type: ssh
|
type: ssh
|
||||||
name: deploy-production
|
name: deploy-production
|
||||||
@@ -100,6 +129,7 @@ trigger:
|
|||||||
depends_on:
|
depends_on:
|
||||||
- build-backend
|
- build-backend
|
||||||
- build-ping-helper
|
- build-ping-helper
|
||||||
|
- build-frontend
|
||||||
|
|
||||||
# Настройки подключения к вашему серверу
|
# Настройки подключения к вашему серверу
|
||||||
server:
|
server:
|
||||||
@@ -115,16 +145,10 @@ commands:
|
|||||||
- echo "1. Updating repository..."
|
- echo "1. Updating repository..."
|
||||||
- git pull origin main # Обновляем основной репозиторий
|
- git pull origin main # Обновляем основной репозиторий
|
||||||
- git submodule update --init --recursive # Обновляем все субмодули
|
- git submodule update --init --recursive # Обновляем все субмодули
|
||||||
- echo "2. Building frontend static files..."
|
- echo "2. Pulling new Docker images..."
|
||||||
# Запускаем одноразовый контейнер для сборки фронтенда
|
- docker-compose pull # Скачиваем свежесобранные образы (backend, frontend, ping-helper)
|
||||||
- docker run --rm -v $(pwd)/frontend:/app -v /app/node_modules -w /app node:18-alpine sh -c "npm install && npm run build"
|
- echo "3. Restarting services..."
|
||||||
# Перемещаем собранную статику в папку data/frontend, которую использует Caddy
|
- docker-compose up -d --remove-orphans # Перезапускаем все сервисы
|
||||||
- rm -rf ./data/frontend/*
|
- echo "4. Cleaning up old images..."
|
||||||
- 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..."
|
|
||||||
- docker image prune -f # Удаляем неиспользуемые образы
|
- docker image prune -f # Удаляем неиспользуемые образы
|
||||||
- echo "--- Deployment finished ---"
|
- echo "--- Deployment finished ---"
|
||||||
|
|||||||
25
Caddyfile
25
Caddyfile
@@ -1,20 +1,16 @@
|
|||||||
# Глобальный блок настроек
|
|
||||||
{
|
|
||||||
# Email для получения SSL-сертификатов от Let's Encrypt
|
|
||||||
acme_email mrixs@mrixs.me
|
|
||||||
}
|
|
||||||
|
|
||||||
# Основной блок для вашего домена
|
# Основной блок для вашего домена
|
||||||
mc.mrixs.me {
|
{$APP_DOMAIN} {
|
||||||
# Включаем сжатие для ускорения загрузки
|
# Включаем сжатие для ускорение загрузки
|
||||||
encode zstd gzip
|
encode zstd gzip
|
||||||
|
|
||||||
# --- Маршрутизация запросов ---
|
# --- Маршрутизация запросов ---
|
||||||
|
|
||||||
# 1. API бэкенда (Yggdrasil, Web, Admin)
|
# 1. API бэкенда (Yggdrasil, Web, Admin)
|
||||||
handle_path /api/* /authserver/* /sessionserver/* {
|
reverse_proxy /api/* backend:8080
|
||||||
reverse_proxy backend:8080
|
reverse_proxy /authserver/* backend:8080
|
||||||
}
|
reverse_proxy /sessionserver/* backend:8080
|
||||||
|
|
||||||
# 2. WebSocket для измерения пинга
|
# 2. WebSocket для измерения пинга
|
||||||
handle_path /ws/ping* {
|
handle_path /ws/ping* {
|
||||||
@@ -31,12 +27,9 @@ mc.mrixs.me {
|
|||||||
|
|
||||||
# 4. Раздача статики фронтенда (Vue.js SPA)
|
# 4. Раздача статики фронтенда (Vue.js SPA)
|
||||||
# Этот блок обрабатывает все остальные запросы
|
# Этот блок обрабатывает все остальные запросы
|
||||||
handle {
|
# 4. Раздача статики фронтенда (Vue.js SPA)
|
||||||
root * /srv/frontend
|
# Этот блок обрабатывает все остальные запросы (Nginx container)
|
||||||
# Если файл не найден, отдаем index.html (стандартное поведение для SPA)
|
reverse_proxy * frontend:80
|
||||||
try_files {path} /index.html
|
|
||||||
file_server
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- Заголовки безопасности (рекомендация из ТЗ) ---
|
# --- Заголовки безопасности (рекомендация из ТЗ) ---
|
||||||
header {
|
header {
|
||||||
|
|||||||
@@ -11,11 +11,20 @@ services:
|
|||||||
- "443:443/udp"
|
- "443:443/udp"
|
||||||
volumes:
|
volumes:
|
||||||
- ./Caddyfile:/etc/caddy/Caddyfile
|
- ./Caddyfile:/etc/caddy/Caddyfile
|
||||||
- ./data/frontend:/srv/frontend
|
|
||||||
- ./data/textures:/srv/files/textures
|
- ./data/textures:/srv/files/textures
|
||||||
- ./data/modpack_files:/srv/files/modpacks
|
- ./data/modpack_files:/srv/files/modpacks
|
||||||
- caddy_data:/data
|
- caddy_data:/data
|
||||||
- caddy_config:/config
|
- 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:
|
networks:
|
||||||
- platform-net
|
- platform-net
|
||||||
|
|
||||||
@@ -58,6 +67,7 @@ volumes:
|
|||||||
caddy_data:
|
caddy_data:
|
||||||
caddy_config:
|
caddy_config:
|
||||||
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
platform-net:
|
platform-net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|||||||
52
docs/CI_CD.md
Normal file
52
docs/CI_CD.md
Normal file
@@ -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`.
|
||||||
2
frontend
2
frontend
Submodule frontend updated: ede741df4f...e28d5f2658
Reference in New Issue
Block a user