بازدان بۆ ناوەڕۆک

دامەزراندنی Quire بە Docker Compose

Quire لەسەر ژێرخانی خۆت بە Docker Compose دابمەزرێنە.

بینین وەک Markdown

ئەمە بەرهەمی تەواوە لەسەر یەک میواندار: LMS، کاری پاشبنەما، خزمەتگوزارییەکانی ڕاستەوخۆ و دەستکاریکردنی هاوبەش و هەموو خزمەتگوزارییە ئیختیارییەکان لە پشت profileێکەوە. دیزاینەکە لە docs/architecture/23-ops.md بەشی 2ە.

ئامانجەکانی تر: Vercel و Cloudflare Workers تەنها توڕی وێب کارپێدەکەن. نوێکردنەوەکان لە upgrade.mdن و پاڵپشتی و کاری تاقیکردنەوەی گەڕاندنەوە لە backup-restore.md.

پێویستەکانت چییە

  • Docker Engine 27 یان نوێتر لەگەڵ پێوەکراوی Compose 2.30 یان نوێتر.
  • 4 ناوکی CPU و 8 GB بیرگە بۆ stackی بنەڕەت؛ 8 ناوک و 16 GB بیرگە لەگەڵ --profile full (تەنها ClamAV نزیکەی 1.5 GB لە واژۆکان هەڵدەگرێت).
  • ناوی DNS بۆ توڕی وێب و ناوێکی دووەم بۆ ناوەڕۆکی متمانەپێنەکراو. دەبێت دوو hostی جیاواز بن: پەکێجی SCORM و HTMLی بارکراو لە بنەچەی ناوەڕۆک کار دەکەن بۆ ئەوەی هەرگیز نەتوانن کوکییەکانی LMS بخوێننەوە.
  • بۆ تاقیکردنەوەی ناوخۆیی، lvh.me و *.localhost بۆ 127.0.0.1 چارەسەر دەبن، ئەوەش ئەوەیە docker/.env.example بەکاری دەهێنێت. خزمەتگوزاریی proxyی stack هەردووکیان لەسەر https بە بڕوانامەی دەسەڵاتی ناوخۆیی پێشکەش دەکات، بۆیە هیچ شتێکی تر پێویست نییە دابمەزرێت (بڕوانە “TLS”).
  • پۆرتی 80 و 443 لە میواندار بەردەست بن (QUIRE_PROXY_HTTP_PORT و QUIRE_PROXY_HTTPS_PORT دەتوانن بیانگوازنەوە).

یەکەم جار

QUIRE_APP_ORIGIN=https://learn.example.org \
QUIRE_CONTENT_ORIGIN=https://content.example-content.org \
QUIRE_SETUP_ADMIN_EMAIL=you@example.org \
  docker/scripts/init-env.sh
docker compose -f docker/compose.yaml up -d --build
docker compose -f docker/compose.yaml logs init

docker/scripts/init-env.sh، docker/.env لە docker/.env.example دروست دەکات لەگەڵ هەموو نهێنییە دروستکراوەکان (وشەی نهێنیی بنکەدراوە، کلیلی واژۆ و سەرەکی، دووجەفت کلیلی لانچی ناوەڕۆک) و کلیلی واژۆی خاڵی پشکنین لە docker/secrets/audit-signing-key.pem؛ Compose ئەمە وەک نهێنی بۆ workerەکان لۆد دەکات. تەنها sh، awk و opensslی پێویستە و ڕەت دەکاتەوە docker/.envی هەبوو بنووسێتەوە. هەردوو فایلەکە کۆپی بکە بۆ دەرەوەی میواندار: بەبێ QUIRE_MASTER_KEY بنکەدراوەی گەڕێندراوە ناتوانێت زانیارییە نهێنییە هەڵگیراوەکانی بخوێنێتەوە. بۆ پڕکردنەوەی فایل بە دەست، cp docker/.env.example docker/.env بکە؛ فایلەکە ڕوون دەکاتەوە هەر نهێنییەک چۆن دروست دەکرێت.

هەردوو بنەچە دەبێت https بن: خزمەتگوزاری ناوەڕۆک لە بەرهەمهێناندا httpی ئاسایی ڕەت دەکاتەوە و نابێت دۆمەینی تۆمارکراویان هاوبەش بێت. خزمەتگوزاری proxy TLS بۆ هەردووکیان کۆتایی پێ دەهێنێت (بڕوانە “TLS”)؛ init-env.sh بنەچەی http:// ڕەت دەکاتەوە.

