Məzmunu keç

Quire-i Docker Compose ilə quraşdırmaq

Quire-i öz infrastrukturunuzda Docker Compose ilə quraşdırın.

Markdown kimi göstər

Bu, bir host üzərindəki tam məhsuldur: LMS, onun fon işləri, real vaxt və birgə redaktə xidmətləri, eləcə də profil vasitəsilə qoşulan bütün əlavə xidmətlər. Dizayn docs/architecture/23-ops.md sənədinin 2-ci bölməsindədir.

Digər hədəflər: Vercel və Cloudflare Workers yalnız veb qatını işlədir. Yeniləmələr upgrade.md, ehtiyat nüsxə və bərpa sınağı isə backup-restore.md sənədindədir.

Lazım olanlar

  • Compose plagini 2.30 və ya daha yeni olan Docker Engine 27 və ya daha yeni.
  • Standart yığın üçün 4 CPU nüvəsi və 8 GB yaddaş; --profile full üçün 8 nüvə və 16 GB (tək ClamAV imzaları üçün təxminən 1.5 GB tutur).
  • Veb qatı üçün DNS adı, etibarsız məzmun üçün isə ikinci ad. Bunlar ayrı hostlar olmalıdır: SCORM paketləri və yüklənmiş HTML məzmun hostunda işləyir ki, LMS kukilərini heç vaxt oxuya bilməsin.
  • Lokal sınaq üçün lvh.me və *.localhost 127.0.0.1-ə yönəlir; docker/.env.example də bundan istifadə edir. Yığının öz proxy xidməti lokal sertifikat mərkəzi ilə hər ikisini https üzərindən təqdim edir, ona görə əlavə heç nə quraşdırılmır (“TLS” bölməsinə baxın).
  • Hostda 80 və 443 portları boş olmalıdır (QUIRE_PROXY_HTTP_PORT və QUIRE_PROXY_HTTPS_PORT ilə dəyişdirilir).

İlk işə salma

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 bütün secret-lər yaradılmaqla docker/.env faylını docker/.env.example əsasında yazır (verilənlər bazası parolları, imza və master açarları, məzmun başlatma açar cütü); həmçinin Compose-un worker-lərə secret kimi qoşduğu audit checkpoint imza açarını docker/secrets/audit-signing-key.pem ünvanında yaradır. Yalnız sh, awk və openssl tələb edir, mövcud docker/.env faylının üzərinə yazmır. Hər iki faylı hostdan kənara köçürün: QUIRE_MASTER_KEY olmadan bərpa edilmiş verilənlər bazası saxlanmış etimadnamələri aça bilməz. Faylı əl ilə doldurmaq üçün cp docker/.env.example docker/.env işlədin; hər secret-in yaradılma qaydası faylda yazılıb.

Hər iki origin https olmalıdır: istehsal mühitində content xidməti adi http-ni rədd edir və origin-lər eyni qeydiyyata alınan domeni paylaşmamalıdır. proxy xidməti hər ikisi üçün TLS-i sonlandırır (“TLS” bölməsinə baxın); init-env.sh http:// origin-i rədd edir.

Yığın müəyyən ardıcıllıqla başlayır, hər addım əvvəlkinin bitməsini gözləyir:

  1. postgres sağlam vəziyyətə keçir. İlk başladıqda init skripti (docker/postgres/init/90-passwords.sh) dörd rol parolunu təyin edir.
  2. migrate hər miqrasiyanı tətbiq edir, idarəetmə verilənlər bazasında və hər ayrılmış tenant bazasında iş növbəsini qurur, hamısının uyğunluğunu yoxlayır, sonra çıxır (docs/ops/upgrade.md). Miqrasiyalar hər başladıqda işləyir və idempotentdir; yeniləmə yeni obraz və yenidən başlatmadır.
  3. init (apps/web/src/first-run.ts) tətbiq verilənlər bazasını QUIRE_DATABASE_ID altında qeydə alır və QUIRE_SETUP_ADMIN_EMAIL verilibsə, ilk təşkilatı və administratorunu yaradır. Giriş ünvanı və yaradılmış parol docker compose logs init jurnalında bir dəfə göstərilir.
  4. web, content, worker, scheduler, collab və centrifugo başlayır.
  5. proxy, web və content sağlam olduqdan sonra başlayır.

