مسیر مهاجرت ارزیابی رایگان
مبحث ۵ از ۶

نصب Dossier قدم‌به‌قدم Installing Dossier

از باز کردن ترمینال و نصب Docker تا اولین ورود به Dossier، برای مک، ویندوز و لینوکس.

منبع: Dossier wiki: Run locally with Docker Compose، Backups and restore، Upgrading، Troubleshootingحدود ۲۱ دقیقه مطالعه

یک کانتینر، به‌جای یک کامیون وسیله

فرض کن می‌خواهی یک آشپزخانه‌ی کامل را از یک شهر به شهر دیگر ببری. اگر وسیله‌ها را تک‌تک بار بزنی، یکی جا می‌ماند، یکی می‌شکند و یکی در خانه‌ی جدید جا نمی‌شود. ولی اگر همه‌چیز از قبل در یک کانتینر بسته‌بندی شده باشد، فقط کانتینر را می‌آوری و درش را باز می‌کنی.

Docker همین کار را با نرم‌افزار می‌کند. Dossier و همه‌ی چیزهایی که لازم دارد (پایگاه داده، کتابخانه‌ها، حتی مرورگری که PDF می‌سازد) در «کانتینر» بسته‌بندی شده‌اند. تو فقط Docker را نصب می‌کنی و کانتینر را روشن می‌کنی. لازم نیست بدانی داخلش چه خبر است.

این درس از صفر شروع می‌کند. اگر تا حالا ترمینال باز نکرده‌ای، نگران نباش؛ هر دستور را دقیقاً همان‌طور که نوشته شده تایپ یا کپی می‌کنی، و قبل از هر کدام می‌گوییم چه می‌کند و باید چه ببینی. حدود یک ساعت وقت کنار بگذار.

نقشه‌ی کار

روشی که در این درس دنبال می‌کنیم، همان روشی است که خود پروژه برای اجرا روی کامپیوتر شخصی پیشنهاد می‌کند: Docker Compose. با آن، برنامه و پایگاه داده‌اش با هم روشن و خاموش می‌شوند و به‌روزرسانی هم ساده است.

  1. آماده شدنبررسی حافظه، فضای دیسک و نوع پردازنده
  2. ترمینالیاد گرفتن باز کردن ترمینال و وارد کردن دستور
  3. Dockerنصب Docker و بررسی این‌که کار می‌کند
  4. پوشه و تنظیماتگرفتن فایل Compose و ساختن فایل .env با رمزهای تصادفی
  5. رمز عبورساختن هش رمز و گذاشتنش در .env
  6. روشن کردناجرای Dossier و باز کردنش در مرورگر
  7. نگهداریخاموش و روشن کردن، به‌روزرسانی، پشتیبان‌گیری، عیب‌یابی

قبل از شروع: چه چیزهایی لازم داری؟

  • حافظه (RAM): حدود ۲ گیگابایت حافظه‌ی آزاد، علاوه بر چیزی که سیستم‌عامل و برنامه‌های دیگرت مصرف می‌کنند. خود Docker هم حافظه می‌خواهد؛ سایت Docker برای مک حداقل ۴ گیگابایت و برای ویندوز ۸ گیگابایت رم کل را ذکر می‌کند.
  • فضای دیسک: حدود ۳ گیگابایت برای Dossier، به‌اضافه‌ی فضای خود Docker.
  • سیستم‌عامل: macOS، ویندوز ۱۰ یا ۱۱ (با WSL، که پایین‌تر توضیح می‌دهیم)، یا لینوکس.
  • پردازنده: Intel یا AMD بهترین حالت است. مک‌های Apple Silicon (M1، M2 و بعدی) هم کار می‌کنند، با یک قدم اضافه.
  • اینترنت: برای اولین بار حدود ۱٫۷ گیگابایت دانلود می‌شود. بعد از آن، برای کار روزمره با برنامه اینترنت لازم نیست، مگر برای سرویس‌های آنلاینی که خودت وصل کنی.

نوع پردازنده‌ی مک را این‌طور پیدا کن: از منوی سیب بالا سمت چپ، About This Mac را بزن. اگر جلوی Chip چیزی مثل Apple M2 نوشته شده، مک تو Apple Silicon است. اگر جلوی Processor کلمه‌ی Intel آمده، اینتل است.

یک یادآوری: Docker، گیت‌هاب و بعضی سرویس‌های دیگر ممکن است در بعضی کشورها یا برای بعضی حساب‌ها محدودیت داشته باشند. فقط طبق قوانین و شرایط خود سرویس از آن‌ها استفاده کن.