Stack بە ڕیزبەندییەکی جێگیر دەست پێ دەکات و هەر هەنگاوێک چاوەڕێی پێشووی دەکات:

  1. postgres تەندروست دەبێت. لە یەکەم دەستپێکردندا سکریپتی دامەزراندنی (docker/postgres/init/90-passwords.sh) وشەی نهێنیی چوار ڕۆڵەکە دادەنێت.
  2. migrate هەموو کۆچکردنەکان و queueی کار لە بنکەدراوەی کۆنترۆڵ و هەر بنکەدراوەی tenantی تایبەت دادەمەزرێنێت، هاوڕایییان دەپشکنێت و دەرچێت (docs/ops/upgrade.md). کۆچکردن لە هەر دەستپێکردنێکدا ڕوودەدات و idempotentە، بۆیە نوێکردنەوە وێنەیەکی نوێ و دەستپێکردنەوەیە.
  3. init (apps/web/src/first-run.ts) بنکەدراوەی بەرنامە لە ژێر QUIRE_DATABASE_ID تۆمار دەکات و ئەگەر QUIRE_SETUP_ADMIN_EMAIL دانرابێت یەکەم دامەزراوە و بەڕێوەبەری دروست دەکات. ناونیشانی چوونەژوورەوە و وشەی نهێنیی دروستکراو جارێک لە docker compose logs init چاپ دەکرێن.
  4. web، content، worker، scheduler، collab و centrifugo دەست پێ دەکەن.
  5. proxy دوای تەندروستیی web و content دەست پێ دەکات.

https://demo. بەدوای ناونیشانی بەرنامەکەت بکەرەوە (تۆماری init ناونیشانی وردی چوونەژوورەوە چاپ دەکات) و بچۆ ژوورەوە. لە دامەزراندنی ناوخۆیی پێشتر دەسەڵاتی بڕوانامەی proxy متمانەپێکراو بکە (بڕوانە “TLS”). وشەی نهێنیی دروستکراو لە /account/security بگۆڕە.

پرۆسەیەک کە بە نهێنیی پێویستەوە دەستی پێ بکات ڕەت دەکرێتەوە و ڕێکخستنی ونبوو لە تۆمارەکەی ناو دەبات. هیچ شتێک بە نیوەڕێکخراوی دەست پێ ناکات.

خزمەتگوزاری و profileەکان

خزمەتگوزاری Profile کاری ئەنجامدراو
postgres هەمیشە بنکەدراوە (PostgreSQL 18 لەگەڵ pgvector، دروستکراو لە docker/postgres.Dockerfile)، WAL لە یەکەم دەستپێکردن ئەرشیف دەکرێت
migrate، init هەمیشە جارێک: کۆچکردنەکان و پاشان دەستپێکردنی یەکەم
web هەمیشە LMS لە QUIRE_HTTP_PORT (8080)
content هەمیشە بنەچەی ناوەڕۆکی متمانەپێنەکراو لە QUIRE_CONTENT_PORT (8081)
worker هەمیشە کاری پاشبنەما: ئیمەیڵ، ڕاپۆرت، پرۆسێسکردنی فایل، webhook
scheduler هەمیشە کاری دووبارەبووەوە: 64 خشتەی کاتی کارکردن تۆمار دەکات و دەیانگوازێتەوە بۆ worker؛ لە هەر کاتێکدا یەک ڕابەر هەیە
collab هەمیشە websocketی دەستکاریکردنی هاوبەش، لە QUIRE_COLLAB_HTTP_PORT (1234)
centrifugo هەمیشە fan-outی ڕاستەوخۆ، لە QUIRE_REALTIME_PORT (8000)
proxy هەمیشە Caddy، دەرگای سەرەکیی TLS لە پۆرتەکانی 80 و 443 (بڕوانە “TLS”)
valkey cache cache و سنووردارکردنی خێرایی
clamav scan پشکنینی فایلە بارکراوەکان بۆ نەرمەواڵای زیانبەخش
gotenberg preview پێشبینینی گۆڕینی Office بۆ PDF و دروستکردنی بڕوانامە
imgproxy images وێنەی گەورەیی گۆڕاو و گۆڕینی فۆرمات
transcoder video وێنەی worker لەگەڵ ffmpegی LGPL تەنها، بۆ وەرگرتنی وەشانی ڤیدیۆ
seaweedfs storage هەڵگرتنی سازگار لەگەڵ S3 لەسەر ئەم میواندارە
otelcol observability کۆکەرەوەی OpenTelemetry
mailpit devmail هەموو ئیمەیڵە دەرچووەکان دەگرێت بۆ تاقیکردنەوەی Quire
backup backup پاڵپشتیی بنەڕەتی جارێک؛ بڕوانە backup-restore.md
backup-scheduler، backup-offsite backup پاڵپشتیی بنەڕەت هەر QUIRE_BACKUP_INTERVAL_HOURS جارێک و کۆپیی نهێنیکراو لە دەرەوەی میواندار لەگەڵ پشکنینی هەفتانە
h5p h5p وێنەی ئامرازی LTI 1.3ی H5P کە خۆت دایدەنێیت لە QUIRE_H5P_IMAGE، لە QUIRE_H5P_PORT (8090)؛ بڕوانە “بەستنەوەی دابینکەری H5P”