Tətbiq domeninizdən sonra https://demo. ünvanını açın (dəqiq giriş ünvanı init jurnalında göstərilir) və daxil olun. Lokal quraşdırmada əvvəlcə proxy sertifikat mərkəzinə etibar edin (“TLS” bölməsinə baxın). Yaradılmış parolu /account/security ünvanında dəyişin.

Tələb olunan secret-i olmayan proses başlamır və jurnalında çatışmayan parametrin adını bildirir. Heç nə yarımçıq konfiqurasiya ilə işləmir.

Xidmətlər və profillər

Xidmət Profil Nə edir
postgres həmişə Verilənlər bazası ( docker/postgres.Dockerfile faylından yığılan PostgreSQL 18 və pgvector), ilk başladıqdan WAL arxivlənir
migrate, init həmişə Birdəfəlik: miqrasiyalar, sonra ilk işə salma
web həmişə LMS, QUIRE_HTTP_PORT portunda (8080)
content həmişə Etibarsız məzmun origin-i, QUIRE_CONTENT_PORT portunda (8081)
worker həmişə Fon işləri: e-poçt, hesabatlar, fayl emalı, vebhuklar
scheduler həmişə Təkrarlanan işlər: 64 icra vaxtı cədvəlini qeydə alıb worker-ə ötürür; eyni vaxtda bir lider
collab həmişə Birgə redaktə websocket-i, QUIRE_COLLAB_HTTP_PORT portunda (1234)
centrifugo həmişə Real vaxt yayımı, QUIRE_REALTIME_PORT portunda (8000)
proxy həmişə Caddy, 80 və 443 portlarında TLS giriş qapısı (“TLS” bölməsinə baxın)
valkey cache Keş və sürət limitləri
clamav scan Yükləmələrdə zərərli proqram axtarışı
gotenberg preview Office sənədlərindən PDF önbaxışı, sertifikatların render edilməsi
imgproxy images Şəkillərin ölçüsünün dəyişdirilməsi və çevrilməsi
transcoder video Video versiyaları üçün yalnız LGPL lisenziyalı ffmpeg-i olan worker obrazı
seaweedfs storage Bu hostda S3 ilə uyğun obyekt saxlama
otelcol observability OpenTelemetry toplayıcısı
mailpit devmail Quire-i sınaqdan keçirərkən bütün çıxan e-poçtları tutur
backup backup Birdəfəlik əsas ehtiyat nüsxə; backup-restore.md bölməsinə baxın
backup-scheduler, backup-offsite backup Hər QUIRE_BACKUP_INTERVAL_HOURS müddətində əsas ehtiyat nüsxə və həftəlik yoxlama sınağı ilə hostdan kənar şifrəli surətlər
h5p h5p QUIRE_H5P_IMAGE-də verdiyiniz H5P LTI 1.3 alət obrazı, QUIRE_H5P_PORT portunda (8090); “H5P provayderini qoşmaq” bölməsinə baxın

--profile full backup və h5p istisna olmaqla bütün əlavə xidmətləri başladır. Birini başlatmaq üçün docker compose -f docker/compose.yaml --profile scan up -d işlədin. Əlavə xidmət olmasa da Quire işləyir və çatışmayanı bildirir: skaner yoxdursa, yükləmələr yoxlanmadan saxlanır və administratora xəbər verilir; Gotenberg yoxdursa, fayl önbaxış əvəzinə endirmə təklif edir; transcoder yoxdursa, video orijinal fayl kimi oynadılır.

Hər üçüncü tərəf obrazı və onun lisenziya öhdəlikləri docker/third-party-containers.yaml faylında sadalanır.

H5P provayderini qoşmaq

