Files
khatibi/entrypoint.sh
T
2026-06-23 23:54:42 +03:30

45 lines
1.7 KiB
Bash

#!/bin/sh
# ۱. متوقف کردن آنی کل فرآیند کانتینر در صورت بروز خطا در هر لایه
set -e
echo "==> [1/4] Collecting Static Files..."
python manage.py collectstatic --noinput --clear
echo "==> [2/4] Running Database Migrations..."
python manage.py migrate --noinput
echo "==> [3/4] Optimizing SQLite Storage (WAL & Synchronous)..."
# استفاده از بلاک EOF پایتون برای خوانایی، ایزولاسیون خطا و ثبت سیستماتیک لاگ‌ها
python << 'EOF'
import sqlite3
import sys
db_path = '/app/sqlite/db.sqlite3'
try:
conn = sqlite3.connect(db_path, timeout=30)
cursor = conn.cursor()
# فعال‌سازی و تایید صحت حالت WAL
cursor.execute('PRAGMA journal_mode=WAL;')
journal_mode = cursor.fetchone()[0]
cursor.execute('PRAGMA synchronous=FULL;')
cursor.execute('PRAGMA synchronous;')
sync_mode = cursor.fetchone()[0]
conn.close()
print(f"SUCCESS: Infrastructure Database Configured -> Journal: {journal_mode.upper()} | Sync: {sync_mode}")
except sqlite3.OperationalError as e:
print(f"CRITICAL: Database is locked or inaccessible: {str(e)}", file=sys.stderr)
sys.exit(1) # بازگرداندن وضعیت خطا به داکر برای جلوگیری از بالا آمدن وب‌سرور معیوب
except Exception as e:
print(f"CRITICAL: Failed to apply enterprise database optimization: {str(e)}", file=sys.stderr)
sys.exit(1)
EOF
echo "==> [4/4] Starting Gunicorn Web Server..."
# جایگزین کردن پروسس PID 1 با Gunicorn برای مدیریت اصولی سیگنال‌های توقف داکر (Graceful Shutdown)
exec gunicorn --bind 0.0.0.0:8000 khatibi.wsgi:application