پیشنمایش خصوصی دو بار احراز هویت میخواست (Basic Auth لبه + ورود خود پنل) و
هر origin (www/apex/.ir) هم پرسش جداگانهای داشت؛ نتیجه سردرگمی تیم.
حالا روترهای /admin و /api میدلور preview-auth ندارند (noindex میماند) و
پنل با همان ورود خودش کار میکند؛ صفحات عمومی همچنان خصوصیاند.
docker compose مقادیر .env را خودش تفسیر میکند؛ هش htpasswd شامل $apr1$...
است و بدون کوتیشن، $apr1 و بخشهای بعدی بهعنوان متغیر خالی جایگزین میشدند
(برچسب تبدیل به preview:/OBoRS/... میشد) و پیشنمایش خصوصی هرگز رمز را
نمیپذیرفت. حالا env_set مقدارهای دارای $ را تککوتیشن میگذارد و env_get
کوتیشن را برمیدارد.
- gen-env.sh: rand با دو آرگومان صدا زده میشد ولی فقط $1 را میخواند؛
openssl rand -hex بدون تعداد بایت خروجی خالی و کد ۰ میدهد، پس fallback
هرگز اجرا نمیشد و .env با رازهای خالی ساخته میشد. حالا تعداد بایت
رعایت میشود و اگر مقداری خالی بماند، اسکریپت با خطا متوقف میشود.
- preview-mode.sh: python روی اوبونتو ۲۴.۰۴ وجود ندارد (فقط python3).
- گیت ورود Traefik (Basic Auth) روی همه مسیرها: سایت، API، تصاویر و چت — بدون رمز فقط ۴۰۱
- لایه دوم noindex: هدر X-Robots-Tag روی همه پاسخها + robots.txt مسدودکننده + نقشه سایت خالی
- اسکریپت scripts/preview-mode.sh on|off|status — ساخت خودکار نام کاربری/رمز و هماهنگکردن .env
- دو دامنه (DOMAIN + DOMAIN_ALIAS) با گواهی TLS و ریدایرکت ۳۰۱ دامنه دوم به اصلی در زمان انتشار
- اسکیمای FAQPage در پوسته سئوی سمت سرور (فارسی و انگلیسی) برای خزندههای بدون جاوااسکریپت
- مستندسازی جریان پیشنمایش و چکلیست انتشار در README و .env.example