ترمینال چیست و چطور بازش کنم؟

ترمینال پنجره‌ای است که به‌جای کلیک کردن، به کامپیوتر دستور متنی می‌دهی. یک خط می‌نویسی، Enter می‌زنی، کامپیوتر انجامش می‌دهد و جواب را زیرش می‌نویسد. همین.

دستورهای این درس برای یک ترمینال «یونیکسی» نوشته شده‌اند: ترمینال مک، ترمینال لینوکس، یا WSL در ویندوز. این را صفحه‌های راهنمای خود Dossier می‌گویند.

مک: کلیدهای Cmd + Space را بزن تا جست‌وجوی Spotlight باز شود، بنویس Terminal و Enter بزن.

لینوکس (مثلاً اوبونتو): معمولاً Ctrl + Alt + T ترمینال را باز می‌کند. یا در فهرست برنامه‌ها دنبال Terminal بگرد.

ویندوز: دستورهای Dossier مستقیم در PowerShell اجرا نمی‌شوند. راهنمای پروژه می‌گوید روی ویندوز از WSL استفاده کن؛ یعنی یک لینوکس کوچک (معمولاً اوبونتو) که داخل خود ویندوز اجرا می‌شود. PowerShell را فقط یک بار، برای نصب WSL، لازم داری. قدم ۱ را ببین.

چند نکته که کار با ترمینال را راحت می‌کند:

  • کپی و paste: بهتر است دستورها را کپی کنی تا اشتباه تایپی پیش نیاید. در ترمینال مک paste با Cmd + V است؛ در ترمینال لینوکس معمولاً Ctrl + Shift + V؛ در پنجره‌ی اوبونتو روی ویندوز معمولاً کلیک راست یا Ctrl + Shift + V.
  • یک خط، یک Enter: در بلوک‌های دستور این درس، هر خط یک دستور است. خط‌ها را یکی‌یکی وارد کن و منتظر بمان تا قبلی تمام شود.
  • علامت ~: یعنی پوشه‌ی خانگی کاربر تو.
  • متوقف کردن: اگر دستوری در حال اجرا بود و می‌خواستی متوقفش کنی، Ctrl + C بزن (در مک هم همین Ctrl است، نه Cmd).

قدم‌به‌قدم

قدم ۱: نصب Docker

مک: از سایت رسمی Docker، Docker Desktop را دانلود کن. دقت کن نسخه‌ی درست را برداری: یک نسخه برای Apple Silicon است و یک نسخه برای Intel. فایل Docker.dmg را باز کن، آیکون Docker را به پوشه‌ی Applications بکش، بعد Docker را از Applications اجرا کن و قرارداد استفاده را بپذیر. وقتی آیکون نهنگ کوچک در نوار بالای صفحه ظاهر شد و دیگر در حال بارگذاری نبود، Docker آماده است.

اگر مکت Apple Silicon است، سایت Docker نصب Rosetta 2 را توصیه می‌کند (اختیاری است). این دستور نصبش می‌کند:

softwareupdate --install-rosetta

ویندوز: اول WSL را نصب کن. در منوی Start بنویس PowerShell، روی آن کلیک راست کن و Run as administrator را بزن. این دستور WSL را همراه با اوبونتو نصب می‌کند:

wsl --install

بعد کامپیوتر را ری‌استارت کن. حالا در منوی Start برنامه‌ی Ubuntu را باز کن. بار اول از تو یک نام کاربری و رمز برای همین لینوکس داخلی می‌خواهد (این رمز با رمز ویندوز و رمز Dossier فرق دارد؛ جایی یادداشتش کن). از این به بعد، همه‌ی دستورهای این درس را در همین پنجره‌ی Ubuntu وارد کن، نه در PowerShell.

سپس Docker Desktop برای ویندوز را از سایت Docker دانلود و نصب کن. اگر نصاب پرسید، WSL 2 را انتخاب کن. بعد از نصب، Docker Desktop را باز کن و در Settings → Resources → WSL Integration مطمئن شو اتصال به Ubuntu روشن است، و Apply بزن. اگر Docker نصب نشد یا خطای مجازی‌سازی داد، ممکن است لازم باشد «مجازی‌سازی سخت‌افزاری» در تنظیمات BIOS روشن باشد؛ سایت Docker این را جزو پیش‌نیازها آورده.

