Files
yggdrasil/server/run-prod.sh
T
2026-10-03 19:31:38 +02:00

42 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Uruchomienie produkcyjne (gunicorn) ze stabilnym SECRET_KEY.
#
# Kolejność źródeł klucza:
# 1. zmienna środowiskowa SECRET_KEY (ma pierwszeństwo),
# 2. plik .secret_key obok skryptu (tworzony raz przy pierwszym starcie),
# 3. w przeciwnym razie generowany jest losowy klucz i zapisywany do .secret_key.
#
# Stabilny klucz ma znaczenie: podpisuje ciasteczka sesji, więc jego zmiana
# przy każdym restarcie wylogowałaby wszystkich użytkowników.
set -euo pipefail
cd "$(dirname "$0")"
SECRET_FILE=".secret_key"
if [ -z "${SECRET_KEY:-}" ]; then
if [ -f "$SECRET_FILE" ]; then
SECRET_KEY="$(cat "$SECRET_FILE")"
else
SECRET_KEY="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
printf '%s' "$SECRET_KEY" > "$SECRET_FILE"
chmod 600 "$SECRET_FILE"
echo "Wygenerowano nowy SECRET_KEY, zapisano w $SECRET_FILE" >&2
fi
export SECRET_KEY
fi
# Migracje przed startem, żeby schemat był zgodny z kodem.
if [ -x ".venv/bin/alembic" ]; then
.venv/bin/alembic upgrade head
elif command -v alembic >/dev/null 2>&1; then
alembic upgrade head
fi
if [ -x ".venv/bin/gunicorn" ]; then
GUNICORN=".venv/bin/gunicorn"
else
GUNICORN="gunicorn"
fi
exec "$GUNICORN" -c gunicorn.conf.py "app:create_app()"