--profile full هەموو خزمەتگوزارییە ئیختیارییەکان جگە لە backup و h5p دەست پێ دەکات. یەکێکیان بە docker compose -f docker/compose.yaml --profile scan up -d دەست پێ بکە. بەبێ خزمەتگوزاریی ئیختیاریش Quire کار دەکات و کەموکوڕییەکە دەڵێت: ئەگەر پشکنەر نەبێت فایلەکان بەبێ پشکنین هەڵدەگیرێن و بەڕێوەبەر ئاگادار دەکرێتەوە؛ ئەگەر Gotenberg نەبێت، فایلەکان بۆ بینینی پێشبینین لە جیاتی داگرتن بەردەست نین؛ ئەگەر transcoder نەبێت ڤیدیۆ وەک فایلە ڕەسەنەکە پەخش دەبێت.

هەر وێنەیەکی لایەنی سێیەم و پابەندیی مۆڵەتەکەی لە docker/third-party-containers.yaml لیست کراوە.

بەستنەوەی دابینکەری H5P

Quire ڕاژەکاری H5P یان sidecar لەخۆ ناگرێت و دایدابین ناکات (ADR 0019). ئەگەر H5P بەکاردەهێنیت، subscriptionێکی میوانداریکراوی خۆت دابین بکە یان دامەزراندنێکی H5Pی خۆبەڕێوەبەری جیا لە Quire بەڕێوە ببە. ئەو دابینکەرە وەک ئامرازی دەرەکیی LTI 1.3 تۆمار بکە و ناوەڕۆکەکەی وەک چالاکیی ئامراز بۆ کۆرسەکان زیاد بکە. Quire لە ڕێگەی LTI Assignment and Grade Services (AGS) نمرە و پێشکەوتنی چالاکی/نمرەدان دەگۆڕێتەوە. ئەگەر دابینکەرەکە هەروەها ڕستەکانی xAPI بنێرێت، ئەوە بە جیاوازی بۆ کۆگای ڕستەکانی xAPIی Quire ڕێکبخە؛ ئاڵوگۆڕی نمرە/پێشکەوتنی AGS ڕستەی xAPI نانێرێت. هاوردەکانی Moodle چالاکییەکانی H5P وەک پێویستی بە پەیوەندیی ئامرازی LTI ڕاپۆرت دەکەن. دابینکەرەکە بەرپرسی ڕاژەکاری H5P، نووسین، بانکی ناوەڕۆک و مێژووی هەوڵەکانی خۆیەتی.

بۆ جێبەجێکردنی دامەزراندنی خۆبەڕێوەبەری خۆت لەسەر ئەم میواندارە، QUIRE_H5P_IMAGE بۆ وێنەکەی دابنێ و profileی h5p دەست پێ بکە. Compose لە QUIRE_H5P_PORT (8090) بڵاوی دەکاتەوە و داتاکەی لە حەوزەی h5p-data هەڵدەگرێت؛ وێنەکە و پابەندییەکانی لەگەڵی دێن، هی خۆتن.

ڕێکخستنەکان

هەر پرۆسەیەک docker/.env دەخوێنێتەوە. قاڵبەکە، docker/.env.example، هەر ڕێکخستنێک لەگەڵ نرخی بنەڕەتی لیست دەکات. گرووپەکان:

ناونیشانەکان

ڕێکخستن واتا
QUIRE_APP_ORIGIN ناونیشانی گشتیی LMS، وەک https://learn.example.com
QUIRE_CONTENT_ORIGIN بنەچەی ناوەڕۆک، hostێکی جیاواز
QUIRE_PLATFORM_DOMAINS دۆمەینەکانی شوێنی دامەزراوەکان، بە کۆما جیاکراوەتەوە
QUIRE_MARKETING_ORIGIN Optional. The marketing site, default https://quirelms.com. The only origin the waitlist form (POST /api/waitlist, POST /waitlist) accepts and redirects to. Comma separated; a www. variant is allowed only if listed
QUIRE_DEPLOY_TARGET لێرە compose. بۆ vercel و cloudflare ڕێنماییەکانی تر ببینە
QUIRE_TRUSTED_PROXY_CIDRS پراکسییەکان کە X-Forwarded-Forیان متمانەپێکراوە

نهێنییەکان

ڕێکخستن واتا
QUIRE_SECRET_KEY دانیشتن و token واژۆ دەکات. 64 پیتی hex
QUIRE_MASTER_KEY زانیارییە نهێنییە هەڵگیراوەکانی وەک نهێنیی SSO و webhook دەگورێتەوە. 32 بایت، base64. توڕی وێب و worker دەبێت هەمان نرخیان هەبێت. گۆڕین: key-rotation.md
QUIRE_MASTER_KEY_VERSION ناسنامەی وەشانی کلیلی سەرەکی، v1 ئەگەر دانەنرابێت. کاتی گۆڕین بەرزی بکەرەوە
QUIRE_MASTER_KEY_RETIRED کلیلە سەرەکییە کۆنەکان کە هێشتا بۆ خوێندنەوەی ئەوەی داپۆشیویانە پێویستن، وەک v1=<base64>. دوای گۆڕینێک کە بەبێ هیچ شتێکی چارەسەرنەکراو تەواو دەبێت لایببە
QUIRE_COLLAB_SIGNING_KEY لەلایەن web و collab هاوبەشە بۆ واژۆکردنی tokenەکانی دەستکاریکردن
QUIRE_BACKUP_SIGNING_KEY پاڵپشتیی کۆرس واژۆ دەکات (ئیختیاری)

