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>
34 lines
1.4 KiB
Bash
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)."
|