Files
netrunner-backend/deploy.sh
T
Kirill f06cc48763 security: fix CSRF/ownership/timing vulns; add billing reconciliation
- 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>
2026-06-29 17:58:24 +07:00

34 lines
1.4 KiB
Bash

#!/bin/bash
# Локальный фолбэк для сборки и публикации прод-образа.
# В обычном потоке это делает CI (.github/workflows/build.yml); скрипт нужен,
# только если надо собрать и запушить образ вручную со своей машины.
#
# Сам деплой на VPS запускается вручную из GitHub Actions
# ("Deploy to VPS (Manual)") — он тянет готовый образ из GHCR.
set -euo pipefail
# Безопасно подгружаем .env (корректно для значений с пробелами/юникодом).
if [ -f .env ]; then
set -a
# shellcheck disable=SC1091
. ./.env
set +a
else
echo "🚨 Ошибка: файл .env не найден!"
exit 1
fi
REGISTRY="ghcr.io"
IMAGE_NAME="${IMAGE:-${REGISTRY}/nineap/netrunner-control-plane:latest}"
echo "📦 Сборка Docker-образа (фронт и Rust собираются внутри образа)..."
docker build --pull -t "${IMAGE_NAME}" .
echo "🔐 Авторизация в GHCR..."
echo "${GHCR_TOKEN}" | docker login "${REGISTRY}" -u "nineap" --password-stdin
echo "📤 Публикация образа..."
docker push "${IMAGE_NAME}"
echo "🎉 Образ ${IMAGE_NAME} в реестре. Деплой: GitHub → Actions → Deploy to VPS (Manual)."