کۆپییەکی QUIRE_MASTER_KEY لە شوێنێک جگە لەم میواندارە هەڵبگرە. بنکەدراوەیەک بەبێ ئەو کلیلیە گەڕێندرایەوە ناتوانێت زانیارییە نهێنییەکانی بخوێنێتەوە.

بنکەدراوە

ڕێکخستن واتا
POSTGRES_PASSWORD superuser، لەلایەن قاچاخانە و پاڵپشتی بەکاردێت
QUIRE_DB_APP_PASSWORD، QUIRE_DB_MIGRATOR_PASSWORD، QUIRE_DB_REPORT_PASSWORD، QUIRE_DB_AUDIT_PASSWORD وشەی نهێنیی ڕۆڵەکان، لە دەستپێکردنی یەکەم دادەنرێن
DATABASE_URL ڕۆڵی بەرنامە. ئاسایشی ئاستی ڕیز بۆ هەر داواکارییەک کە دەیکات جێبەجێ دەبێت
DATABASE_MIGRATOR_URL، QUIRE_MIGRATION_URL ڕۆڵی کۆچکەر، بۆ migrate و init
QUIRE_SUPERUSER_URL تەنها بۆ یەکەم دەستپێکردن بەکاردێت
QUIRE_REPORT_DATABASE_URL ڕۆڵی تەنهاخوێندنەوەی ڕاپۆرت، بۆ ڕاپۆرت و دروستکەری ڕاپۆرت
QUIRE_AUDIT_DATABASE_URL ڕۆڵی پشکنین، بۆ کۆنسۆڵی پشکنین و هەناردەی SIEM
QUIRE_DATABASE_ID هەر UUIDێک، بۆ ماوەی دامەزراندنەکە جێگیرە

وشەی نهێنیی ڕۆڵ تەنها کاتی دروستکردنی یەکەمی حەوزەی بنکەدراوە جێبەجێ دەکرێن. بۆ گۆڕینی دواتر، ALTER ROLE بەکاربهێنە و پاشان URLی هاوتای نوێ بکەرەوە.

QUIRE_REPORT_DATABASE_URL بۆ بنکەدراوەی جەستەیی بەکاردێت کە DATABASE_URL ڕێکیدەخات. بۆ هەر بنکەدراوەی جەستەییی تۆمارکراوی تر، URLی پەیوەندیی quire_reportی تایبەتی بۆ ژینگەی وێب و worker دابنێ، پاشان ناوی گۆڕاوەکە لە خانەی گۆڕاوی ژینگەی ڕاپۆرتی بنکەدراوە وەک env:NAME بنووسە. ئاماژەکە دەبێت بۆ هەمان بنکەدراوەی پەیوەندیی بەرنامە بێت؛ باشترە replicaی تەنهاخوێندنەوە بێت. هەر ڕوویەکی ڕاپۆرت tenantەکە بەدوای پەیوەندیی ڕاپۆرتی بنکەدراوەی خۆیدا دەچێت: دروستکەری ڕاپۆرت و ڕاپۆرتە پاشەکەوتکراوەکان، ناردنە خشتەبەندی‌کراوەکان، هەناردەی ڕاپۆرت، شیکاری، تۆماری پشکنین، سەرچاوە پشکنینی REST و گەڕانی پشکنینی یاریدەدەر. هیچ کام URLی ڕاپۆرتی بنکەدراوەیەکی تر بەکارناهێنێت. ئەگەر بنکەدراوەیەک پەیوەندیی ڕاپۆرتی نییە، ڕاپۆرتی ئاسایی لە پەیوەندیی بەرنامەی خۆی جێبەجێ دەبێت، بەڵام خوێندنەوەی شیکاری و هەموو خوێندنەوەکانی پشکنین ڕەت دەکرێنەوە و هۆکارەکە دەڵێن، چونکە ڕۆڵی بەرنامە ناتوانێت تۆماری پشکنین بخوێنێتەوە.

درایڤەرەکان

