پیکربندی
میترا کاملاً با متغیرهای محیطی پیکربندی میشود. فایل پیکربندیای برای 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 هم به همان اندازه خوب کار میکند. تغییر با شروع بعدی میترا اعمال میشود:
docker compose up -dچه چیزی باید روی سرور راهاندازی شود
Section titled “چه چیزی باید روی سرور راهاندازی شود”تقریباً هیچ چیز. افراد تقویمهای میترا، CalDAV، تقویم اپل، اشتراکهای تقویم، Notion و Tempo را خودشان در برنامه اضافه میکنند.
دو چیز به اعتبارنامههایی نیاز دارند که ابتدا باید نزد کس دیگری ثبت کنید: تقویم گوگل (MITRA_GOOGLE_*) و ورود به حساب (MITRA_OIDC_*).
پشت HTTPS بگذارید
Section titled “پشت HTTPS بگذارید”به محض اینکه میترا از جایی غیر از دستگاه خودتان در دسترس است، آن را پشت یک 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'تنظیم نشانی عمومی
Section titled “تنظیم نشانی عمومی”MITRA_URL نشانیای است که افراد در مرورگر مینویسند تا به میترا برسند، نه نشانی داخلی container:
environment: MITRA_URL: 'https://mitra.example.com'میترا نشانیهای بازگشت برای تقویم گوگل و ورود به حساب را از آن میسازد و اگر با https:// شروع شود کوکیهایش را امن علامت میزند. تا وقتی میترا را روی http://localhost امتحان میکنید میتوانید آن را نگذارید. به محض اینکه میترا نشانی واقعی پیدا کرد تنظیمش کنید، و برای روشن کردن ورود به حساب باید تنظیمش کنید.
نامگذاری نمونه شما
Section titled “نامگذاری نمونه شما”MITRA_NAME «میترا» را در نوار کناری و زبانه مرورگر عوض میکند:
environment: MITRA_NAME: 'Family Calendar'کلیک روی نام، گفتگوی درباره را باز میکند که نسخه و commit در حال اجرا را نشان میدهد. برنامه نصبشده نام و آیکون «میترا» را نگه میدارد، چون اینها هنگام ساخت برنامه ثابت میشوند.
همه متغیرها
Section titled “همه متغیرها”| متغیر | پیشفرض | توضیح |
|---|---|---|
MITRA_URL | (تنظیمنشده) | نشانی عمومی که افراد با آن به میترا میرسند، مثل https://mitra.example.com. نشانیهای بازگشت برای ورود به حساب و تقویم گوگل، و امن بودن کوکیها، از آن میآیند. تا وقتی میترا را روی localhost امتحان میکنید اختیاری است، برای ورود به حساب الزامی است، و برای تقویم گوگل و هر سرور عمومی توصیه میشود. |
MITRA_NAME | (میترا، به زبان هر فرد) | نامی که در نوار کناری و زبانه مرورگر نشان داده میشود. برنامه نصبشده «میترا» میماند. |
MITRA_PORT | 3000 | پورتی که سرور روی آن گوش میدهد. با Docker، به جای آن سمت میزبانِ نگاشت پورت را عوض کنید؛ این را فقط وقتی تنظیم کنید که خود فرایند باید جای دیگری گوش دهد. بررسی سلامت داخلی از آن پیروی میکند. |
MITRA_LOG_LEVEL | info | میزان گزارش میترا: error، warn، info، debug یا trace. هر سطح شامل همه سطحهای آرامتر از خودش است. |
MITRA_UPDATE_CHECK | (روشن) | برای خاموش کردن بررسی بهروزرسانی آن را روی off (یا false، 0، no) بگذارید. |
یادآورها
Section titled “یادآورها”| متغیر | پیشفرض | توضیح |
|---|---|---|
MITRA_VAPID_SUBJECT | mailto:mitra@localhost | تماسی که سرویسهای push برای یادآورهای سرور شما میبینند، معمولاً یک نشانی mailto:. هیچیک از کاربران میترا آن را نمیبیند. کلیدهای امضا خودکار ساخته میشوند، پس چیز دیگری برای تنظیم نیست. |
| متغیر | پیشفرض | توضیح |
|---|---|---|
MITRA_PHOTON_URL | https://photon.komoot.io | geocoder Photon پشت فیلد مکان. به جای نمونه عمومی komoot، آن را به نمونه Photon خودتان اشاره دهید. |
تقویم گوگل
Section titled “تقویم گوگل”هر دو را تنظیم کنید تا افراد بتوانند تقویم گوگل را وصل کنند. تنظیم فقط شناسه، میترا را از شروع شدن بازمیدارد.
| متغیر | پیشفرض | توضیح |
|---|---|---|
MITRA_GOOGLE_CLIENT_ID | (تنظیمنشده) | شناسه کلاینت OAuth از Google Cloud console. |
MITRA_GOOGLE_CLIENT_SECRET | (تنظیمنشده) | رمز محرمانه کلاینت OAuth. هر وقت MITRA_GOOGLE_CLIENT_ID تنظیم شده باشد الزامی است. |
ورود یکپارچه (single sign-on)
Section titled “ورود یکپارچه (single sign-on)”تنظیم 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_SCOPES | openid profile email | scopeهایی که میترا میخواهد، با فاصله جدا شدهاند. openid الزامی است؛ profile و email نام و ایمیل هر فرد را به میترا میدهند. |
تنظیمشده توسط build
Section titled “تنظیمشده توسط build”اینها را روی سرور تنظیم نمیکنید. build یا image آنها را میگذارد، یا برای کار روی خود میترا هستند.
| متغیر | تنظیمکننده | توضیح |
|---|---|---|
MITRA_VERSION | Build | نسخهای که در image ساخته شده است. |
MITRA_COMMIT | Build | commit ای که در image ساخته شده است. |
MITRA_DEV | توسعه | هنگام کار روی میترا یکپارچهسازی Demo، مجموعهای از تقویمهای نمونه، را پیشنهاد میدهد. |
NODE_ENV | Image | در 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'