رفتن به محتوا

مدیریت۱۷ مهر ۱۴۰۵۵ دقیقه مطالعه

پیکربندی

میترا کاملاً با متغیرهای محیطی پیکربندی می‌شود. فایل پیکربندی‌ای برای mount کردن نیست: متغیرها را روی container تنظیم می‌کنید و میترا هنگام شروع آن‌ها را می‌خواند. هر متغیر اختیاری است و متغیری که تنظیم نکنید از مقدار پیش‌فرضی که در ادامه آمده استفاده می‌کند.

با Docker Compose، آن‌ها در بلوک environment قرار می‌گیرند:

services:
mitra:
image: ghcr.io/a11delavar/mitra:latest
environment:
MITRA_URL: 'https://mitra.example.com'
MITRA_NAME: 'Family Calendar'

اگر ترجیح می‌دهید رمزها در فایل compose نباشند، یک فایل .env یا Docker secrets هم به همان اندازه خوب کار می‌کند. تغییر با شروع بعدی میترا اعمال می‌شود:

Terminal window
docker compose up -d

چه چیزی باید روی سرور راه‌اندازی شود

Section titled “چه چیزی باید روی سرور راه‌اندازی شود”

تقریباً هیچ چیز. افراد تقویم‌های میترا، CalDAV، تقویم اپل، اشتراک‌های تقویم، Notion و Tempo را خودشان در برنامه اضافه می‌کنند.

دو چیز به اعتبارنامه‌هایی نیاز دارند که ابتدا باید نزد کس دیگری ثبت کنید: تقویم گوگل (MITRA_GOOGLE_*) و ورود به حساب (MITRA_OIDC_*).

به محض اینکه میترا از جایی غیر از دستگاه خودتان در دسترس است، آن را پشت یک reverse proxy مثل Caddy، Traefik یا nginx بگذارید و اجازه دهید پروکسی HTTPS را مدیریت کند. خود میترا داخل container با HTTP ساده کار می‌کند. بعضی قابلیت‌ها فقط روی HTTPS کار می‌کنند:

  • مرورگرها یادآورها و نصب برنامه را فقط روی نشانی‌های https:// (و http://localhost) اجازه می‌دهند.
  • کوکی‌های ورود به حساب فقط روی https:// امن علامت می‌خورند و بیشتر ارائه‌دهندگان هویت بر نشانی redirect با https:// پافشاری می‌کنند.
  • تقویم گوگل نشانی redirect با https:// می‌خواهد.

سپس MITRA_URL را روی نشانی عمومی تنظیم کنید.

با Caddy، همین کافی است:

mitra.example.com {
reverse_proxy localhost:3000
}

با Traefik، با label روی سرویس به میترا مسیر بدهید:

services:
mitra:
image: ghcr.io/a11delavar/mitra:latest
restart: unless-stopped
volumes:
- ~/mitra:/app/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.mitra.rule=Host(`mitra.example.com`)"
- "traefik.http.services.mitra.loadbalancer.server.port=3000"
environment:
MITRA_URL: 'https://mitra.example.com'

MITRA_URL نشانی‌ای است که افراد در مرورگر می‌نویسند تا به میترا برسند، نه نشانی داخلی container:

environment:
MITRA_URL: 'https://mitra.example.com'

میترا نشانی‌های بازگشت برای تقویم گوگل و ورود به حساب را از آن می‌سازد و اگر با https:// شروع شود کوکی‌هایش را امن علامت می‌زند. تا وقتی میترا را روی http://localhost امتحان می‌کنید می‌توانید آن را نگذارید. به محض اینکه میترا نشانی واقعی پیدا کرد تنظیمش کنید، و برای روشن کردن ورود به حساب باید تنظیمش کنید.

MITRA_NAME «میترا» را در نوار کناری و زبانه مرورگر عوض می‌کند:

environment:
MITRA_NAME: 'Family Calendar'

کلیک روی نام، گفتگوی درباره را باز می‌کند که نسخه و commit در حال اجرا را نشان می‌دهد. برنامه نصب‌شده نام و آیکون «میترا» را نگه می‌دارد، چون این‌ها هنگام ساخت برنامه ثابت می‌شوند.

