#!/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()"