Quire H5P icra mühitini və ya yan xidməti özünə daxil etmir və göndərmir (ADR 0019). H5P-dən istifadə edirsinizsə, ayrıca hostinq abunəliyinizi təqdim edin və ya öz H5P instansiyanızı Quire-dən ayrı idarə edin. Provayderi LTI 1.3 xarici aləti kimi qeydə alıb məzmununu kurslara alət fəaliyyəti kimi əlavə edin. Quire qiymət və fəaliyyət/qiymətləndirmə irəliləyişini LTI Assignment and Grade Services (AGS) vasitəsilə mübadilə edir. Provayder xAPI bəyanatları da göndərirsə, bunu Quire xAPI bəyanat anbarı üçün ayrıca qurun; AGS qiymət/irəliləyiş mübadiləsi xAPI bəyanatı göndərmir. Moodle idxalı H5P fəaliyyətlərinin LTI aləti bağlantısı tələb etdiyini bildirir. H5P icra mühiti, müəlliflik, məzmun bankı və cəhd tarixçəsi provayderin məsuliyyətində qalır.

Özünüz idarə etdiyiniz instansiyanı bu hostda işlətmək üçün QUIRE_H5P_IMAGE parametrinə obrazı verin və h5p profilini başladın. Compose onu QUIRE_H5P_PORT portunda (8090) yayımlayır, məlumatını isə h5p-data həcmində saxlayır; obraz və onun öhdəlikləri sizə aiddir.

Parametrlər

Hər proses docker/.env faylını oxuyur. Şablon olan docker/.env.example standart dəyəri ilə bütün parametrləri sadalayır. Qruplar:

Ünvanlar

Parametr Mənası
QUIRE_APP_ORIGIN LMS-in açıq ünvanı, məsələn, https://learn.example.com
QUIRE_CONTENT_ORIGIN Ayrı hostdakı məzmun origin-i
QUIRE_PLATFORM_DOMAINS Təşkilatların yerləşdiyi domenlər, vergüllə ayrılır
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 Burada compose. vercel və cloudflare üçün digər təlimatlara baxın
QUIRE_TRUSTED_PROXY_CIDRS X-Forwarded-For məlumatına etibar edilən proxy-lər

Secret-lər

Parametr Mənası
QUIRE_SECRET_KEY Sessiya və tokenləri imzalayır. 64 hexadecimal simvol
QUIRE_MASTER_KEY SSO və vebhuk secret-ləri kimi saxlanmış etimadnamələri bükür. 32 bayt, base64. Veb qatı və worker eyni dəyərə ehtiyac duyur. Dəyişdirmə: key-rotation.md
QUIRE_MASTER_KEY_VERSION Master açarın versiya etiketi; boşdursa v1. Dəyişdirəndə artırın
QUIRE_MASTER_KEY_RETIRED Əvvəlki açarlar, möhürlədiklərini oxumaq üçün lazımdır; məsələn, v1=<base64>. Heç nə açılmamış qalmadan dəyişdirmə tamamlananda silin
QUIRE_COLLAB_SIGNING_KEY Redaktə tokenlərini imzalamaq üçün web və collab tərəfindən ortaq istifadə edilir
QUIRE_BACKUP_SIGNING_KEY Kurs ehtiyat nüsxələrini imzalayır (istəyə bağlı)

QUIRE_MASTER_KEY surətini bu hostdan başqa yerdə saxlayın. Onsuz bərpa olunmuş verilənlər bazası saxladığı etimadnamələri aça bilməz.

Verilənlər bazası

Parametr Mənası
POSTGRES_PASSWORD Superuser; konteyner və ehtiyat nüsxələr istifadə edir
QUIRE_DB_APP_PASSWORD, QUIRE_DB_MIGRATOR_PASSWORD, QUIRE_DB_REPORT_PASSWORD, QUIRE_DB_AUDIT_PASSWORD İlk başladıqda təyin edilən rol parolları
DATABASE_URL Tətbiq rolu. Etdiyi hər sorğuya sətir səviyyəli təhlükəsizlik tətbiq olunur
DATABASE_MIGRATOR_URL, QUIRE_MIGRATION_URL migrate və init üçün miqrator rolu
QUIRE_SUPERUSER_URL Yalnız ilk başladıqda istifadə olunur
QUIRE_REPORT_DATABASE_URL Hesabatlar və hesabat qurucusu üçün yalnız oxuna bilən hesabat rolu
QUIRE_AUDIT_DATABASE_URL Audit konsolu və SIEM ixracı üçün audit rolu
QUIRE_DATABASE_ID Quraşdırma müddətində sabit qalan istənilən UUID

Rol parolları yalnız verilənlər bazası həcmi ilk dəfə yaradıldıqda tətbiq olunur. Sonradan dəyişmək üçün ALTER ROLE işlədin və uyğun URL-ni yeniləyin.

