Files
netrunner-data/.gitea/workflows/deploy-observability.yml
T
nineap 414667062c
Deploy Observability / Deploy Observability Stack (push) Failing after 20s
Deploy / Deploy to Data VPS (push) Failing after 19s
Единый observability-стек: Prometheus + Loki + Grafana + Caddy auth-гейт
Отдельный от db+vaultwarden compose-файл (разный жизненный цикл, свой
deploy-workflow) — единственное место сбора для backend, лендинга и
каждой прокси-ноды, которые физически живут на других серверах.

Prometheus скрейпит наружу (сам ходит в /metrics на тех хостах — там
нужно только открыть порт метрик для IP этого VPS). Loki, наоборот,
принимает пуши логов ИЗВНЕ — порт 3100 публикуется наружу и обязательно
фильтруется firewall'ом по IP тех хостов.

Grafana не торчит в интернет напрямую (127.0.0.1-only) — единственный
вход через Caddy с forward_auth, гейтящим по cookie-сессии
netrunner-backend (GET /api/v1/admin/observability/check,
Owner/Moderator). 3 provisioned дашборда (backend/landing/прокси-ноды).

Список scrape-таргетов для прокси-нод (observability/targets/nodes.json)
генерится и заливается автоматически из netrunner-proxy при каждом
деплое нод — вручную ничего не поддерживается.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 23:22:11 +07:00

60 lines
2.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Deploy Observability
# Отдельный от deploy.yml workflow — Prometheus/Loki/Grafana не должны
# рестартовать вместе с Postgres/Vaultwarden (docker-compose.observability.yml
# вместо docker-compose.yml, разные жизненные циклы). Деплоится на тот же
# DATA_VPS_IP/DATA_SSH_PRIVATE_KEY, что и основной стек — тот же VPS.
#
# GRAFANA_PASSWORD — единственный настоящий секрет здесь, остальное (список
# таргетов, конфиги Loki/promtail/Grafana-datasources) — публичный код
# репозитория, не секреты.
on:
push:
branches: [main]
workflow_dispatch:
jobs:
deploy:
name: Deploy Observability Stack
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Sync compose file + observability configs to VPS
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ vars.DATA_VPS_IP }}
username: root
key: ${{ secrets.DATA_SSH_PRIVATE_KEY }}
source: "docker-compose.observability.yml,observability"
target: "/root/netrunner-data"
strip_components: 0
- name: Write .env and deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ vars.DATA_VPS_IP }}
username: root
key: ${{ secrets.DATA_SSH_PRIVATE_KEY }}
envs: "GRAFANA_PASSWORD"
script: |
set -e
cd /root/netrunner-data
# Свой .env.observability, НЕ общий .env (тот принадлежит
# deploy.yml/docker-compose.yml и перезаписывается им целиком на
# каждом своём прогоне — общий файл рассинхронизировал бы стеки).
cat > .env.observability <<EOF
GRAFANA_PASSWORD=${GRAFANA_PASSWORD}
EOF
chmod 600 .env.observability
docker compose --env-file .env.observability -f docker-compose.observability.yml pull
docker compose --env-file .env.observability -f docker-compose.observability.yml up -d --remove-orphans
docker image prune -f
echo "✅ netrunner-data observability stack synchronized."
echo "⚠️ Не забудьте: firewall на этом VPS должен пускать 3100 (Loki push) ТОЛЬКО с IP backend/landing/каждой прокси-ноды по мере их появления."
env:
GRAFANA_PASSWORD: ${{ secrets.GRAFANA_PASSWORD }}