لینوکس: Docker Desktop لازم نیست؛ Docker Engine و افزونه‌ی Compose کافی است. راهنمای سرور اوبونتوی Dossier از اسکریپت نصب رسمی Docker استفاده می‌کند. این سه دستور به‌ترتیب اسکریپت را دانلود می‌کنند، اجرایش می‌کنند و به کاربر تو اجازه می‌دهند بدون sudo با Docker کار کند:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

موقع اجرای sudo رمز کاربری لینوکست را می‌خواهد. بعد از دستور آخر یک بار از حساب کاربری خارج شو و دوباره وارد شو تا تغییر اعمال شود. یادت باشد عضویت در گروه docker تقریباً به اندازه‌ی دسترسی مدیر سیستم قدرت دارد؛ فقط حساب خودت را اضافه کن.

قدم ۲: بررسی این‌که Docker کار می‌کند

یک ترمینال تازه باز کن (در ویندوز، پنجره‌ی Ubuntu) و این دو دستور را بزن. اولی نسخه‌ی Docker را نشان می‌دهد و دومی نسخه‌ی Compose را:

docker --version
docker compose version

اگر هر دو یک شماره‌ی نسخه چاپ کردند، عالی است. اگر نوشت command not found، یعنی Docker نصب نشده یا (در ویندوز) اتصال WSL روشن نیست. در مک و ویندوز مطمئن شو Docker Desktop باز است؛ تا وقتی باز نباشد، دستورهای Docker کار نمی‌کنند.

قدم ۳: ساختن پوشه و گرفتن فایل Compose

حالا خود Dossier. دستور اول یک پوشه به اسم dossier در پوشه‌ی خانگی‌ات می‌سازد و وارد آن می‌شود. دستور دوم فایل Compose را از گیت‌هاب پروژه دانلود می‌کند و با اسم compose.yml ذخیره می‌کند. این فایل به Docker می‌گوید برنامه و پایگاه داده را چطور اجرا کند.

mkdir ~/dossier && cd ~/dossier
curl -fsSL -o compose.yml https://raw.githubusercontent.com/AienTech/dossier/main/compose.production.yml

اگر هیچ پیامی ندیدی، یعنی درست انجام شد. در ترمینال، «بی‌خبری خوش‌خبری است».

مهم: از این به بعد همه‌ی دستورها باید داخل همین پوشه اجرا شوند. اگر ترمینال را بستی و دوباره باز کردی، اول این دستور را بزن تا به پوشه برگردی:

cd ~/dossier

قدم ۴: ساختن فایل تنظیمات با رمزهای تصادفی

Dossier تنظیمات و رمزهایش را از فایلی به اسم .env در همین پوشه می‌خواند. نقطه‌ی اول اسمش یعنی فایل «مخفی» است؛ برای همین ممکن است در Finder یا File Explorer آن را نبینی. طبیعی است.

این دو دستور اول یک رمز تصادفی برای پایگاه داده می‌سازند و در .env می‌نویسند، بعد دسترسی فایل را طوری تنظیم می‌کنند که فقط خودت بتوانی بخوانی‌اش. این رمز را لازم نیست بدانی یا به خاطر بسپاری؛ برنامه خودش از آن استفاده می‌کند.

echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" > .env
chmod 600 .env

حالا یک کلید مخفی برای برنامه می‌سازیم (DOSSIER_SECRET). این کلید جلسه‌های ورود را امضا می‌کند و کلیدهای API ذخیره‌شده را رمزنگاری می‌کند. دقت کن این‌جا علامت >> است (دو تا)، یعنی «به آخر فایل اضافه کن». اگر اشتباهی یکی بگذاری، کل فایل پاک و از نو نوشته می‌شود.

echo "DOSSIER_SECRET=$(openssl rand -base64 32)" >> .env

بعد منطقه‌ی زمانی‌ات را تنظیم کن. پشتیبان‌گیری شبانه ساعت ۳ بامداد به همین وقت انجام می‌شود و تاریخ نامه‌ها هم با آن نوشته می‌شود. راهنمای پروژه Europe/Berlin را مثال زده؛ آن را با منطقه‌ی خودت عوض کن، مثلاً Asia/Tehran یا America/Toronto:

echo "TZ=Europe/Berlin" >> .env

قدم ۵: فقط برای مک Apple Silicon

ایمیج Dossier فقط برای پردازنده‌های Intel و AMD ساخته شده. روی Apple Silicon باید به Compose بگویی آن را با شبیه‌سازی اجرا کند. این دستور یک فایل کوچک به اسم compose.override.yml کنار compose.yml می‌سازد. اجرا کمی کندتر می‌شود، ولی کار می‌کند. اگر مکت Intel است یا ویندوز و لینوکس داری، این قدم را رد کن.

