fix(scripts): جلوگیری از تولید راز خالی و اجرای اسکریپت پیش‌نمایش با python3

- gen-env.sh: rand با دو آرگومان صدا زده می‌شد ولی فقط $1 را می‌خواند؛
  openssl rand -hex بدون تعداد بایت خروجی خالی و کد ۰ می‌دهد، پس fallback
  هرگز اجرا نمی‌شد و .env با رازهای خالی ساخته می‌شد. حالا تعداد بایت
  رعایت می‌شود و اگر مقداری خالی بماند، اسکریپت با خطا متوقف می‌شود.
- preview-mode.sh: python روی اوبونتو ۲۴.۰۴ وجود ندارد (فقط python3).
This commit is contained in:
aramesh-site deploy
2026-09-26 21:43:59 +00:00
parent 846682ac4a
commit 8600d2d4a3
2 changed files with 9 additions and 3 deletions
+7 -1
View File
@@ -15,13 +15,19 @@ if [ -f .env ] && [ "${1:-}" != "--force" ]; then
exit 1 exit 1
fi fi
rand() { openssl rand -"$1" 2>/dev/null || head -c 64 /dev/urandom | od -An -tx1 | tr -d ' \n'; } 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)" SECRET_KEY="$(rand hex 48)"
POSTGRES_PASSWORD="$(rand hex 16)" POSTGRES_PASSWORD="$(rand hex 16)"
MINIO_ROOT_PASSWORD="$(rand hex 16)" MINIO_ROOT_PASSWORD="$(rand hex 16)"
ADMIN_PASSWORD="$(rand hex 12)" 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 cat > .env <<EOF
# تولیدشده با scripts/gen-env.sh — این فایل هرگز به گیت نمی‌رود. # تولیدشده با scripts/gen-env.sh — این فایل هرگز به گیت نمی‌رود.
# پیش از انتشار واقعی، ADMIN_PASSWORD را به مقداری که به یاد می‌سپارید اما قوی است تغییر دهید: # پیش از انتشار واقعی، ADMIN_PASSWORD را به مقداری که به یاد می‌سپارید اما قوی است تغییر دهید:
+2 -2
View File
@@ -32,7 +32,7 @@ env_set() {
local key="$1" value="$2" local key="$1" value="$2"
if grep -q "^${key}=" "$ENV_FILE"; then if grep -q "^${key}=" "$ENV_FILE"; then
# جداکننده | تا کاراکترهای ویژه مقدار (مثل / و $) مشکلی نسازند # جداکننده | تا کاراکترهای ویژه مقدار (مثل / و $) مشکلی نسازند
python - "$ENV_FILE" "$key" "$value" <<'PY' python3 - "$ENV_FILE" "$key" "$value" <<'PY'
import io, sys import io, sys
path, key, value = sys.argv[1], sys.argv[2], sys.argv[3] path, key, value = sys.argv[1], sys.argv[2], sys.argv[3]
lines = io.open(path, encoding="utf-8").read().split("\n") lines = io.open(path, encoding="utf-8").read().split("\n")
@@ -57,7 +57,7 @@ make_htpasswd() {
# رمز تصادفی خوانا (بدون نویسه‌های گیج‌کننده) # رمز تصادفی خوانا (بدون نویسه‌های گیج‌کننده)
random_password() { random_password() {
python - <<'PY' python3 - <<'PY'
import secrets, string import secrets, string
alphabet = string.ascii_letters + string.digits alphabet = string.ascii_letters + string.digits
print("".join(secrets.choice(alphabet) for _ in range(16))) print("".join(secrets.choice(alphabet) for _ in range(16)))