- docker-compose.yml: bind client/server ports to 127.0.0.1 only — the client container is the sole intended public entry point (it proxies /api/* to the server itself), a host-level nginx sits in front of it in production. Client__Origin now configurable via CLIENT_ORIGIN env var. - docs/DEPLOY.md: step-by-step for a fresh Linux target (Docker install, clone, .env secrets, nginx + certbot). - docs/CI-CD.md: runner registration for that same target machine, in "host" mode so the deploy step's `docker compose up -d` acts on the actual running stack.
3.4 KiB
CI/CD (Gitea Actions)
Пайплайн — .gitea/workflows/ci-cd.yml. На каждый push/PR: юнит-тесты Domain.Tests +
docker compose build (проверка, что весь стек собирается). На push в master — дополнительно
docker compose up -d (реальный редеплой).
Раннер выполняет джобы прямо на целевом сервере (ruvdstest.danamir.site, тот же, что описан
в docs/DEPLOY.md) — это и есть логика деплоя: шаг "Deploy" в workflow просто выполняет
docker compose up -d в том же каталоге /opt/ruvdstests, поверх уже поднятого стека.
Регистрация раннера
Выполняется один раз, на целевом сервере (там же, где разворачивали приложение), после того как
шаги 1–6 из docs/DEPLOY.md пройдены.
1. Убедиться, что Actions включены на вашем Gitea (Site Administration → пункт "Actions" должен
быть виден; если Gitea развёрнута в докере — переменная GITEA__actions__ENABLED=true в её
конфиге/окружении).
2. Получить токен регистрации: Site Administration → Actions → Runners → Create new runner (или в настройках именно этого репозитория: Settings → Actions → Runners).
3. Запустить раннер (заполните токен и запустите сами — секрет никому больше не передаётся):
docker volume create gitea-runner-data
docker run -d --name gitea-ci-runner --restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v gitea-runner-data:/data \
-e GITEA_INSTANCE_URL=https://git.danamir.su \
-e GITEA_RUNNER_REGISTRATION_TOKEN=ВАШ_ТОКЕН_СЮДА \
-e GITEA_RUNNER_NAME=ruvdstest-prod \
-e GITEA_RUNNER_LABELS=host:host \
gitea/runner:latest
host:host — раннер выполняет джобы напрямую в своём собственном контейнере (никаких вложенных
контейнеров на каждый джоб), у него смонтирован docker.sock хоста — поэтому docker compose
внутри джоба управляет реальными контейнерами на этой машине. Джоб сам ставит себе docker-cli и
.NET SDK через apk/dotnet-install.sh (см. workflow) — образ раннера намеренно голый, чтобы не
поддерживать отдельный кастомный образ.
Проверить, что раннер подключился: Site Administration → Actions → Runners — должен появиться
ruvdstest-prod со статусом Idle/Online.
Проверка
Сделайте любой коммит и запушьте в master — во вкладке Actions репозитория должен появиться
запуск, пройти тесты, сборку и деплой. После завершения https://ruvdstest.danamir.site уже
обслуживает обновлённую версию.