printf 'services:\n  app:\n    platform: linux/amd64\n' > compose.override.yml

قدم ۶: ساختن هش رمز عبور

حالا رمزی را انتخاب می‌کنی که هر بار با آن وارد Dossier می‌شوی. ولی Dossier خود رمز را ذخیره نمی‌کند؛ فقط «هش» آن را نگه می‌دارد.

هش چیست؟ هش مثل اثر انگشت رمز است. از روی رمز می‌شود اثر انگشت را ساخت، ولی از روی اثر انگشت نمی‌شود رمز را بازسازی کرد. موقع ورود، Dossier از رمزی که تایپ می‌کنی دوباره اثر انگشت می‌سازد و با اثر ذخیره‌شده مقایسه می‌کند. پس اگر کسی فایل .env را ببیند، رمز واقعی تو را نمی‌بیند.

این دستور برنامه‌ی کوچک ساختن هش را اجرا می‌کند. روی ویندوز، لینوکس و مک Intel:

docker run --rm -it ghcr.io/aientech/dossier hash-password

روی مک Apple Silicon، به‌جای دستور بالا این یکی را بزن:

docker run --platform linux/amd64 --rm -it ghcr.io/aientech/dossier hash-password

چه اتفاقی می‌افتد؟ بار اول، Docker ایمیج Dossier (حدود ۱٫۷ گیگابایت) را دانلود می‌کند؛ بسته به اینترنتت ممکن است چند دقیقه یا بیشتر طول بکشد. بعد از تو دو بار رمز را می‌خواهد. فقط همین‌جا رمز واقعی‌ات را تایپ می‌کنی. ممکن است موقع تایپ هیچ حرفی روی صفحه نبینی؛ این برای امنیت است و طبیعی است. تایپ کن و Enter بزن.

در آخر یک خط طولانی چاپ می‌شود که با argon2id: شروع می‌شود. این هش توست. کل خط را با دقت انتخاب و کپی کن.

یک رمز خوب انتخاب کن: بلند، منحصربه‌فرد و جایی که در سرویس دیگری استفاده نکرده‌ای. یک مدیر رمز عبور برای نگه داشتنش بهترین جاست.

قدم ۷: گذاشتن هش در فایل .env

حالا باید یک خط به .env اضافه کنی. برای این کار از ویرایشگر متنی ساده‌ی nano استفاده می‌کنیم که داخل خود ترمینال باز می‌شود. این دستور فایل را باز می‌کند:

nano .env

سه یا چهار خطی را که در قدم‌های قبل ساختی می‌بینی. با کلیدهای جهت‌نما به انتهای آخرین خط برو، Enter بزن تا خط تازه‌ای باز شود، و بنویس DOSSIER_PASSWORD= و بلافاصله هش را بعدش paste کن. فاصله یا علامت نقل‌قول اضافه نگذار. خط نهایی شکلی مثل DOSSIER_PASSWORD=argon2id:… دارد.

برای ذخیره Ctrl + O و بعد Enter را بزن. برای خروج از nano، Ctrl + X. (در مک هم همین کلید Ctrl است.)

فایل کامل باید شبیه این باشد:

POSTGRES_PASSWORD=5c1f0e9a7b2d4c6e8f1a3b5d7c9e0f2a4b6d8c1e3f5a7b9c
DOSSIER_SECRET=ZXhhbXBsZS1vbmx5LW5vdC1hLXJlYWwtc2VjcmV0ISE=
TZ=Asia/Tehran
DOSSIER_PASSWORD=argon2id:...

مقدارهای بالا ساختگی‌اند و فقط شکل فایل را نشان می‌دهند. مقدارهای فایل تو باید با همان دستورها ساخته شده باشند. فایل .env واقعی‌ات را برای هیچ‌کس نفرست و جایی منتشر نکن.

قدم ۸: روشن کردن Dossier

دستور اول، Dossier و پایگاه داده‌اش را در پس‌زمینه روشن می‌کند (-d یعنی «در پس‌زمینه»). دستور دوم گزارش (لاگ) برنامه را زنده نشان می‌دهد تا ببینی چه می‌گذرد:

docker compose up -d
docker compose logs -f app

Compose اول پایگاه داده را روشن می‌کند، صبر می‌کند تا آماده شود و بعد برنامه را. برنامه هم جدول‌های پایگاه داده را آماده می‌کند و تم‌های داخلی را بارگذاری می‌کند. وقتی در لاگ کلمه‌ی Ready را دیدی، Ctrl + C بزن. این فقط نمایش لاگ را می‌بندد؛ خود Dossier روشن می‌ماند.

