f06cc48763
- auth/guard: добавить CSRF-проверку Origin/Referer для cookie-мутаций, исправить инвертированную логику admin_guard (пускал всех, блокировал админов), перевести admin_guard на from_fn_with_state - auth/service: timing-safe сравнение HMAC через verify_slice вместо != по hex; криптостойкий Seed через Alphanumeric (был цифровой 0-9) - billing: confirm_payment проверяет owner (caller_id == invoice.user_id); активация триала только для Telegram-аккаунтов (Sybil-защита); реализована reconcile_pending_payments — сверка blockchain->pending-инвойсы - billing/providers: get_recent_transactions перенесён в трейт PaymentProvider - nodes/service: unwrap() -> map_err по всему SSH-пути; убран TcpStream import - docker: multi-stage build с cargo-chef, non-root user, healthcheck; prod-compose добавляет one-shot migrate-сервис, убирает проброс порта БД - deploy.yml: параметр image_tag, set -e, pull всего стека вместо только app - users/service: обработка NO_TICKETS / NO_USER из БД вместо catch-all Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
45 lines
1.6 KiB
YAML
45 lines
1.6 KiB
YAML
name: Deploy to VPS (Manual)
|
|
|
|
# Деплой запускается ТОЛЬКО вручную из вкладки Actions ("Run workflow").
|
|
# Образ к этому моменту уже собран и лежит в GHCR (workflow "Build & Push Image").
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
image_tag:
|
|
description: "Тег образа в GHCR для выката"
|
|
required: true
|
|
default: "latest"
|
|
|
|
jobs:
|
|
deploy:
|
|
name: Pull & restart on VPS
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- name: Remote deploy via SSH
|
|
uses: appleboy/ssh-action@v1
|
|
with:
|
|
host: ${{ secrets.VPS_IP }}
|
|
username: root
|
|
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
envs: GHCR_TOKEN,IMAGE
|
|
script: |
|
|
set -e
|
|
cd /root/netrunner-core
|
|
|
|
export IMAGE="ghcr.io/${{ github.repository_owner }}/netrunner-control-plane:${{ github.event.inputs.image_tag }}"
|
|
echo "🚀 Deploying ${IMAGE}"
|
|
|
|
echo "${GHCR_TOKEN}" | docker login ghcr.io -u ${{ github.repository_owner }} --password-stdin
|
|
|
|
# Тянем свежий образ, прогоняем миграции (one-shot) и поднимаем сервисы.
|
|
docker compose -f docker-compose.prod.yml pull
|
|
docker compose -f docker-compose.prod.yml up -d --remove-orphans
|
|
|
|
# Чистим старые слои.
|
|
docker image prune -f
|
|
|
|
echo "✅ Uplink synchronized."
|
|
env:
|
|
GHCR_TOKEN: ${{ secrets.GHCR_TOKEN }}
|
|
IMAGE: ghcr.io/${{ github.repository_owner }}/netrunner-control-plane:${{ github.event.inputs.image_tag }}
|