42 lines
1.3 KiB
Bash
42 lines
1.3 KiB
Bash
#!/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()"
|