QUIRE_REPORT_DATABASE_URL DATABASE_URL tərəfindən konfiqurasiya edilmiş fiziki verilənlər bazası üçün istifadə edilir. Digər qeydiyyatdan keçmiş fiziki bazalar üçün web və worker mühitlərində öz quire_report bağlantı URL-sini təyin edin, sonra həmin bazanın Reporting environment variable sahəsinə dəyişən adını env:NAME kimi yazın. İstinad tətbiq bağlantısı ilə eyni bazaya, mümkün olduqda oxuma replikasına yönəlməlidir. Hər hesabat səthi tenant-ı onun öz bazasının hesabat bağlantısına izləyir: hesabat qurucusu və saxlanmış hesabatlar, planlaşdırılmış çatdırılmalar, ixraclar, analitika, audit jurnalı, REST audit resursları və köməkçinin audit axtarışı. Başqa bazanın hesabat URL-sindən heç biri istifadə etmir. Bazada hesabat bağlantısı yoxdursa, adi hesabatlar həmin bazanın öz tətbiq bağlantısında işləyir; analitika və audit oxunuşu isə tətbiq rolu audit izini oxuya bilmədiyindən bunu bildirərək imtina edir.

Sürücülər

Parametr Bu buraxılış Qeydlər
QUIRE_STORAGE_DRIVER local (standart), s3 və ya azure local faylları files həcmində saxlayır. s3 AWS S3, R2, GCS uyğunluğu və digər S3 uyğun saxlama yerlərini, davam etdirilə bilən hissəli yükləmələrlə dəstəkləyir
QUIRE_REALTIME_DRIVER inprocess (standart), sse, centrifugo və ya durable_objects Bir web konteyneri üçün inprocess uyğundur; bir neçə olduqda centrifugo və ya sse işlədin
QUIRE_CACHE_DRIVER memory (standart), postgres və ya valkey memory proses başına ayrıdır; konteynerlər arasında limitlərin qorunması üçün valkey və ya postgres istifadə edin
QUIRE_VIDEO_DRIVER ffmpeg (standart) və ya progressive_mp4 Açarları ilə Cloudflare Stream, Mux və ya Bunny hostinq provayderi də ola bilər
QUIRE_IMAGE_DRIVER noop (standart), imgproxy və ya cloudflare noop hər şəkli orijinal ölçüdə təqdim edir. imgproxy images profili və aşağıdakı parametrləri tələb edir; cloudflare Cloudflare Images istifadə edir
QUIRE_MEETING_PROVIDER bbb, zoom, teams, meet, jitsi və ya in_process Canlı sessiyalar üçün platforma standartı. Boşdursa, təşkilat İnteqrasiyalar, Canlı sessiya provayderi altında öz hesabını qoşanadək canlı sessiyalar konfiqurasiya edilmədiyini bildirir. Təşkilatın öz hesabı həmişə bu dəyərdən üstündür. Hər provayderin parametrləri (BBB_URL və BBB_SECRET, ZOOM_*, TEAMS_*, GOOGLE_MEET_* və JITSI_* dəyişənləri) yalnız burada göstərilən provayder üçün oxunur
QUIRE_MEETING_REGIONS eu, uk, us dəyərlərindən vergüllə ayrılmış siyahı Platforma standart provayderinin görüşləri emal etdiyi yerlər. Boş olduqda, əvvəlki kimi, regiona bağlanmış təşkilatla müqayisə edilmir. Təşkilatın öz hesabı regionları öz səhifəsində göstərir

Bu buraxılışın dəstəkləmədiyi sürücü dəyəri əvəzinə səssizcə standart istifadə etməkdənsə, web qatı başladıqda parametrin adını göstərərək rədd edilir.

Şəkillər

Səhifələr şəkilləri /api/files/{id}/image/{size} üzərindən dörd sabit ölçüdə istəyir; bu endpoint faylın özünə aid eyni giriş icazəsini yoxlayır, sonra şəkil xidmətinə yönləndirir. Hər təşkilat saatda QUIRE_IMAGE_SPECS_PER_HOUR (standart 2000) yeni şəkil-ölçü cütü istəyə bilər; həmin saatda artıq yaradılmış ölçülər sayılmır. Birdən çox web konteyner olduqda limitin hamısında qüvvədə qalması üçün valkey və ya postgres-u QUIRE_CACHE_DRIVER kimi işlədin.

