5.8 KiB
راهنمای دیپلوی روی Liara
این پروژه دو سرویسِ مستقل دارد که جدا دیپلوی میشوند:
- بکاند (API + اسکرپرها) → پلتفرم Docker لیارا (بهخاطر Playwright/Chromium) + دیسکِ پایدار برای SQLite و گزارشها.
- فرانتاند (TanStack Start) → پلتفرم Node لیارا، یا کلودفلر (تارگتِ پیشفرضِ بیلد).
- پنل ادمین (
:8001) → عمومی نکن؛ فقط لوکال/SSH/VPN.
قبل از شروع:
npm i -g @liara/cliوliara login.
گام ۱ — بکاند روی Liara (Docker)
آرتیفکتها از قبل ساخته شدهاند: backend/Dockerfile، backend/requirements.txt، backend/liara.json.
# ۱) ساخت برنامه (یکبار) — پلتفرم docker
liara app:create --name didvan-api --platform docker
# ۲) ساخت دیسکِ پایدار برای دیتابیس + گزارشها (روی /data مونت میشود)
liara disk:create --app didvan-api --name data --size 5 # گیگابایت دلخواه
# ۳) تنظیم متغیرهای محیطی (حتماً قبل از دیپلوی)
liara env:set --app didvan-api `
DB_PATH=/data/asianmetal.db `
REPORTS_DIR=/data/reports `
ADMIN_PASSWORD=یکرمزِخیلیقوی `
ASIANMETAL_TOKEN=توکنِتازهٔمنبع `
ALLOWED_ORIGINS=https://didvan.example.com `
COOKIE_SECURE=1 `
COOKIE_SAMESITE=none
# ۴) دیپلوی از داخل پوشهٔ backend
cd backend
liara deploy --app didvan-api --port 8000
نکتهها:
liara.jsonداخلِbackend/پلتفرم/پورت/دیسک را تعریف کرده؛ پسliara deployرا از همان پوشه بزن.- Chromium در خودِ image نصب میشود (
playwright install --with-deps chromium) → بیلدِ اول کند است. پلنِ حداقل ۱GB RAM. - بعد از دیپلوی، آدرسِ بکاند مثلاً میشود
https://didvan-api.liara.run.
آپلودِ آرشیو گزارشها (PDFها)
گزارشها (~۵۰۰۰ فایل) باید روی دیسک باشند. بعد از اولین دیپلوی، از پنل لیارا (بخش دیسک/فایلمنیجر) یا با ابزارِ لیارا فایلها را در /data/reports بریز، با همان ساختار <منبع> - <دسته>/<file>.pdf. اگر حجم زیاد است، گزینهٔ بهترْ آبجکتاستوریجِ S3ای لیارا است (نیازمندِ تغییر reports.py برای خواندن از S3).
گام ۲ — فرانتاند
فرانت با URLِ بکاند کار میکند؛ متغیرِ بیلد را ست کن:
VITE_API_BASE=https://didvan-api.liara.run
(در حالت dev این خالی میماند و از پراکسیِ Vite استفاده میشود — چیزی خراب نمیشود.)
پروژه برای لیارا تنظیم شده تا خروجیِ سرورِ Node بدهد (در vite.config.ts ⇠ nitro: { preset: "node-server" }). بیلد، .output/server/index.mjs میسازد و اسکریپتِ start (در package.json) آن را اجرا میکند. کانفیگ در liara.jsonِ ریشه (پلتفرم node، پورت 3000) است.
# از ریشهٔ پروژه
liara app:create --name didvan --platform node
liara env:set --app didvan VITE_API_BASE=https://didvan-api.liara.run
liara deploy --app didvan
لیارا هنگام دیپلوی npm install → npm run build → npm start (یعنی node .output/server/index.mjs) را اجرا میکند؛ سرورِ Nitro روی متغیرِ PORT که لیارا میدهد گوش میدهد. (تستشده: سرور بوت میشود و صفحات را سرو میکند.)
گام ۳ — کوکیِ ورود (مهم)
ورود با کوکیِ نشستِ httpOnly کار میکند. بسته به اینکه فرانت و بکاند همدامنهاند یا نه:
| حالت | تنظیمات بکاند |
|---|---|
| همدامنه (توصیهشده) | COOKIE_SAMESITE=lax ، COOKIE_SECURE=1 |
| دامنهٔ جدا (فرانت و API فرق دارند) | COOKIE_SAMESITE=none ، COOKIE_SECURE=1 ، و ALLOWED_ORIGINS=https://<دامنهٔ فرانت> |
فرانت همهٔ درخواستهای احراز را با credentials:"include" میزند (از قبل انجام شده). CORS هم با allow_credentials=True تنظیم شده.
چکلیستِ قبل از انتشار
- توکنِ قدیمیِ منبعِ داده را باطل کن (در git history لو رفته) و مقدارِ تازه را در
ASIANMETAL_TOKENبگذار. ADMIN_PASSWORDقوی (بدونش پنل ادمین بالا نمیآید).COOKIE_SECURE=1روی HTTPS.ALLOWED_ORIGINSدقیقاً دامنهٔ فرانت (نه*).DB_PATHوREPORTS_DIRروی دیسکِ/data.- پنل ادمین (
:8001) عمومی نشود. __pycache__از گیت پاک شود:git rm -r --cached backend/__pycache__.- (اختیاری ولی بهتر) مهاجرت SQLite → PostgreSQLِ مدیریتشدهٔ لیارا برای پایداری/مقیاس.
یادآوریِ معماری
- اسکرپرها داخلِ پروسهٔ بکاند (FastAPI lifespan) اجرا میشوند؛ تا پروسه بالا باشد کار میکنند. ریاستارت، کشِ حافظه را پاک میکند ولی از DB دوباره seed میشود.
- جزئیات کامل سیستم در
README.md.