ڕێکخستن لەم وەشانەدا تێبینی
QUIRE_STORAGE_DRIVER local (بنەڕەت)، s3 یان azure local فایلەکان لە حەوزەی files هەڵدەگرێت. s3 AWS S3، R2، سازگاریی GCS و کۆگاکانی سازگاری S3ی تر دەگرێتەوە، لەگەڵ بارکردنی پارچەیی دووبارەدەستپێکراو
QUIRE_REALTIME_DRIVER inprocess (بنەڕەت)، sse، centrifugo یان durable_objects inprocess بۆ یەک قاچاخانەی وێب گونجاوە؛ ئەگەر چەند دانە هەیە centrifugo یان sse بەکاربهێنە
QUIRE_CACHE_DRIVER memory (بنەڕەت)، postgres یان valkey memory بۆ هەر پرۆسەیەک جیاوازە؛ بۆ جێبەجێبوونی سنووری خێرایی لە نێوان قاچاخانەکاندا valkey یان postgres بەکاربهێنە
QUIRE_VIDEO_DRIVER ffmpeg (بنەڕەت) یان progressive_mp4 یان دابینکەری میوانداریکراو: Cloudflare Stream، Mux یان Bunny، بە کلیلەکانی خۆیان
QUIRE_IMAGE_DRIVER noop (بنەڕەت)، imgproxy یان cloudflare noop هەر وێنەیەک بە قەبارەی ڕەسەنی پێشکەش دەکات. imgproxy profileی images و ڕێکخستنەکانی خوارەوە پێویستە؛ cloudflare Cloudflare Images بەکاردەهێنێت
QUIRE_MEETING_PROVIDER bbb، zoom، teams، meet، jitsi یان in_process دابینکەری بنەڕەتی پلاتفۆرم بۆ دانیشتنی زیندوو. ئەگەر دانەنرابێت، دانیشتنی زیندوو ڕێکخراو نییە تا دامەزراوەیەک هەژماری خۆی لە یەکخستنەکان، دابینکەری دانیشتنی زیندوو پەیوەست بکات. هەژماری تایبەتی دامەزراوە هەمیشە ئەم نرخە لادەبات. ڕێکخستنەکانی هەر دابینکەرێک (BBB_URL و BBB_SECRET، گۆڕاوەکانی ZOOM_*، TEAMS_*، GOOGLE_MEET_* و JITSI_*) تەنها بۆ ئەو دابینکەرەی لێرە ناونراوە دەخوێنرێنەوە
QUIRE_MEETING_REGIONS لیستی دۆمەینەکانی eu، uk، us بە کۆما جیاکراوە ناوچەی پرۆسێسکردنی کۆبوونەوە لەلایەن دابینکەری بنەڕەتی پلاتفۆرم. ئەگەر دانەنرابێت، وەک جاران بەرامبەر دامەزراوەی جێگیرکراو لە ناوچەیەک پشکنین ناکرێت. هەژماری تایبەتی دامەزراوە ناوچەکان لە پەڕەی خۆیدا ڕادەگەیەنێت

نرخی درایڤەرێک کە لەم وەشانەدا نییە کاتی دەستپێکردنی توڕی وێب ڕەت دەکرێتەوە و ڕێکخستنەکەی ناو دەبات، لە جیاتی ئەوەی بە بێدەنگی نرخی بنەڕەت بەکاری بهێنێت.

وێنەکان

پەڕەکان لە ڕێگەی /api/files/{id}/image/{size} داوای وێنە لە چوار قەبارەی جێگیر دەکەن؛ هەمان دەستڕاگەیشتن دەپشکنێت کە بۆ فایلەکەیە و پاشان ڕەوانەی خزمەتگوزاریی وێنە دەکات. هەر دامەزراوەیەک دەتوانێت لە هەر کاتژمێرێکدا QUIRE_IMAGE_SPECS_PER_HOUR وێنە و جووتەقەبارەی نوێ داوا بکات (بەپێی بنەڕەت 2000)؛ قەبارەکانی هەمان کاتژمێر پێشتر دروستکراوە ژمێردرێن. ئەگەر زیاتر لە یەک قاچاخانەی وێب هەیە valkey یان postgres بۆ QUIRE_CACHE_DRIVER بەکاربهێنە بۆ جێبەجێبوونی سنوور لە نێوانیان.

ڕێکخستن درایڤەر تێبینی
IMGPROXY_URL imgproxy ناونیشانێک کە وێبگەڕان پێی دەگەن، بۆ نموونە https://images.example.org. profileی images لە QUIRE_IMAGES_PORT (8082) بڵاوی دەکاتەوە
IMGPROXY_KEY، IMGPROXY_SALT imgproxy ڕشتەی hex، هەمان نرخەکانی کە imgproxy پێیان دەست پێ دەکات. هەر یەکێک بە openssl rand -hex 32 دروست بکە. Quire هەر ناونیشانێکی وێنە بەوانەوە واژۆ دەکات بۆیە imgproxy هیچ وێنەیەک پیشان نادات کە Quire داوای نەکردبێت
QUIRE_IMAGE_SOURCE_ORIGIN imgproxy لەگەڵ هەڵگرتنی ناوخۆیی شوێنی سەرچاوەی وێنەی ڕەسەن کە imgproxy لێی وەریدەگرێت. Compose http://web:3000 دایدەنێت. لە هەڵگرتنی s3 یان azure، imgproxy لە bucketەکەوە وەریدەگرێت و ئەمە بەکارناهێنرێت
CLOUDFLARE_ACCOUNT_ID، CLOUDFLARE_IMAGES_TOKEN، CLOUDFLARE_IMAGES_ACCOUNT_HASH cloudflare tokenی API بە مۆڵەتی دەستکاریکردنی Images و hashی هەژمار لە Images، Developer resources. گۆڕاوە گونجاوەکانی ئەکاونت چالاک بکە
CLOUDFLARE_IMAGES_SIGNING_KEY cloudflare ئیختیاری. ئەگەر دابنرێت وێنەکان تایبەت دەبن و هەر ناونیشانێک واژۆ دەکرێت و بەسەر دەچێت. ئەگەر نەبێت وێنەکان گشتی دەبن لە ناونیشانێک کە لە QUIRE_SECRET_KEY دروست دەکرێت و هیچ کەس ناتوانێت خەمڵاندنی بکات