Parametr Sürücü Qeydlər
IMGPROXY_URL imgproxy Brauzerlərin imgproxy-yə çatdığı ünvan, məsələn, https://images.example.org. images profili onu QUIRE_IMAGES_PORT portunda (8082) dərc edir
IMGPROXY_KEY, IMGPROXY_SALT imgproxy imgproxy başladılan zaman istifadə edilənlə eyni hexadecimal dəyərlər. Hər birini openssl rand -hex 32 ilə yaradın. Quire hər şəkil ünvanını imzalayır ki, imgproxy Quire-in istəmədiyi şəkli render edə bilməsin
QUIRE_IMAGE_SOURCE_ORIGIN lokal saxlama ilə imgproxy imgproxy orijinalları haradan gətirir. Compose http://web:3000 təyin edir. s3 və ya azure saxlama ilə imgproxy obyekti bucket-dən gətirir və bu parametr işlədilmir
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_IMAGES_TOKEN, CLOUDFLARE_IMAGES_ACCOUNT_HASH cloudflare Images redaktə icazəli API tokeni və Images, Developer resources bölməsindəki hesab heşi. Hesab üçün çevik variantları aktiv edin
CLOUDFLARE_IMAGES_SIGNING_KEY cloudflare İstəyə bağlıdır. Təyin olunarsa şəkillər məxfi olur, hər ünvan imzalanır və vaxtı bitir. Olmasa, QUIRE_SECRET_KEY-dən yaradılan və heç kimin təxmin edə bilməyəcəyi ünvanlarda açıq olur

Cloudflare Images təqdim etdiyi hər orijinalın öz surətini saxlayır. Fayl silinəndə worker orijinaldan əvvəl bu surəti silir.

Növbə

Fon işləri eyni Postgres verilənlər bazasında pg-boss istifadə edir; ayrıca növbə xidməti və konfiqurasiya tələb olunmur. Tapşırıqlar onları yaradan dəyişikliklə eyni tranzaksiyada növbəyə qoyulur, buna görə qəza işi itirə və ya iki dəfə göndərə bilməz. Burada QUIRE_QUEUE_DRIVER standart olan pgboss-dur; vercel və cloudflare yalnız yüngül bildiriş və vebhuk çatdırılmalarını platformanın öz növbəsinə köçürür. Vercel və Cloudflare təlimatlarında bunlar və web qatının növbəyə necə göndərməsi izah olunur.

E-poçt

Aşağıdakılardan birini təyin edin:

  • QUIRE_EMAIL_PROVIDER_CONFIG: HTTP provayderi və etimadnamələrini göstərən JSON obyekt, məsələn, {"provider":"postmark","token":"..."}. Postmark, Amazon SES, Mailgun, SendGrid və Resend dəstəklənir.
  • QUIRE_SMTP_URL: smtp://user:password@host:587. Yalnız bu hədəf üçündür; serverless hədəflər SMTP-ni bloklayır.

QUIRE_MAIL_FROM göndərəni müəyyən edir. Quire-i sınaqdan keçirmək üçün devmail profilini başladın, QUIRE_SMTP_URL=smtp://mailpit:1025 təyin edin və e-poçta http://localhost:8025 ünvanında baxın.

İxtiyari xidmətlər

Parametr Profil olduqda
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 və ya QUIRE_MEILISEARCH_URL Xarici axtarış; əks halda Postgres tam mətn axtarışı
QUIRE_BREACH_CHECK_PROVIDER=off, QUIRE_BREACH_CHECK_URL Parol sızması yoxlaması. Standart olaraq api.pwnedpasswords.com ünvanında aktivdir (yalnız beş simvolluq heş prefiksi göndərilir); off söndürür, URL isə özünüz host etdiyiniz diapazon API-sini göstərir

Müşahidəolunma

