ئەمە بەرهەمی تەواوە لەسەر یەک میواندار: 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 initdocker/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 بە ڕیزبەندییەکی جێگیر دەست پێ دەکات و هەر هەنگاوێک چاوەڕێی پێشووی دەکات:
postgresتەندروست دەبێت. لە یەکەم دەستپێکردندا سکریپتی دامەزراندنی (docker/postgres/init/90-passwords.sh) وشەی نهێنیی چوار ڕۆڵەکە دادەنێت.migrateهەموو کۆچکردنەکان و queueی کار لە بنکەدراوەی کۆنترۆڵ و هەر بنکەدراوەی tenantی تایبەت دادەمەزرێنێت، هاوڕایییان دەپشکنێت و دەرچێت (docs/ops/upgrade.md). کۆچکردن لە هەر دەستپێکردنێکدا ڕوودەدات و idempotentە، بۆیە نوێکردنەوە وێنەیەکی نوێ و دەستپێکردنەوەیە.init(apps/web/src/first-run.ts) بنکەدراوەی بەرنامە لە ژێرQUIRE_DATABASE_IDتۆمار دەکات و ئەگەرQUIRE_SETUP_ADMIN_EMAILدانرابێت یەکەم دامەزراوە و بەڕێوەبەری دروست دەکات. ناونیشانی چوونەژوورەوە و وشەی نهێنیی دروستکراو جارێک لەdocker compose logs initچاپ دەکرێن.web،content،worker،scheduler،collabوcentrifugoدەست پێ دەکەن.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.crtquire-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 واژۆکانی خۆی لە یەکەم دەستپێکردندا دادەگرێت و چەند خولەک دەخایەنێت.