لماذا Outline بدلًا من Notion أو Confluence على VPS
يشترك Notion وConfluence في العيب البنيوي نفسه: تسعيرهما مرتبط بعدد المستخدمين، ويرتفع بمجرد أن يكبر الفريق. في Notion، أصبح الذكاء الاصطناعي حكرًا على خطتي Business وEnterprise منذ إعلان 13 مايو 2025: سعره مدمج في كل مقعد، سواء استخدمته أم لا. تُعرض خطة Business بسعر 19.50 € لكل عضو شهريًا مع الفوترة السنوية على notion.com/pricing (السعر المعروض لزائر من منطقة اليورو) — أي 390 € شهريًا لعشرين شخصًا، قبل احتساب أرصدة Notion التي تُفوتر إضافيًا لتشغيل الوكلاء المخصصين. كل ذلك من أجل ويكي لا تتحكم في بياناته ولا في خارطة طريقه ولا في موعد الاستحواذ القادم عليه.
يكسر Outline هذا المنطق. عند استضافته على VPS خاص بك تصبح التكلفة ثابتة: تدفع ثمن الخادم، لا ثمن كل متعاون إضافي. العرض متقن — طباعة نظيفة، وكتل شيفرة مع تلوين نحوي، وصور مدمجة، وجداول — والتحرير المتزامن يعمل عبر WebSockets. البحث النصي الكامل مفهرس مباشرة في PostgreSQL: لا خدمة خارجية ولا تكلفة إضافية. لفريق تقني من 10 إلى 50 شخصًا، هو من أكمل أنظمة الويكي المستضافة ذاتيًا.
ليست حجة الاستحواذ على Airtable تفصيلًا عابرًا. تخصصت Bending Spoons في شراء أدوات SaaS شائعة — Evernote وMeetup وWeTransfer — ثم إعادة تشكيل نموذجها الاقتصادي. وهي تعلن نيتها الاستثمار في Airtable، لكن حين تعتمد وثائق شركتك على SaaS خارجي، قد يعني تغيير المالك رفع الأسعار أو تقليص الميزات المجانية أو التحول إلى نموذج لا يناسب استخدامك. استضافة Outline على بنيتك الخاصة تُخرجك من هذا الخطر.
ما يقدمه Outline عمليًا
- عرض Markdown في الوقت الفعلي — محرر يشبه Notion دون الكتل الاحتكارية
- تحرير تعاوني — عدة محررين على المستند نفسه عبر WebSockets وRedis
- صلاحيات لكل مجموعة مستندات ولكل فريق — قراءة فقط، تعليق، تحرير، إدارة
- بحث نصي كامل — مفهرس في PostgreSQL ويعمل منذ التثبيت
- المرفقات والصور — على قرص الـ VPS افتراضيًا، أو على تخزين متوافق مع S3 (MinIO أو Backblaze B2 أو AWS S3)
- واجهة API موثقة — قابلة للدمج في خطوط CI/CD أو في سكربتاتك، وتفيد أيضًا في أتمتة تصدير المحتوى
- استيراد من Notion وMarkdown — يمر استيراد Notion عبر تكامل يجب التصريح به، أما مستورد Confluence فمخصص لإصداري Business وEnterprise
رخصة BSL 1.1: Outline ليس مفتوح المصدر
هذه هي النقطة التي تتجاهلها المقارنات غالبًا. Outline منشور تحت Business Source License 1.1 (BSL 1.1). وملف الرخصة في المستودع يقولها صراحة: «not an Open Source license» — ليس هذا تأويلًا، بل صياغة المؤلفين أنفسهم.
عمليًا، تمنح الرخصة حق استخدام البرنامج بشرط واحد: ألا تستغله بوصفه «Document Service»، أي ألا تقدم Outline خدمةً توثيقية لأطراف ثالثة. والصفحة الرسمية للقيود واضحة: بيع Outline أو إعادة بيعه أو استضافته كخدمة يُعد خرقًا، والخرق ينهي الرخصة تلقائيًا. فالناشر الذي يريد تقديم ويكي Outline مدفوع لعملائه خارج نطاق الرخصة، والوكالة التي تستضيفه لعملائها عليها أن تسأل الناشر قبل النشر.
أما الاستخدام الداخلي للفريق — قاعدة معرفة، وتوثيق منتج، وكتيبات تشغيل، وتأهيل الموظفين — فيمكنك استضافته ذاتيًا بحرية.
لا يوجد تاريخ واحد للتحول إلى Apache 2.0: لكل إصدار تاريخه الخاص، بعد أربع سنوات من صدوره. ملف LICENSE للإصدار 1.12.0، الصادر في 23 أكتوبر 2026، يحدد هذا التحول في 2030-10-23. فالإصدار الذي تنشره اليوم لن يصبح متساهلًا بالكامل إلا في 2030، وكل تحديث يؤجل الموعد بالنسبة للشيفرة الجديدة.
خلاصة عملية: الاستخدام الداخلي لا مشكلة فيه. إعادة البيع أو تقديم خدمة للعملاء: اقرأ الرخصة واسأل الناشر قبل النشر. ولوضع BSL بين رخص «source available»، راجع تحليلنا لرخصتي BSL وSSPL.
Outline مقابل Notion وConfluence وDocmost
مرّر الجدول أفقيًا
| Outline | Notion | Confluence | Docmost | |
|---|---|---|---|---|
| نموذج الرخصة | BSL 1.1 (كل إصدار ← Apache 2.0 بعد 4 سنوات) | SaaS احتكاري | SaaS احتكاري | AGPL-3.0 (النواة) + إصدارات مدفوعة |
| الاستضافة الذاتية | نعم — Docker + VPS | لا | نعم (Data Center، مكلف) | نعم — Docker + VPS |
| التسعير | تكلفة خادم ثابتة | لكل عضو شهريًا | لكل مستخدم | تكلفة خادم ثابتة (الإصدار الحر) |
| التحرير في الوقت الفعلي | نعم (WebSockets + Redis) | نعم | نعم | نعم (WebSockets + Redis) |
| البنية المطلوبة | PostgreSQL + Redis + تخزين الملفات | لا ينطبق (SaaS) | PostgreSQL/Oracle + بنية ثقيلة | PostgreSQL + Redis |
| البحث النصي الكامل | مدمج في PostgreSQL | نعم (SaaS) | نعم | مدمج في PostgreSQL |
| استيراد Notion / Confluence | Notion نعم؛ Confluence في الإصدار المدفوع | تصدير فقط | تصدير فقط | Notion نعم؛ Confluence في الإصدار المدفوع |
| تسجيل الدخول | SSO إلزامي (OIDC، Google، Slack، Microsoft، Discord) | حساب Notion | حساب Atlassian | بريد وكلمة مرور؛ SSO في الإصدار المدفوع |
متطلبات استضافة Outline على VPS
يتكون Outline من ثلاث خدمات يجب أن تعمل معًا.
PostgreSQL (الإصدار 14 أو أحدث) يخزن كل المستندات والمستخدمين والصلاحيات: فهو الذي يحمل حالة الويكي. Redis (الإصدار 4 أو أحدث) يدير الجلسات وWebSockets التحرير الفوري وطوابير المهام الخلفية، وإذا توقف توقف التحرير المتزامن. تخزين الملفات يستقبل المرفقات والصور: على قرص الـ VPS افتراضيًا (FILE_STORAGE=local، المجلد /var/lib/outline/data)، أو في حاوية متوافقة مع S3 (FILE_STORAGE=s3) — MinIO على الـ VPS نفسه، أو Backblaze B2، أو AWS S3. نقل الملفات إلى S3 يُبقي نسخ PostgreSQL الاحتياطية خفيفة ويسمح بنمو المرفقات دون المساس بخادم التطبيق.
التحجيم: تشترط الوثائق الرسمية ذاكرة لا تقل عن 512 ميغابايت، وتنصح بـ 1 غيغابايت أو أكثر عند كثرة المستخدمين. لفريق من 20 إلى 50 شخصًا مع PostgreSQL وRedis على الجهاز نفسه، استهدف 2 vCPU و4 غيغابايت RAM و20 غيغابايت SSD، وأكثر إذا بقيت المرفقات محلية. يترك VPS Power (4 vCPU، 8 GB) هامشًا لذروات التحرير المتزامن. يُضبط عدد العمليات عبر WEB_CONCURRENCY: احسب عملية واحدة لكل 512 ميغابايت من الذاكرة المتاحة.
المصادقة هي الشرط الذي يُكتشف متأخرًا. لا يتيح Outline تسجيل الدخول بالبريد وكلمة المرور: يلزم مزوّد واحد على الأقل — Slack أو Google أو Microsoft Entra أو Discord أو خادم OIDC عام (Authentik، Keycloak…) — وإلا لن يوفر التثبيت أي وسيلة للدخول. أما SAML فمخصص لإصداري Business وEnterprise. جهّز أيضًا خادم SMTP: فهو يرسل الإشعارات («تم تحديث المستند») ويتيح الدخول عبر رابط بالبريد.
على المضيف: Docker وDocker Compose v2، وخادم وكيل عكسي (Nginx أو Caddy)، وشهادة TLS صالحة، واسم نطاق مخصص (wiki.yourdomain.com): يجب أن يطابق المتغير URL العنوان العام تمامًا.
نشر Outline باستخدام Docker Compose
إنشاء ملف `docker-compose.yml`
أنشئ مجلدًا مخصصًا:
mkdir -p /opt/outline && cd /opt/outlineثم ملف التركيب. ثبّت إصدارًا محددًا بدل
latest، ولا تنشر المنفذ 3000 إلا على الواجهة المحلية:services: outline: image: docker.getoutline.com/outlinewiki/outline:1.12.0 env_file: .env ports: - "127.0.0.1:3000:3000" volumes: - outline_data:/var/lib/outline/data depends_on: - postgres - redis postgres: image: postgres:18 environment: POSTGRES_USER: outline POSTGRES_PASSWORD: password POSTGRES_DB: outline volumes: - postgres_data:/var/lib/postgresql redis: image: redis:7 volumes: - redis_data:/data volumes: outline_data: postgres_data: redis_data:تنشئ صورة Postgres المستخدم وقاعدة البيانات عند أول تشغيل انطلاقًا من
POSTGRES_USERوPOSTGRES_PASSWORDوPOSTGRES_DB: بلا كلمة مرور ترفض الحاوية الإقلاع.إعداد ملف `.env`
ولّد المفتاح السري ومفتاح الأدوات:
openssl rand -hex 32 # SECRET_KEY openssl rand -hex 32 # UTILS_SECRETالمتغيرات الأساسية في
.env(مثال مع مزوّد OIDC):URL=https://wiki.yourdomain.com PORT=3000 SECRET_KEY=<generated key> UTILS_SECRET=<generated key> DATABASE_URL=postgres://outline:password@postgres:5432/outline PGSSLMODE=disable REDIS_URL=redis://redis:6379 FORCE_HTTPS=true WEB_CONCURRENCY=2 FILE_STORAGE=local FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data OIDC_CLIENT_ID=<client-id> OIDC_CLIENT_SECRET=<client-secret> OIDC_AUTH_URI=https://auth.yourdomain.com/application/o/authorize/ OIDC_TOKEN_URI=https://auth.yourdomain.com/application/o/token/ OIDC_USERINFO_URI=https://auth.yourdomain.com/application/o/userinfo/ SMTP_SERVICE=<service> SMTP_USERNAME=<user> SMTP_PASSWORD=<password> [email protected]المتغير
PGSSLMODE=disableضروري حين يعمل PostgreSQL على الجهاز نفسه دون TLS: بدونه يحاول Outline اتصالًا مشفرًا فيفشل. مع Google أو Slack أو Microsoft أو Discord، استبدل كتلة OIDC بمتغيرات المزوّد (GOOGLE_CLIENT_ID،SLACK_CLIENT_ID…) الواردة في ملف المثال الرسمي.env.sampleفي المستودع. احفظ نسخة من هذا الملف خارج الخادم: فقدانSECRET_KEYيجعل البيانات المشفرة في القاعدة غير مقروءة.تشغيل الحزمة
docker compose up -d docker compose logs -f outline docker compose psتُنفذ ترحيلات قاعدة البيانات تلقائيًا عند إقلاع حاوية Outline: تابع السجلات حتى تظهر رسالة الاستماع على المنفذ 3000، ثم تحقق من أن الخدمات الثلاث في حالة
running.إعداد الخادم الوكيل العكسي
يستمع Outline على المنفذ 3000 محليًا. مثال لكتلة Nginx:
server { listen 443 ssl; server_name wiki.yourdomain.com; ssl_certificate /etc/letsencrypt/live/wiki.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wiki.yourdomain.com/privkey.pem; client_max_body_size 260m; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } }الرأسان
UpgradeوConnectionلا غنى عنهما لـ WebSockets التحرير الفوري، ويجب أن يغطيclient_max_body_sizeحجم الرفع الذي يسمح به Outline (FILE_STORAGE_UPLOAD_MAX_SIZE). مع Caddy يكفي سطران، وتُستخرج شهادة Let's Encrypt وتُجدد تلقائيًا:wiki.yourdomain.com { reverse_proxy 127.0.0.1:3000 }إنشاء أول حساب مدير
افتح
https://wiki.yourdomain.comوسجّل الدخول عبر مزوّد الهوية المُعدّ: أول حساب يُصادق عليه يصبح مدير مساحة العمل.لدعوة زملائك، انتقل إلى الإعدادات ← الأعضاء ← دعوة. تُرسل الدعوات والإشعارات عبر خادم SMTP المُصرّح به في
.env.جدولة النسخ الاحتياطية
ما يجب نسخه: قاعدة PostgreSQL، ومجلد الملفات إذا كان
FILE_STORAGE=local، وملف.env. مثال لمهمة cron يومية:cd /opt/outline docker compose exec -T postgres pg_dump -U outline outline | gzip > outline-$(date +%F).sql.gz docker run --rm -v outline_outline_data:/data -v "$PWD":/backup alpine \ tar czf /backup/outline-files-$(date +%F).tar.gz -C /data .توصي وثائق Outline بنسخة احتياطية واحدة يوميًا على الأقل، تُحفظ قرابة شهر. وإضافة إلى ذلك، تُنتج الإعدادات ← تصدير أرشيفًا بصيغة HTML أو Markdown أو JSON يُقرأ دون Outline.
تحديث Outline دون مفاجآت
ينشر Outline صور Docker موسومة بإصداراتها: تجنب latest في الإنتاج واستهدف إصدارًا محددًا (outlinewiki/outline:1.12.0 حتى 7 نوفمبر 2026)، بعد قراءة ملاحظات الإصدار في صفحة الإصدارات.
تُطبق الترحيلات تلقائيًا عند إعادة تشغيل الحاوية، وتنبه الوثائق إلى أنها ليست متوافقة مع الإصدارات السابقة دائمًا: العودة إلى الصورة السابقة لا تكفي دائمًا. لذا فالنسخة الاحتياطية للقاعدة قبل كل تحديث إلزامية لا اختيارية.
cd /opt/outline
docker compose exec -T postgres pg_dump -U outline outline | gzip > before-update.sql.gz
# change the image tag in docker-compose.yml, then:
docker compose pull outline
docker compose up -d outline
docker compose logs -f outlineعلى ويكي كبير، اختبر الإصدار الجديد أولًا على نسخة من القاعدة مستعادة في بيئة اختبار.
متى تختار Docmost بدلًا من Outline
Outline هو الخيار المناسب إذا أردت عرض Markdown متقنًا يضاهي Notion، وتحريرًا متزامنًا متينًا، وربطًا بمزوّد هوية قائم (OIDC أو Google أو Microsoft). وتيرة إصداراته المنتظمة — 1.11.0 و1.12.0 في أكتوبر 2026 — ومجتمعه النشط حجتان قويتان لفريق يراهن على المدى الطويل. التعليقات وسجل المراجعات والتكامل مع Slack وGitHub وLinear تجعله من أكمل الأدوات في فئة الاستضافة الذاتية.
Docmost بديل أحدث (2023)، تُنشر نواته تحت AGPL-3.0 — رخصة مفتوحة المصدر حقيقية بمعنى OSI، دون قيد على استخدامه كخدمة. لكن ميزاته المتقدمة (SSO عبر SAML/OIDC/LDAP، ومفاتيح API، ومستورد Confluence، وقواعد البيانات) تتبع إصدارات مدفوعة برخصة مستقلة. بنيته مماثلة — PostgreSQL وRedis — لكنه لا يفرض أي مزوّد هوية، إذ يقبل الإصدار الحر تسجيل الدخول بالبريد وكلمة المرور. إذا كان تكييف الرخصة معيارًا حاسمًا — خاصة إن كنت تطور منتجًا يضم قاعدة معرفة يصل إليها مستخدموك النهائيون — فإن Docmost يستحق التقييم بالتوازي. يركز هذا المقال على Outline؛ للتثبيت خطوة بخطوة راجع دليلنا المخصص لـ Docmost، وللانتقال من Notion راجع تحليلنا لزيادة أسعار Notion.
يتعايش الاثنان دون أن يلتهم أحدهما الآخر: لدى Outline ميزات متقدمة أكثر في إصداره المجاني ومجتمع أرسخ، ولدى Docmost رخصة أكثر تساهلًا وتسجيل دخول دون SSO إلزامي. يتوقف الاختيار على سياقك القانوني واحتياجاتك التقنية.