OTEL_EXPORTER_OTLP_ENDPOINT hər prosesin iz və metrik göndərdiyi toplayıcını göstərir; observability profili ilə dəyəri http://otelcol:4318 olur, backend üçün ixracatçını docker/otel-collector.yaml faylında əlavə edin. Təyin edildikdə web qatı, worker, scheduler, content və collab prosesləri span-ları OTLP/HTTP ilə (veb sorğuları, tenant verilənlər bazası tranzaksiyaları, worker işləri və çıxan çağırışlar) və hər dəqiqə eyni endpoint-ə metrik göndərir (OTEL_METRICS_EXPORTER=none onları söndürür). OTEL_TRACES_SAMPLER_ARG saxlanacaq izlərin payını təyin edir. Jurnallar LOG_LEVEL səviyyəsində standart çıxışa gedir; Compose onları fırladır. İzlərdə şəxsi məlumat yoxdur.

Region üzrə çıxış (Aİ məlumat rezidentliyi)

QUIRE_REGION=eu yığının Avropa İttifaqı təşkilatlarına xidmət etdiyini bildirir. Worker bundan sonra Aİ regionuna bağlanmış təşkilat üçün edilən hər çıxan sorğunu icazə siyahısına uyğun yoxlayır (21-compliance.md bölmə 8.1). Siyahı region üçün konfiqurasiya olunmuş xidmətlərin elan etdiyi hostlardan (saxlama endpoint-i, e-poçt provayderi, hostinq video provayderi, təşkilatın öz saxlama hədəfləri, süni intellekt provayderləri və e-poçt hesabı), aktiv istisna icazəsi olan xidmətlərin hostlarından və QUIRE_EGRESS_ALLOW_HOSTS daxilində yazdığınız hostlardan ibarətdir. Başqa açıq hosta sorğu göndərilməzdən əvvəl rədd edilir, rədd privacy/egress_refused kimi təşkilatın audit izinə yazılır və Uyğunluq, Məlumat rezidentliyi altında göstərilir.

Parametr Dəyərlər Təsir
QUIRE_EGRESS_ALLOW_HOSTS Host adlarının vergüllə ayrılmış siyahısı və ya bütün alt domenlər üçün *.example.org Aİ təşkilatının çata biləcəyi əlavə hostlar. Vebhuk, xAPI və SIEM endpoint-ləri, bloq lentləri və Amazon SES hostları bura daxildir, çünki təşkilat özü seçir və xidmət onları elan etmir. Loopback, şəxsi ünvanlar və web və ya clamav kimi tək etiketli adlar öz şəbəkənizdir, heç vaxt yoxlanmır

Böyük Britaniya və ABŞ təşkilatlarına host siyahısı şərti tətbiq edilmir; xidmət regionu yoxlamaları qüvvədə qalır. Siyahını worker-də təyin edin; icazə siyahısını göstərmək üçün admin səhifəsi onu web qatında oxuyur, ona görə bütün xidmətlərin oxuduğu docker/.env faylında saxlayın.

Tətbiq yoxlaması aydın xəta və audit qeydi verir, lakin bu təminat deyil: kodda səhv ola bilər. Təminatı şəbəkə verir. Compose bunu sizin əvəzinizə tətbiq etmir. Regiona uyğun yığın üçün worker və web xidmətlərini yalnız çıxış yolu egress proxy olan internal: true şəbəkəsində yerləşdirin (məsələn, Squid və ya kiçik tinyproxy konteyneri); proxy QUIRE_EGRESS_ALLOW_HOSTS siyahısındakı eyni hostlara və konfiqurasiya edilmiş xidmət hostlarına icazə verməlidir. Həmin xidmətlər üçün HTTPS_PROXY təyin edin. Rezidentlik səhifəsi tətbiqin icazə verdiyi hostları dəqiq sadalayır ki, iki siyahını müqayisə edə biləsiniz.

Sağlamlıq

Endpoint Mənası
/healthz Canlılıq: proses cavab verir. Compose sağlamlıq yoxlamaları bundan istifadə edir
/readyz Hazırlıq: asılılıqlara çatmaq mümkündür və hər əlavə xidmət konfiqurasiya olunub-olunmadığını bildirir. Yük balanslayıcınızı bura yönəldin

docker compose -f docker/compose.yaml ps hər xidmətin sağlamlıq vəziyyətini göstərir.

TLS

