Files
aramesh-site deploy 8600d2d4a3 fix(scripts): جلوگیری از تولید راز خالی و اجرای اسکریپت پیش‌نمایش با python3
- gen-env.sh: rand با دو آرگومان صدا زده می‌شد ولی فقط $1 را می‌خواند؛
  openssl rand -hex بدون تعداد بایت خروجی خالی و کد ۰ می‌دهد، پس fallback
  هرگز اجرا نمی‌شد و .env با رازهای خالی ساخته می‌شد. حالا تعداد بایت
  رعایت می‌شود و اگر مقداری خالی بماند، اسکریپت با خطا متوقف می‌شود.
- preview-mode.sh: python روی اوبونتو ۲۴.۰۴ وجود ندارد (فقط python3).
2026-09-26 21:43:59 +00:00

65 lines
2.8 KiB
Bash

#!/usr/bin/env bash
# ساخت .env با مقادیر قوی تصادفی — پیش از اولین استقرار تولید یک‌بار اجرا کنید.
#
# bash scripts/gen-env.sh # فایل .env می‌سازد (موجود را بازنویسی نمی‌کند)
# bash scripts/gen-env.sh --force # .env موجود را بازنویسی می‌کند (احتیاط!)
#
# توجه: تغییر SECRET_KEY همه ادمین‌ها را از پنل خارج می‌کند؛ تغییر MINIO_ROOT_PASSWORD
# فقط با همگام‌سازی S3_SECRET_KEY بک‌اند اعتبار دارد.
set -euo pipefail
cd "$(dirname "$0")/.."
if [ -f .env ] && [ "${1:-}" != "--force" ]; then
echo "خطا: .env از قبل موجود است. برای بازنویسی: bash scripts/gen-env.sh --force" >&2
exit 1
fi
rand() { local bytes="${2:-32}"; openssl rand -hex "$bytes" 2>/dev/null || head -c "$bytes" /dev/urandom | od -An -tx1 | tr -d ' \n'; }
SECRET_KEY="$(rand hex 48)"
POSTGRES_PASSWORD="$(rand hex 16)"
MINIO_ROOT_PASSWORD="$(rand hex 16)"
ADMIN_PASSWORD="$(rand hex 12)"
# بدون این بررسی، شکست تولید تصادفی به .env خالی می‌رسد و بعداً با خطای مبهم
# ${VAR:?} در compose ظاهر می‌شود.
for v in SECRET_KEY POSTGRES_PASSWORD MINIO_ROOT_PASSWORD ADMIN_PASSWORD; do
[ -n "${!v}" ] || { echo "خطا: تولید مقدار تصادفی برای $v ناموفق بود" >&2; exit 1; }
done
cat > .env <<EOF
# تولیدشده با scripts/gen-env.sh — این فایل هرگز به گیت نمی‌رود.
# پیش از انتشار واقعی، ADMIN_PASSWORD را به مقداری که به یاد می‌سپارید اما قوی است تغییر دهید:
# docker compose exec backend python -c "from app.auth import hash_password; print(hash_password('رمز-جدید'))"
# سپس در پنل مدیریت از تغییر رمز (change-password) استفاده کنید.
SECRET_KEY=${SECRET_KEY}
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
MINIO_ROOT_USER=aramesh
MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
ADMIN_USERNAME=admin
ADMIN_PASSWORD=${ADMIN_PASSWORD}
TRAEFIK_HTTP_PORT=18081
SITE_URL=
# --- فقط تولید ---
# DOMAIN=example.com
# ACME_EMAIL=you@example.com
# --- تحلیل رفتار (Umami) ---
# VITE_API_URL=
# VITE_UMAMI_SRC=
# VITE_UMAMI_WEBSITE_ID=
# --- چت‌بات ---
# LLM_BASE_URL=
# LLM_API_KEY=
# LLM_MODEL=openai/gpt-oss-120b
# CHAT_REINDEX_TOKEN=
# --- مانیتورینگ ---
# GRAFANA_ADMIN_PASSWORD=
# ALERT_BOT_TOKEN=
# ALERT_CHAT_ID=
EOF
echo "✔ .env ساخته شد با مقادیر قوی تصادفی."
echo " ADMIN_PASSWORD فعلی: ${ADMIN_PASSWORD}"
echo " (آن را امن نگه دارید — پس از ورود به پنل، رمز را عوض کنید.)"