Cloudflare Images کۆپیی خۆی لە هەر وێنەی ڕەسەنێک هەڵدەگرێت کە پێشکەشی دەکات. کاتێک فایلێک دەسڕدرێتەوە، worker پێش وێنەی ڕەسەن ئەو کۆپییە دەسڕێتەوە.

Queue

کاری پاشبنەما pg-boss لە هەمان بنکەدراوەی Postgres بەکاردەهێنێت، بۆیە هیچ خزمەتگوزاریی queue پێویست نییە جێبەجێ بکرێت و ڕێکخستنیش نییە. کارەکان لە هەمان transaction زیاد دەکرێن کە گۆڕانکارییەکەی دروست کردووە، بۆیە شکان ناتوانێت یەکێک لەدەست بدات یان دووجاری بنێرێت. QUIRE_QUEUE_DRIVER لێرە بەپێی بنەڕەت pgbossە؛ vercel و cloudflare تەنها ئاگادارکردنەوەی سووک و گەیاندنی webhook دەگوازنەوە بۆ queueی تایبەتی پلاتفۆرم، و ڕێنماییەکانی Vercel و Cloudflare کاریان و چۆنیەتی زیادکردنی کار لەلایەن توڕی وێب ڕوون دەکەنەوە.

ئیمەیڵ

یەکێک لەم ڕێکخستنانە دابنێ:

  • QUIRE_EMAIL_PROVIDER_CONFIG: شتەکەی JSON کە دابینکەری HTTP و زانیارییە نهێنییەکانی ناو دەبات، وەک {"provider":"postmark","token":"..."}. Postmark، Amazon SES، Mailgun، SendGrid و Resend پشتیوانی دەکرێن.
  • QUIRE_SMTP_URL: smtp://user:password@host:587. تەنها ئەم ئامانجەیە؛ ئامانجە serverlessەکان SMTP ڕادەگرن.

QUIRE_MAIL_FROM نێرەرە. بۆ تاقیکردنەوەی Quire، profileی devmail دەست پێ بکە، QUIRE_SMTP_URL=smtp://mailpit:1025 دابنێ و ئیمەیڵ لە http://localhost:8025 بخوێنەوە.

خزمەتگوزارییە ئیختیارییەکان

ڕێکخستن لەگەڵ Profile
CLAMAV_URL=tcp://clamav:3310 scan
GOTENBERG_URL=http://gotenberg:3000 preview
IMGPROXY_KEY، IMGPROXY_SALT images
VALKEY_URL=redis://valkey:6379 cache
QUIRE_OPENSEARCH_URL یان QUIRE_MEILISEARCH_URL گەڕانی دەرەکی؛ ئەگەر نەبێت دەقی تەواوی Postgres بەکاردێت
QUIRE_BREACH_CHECK_PROVIDER=off، QUIRE_BREACH_CHECK_URL پشکنینی پێشێلکردنی وشەی نهێنی. بەپێی بنەڕەت لەسەر api.pwnedpasswords.com چالاکە (تەنها پێشگری hashی پێنج پیت دەنێردرێت)؛ off ناچالاکی دەکات و URLەکە ئاماژە بۆ APIی مەودای میوانداریکراوی خۆت دەکات

چاودێری

OTEL_EXPORTER_OTLP_ENDPOINT کۆکەرەوەکە ناو دەبات کە هەر پرۆسەیەک trace و پێوەرەکان بۆی دەنێرێت؛ لەگەڵ profileی observability، ئەمە http://otelcol:4318ە و docker/otel-collector.yaml شوێنی زیادکردنی هەناردەری پاشکۆکەتە. پرۆسەکانی web، worker، scheduler، content و collab کاتێک دابنرێت spanەکان بە OTLP/HTTP هەناردە دەکەن (داواکاریی وێب، transactionی بنکەدراوەی tenant، کاری worker و بانگکردنە دەرچووەکان)، و هەر خولەک پێوەرەکان بۆ هەمان خاڵ دەنێرن (OTEL_METRICS_EXPORTER=none ناچالاکیان دەکات). OTEL_TRACES_SAMPLER_ARG ڕێژەی traceە پارێزراوەکان دیاری دەکات. تۆمارەکان لە دەرچوونی ئاسایی لە LOG_LEVELن و Compose سوڕاندنەوەیان بۆ ئەنجام دەدات. Trace هەرگیز داتای کەسی ناگرێت.

دەرچوونی ناوچەیی (نیشتەجێبوونی داتای EU)

