التشغيل باستخدام Docker
قيد التطوير
تشغّل الصورة خادم المزامنة وخزنة الويب على منفذ واحد: /v1/… هو الـ API (بما فيه WebSocket على /v1/ws)، وكل ما عداه خزنة الويب. ضعها خلف وكيل عكسي ينهي TLS؛ فالتطبيقات ترفض الخوادم التي لا تستخدم HTTPS.
ابنِ الصورة
Section titled “ابنِ الصورة”من جذر المستودع:
docker build -f apps/server/Dockerfile -t octapass-server .يبني هذا نواة التشفير إلى WebAssembly، ويبني خزنة الويب والخادم، وينسخها إلى صورة distroless تعمل بمستخدم غير جذر. والصور الأساسية مثبّتة بالمعرّف الرقمي (digest).
Docker Compose
Section titled “Docker Compose”يوجد مثال كامل في deploy/octap.app: انسخ المجلد، وغيّر النطاق والبريد الإلكتروني المدعو، ثم شغّل docker compose up -d --build. الأساسيات:
services: octapass: build: { context: ../.., dockerfile: apps/server/Dockerfile } restart: unless-stopped ports: ["127.0.0.1:8380:8080"] # only your proxy should reach it environment: OCTAPASS_PUBLIC_URL: https://vault.example.com OCTAPASS_WEB_ORIGINS: https://vault.example.com OCTAPASS_SIGNUPS: invite OCTAPASS_TRUST_PROXY: "true" OCTAPASS_SMTP_URL: ${OCTAPASS_SMTP_URL:-} OCTAPASS_EMAIL_TO_LOG: ${OCTAPASS_EMAIL_TO_LOG:-false} OCTAPASS_BACKUP_DIR: /backups volumes: - octapass-data:/data - octapass-backups:/backups read_only: true tmpfs: [/tmp] cap_drop: [ALL] security_opt: ["no-new-privileges:true"]
volumes: octapass-data: octapass-backups:ثم وجّه https://vault.example.com إلى 127.0.0.1:8380 في الوكيل (Caddy أو Traefik أو nginx أو نفق Cloudflare)، مع السماح بـ WebSockets.
- من يستطيع التسجيل. مع
OCTAPASS_SIGNUPS=inviteلا يستطيع إنشاء حساب إلا عناوين البريد الموجودة فيOCTAPASS_INVITES(مفصولة بفواصل). وهي مدعوّة في كل تشغيل إلى أن يوجد حسابها؛ ويضيفoctapass-server admin inviteالمزيد دون إعادة تشغيل. - رمز التحقق. يحتاج التسجيل إلى رمز يُرسَل بالبريد الإلكتروني. اضبط
OCTAPASS_SMTP_URL، أو اضبطOCTAPASS_EMAIL_TO_LOG=trueواقرأ الرمز بالأمرdocker compose logs octapass | grep "verification code". لا يُعاد الرمز إلى المتصفح أبدًا خارج وضع التطوير. - خزنة الويب تستخدم دائمًا الخادم الذي تُقدَّم منه. تحصل صفحاتها على سياسة أمان للمحتوى لا تسمح إلا بذلك المصدر مع
wasm-unsafe-eval(نواة التشفير)، وعلى ترويسات العزل بين المصادر. وتحتفظ استجابات الـ API بـdefault-src 'none'. - PostgreSQL بدل SQLite: أضف خدمة
postgres:17واضبطOCTAPASS_DATABASE_URL=postgres://octapass:<password>@db:5432/octapass. النسخ الاحتياطية المجدولة لـ SQLite فقط؛ استخدمpg_dumpهناك.
فحوص السلامة
Section titled “فحوص السلامة”GET /healthz: العملية حيةGET /readyz: قاعدة البيانات والتخزين يمكن الوصول إليهماoctapass-server healthcheckينتهي بالرمز 0 عندما يستجيب/healthz. وتستخدمه الصورة كـHEALTHCHECKلها، إذ لا تحوي صدفة (shell) ولا curl.
أوامر المسؤول
Section titled “أوامر المسؤول”شغّلها داخل الحاوية: docker compose exec octapass octapass-server admin …. انظر الإعدادات.
التحديث
Section titled “التحديث”git pull && docker compose up -d --buildتعمل ترحيلات قاعدة البيانات تلقائيًا عند البدء، خلف قفل، فلا ترحّل إلا نسخة واحدة في كل مرة. انسخ احتياطيًا أولًا: انظر النسخ الاحتياطية.