- گیت ورود 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
72 lines
4.2 KiB
Bash
72 lines
4.2 KiB
Bash
# کپی کنید: cp .env.example .env — و همه مقادیر change-me را عوض کنید.
|
|
# راه سادهتر: bash scripts/gen-env.sh — همهٔ رمزها را تصادفی و قوی میسازد.
|
|
# docker compose بهطور خودکار این فایل را میخواند؛ بدون آن استک بالا نمیآید.
|
|
|
|
# --- رمزهای اصلی (اجباری) ---
|
|
# تولید کلید تصادفی: python -c "import secrets; print(secrets.token_urlsafe(48))"
|
|
SECRET_KEY=change-me-to-a-long-random-string
|
|
POSTGRES_PASSWORD=change-me-db-password
|
|
MINIO_ROOT_USER=aramesh
|
|
MINIO_ROOT_PASSWORD=change-me-minio-password
|
|
ADMIN_USERNAME=admin
|
|
ADMIN_PASSWORD=change-me-admin-password
|
|
|
|
# --- اختیاری ---
|
|
# پورت ورود Traefik در توسعه (پیشفرض 5173)
|
|
TRAEFIK_HTTP_PORT=5173
|
|
# نشانی عمومی سایت برای sitemap و آدرس مطلق OG — در تولید مثل https://aramesh.example
|
|
# در تولید این مقدار هم پایهٔ پروب بیروننگر مانیتورینگ است.
|
|
SITE_URL=
|
|
# آدرسهای مجاز CORS (لیست JSON) — پیشفرض فقط لوکالهاست
|
|
# CORS_ORIGINS=["http://localhost:5173"]
|
|
|
|
# --- بیلد فرانتاند (در زمان npm run build روی هاست خوانده میشود — stack.sh پاس میدهد) ---
|
|
# اگر API روی مبدأ دیگری است (مثل توسعه ویندوز با پورت 19001) تنظیم کنید؛ هممبدأ یعنی خالی
|
|
VITE_API_URL=
|
|
# اسکریپت ردیاب Umami — خالی یعنی آنالیتیکس خاموش؛ در تولید مثل:
|
|
# VITE_UMAMI_SRC=https://analytics.aramesh.example/script.js
|
|
VITE_UMAMI_SRC=
|
|
# شناسهٔ وبسایت از داشبورد Umami (اولین بار: وبسایت را در analytics.localhost بسازید)
|
|
VITE_UMAMI_WEBSITE_ID=
|
|
|
|
# --- چتبات (دستیار هوشمند) ---
|
|
# LLM سازگار با OpenAI — اجباری برای پاسخگویی چتبات؛ خالی یعنی سرویس بالا میآید اما پاسخ نمیدهد
|
|
LLM_BASE_URL=
|
|
LLM_API_KEY=
|
|
LLM_MODEL=openai/gpt-oss-120b
|
|
# توکن محافظت از POST /chat/reindex — خالی یعنی فقط از شبکه داخلی
|
|
CHAT_REINDEX_TOKEN=
|
|
|
|
# --- مانیتورینگ (docker-compose.monitoring.yml) ---
|
|
GRAFANA_ADMIN_USER=admin
|
|
GRAFANA_ADMIN_PASSWORD=change-me-grafana-password
|
|
# هشدارها به بله — توکن بات (همان شکل تلگرام؛ از BotFather بله) و شناسه چت/گروه
|
|
# شناسه چت: به بات یک پیام بدهید سپس:
|
|
# curl "https://tapi.bale.ai/bot<توکن>/getUpdates"
|
|
ALERT_BOT_TOKEN=
|
|
ALERT_CHAT_ID=0
|
|
|
|
# --- عملیات ---
|
|
# نگهداری پشتیبانهای شبانه (روز) — scripts/backup.sh
|
|
RETENTION_DAYS=14
|
|
# انتشار پشتیبان خارج از سرور (rclone remote مثل storage:aramesh-backups) — خالی یعنی خاموش
|
|
OFFSITE_RCLONE_REMOTE=
|
|
|
|
# --- فقط برای docker-compose.prod.yml (حالت تولید با TLS) ---
|
|
# DOMAIN=aramesh.example
|
|
# ACME_EMAIL=admin@aramesh.example
|
|
# دامنه دوم (در صورت وجود) — مسیرها و گواهی TLS برای هر دو صادر میشود
|
|
# DOMAIN_ALIAS=aramesh.example.ir
|
|
|
|
# --- پیشنمایش خصوصی و انتشار (scripts/preview-mode.sh) ---
|
|
# «on» یعنی سایت آنلاین است اما پشت گیت ورود و بدون ایندکس؛ «off» یعنی انتشار عمومی.
|
|
# این مقادیر را دستی ویرایش نکنید — اسکریپت preview-mode.sh هماهنگشان میکند:
|
|
# bash scripts/preview-mode.sh on|off|status → bash scripts/stack.sh deploy-prod
|
|
# PREVIEW_MODE=on
|
|
# هش htpasswd کاربر مشترک پیشنمایش — اولین «on» خودش میسازد
|
|
# PREVIEW_AUTH_USERS=preview:$apr1$...
|
|
# فهرست میانافزارهای فعال؛ «on» پرش میکند و «off» خالیش میکند
|
|
# PREVIEW_MIDDLEWARES=preview-auth@docker,preview-noindex@docker
|
|
# در انتشار، دامنه دوم را به اصلی ریدایرکت میکند تا محتوای تکراری ساخته نشود
|
|
# ALIAS_REDIRECT_MIDDLEWARES=to-primary@docker
|