QUIRE_REGION=eu واتە stack خزمەتی دامەزراوەکانی یەکێتی ئەوروپا دەکات. worker پاشان هەر داواکارییەکی دەرەکی کە لە ناوی دامەزراوەیەک کە بە EU جێگیرکراوە دەکرێت بە لیستی ڕێگەپێدراو سنووردار دەکات (21-compliance.md بەشی 8.1). لیستەکە ئەو hostانەیە کە خزمەتگوزارییە ڕێکخراوەکان بۆ ناوچەکە ڕایدەگەیەنن (خاڵی هەڵگرتن، دابینکەری ئیمەیڵ، دابینکەری ڤیدیۆی میوانداریکراو، ئامانجەکانی هەڵگرتنی تایبەتی دامەزراوە، دابینکەرانی AI و هەژماری ئیمەیڵ)، hostی هەر خزمەتگوزارییەک لە ژێر لێدوانێکی چالاک، و ئەو hostانەی لە QUIRE_EGRESS_ALLOW_HOSTSدا دەیاننووسیت. داواکاری بۆ هەر hostێکی گشتیی تر پێش ناردنی ڕەت دەکرێتەوە؛ ڕەتکردنەوەکە لە تۆماری پشکنینی دامەزراوە وەک privacy/egress_refused تۆمار دەکرێت و لە پابەندبوون، نیشتەجێبوونی داتا لیست دەکرێت.

ڕێکخستن نرخەکان کاریگەری
QUIRE_EGRESS_ALLOW_HOSTS لیستی ناوی host بە کۆما جیاکراوە، یان *.example.org بۆ هەموو ژێردۆمەینەکان hostە زیادەکانی کە دامەزراوەی EU دەتوانێت پێیان بگات. خاڵەکانی webhook، xAPI و SIEM، feedی بلاگ و hostەکانی Amazon SES لێرە شوێنیانە، چونکە هەڵبژاردەی تایبەتی دامەزراوەن و هیچ خزمەتگوزارییەک نایان ڕادەگەیەنێت. loopback، ناونیشانی تایبەت و ناوی یەک‌پیتی وەک web یان clamav تۆڕی خۆتن و هەرگیز ناپشکنرێن

دامەزراوەکانی UK و US بە لیستی host سنووردار ناکرێن؛ پشکنینی ناوچەی خزمەتگوزاری دەپارێزن. لیستەکە لە worker دابنێ؛ پەڕەی بەڕێوەبەر لەسەر توڕی وێب دەیخوێنێتەوە بۆ پیشاندانی لیستی ڕێگەپێدراو، بۆیە لە docker/.env دایبنێ کە هەموو خزمەتگوزارییەکان دەیخوێننەوە.

پشکنینی بەرنامە هەڵەیەکی ڕوون و تۆماری پشکنین دروست دەکات و ئەمە گەرەنتییەکە نییە: کۆد دەتوانێت هەڵە بێت. گەرەنتییەکە تۆڕە. Compose خۆی جێبەجێی ناکات. بۆ stackێکی ناوچەیی، خزمەتگوزاریی worker و web لە تۆڕێکی internal: true دابنێ کە تەنها ڕێگای دەرچوونی پراکسیی دەرچوونیە (بۆ نموونە قاچاخانەی Squid یان tinyproxy) کە هەمان hostەکانی QUIRE_EGRESS_ALLOW_HOSTS و hostی خزمەتگوزارییە ڕێکخراوەکان ڕێگەپێدەدات؛ پاشان HTTPS_PROXY بۆ ئەو خزمەتگوزارییانە دابنێ. پەڕەی نیشتەجێبوونی داتا ئەو hostانەی بە تەواوی لیست دەکات کە بەرنامە ڕێگەیان پێ دەدات، بۆیە دەتوانرێت دوو لیستەکە بەراورد بکرێن.

تەندروستی

خاڵی کۆتایی واتا
/healthz زیندوویی: پرۆسەکە وەڵام دەداتەوە. پشکنینی تەندروستیی Compose ئەمە بەکاردەهێنن
/readyz ئامادەیی: پەیوەندییە پێویستەکان دەستپێدەگەن و هەر خزمەتگوزارییەکی ئیختیاری وەک ڕێکخراو یان نا ڕاپۆرت کراوە. load balancerەکەت بۆ ئەمە ئاراستە بکە

docker compose -f docker/compose.yaml ps دۆخی تەندروستیی هەر خزمەتگوزارییەک پیشان دەدات.

TLS

خزمەتگوزاری proxy (Caddy، Apache-2.0، docker/caddy/Caddyfile) بەشێکە لە stackی بنەڕەت. لە پۆرتەکانی 80 و 443 وەڵام دەداتەوە و ئەمانە ڕێنوێنی دەکات:

Host یان ڕێڕەو دەچێت بۆ
QUIRE_PROXY_CONTENT_HOST content
QUIRE_PROXY_APP_HOST، هەموو ژێردۆمەین و دۆمەینی تایبەتی tenant web
/_collab/ لەو hostانە collab (websocket، QUIRE_COLLAB_URL)
/_realtime/connection/ لەو hostانە websocketی کڕیاری centrifugo؛ APIی ڕاژەکاری ئەو هەرگیز دەرناکەوێت
/_images/ لەو hostانە imgproxy، لەگەڵ profileی images (IMGPROXY_URL)