proxy xidməti (Caddy, Apache-2.0, docker/caddy/Caddyfile) standart yığının hissəsidir. 80 və 443 portlarında sorğuları qəbul edib belə yönləndirir:

Host və ya yol Hara gedir
QUIRE_PROXY_CONTENT_HOST content
QUIRE_PROXY_APP_HOST, hər tenant alt domeni və fərdi domen web
Həmin hostlarda /_collab/ collab (websocket, QUIRE_COLLAB_URL)
Həmin hostlarda /_realtime/connection/ centrifugo client websocket-i; server API-si heç vaxt açıq edilmir
Həmin hostlarda /_images/ imgproxy, images profili (IMGPROXY_URL) ilə

init-env.sh iki origin-dən QUIRE_PROXY_APP_HOST, QUIRE_PROXY_CONTENT_HOST, QUIRE_PROXY_HTTPS_PORT, QUIRE_COLLAB_URL və IMGPROXY_URL yaradır, beləliklə onlar bir-birindən yayınmır. Origin-i əl ilə dəyişirsinizsə, bunları birlikdə redaktə edin.

Sertifikatlar QUIRE_PROXY_TLS parametrinə tabedir:

  • internal (standart): localhost, *.localhost və lvh.me üçün Caddy-nin öz sertifikat mərkəzi. Kök sertifikata bir dəfə etibar edib sonra baxın:

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

    quire-local-ca.crt faylını sistemin və ya brauzerin etibarlı sertifikat anbarına əlavə edin. curl onu --cacert ilə qəbul edir.

  • E-poçt ünvanı: real host adları üçün avtomatik ACME sertifikatları (Let’s Encrypt, sonra ZeroSSL). Hər iki origin və bütün tenant hostları bu hosta yönəlməli; internetdən 80 və 443 portlarına çatmaq mümkün olmalıdır.

Tenant hostları ilk ziyarət zamanı və yalnız web adın bu quraşdırmaya aid olduğunu təsdiqlədikdə verilir (/tls-allowed, Compose şəbəkəsində soruşulur). Wildcard sertifikat və DNS provayder plagini lazım deyil; hosta ad yönəldən yad şəxs sertifikat sifariş etdirə bilməz. Sertifikatlar və lokal mərkəz caddy-data həcmindədir; internal istifadə edirsinizsə, qalanlarla birlikdə ehtiyat nüsxəsini çıxarın.

Web yalnız proxy-dən gələn X-Forwarded-For məlumatına inanır: proxy-nin sabit (QUIRE_PROXY_ADDRESS, standart 172.29.64.10) ünvanı sabit alt şəbəkədə (QUIRE_COMPOSE_SUBNET) yerləşir və QUIRE_TRUSTED_PROXY_CIDRS həmin ünvanı göstərir. Alt şəbəkə hostdakı şəbəkə ilə toqquşursa, hər ikisini dəyişin, docker compose down işlədin, sonra up başladın.

Öz əks proxy-nizin arxasında

Artıq işlətdiyiniz yük balanslayıcı və ya proxy-dən istifadə etmək üçün proxy-ni kənarda saxlayın (docker compose up -d --scale proxy=0) və TLS-i web (8080), content (8081), collab (1234, websocket) və centrifugo (8000, websocket) qarşısında sonlandırın. Açıq ünvanları QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN və QUIRE_COLLAB_URL (wss://), proxy ünvan diapazonunu isə QUIRE_TRUSTED_PROXY_CIDRS parametrində təyin edin.

Problemlərin aradan qaldırılması

  • init “QUIRE_DATABASE_ID is not a UUID” mesajı ilə çıxır: uuidgen ilə təyin edin.
  • web “did not start on compose” ilə yenidən başlayır: jurnal dəstəkləmədiyi parametrləri və istifadə ediləcək dəyərləri sadalayır.
  • İlk başlamadan sonra .env faylında rol parolunu dəyişmək təsir etmir: init skripti yalnız bir dəfə işləyir. ALTER ROLE istifadə edin.
  • CLAMAV_URL təyin olduğu halda yükləmələr skan xətası verir: ClamAV ilk startda imzalarını endirir, bu bir neçə dəqiqə çəkir.
Naviqasiya

Axtarmaq üçün yazın…

↑↓ naviqasiya↵ seçEsc bağla