Переезд с ghcr.io на встроенный Container Registry Gitea
Build & Push Image / Build and push to Gitea Registry (push) Failing after 14s
Build & Push Image / Build and push Caddy (Cloudflare DNS) image (push) Failing after 13s
CI / fmt + clippy + test (push) Has been cancelled

CI (build/deploy) и рантайм самого бэкенда (провижининг новых нод через
NodeService::provision_node_via_ssh — раньше читал GHCR_TOKEN, теперь
GITEA_REGISTRY_TOKEN) теперь используют gitea.netrunner-vpn.com вместо
ghcr.io. .github/workflows остались нетронутыми — та копия для настоящего
GitHub CI, там ghcr.io уместен и дальше (свой GITHUB_TOKEN, не наш секрет).
This commit is contained in:
2026-07-10 20:44:03 +07:00
parent 51788f73ee
commit c617c05233
7 changed files with 54 additions and 39 deletions
+22 -12
View File
@@ -1,5 +1,6 @@
# Копия .github/workflows/deploy.yml для Gitea Actions. secrets.GHCR_TOKEN
# здесь уже был настоящим PAT (не автотокеном), менять не пришлось.
# Копия .github/workflows/deploy.yml для Gitea Actions. Образы тянутся из
# встроенного Container Registry самой Gitea (gitea.netrunner-vpn.com), не
# ghcr.io — secrets.GITEA_REGISTRY_TOKEN, не GHCR_TOKEN/GITHUB_TOKEN.
# Триггер workflow_run (авто-деплой после успешной сборки) поддерживается не
# во всех версиях Gitea Actions — если deploy-dev не срабатывает автоматически
# после build, проверить версию Gitea или временно дергать деплой вручную
@@ -22,7 +23,7 @@ on:
workflow_dispatch:
inputs:
image_tag:
description: "Тег образа в GHCR для прод-деплоя"
description: "Тег образа в Gitea Registry для прод-деплоя"
required: true
default: "latest"
@@ -37,8 +38,8 @@ jobs:
ref: ${{ github.event.workflow_run.head_sha }}
# Копируем compose-файл + Caddyfile (примонтированный конфиг, не образ —
# сам Caddy-образ, как и образ бэкенда, дев-сервер тянет из GHCR, собран
# в build.yml::build-caddy. Собирать xcaddy прямо на VPS один раз уже не
# сам Caddy-образ, как и образ бэкенда, дев-сервер тянет из Gitea Registry,
# собран в build.yml::build-caddy. Собирать xcaddy прямо на VPS один раз уже не
# уложилось в таймаут SSH-деплоя и уронило весь прогон).
- name: Sync compose file to Dev VPS
uses: appleboy/scp-action@v0.1.7
@@ -56,7 +57,7 @@ jobs:
host: ${{ vars.DEV_VPS_IP }}
username: root
key: ${{ secrets.DEV_SSH_PRIVATE_KEY }}
envs: "DB_PASSWORD,CF_API_TOKEN,JWT_SECRET,ARGON_SALT,TON_MASTER_WALLET,PROXY_INTERNAL_SECRET,CRYPTOBOT_API_TOKEN,TELOXIDE_TOKEN,BOT_USERNAME"
envs: "DB_PASSWORD,CF_API_TOKEN,JWT_SECRET,ARGON_SALT,TON_MASTER_WALLET,PROXY_INTERNAL_SECRET,CRYPTOBOT_API_TOKEN,TELOXIDE_TOKEN,BOT_USERNAME,GITEA_REGISTRY_TOKEN"
script: |
set -e
cd /root/netrunner-core
@@ -72,6 +73,10 @@ jobs:
ARGON_SALT=${ARGON_SALT}
TON_MASTER_WALLET=${TON_MASTER_WALLET}
PROXY_INTERNAL_SECRET=${PROXY_INTERNAL_SECRET}
# Нужен самому бэкенду в рантайме, не только CI — см.
# NodeService::provision_node_via_ssh (шлёт этот же токен на новую
# ноду, чтобы она тоже могла тянуть образ с gitea.netrunner-vpn.com).
GITEA_REGISTRY_TOKEN=${GITEA_REGISTRY_TOKEN}
CRYPTOBOT_API_TOKEN=${CRYPTOBOT_API_TOKEN}
CRYPTOBOT_TESTNET=true
BOT_ENABLED=true
@@ -87,11 +92,11 @@ jobs:
EOF
chmod 600 .env
export IMAGE="ghcr.io/nineap/netrunner-control-plane:latest"
export CADDY_IMAGE="ghcr.io/nineap/netrunner-caddy-cloudflare:latest"
export IMAGE="gitea.netrunner-vpn.com/nineap/netrunner-control-plane:latest"
export CADDY_IMAGE="gitea.netrunner-vpn.com/nineap/netrunner-caddy-cloudflare:latest"
echo "🚀 Deploying ${IMAGE} to DEV"
echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ github.repository_owner }} --password-stdin
echo "${{ secrets.GITEA_REGISTRY_TOKEN }}" | docker login gitea.netrunner-vpn.com -u ${{ github.actor }} --password-stdin
docker compose -f docker-compose.dev-remote.yml pull
docker compose -f docker-compose.dev-remote.yml up -d --remove-orphans
@@ -109,6 +114,7 @@ jobs:
CRYPTOBOT_API_TOKEN: ${{ secrets.DEV_CRYPTOBOT_API_TOKEN }}
TELOXIDE_TOKEN: ${{ secrets.DEV_TELOXIDE_TOKEN }}
BOT_USERNAME: ${{ vars.DEV_BOT_USERNAME }}
GITEA_REGISTRY_TOKEN: ${{ secrets.GITEA_REGISTRY_TOKEN }}
deploy-prod:
name: Pull & restart on Prod VPS
@@ -133,7 +139,7 @@ jobs:
host: ${{ vars.VPS_IP }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
envs: "DB_PASSWORD,DATA_VPS_IP,JWT_SECRET,ARGON_SALT,TON_MASTER_WALLET,GRAFANA_PUBLIC_URL,PROXY_INTERNAL_SECRET,CRYPTOBOT_API_TOKEN,TELOXIDE_TOKEN,BOT_USERNAME,WEB_APP_BASE_URL"
envs: "DB_PASSWORD,DATA_VPS_IP,JWT_SECRET,ARGON_SALT,TON_MASTER_WALLET,GRAFANA_PUBLIC_URL,PROXY_INTERNAL_SECRET,CRYPTOBOT_API_TOKEN,TELOXIDE_TOKEN,BOT_USERNAME,WEB_APP_BASE_URL,GITEA_REGISTRY_TOKEN"
script: |
set -e
cd /root/netrunner-core
@@ -156,6 +162,9 @@ jobs:
BOT_USERNAME=${BOT_USERNAME}
WEB_APP_BASE_URL=${WEB_APP_BASE_URL}
PROXY_INTERNAL_SECRET=${PROXY_INTERNAL_SECRET}
# Нужен самому бэкенду в рантайме, не только CI — см.
# NodeService::provision_node_via_ssh.
GITEA_REGISTRY_TOKEN=${GITEA_REGISTRY_TOKEN}
PORT=8080
SUBSCRIPTION_CHECK_INTERVAL=1800
NODE_HEALTH_CHECK_INTERVAL=60
@@ -168,10 +177,10 @@ jobs:
EOF
chmod 600 .env
export IMAGE="ghcr.io/nineap/netrunner-control-plane:${{ github.event.inputs.image_tag }}"
export IMAGE="gitea.netrunner-vpn.com/nineap/netrunner-control-plane:${{ github.event.inputs.image_tag }}"
echo "🚀 Deploying ${IMAGE}"
echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ github.repository_owner }} --password-stdin
echo "${{ secrets.GITEA_REGISTRY_TOKEN }}" | docker login gitea.netrunner-vpn.com -u ${{ github.actor }} --password-stdin
# Тянем свежий образ, прогоняем миграции (one-shot) и поднимаем сервисы.
docker compose -f docker-compose.prod.yml pull
@@ -193,3 +202,4 @@ jobs:
TELOXIDE_TOKEN: ${{ secrets.TELOXIDE_TOKEN }}
BOT_USERNAME: ${{ vars.BOT_USERNAME }}
WEB_APP_BASE_URL: ${{ vars.WEB_APP_BASE_URL }}
GITEA_REGISTRY_TOKEN: ${{ secrets.GITEA_REGISTRY_TOKEN }}