init-env.sh، QUIRE_PROXY_APP_HOST، QUIRE_PROXY_CONTENT_HOST، QUIRE_PROXY_HTTPS_PORT، QUIRE_COLLAB_URL و IMGPROXY_URL لەو دوو بنەچەیەوە حیساب دەکات، بۆیە لەیەکتر جیانابنەوە. ئەگەر بە دەست بنەچەیەک دەگۆڕیت، هەموویان پێکەوە دەستکاری بکە.

بڕوانامەکان بە QUIRE_PROXY_TLS ڕێکدەخرێن:

  • internal (بنەڕەت): دەسەڵاتی بڕوانامەی تایبەتی Caddy بۆ localhost، *.localhost و lvh.me. یەک جار متمانە بە ڕەگی بکە و پاشان وێبگەڕی بکەرەوە:

    docker compose -f docker/compose.yaml cp \
      proxy:/data/caddy/pki/authorities/local/root.crt ./quire-local-ca.crt

    quire-local-ca.crt زیاد بکە بۆ کۆگای متمانەی سیستەم یان وێبگەڕ. curl بە --cacert وەریدەگرێت.

  • ناونیشانی ئیمەیڵ: بڕوانامەی خۆکاری ACME (Let’s Encrypt، پاشان ZeroSSL) بۆ ناوی hostی ڕاستەقینە. DNSی هەردوو بنەچە و هەر hostێکی tenant دەبێت بۆ ئێرە ئاماژە بکات و پۆرتی 80 و 443 لە ئینتەرنێتەوە دەستڕاگەیشتوو بن.

Hostی tenant کاتێک داوا دەکرێت کە یەکەم جار سەردانی دەکرێت و تەنها کاتێک web پشتڕاستی دەکاتەوە ناوەکە سەر بە ئەم دامەزراندنەیە (/tls-allowed، لە تۆڕی Compose داوای دەکرێت). بڕوانامەی wildcard یان پێوەکراوی دابینکەری DNS پێویست نییە؛ کەسێکی نامۆ بە ئاماژەپێدانی ناوێک بۆ میواندارەکە ناتوانێت وای لێ بکات داوای بڕوانامە بکات. بڕوانامە و دەسەڵاتی ناوخۆیی لە حەوزەی caddy-dataن؛ ئەگەر internal بەکاردەهێنیت لەگەڵ ئەوانی تر پاڵپشتییان وەربگرە.

Web باوەڕی بە X-Forwarded-For تەنها لە پراکسییەکەیە: پراکسی ناونیشانی جێگیری هەیە (QUIRE_PROXY_ADDRESS، بەپێی بنەڕەت 172.29.64.10) لەسەر ژێرتۆڕێکی جێگیر (QUIRE_COMPOSE_SUBNET) و QUIRE_TRUSTED_PROXY_CIDRS ئەو ناونیشانە دیاری دەکات. ئەگەر ژێرتۆڕەکە لەگەڵ تۆڕێکی میواندار ناکۆکە، هەردووکیان بگۆڕە، فەرمانی docker compose down جێبەجێ بکە و دواتر up بکە.

لە پشت reverse proxyی خۆت

بۆ بەکارهێنانی load balancer یان پراکسییەک کە پێشتر بەڕێوەی دەبەیت، proxy لاببە (docker compose up -d --scale proxy=0) و TLS لە پێش web (8080)، content (8081)، collab (1234، websocket) و centrifugo (8000، websocket) کۆتایی پێ بهێنە. ناونیشانە گشتییەکان لە QUIRE_APP_ORIGIN، QUIRE_CONTENT_ORIGIN و QUIRE_COLLAB_URL (wss://) دابنێ و مەودای ناونیشانی پراکسیی خۆت لە QUIRE_TRUSTED_PROXY_CIDRS بنووسە.

چارەسەرکردنی کێشە

  • init بە “QUIRE_DATABASE_ID is not a UUID” دەردەچێت: بە uuidgen دایبنێ.
  • web بە “did not start on compose” دووبارە دەست پێ دەکات: تۆمارەکە هەر ڕێکخستنێک لیست دەکات کە ناتوانێت قبووڵی بکات و چی لە جیاتی بەکاربهێنیت.
  • گۆڕینی وشەی نهێنیی ڕۆڵ لە .env دوای یەکەم دەستپێکردن هیچ کاریگەرییەکی نییە: سکریپتی init تەنها یەک جار کار دەکات. ALTER ROLE بەکاربهێنە.
  • بارکردنەکان لەکاتی دانانی CLAMAV_URL بە هەڵەی پشکنین شکست دەهێنن: ClamAV واژۆکانی خۆی لە یەکەم دەستپێکردندا دادەگرێت و چەند خولەک دەخایەنێت.
ڕێنیشاندەر

بۆ گەڕان بنووسە…

↑↓ بۆ گەڕان↵ بۆ هەڵبژاردنEsc بۆ داخستن