قدم ۹: باز کردن در مرورگر و ورود

مرورگر کامپیوترت را باز کن (در ویندوز همان مرورگر معمولی ویندوز) و به این آدرس برو:

http://localhost:3000

صفحه‌ی ورود Dossier باز می‌شود. رمزی را که در قدم ۶ انتخاب کردی وارد کن (خود رمز، نه هش). localhost یعنی «همین کامپیوتر»؛ این آدرس فقط از کامپیوتر خودت باز می‌شود و از بیرون قابل دسترسی نیست.

بعد از اولین ورود، برنامه می‌پرسد آیا اجازه می‌دهی یک «پینگ استفاده» بفرستد: یک شناسه‌ی تصادفی و شماره‌ی نسخه، روزی یک بار. تا «بله» نگویی چیزی فرستاده نمی‌شود و انتخابش کاملاً با توست.

اگر خواستی مطمئن شوی برنامه و پایگاه داده سالم‌اند، این آدرس را هم باز کن. اگر جواب {"status":"ok"} بود، همه‌چیز درست است:

http://localhost:3000/api/health

تبریک! Dossier نصب شد. انتخاب مدل هوش مصنوعی در Settings → AI provider و بقیه‌ی تنظیمات را در درس بعد انجام می‌دهی.

نکته‌های مخصوص ویندوز

  • دستورها را در PowerShell نزن. دستورهایی مثل echo "…$(openssl …)" و printf برای ترمینال یونیکسی نوشته شده‌اند و در PowerShell درست کار نمی‌کنند. راهنمای Dossier برای ویندوز WSL را پیشنهاد می‌کند؛ پس همه را در پنجره‌ی Ubuntu بزن.
  • openssl: در خود ویندوز معمولاً نصب نیست، ولی در اوبونتوی داخل WSL معمولاً از قبل هست. این هم یکی از دلیل‌های کار در WSL است. اگر در اوبونتو پیام openssl: command not found دیدی، این دو دستور اول فهرست بسته‌ها را به‌روز و بعد openssl را نصب می‌کنند (این‌ها از راهنمای Dossier نیستند، دستورهای استاندارد اوبونتو هستند):
sudo apt-get update
sudo apt-get install -y openssl
  • Docker Desktop باید باز باشد. قبل از هر کار با Dossier، مطمئن شو Docker Desktop در ویندوز اجرا شده است.
  • مرورگر: آدرس http://localhost:3000 را در مرورگر معمولی ویندوز باز کن؛ لازم نیست داخل اوبونتو مرورگر داشته باشی.

کارهای روزمره

همه‌ی این دستورها را داخل پوشه‌ی ~/dossier بزن (اول cd ~/dossier).

خاموش کردن Dossier وقتی با آن کاری نداری (داده‌ها سر جایشان می‌مانند):

docker compose stop

روشن کردن دوباره:

docker compose start

اگر خودت خاموشش نکرده باشی، Dossier بعد از ری‌استارت کامپیوتر هم خودش دوباره روشن می‌شود (به شرطی که Docker هم روشن شود).

دیدن وضعیت کانتینرها؛ باید هم app و هم db را در حال اجرا ببینی:

docker compose ps

دیدن لاگ وقتی چیزی درست کار نمی‌کند. دستور اول لاگ را یک بار نشان می‌دهد و دومی زنده دنبالش می‌کند (با Ctrl + C می‌بندی):

docker compose logs app
docker compose logs -f app

تغییر یک تنظیم: .env را با nano ویرایش کن و بعد این دستور را بزن. ری‌استارت ساده (stop و start) مقدارهای قدیمی را نگه می‌دارد؛ برای اعمال تغییر باید همین را بزنی:

docker compose up -d

به‌روزرسانی

وقتی نسخه‌ی تازه‌ای بیاید، نوار کناری Dossier خبر می‌دهد و در Settings → About هم دیده می‌شود. ترتیب کار این است:

۱. اول پشتیبان بگیر: یک خروجی از داخل برنامه و یک «دامپ» از پایگاه داده (بخش بعد).

۲. اگر یادداشت‌های نسخه‌ی جدید گفت compose.yml عوض شده، فایل را دوباره بگیر:

curl -fsSL -o compose.yml https://raw.githubusercontent.com/AienTech/dossier/main/compose.production.yml

۳. نسخه‌ی جدید را بگیر و روشن کن. دستور اول ایمیج تازه را دانلود می‌کند و دومی برنامه را با آن دوباره راه می‌اندازد:

docker compose pull
docker compose up -d

نسخه‌ی جدید موقع روشن شدن پایگاه داده را به‌روز می‌کند. برگشت به نسخه‌ی قدیمی‌تر بعد از آن پشتیبانی نمی‌شود؛ اگر مشکلی پیش آمد، باید پشتیبانی را که قبلش گرفته‌ای بازگردانی کنی. برای همین مرحله‌ی ۱ را هیچ‌وقت جا نینداز.

پشتیبان‌گیری و بازگردانی

داده‌های تو فقط روی کامپیوتر خودت است. اگر دیسک خراب شود یا لپ‌تاپ گم شود، فقط پشتیبان نجاتت می‌دهد. Dossier چهار ابزار دارد:

خروجی

در Settings → Your data → Export همه‌چیز (پروفایل، تم‌ها، تنظیمات، درخواست‌ها با مدارک، چت‌ها، یادداشت‌ها و تاریخچه) در یک فایل JSON دانلود می‌شود. کلید API داخلش نیست، مگر خودت تیکش را بزنی. ساده‌ترین و مهم‌ترین پشتیبان همین است.

ورودی

وارد کردن چنین فایلی همه‌ی داده‌های فعلی را با محتوای فایل جایگزین می‌کند. قبلش برنامه از وضعیت فعلی یک پشتیبان در پوشه‌ی backups می‌گیرد.

پشتیبان شبانه

به‌طور پیش‌فرض روشن است: هر شب ساعت ۳ (به وقت TZ) همان خروجی در /data/backups داخل کانتینر ذخیره می‌شود و ۱۴ روز نگه داشته می‌شود (با DOSSIER_BACKUP_RETENTION_DAYS قابل تغییر است).

دامپ پایگاه داده

نسخه‌ی کامل خود پایگاه داده‌ی PostgreSQL؛ قبل از هر به‌روزرسانی لازم است.

پشتیبان‌های شبانه داخل کانتینرند. این دستور آن‌ها را به پوشه‌ای به اسم backups کنار فایل‌هایت کپی می‌کند تا بتوانی جای امن دیگری هم نگهشان داری:

docker compose cp app:/data/backups ./backups

این دستور از پایگاه داده یک فایل دامپ به اسم dossier.dump در همین پوشه می‌سازد:

docker compose exec -T db pg_dump -U dossier -Fc dossier > dossier.dump

برای بازگردانی یک دامپ، برنامه را متوقف می‌کنی، دامپ را بارگذاری می‌کنی و برنامه را دوباره روشن می‌کنی. دقت کن این کار داده‌های فعلی را با محتوای دامپ جایگزین می‌کند:

docker compose stop app
docker compose exec -T db pg_restore --clean --if-exists -U dossier -d dossier < dossier.dump
docker compose start app

یک نکته‌ی حیاتی: یک کپی از .env را هم کنار پشتیبان‌هایت نگه دار، در جایی امن. کلیدهای API ذخیره‌شده بدون همان DOSSIER_SECRET خوانده نمی‌شوند.

حذف کامل: اگر روزی خواستی Dossier را کنار بگذاری، docker compose down کانتینرها را پاک می‌کند ولی داده‌ها می‌مانند. دستور زیر داده‌ها را هم برای همیشه پاک می‌کند؛ اول خروجی بگیر:

docker compose down -v

عیب‌یابی

قانون اول عیب‌یابی: لاگ را بخوان. docker compose logs app معمولاً دقیقاً می‌گوید چه چیزی کم است. این‌ها رایج‌ترین مشکل‌ها هستند:

نشانهچه کنم؟
دستورهای docker خطا می‌دهند که به Docker وصل نمی‌شوند، یا command not foundDocker Desktop را باز کن و صبر کن کامل بالا بیاید. در ویندوز اتصال WSL را در تنظیمات Docker Desktop بررسی کن. در لینوکس مطمئن شو بعد از usermod یک بار خارج و وارد شده‌ای.
پورت ۳۰۰۰ را برنامه‌ی دیگری گرفتهدر .env یک خط مثل DOSSIER_PORT=3001 اضافه کن، docker compose up -d را دوباره بزن و آدرس http://localhost:3001 را باز کن.
ساختن PDF شکست می‌خورد یا طول می‌کشدمعمولاً کمبود حافظه است؛ مرورگر داخلی‌ای که PDF می‌سازد حافظه می‌خواهد. برنامه دست‌کم ۷۶۸ مگابایت لازم دارد (فایل Compose یک گیگابایت به آن می‌دهد). برنامه‌های سنگین دیگر را ببند.
روی مک Apple Silicon خطایی درباره‌ی platform یا معماری amd64/arm64مطمئن شو فایل compose.override.yml از قدم ۵ در پوشه هست و docker compose up -d را دوباره بزن. برای hash-password هم از نسخه‌ی دستور با --platform linux/amd64 استفاده کن.
لاگ می‌گوید … is not set یا DOSSIER_SECRET is too shortمتغیری که لاگ اسم برده در .env نیست یا اشتباه است. با nano درستش کن و docker compose up -d بزن.
DOSSIER_PASSWORD must be a hash of your passwordبه‌جای هش، خود رمز را در .env گذاشته‌ای. قدم ۶ و ۷ را دوباره انجام بده.
لاگ از شکست migrations می‌گوید و کد P1001 داردپایگاه داده در دسترس نیست. با docker compose ps ببین کانتینر db روشن است یا نه.
Too many attempts موقع ورودبعد از پنج رمز اشتباه در یک دقیقه، ورود ۳۰ ثانیه متوقف می‌شود و هر بار طولانی‌تر، تا ۱۵ دقیقه. ری‌استارت کمکی نمی‌کند؛ صبر کن.

رمز را فراموش کرده‌ای؟ نگران نباش، داده‌ها از دست نمی‌روند. قدم ۶ را با یک رمز جدید تکرار کن (روی Apple Silicon با نسخه‌ی --platform). بعد با nano .env خط قدیمی DOSSIER_PASSWORD=… را کامل با هش جدید عوض کن، ذخیره کن و این را بزن:

docker compose up -d

با رمز جدید وارد شو. عوض کردن این خط، همه‌ی جلسه‌های ورود قبلی را هم می‌بندد.

راه‌های دیگر نصب، و یک قانون امنیتی

راهنمای پروژه چند راه دیگر هم دارد. برای بیشتر خواننده‌های این درس، همان Docker Compose بهترین است، ولی خوب است بدانی بقیه کی به کار می‌آیند:

راهچه وقت به کار می‌آید؟
Docker ساده (دو دستور docker run)سریع‌ترین راه برای یک امتحان کوتاه. برای استفاده‌ی طولانی، Compose راحت‌تر خاموش، روشن و به‌روز می‌شود.
Node.js بدون Dockerوقتی نمی‌خواهی یا نمی‌توانی Docker داشته باشی. نصبش طولانی‌تر است و هر به‌روزرسانی یعنی ساختن دوباره‌ی برنامه.
سرور اوبونتو با Caddyوقتی می‌خواهی Dossier روی یک سرور، با دامنه‌ی خودت و HTTPS، همیشه در دسترس باشد. دست‌کم ۲ هسته‌ی پردازنده و ۲ گیگابایت حافظه می‌خواهد.
CapRover، Coolify یا Dokployفقط اگر از قبل یکی از این پلتفرم‌ها را روی سرورت داری. خودشان حافظه‌ی زیادی می‌گیرند؛ برای Coolify و Dokploy حدود ۴ گیگابایت امن‌تر است.

قانون امنیتی: پورت ۳۰۰۰ Dossier هرگز نباید مستقیم از اینترنت در دسترس باشد. روی سرور، همیشه یک «پراکسی معکوس» با HTTPS (مثل Caddy) جلوی آن می‌نشیند و فقط آن به اینترنت باز است. فایل Compose به‌طور پیش‌فرض برنامه را فقط روی خود کامپیوتر (127.0.0.1) باز می‌کند؛ این تنظیم را دست نزن.

ببینش ویدیو

در این ویدیو می‌بینی Docker Compose چطور چند کانتینر (مثلاً یک برنامه و پایگاه داده‌اش) را با یک فایل و یک دستور بالا می‌آورد؛ همان کاری که docker compose up -d برای Dossier می‌کند. لحن ویدیو پرانرژی و کمی فنی است؛ لازم نیست دستورهای ویدیو را تکرار کنی.

Docker Compose will BLOW your MIND!! (a tutorial) · NetworkChuckباز کردن در یوتیوباگر ویدیو باز نشد، یوتیوب در اینترنت شما در دسترس نیست.