متغیرپیش‌فرضتوضیح
MITRA_URL(تنظیم‌نشده)نشانی عمومی که افراد با آن به میترا می‌رسند، مثل https://mitra.example.com. نشانی‌های بازگشت برای ورود به حساب و تقویم گوگل، و امن بودن کوکی‌ها، از آن می‌آیند. تا وقتی میترا را روی localhost امتحان می‌کنید اختیاری است، برای ورود به حساب الزامی است، و برای تقویم گوگل و هر سرور عمومی توصیه می‌شود.
MITRA_NAME(میترا، به زبان هر فرد)نامی که در نوار کناری و زبانه مرورگر نشان داده می‌شود. برنامه نصب‌شده «میترا» می‌ماند.
MITRA_PORT3000پورتی که سرور روی آن گوش می‌دهد. با Docker، به جای آن سمت میزبانِ نگاشت پورت را عوض کنید؛ این را فقط وقتی تنظیم کنید که خود فرایند باید جای دیگری گوش دهد. بررسی سلامت داخلی از آن پیروی می‌کند.
MITRA_LOG_LEVELinfoمیزان گزارش میترا: error، warn، info، debug یا trace. هر سطح شامل همه سطح‌های آرام‌تر از خودش است.
MITRA_UPDATE_CHECK(روشن)برای خاموش کردن بررسی به‌روزرسانی آن را روی off (یا false، 0، no) بگذارید.
متغیرپیش‌فرضتوضیح
MITRA_VAPID_SUBJECTmailto:mitra@localhostتماسی که سرویس‌های push برای یادآورهای سرور شما می‌بینند، معمولاً یک نشانی mailto:. هیچ‌یک از کاربران میترا آن را نمی‌بیند. کلیدهای امضا خودکار ساخته می‌شوند، پس چیز دیگری برای تنظیم نیست.
متغیرپیش‌فرضتوضیح
MITRA_PHOTON_URLhttps://photon.komoot.iogeocoder Photon پشت فیلد مکان. به جای نمونه عمومی komoot، آن را به نمونه Photon خودتان اشاره دهید.

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

متغیرپیش‌فرضتوضیح
MITRA_GOOGLE_CLIENT_ID(تنظیم‌نشده)شناسه کلاینت OAuth از Google Cloud console.
MITRA_GOOGLE_CLIENT_SECRET(تنظیم‌نشده)رمز محرمانه کلاینت OAuth. هر وقت MITRA_GOOGLE_CLIENT_ID تنظیم شده باشد الزامی است.

تنظیم MITRA_OIDC_ISSUER ورود به حساب را روشن می‌کند. اگر متغیرهایی که نیاز دارد نباشند، میترا از شروع شدن امتناع می‌کند.

متغیرپیش‌فرضتوضیح
MITRA_OIDC_ISSUER(تنظیم‌نشده)نشانی issuer ارائه‌دهنده OIDC شما. به MITRA_OIDC_CLIENT_ID و MITRA_URL نیاز دارد.
MITRA_OIDC_CLIENT_ID(تنظیم‌نشده)شناسه کلاینتی که نزد ارائه‌دهنده‌تان ثبت شده.
MITRA_OIDC_CLIENT_SECRET(تنظیم‌نشده)رمز محرمانه کلاینت. برای کلاینت عمومی کنارش بگذارید؛ میترا همیشه از PKCE استفاده می‌کند.
MITRA_OIDC_SCOPESopenid profile emailscopeهایی که میترا می‌خواهد، با فاصله جدا شده‌اند. openid الزامی است؛ profile و email نام و ایمیل هر فرد را به میترا می‌دهند.

این‌ها را روی سرور تنظیم نمی‌کنید. build یا image آن‌ها را می‌گذارد، یا برای کار روی خود میترا هستند.

متغیرتنظیم‌کنندهتوضیح
MITRA_VERSIONBuildنسخه‌ای که در image ساخته شده است.
MITRA_COMMITBuildcommit ای که در image ساخته شده است.
MITRA_DEVتوسعههنگام کار روی میترا یکپارچه‌سازی Demo، مجموعه‌ای از تقویم‌های نمونه، را پیشنهاد می‌دهد.
NODE_ENVImageدر image کانتینر production است.

سروری با ورود به حساب، تقویم گوگل و geocoder مخصوص خودش:

services:
mitra:
image: ghcr.io/a11delavar/mitra:latest
restart: unless-stopped
ports:
- '3000:3000'
volumes:
- ~/mitra:/app/data
environment:
MITRA_URL: 'https://mitra.example.com'
MITRA_NAME: 'Family Calendar'
# Sign-in
MITRA_OIDC_ISSUER: 'https://auth.example.com'
MITRA_OIDC_CLIENT_ID: 'mitra'
MITRA_OIDC_CLIENT_SECRET: '…'
# Google Calendar
MITRA_GOOGLE_CLIENT_ID: '….apps.googleusercontent.com'
MITRA_GOOGLE_CLIENT_SECRET: '…'
# Your own geocoder
MITRA_PHOTON_URL: 'https://photon.internal.example.com'