نگاه یک اپلای‌کننده‌ی باتجربه

  • نصب را در یک روز آرام انجام بده. نه شب قبل از ددلاین. یک ساعت بی‌عجله وقت بگذار.
  • یک دفترچه‌ی نصب داشته باش. بنویس پوشه کجاست، کدام منطقه‌ی زمانی را گذاشتی، و رمز ورود را در مدیر رمز عبور نگه دار. شش ماه بعد خودت از خودت ممنون می‌شوی.
  • پشتیبان را همان روز اول امتحان کن. یک خروجی بگیر و ببین فایلش دانلود شد. پشتیبانی که امتحان نشده، پشتیبان نیست.
  • هر پیام خطا را کامل بخوان. لاگ‌های Dossier معمولاً می‌گویند دقیقاً کدام متغیر مشکل دارد و چطور درستش کنی.

اشتباه‌های رایج

  • اجرای دستورها بیرون از پوشه‌ی ~/dossier: Compose فایل‌هایش را پیدا نمی‌کند. اول cd ~/dossier.
  • یک > به‌جای >>: فایل .env از نو نوشته می‌شود و خط‌های قبلی پاک می‌شوند.
  • گذاشتن خود رمز به‌جای هش در DOSSIER_PASSWORD.
  • زدن دستورها در PowerShell به‌جای پنجره‌ی Ubuntu در ویندوز.
  • فراموش کردن فایل override روی مک Apple Silicon.
  • به‌روزرسانی بدون پشتیبان: برگشت به نسخه‌ی قبلی ممکن نیست.

چیزهایی که باید یادت بماند

  • Docker برنامه را در کانتینر اجرا می‌کند؛ فقط Docker را نصب می‌کنی و بقیه آماده است.
  • روی ویندوز همه‌ی دستورها در WSL (پنجره‌ی Ubuntu) اجرا می‌شوند.
  • .env سه چیز ضروری دارد: POSTGRES_PASSWORD، DOSSIER_SECRET و DOSSIER_PASSWORD (هش، نه خود رمز).
  • docker compose up -d روشن می‌کند و تغییرات .env را اعمال می‌کند؛ آدرس برنامه http://localhost:3000 است.
  • قبل از هر به‌روزرسانی پشتیبان بگیر، و یک کپی از .env را کنار پشتیبان‌ها نگه دار.
  • پورت ۳۰۰۰ را هرگز مستقیم روی اینترنت باز نکن.

این مبحث کجای نقشه است؟

در درس قبل دیدی Dossier چیست و چه کارهایی می‌کند. در این درس آن را روی کامپیوترت نصب کردی و یاد گرفتی نگهش داری. درس بعد، «کار با Dossier: از پروفایل تا پیگیری»، اولین جلسه‌ی کار واقعی را همراهت جلو می‌برد: انتخاب مدل هوش مصنوعی، ساختن پروفایل، اولین درخواست و پیگیری‌اش.

تمرین

این تمرین‌ها عملی‌اند. بعد از انجام هر کدام، جواب را باز کن تا مطمئن شوی درست پیش رفته‌ای.

تمرین ۱. Dossier را طبق قدم‌های این درس نصب کن و وارد شو.

چطور بفهمم درست انجام دادم؟

آدرس http://localhost:3000 صفحه‌ی ورود را نشان می‌دهد و با رمزت وارد می‌شوی. آدرس http://localhost:3000/api/health جواب {"status":"ok"} می‌دهد. دستور docker compose ps هر دو کانتینر app و db را در حال اجرا نشان می‌دهد.

تمرین ۲. Dossier را خاموش و دوباره روشن کن، بعد از داخل برنامه یک خروجی بگیر و یک دامپ پایگاه داده هم بساز.

چطور بفهمم درست انجام دادم؟

بعد از docker compose stop صفحه‌ی برنامه باز نمی‌شود و بعد از docker compose start دوباره باز می‌شود و داده‌هایت سر جایشان است. فایل JSON خروجی در پوشه‌ی دانلودهایت است. در پوشه‌ی ~/dossier هم فایلی به اسم dossier.dump ساخته شده که حجمش صفر نیست.

تمرین ۳. دوستت می‌گوید: «بعد از نصب، لاگ نوشته DOSSIER_PASSWORD must be a hash of your password. من که رمز را در .env گذاشتم!» مشکل چیست و چه باید بکند؟

نمایش جواب

دقیقاً همین مشکل است: خود رمز را گذاشته، نه هش آن را. باید دستور hash-password را اجرا کند (روی Apple Silicon با --platform linux/amd64)، رمزش را دو بار تایپ کند، خطی را که با argon2id: شروع می‌شود کپی کند، با nano جای مقدار قبلی DOSSIER_PASSWORD بگذارد و docker compose up -d بزند.

منابع