SSD Nodes Learn 8GB RAM — $66/שנה
מדריכים Matt Connorמאת Matt Connor · עודכן 2026-08-01

השוואת מערכות Wiki בניהול עצמי: BookStack, Wiki.js

השווינו בין BookStack, Wiki.js ו-Outline לפי מורכבות התקנה, עורכי תוכן וניהול הרשאות. גלו איזו מערכת מתאימה לצוות שלכם ומי דורשת ספק זהות חיצוני כדי לעבוד.

איזו מערכת Wiki בניהול עצמי כדאי להריץ

מערכת Wiki בניהול עצמי מרכזת את מסמכי הצוות שלכם במקום אחד הניתן לחיפוש, על שרת שבשליטתכם. BookStack, Wiki.js ו-Outline כולן מבצעות משימה זו. ההבדל העיקרי ביניהן טמון בכמות ההגדרות הנדרשות לפני טעינת הדף הראשון, ובמנגנוני ההרשאות לכניסת משתמשים.

BookStack היא הקלה ביותר להקמה והיא כופה מבנה עבודה מוגדר מראש. Wiki.js מעניקה לכם את מגוון העורכים הרחב ביותר עבור עץ דפים יחיד. ל-Outline יש את חוויית הכתיבה הטובה ביותר מבין השלוש, אך היא אינה מאפשרת לאף משתמש להתחבר עד שתגדירו ספק זהות חיצוני.

כל המידע להלן מבוסס על התיעוד הרשמי של הפרויקטים ועל קבצי ההגדרות שפורסמו על ידם. זוהי השוואת יכולות, לא מבחן ביצועים. מספרי הגרסאות והדרישות מצוינים עם תאריך, כיוון שכל שלוש המערכות מתעדכנות בתדירות גבוהה.

המבנה הוא הבחירה האמיתית

BookStack קובע את צורת התוכן שלכם. דף חי בתוך ספר, ספר יכול להכיל פרקים, ומדפים מקבצים ספרים. לא ניתן להמציא רמה חמישית. מגבלה זו היא המוצר: כותב חדש יודע היכן דף אמור להיות משום שיש רק מקום אחד שבו הוא יכול להימצא. המחיר הוא שתוכן שאינו מתאים לצורה זו נאלץ להשתלב בתוכה.

Wiki.js משתמש בעץ נתיבים, בדומה לתיקיות על גבי דיסק. דף ב-ops/backup/restic ממוקם היכן שתניחו אותו, ואתם בוחרים את העומק. שום דבר לא מונע משני אנשים לתייק את אותו נושא תחת שני ענפים שונים, לכן מופע של Wiki.js זקוק לאדם אחד שאחראי על העץ.

Outline משתמש באוספים עם מסמכים המקוננים בתוך מסמכים. העברת מסמך מתבצעת בגרירה באמצעות העכבר. זוהי הגמישה ביותר מבין השלוש, ולכן היא גם הקלה ביותר לאיבוד סדר.

BookStack: ההתקנה המינימלית

BookStack היא אפליקציית PHP המבוססת על MySQL. נכון ליולי 2026, הדרישות המתועדות הן PHP 8.2 ומעלה, וכן MySQL 8.0 או MariaDB 10.6 ומעלה, בתוספת Composer 2.2 ומעלה אם ההתקנה מתבצעת מקוד המקור. גרסת השחרור הנוכחית היא 26.05.

הפרויקט מפרסם סקריפט התקנה אחד לכל גרסת Ubuntu. הסקריפט עבור 24.04 מתקין עבורך Apache, MySQL 8.0 ו-PHP 8.3.

wget https://codeberg.org/bookstack/devops/raw/branch/main/scripts/installation-ubuntu-24.04.sh
chmod a+x installation-ubuntu-24.04.sh
sudo ./installation-ubuntu-24.04.sh

קרא את האזהרה המופיעה על הסקריפט לפני הרצתו. התיעוד מציין כי הוא מיועד "אך ורק למערכת הפעלה נקייה; הוא יתקין Apache, MySQL 8.0 ו-PHP 8.3 ועלול לדרוס כל הגדרת אינטרנט קיימת על המכונה". בשרת שכבר מאזין בפורט 80, הסקריפט יתפוס פורט זה וישכתב את הגדרות ה-Apache. במקרה כזה, השתמש במכולות (containers) או התקן את BookStack ידנית על גבי מחסנית LAMP קיימת ב-Ubuntu 24.04.

נתיב המכולות משתמש בתמונה של LinuxServer.io, שהיא האפשרות אליה מפנה התיעוד של BookStack. BookStack זקוק למפתח הצפנת סשן ולא יציג דפים בלעדיו, לכן יש ליצור אותו תחילה.

docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey

העתק את הערך שהודפס לתוך APP_KEY, ולאחר מכן כתוב את השירות:

services:
  bookstack:
    image: lscr.io/linuxserver/bookstack:latest
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - APP_URL=https://wiki.example.com
      - APP_KEY=paste_the_generated_key_here
      - DB_HOST=bookstack_db
      - DB_PORT=3306
      - DB_USERNAME=bookstack
      - DB_PASSWORD=change_me
      - DB_DATABASE=bookstackapp
    volumes:
      - ./config:/config
    ports:
      - 6875:80
    restart: unless-stopped

על APP_URL להתאים לכתובת שהמשתמשים מקלידים בפועל, כולל הפרוטוקול וכל פורט. הגדר אותו כ-http://localhost; אם תגיש את האתר ב-HTTPS, קישורים והפניות שנוצרו יצביעו על מארח שגוי, מה שהמשתמשים יראו כדף התחברות שחוזר על עצמו בלולאה. אם קבצי compose חדשים לך, התחל עם יסודות Docker Compose ב-VPS לפני שתמשיך לכאן.

העלה את השירות ובדוק שהאפליקציה מגיבה, ולא רק שהמכולה רצה:

docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login

קוד 200 OK משמעו שאפליקציית ה-PHP עלתה והגיעה למסד הנתונים. קוד 500 כמעט תמיד אומר ש-APP_KEY ריק או שפרטי ההתחברות למסד הנתונים אינם תואמים, ו-docker compose logs bookstack ידפיס איזו משתי האפשרויות היא הנכונה.

Wiki.js: עץ אחד, עורכים מרובים

Wiki.js היא אפליקציית Node.js. הגדרת ה-Docker המתועדת משדכת אותה ל-PostgreSQL, אם כי התוכנה מקבלת גם את MySQL, MariaDB, MSSQL ו-SQLite. זהו קובץ ה-compose מדף ה-Docker של הפרויקט עצמו:

services:
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: wiki
      POSTGRES_PASSWORD: wikijsrocks
      POSTGRES_USER: wikijs
    logging:
      driver: none
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/postgresql/data
  wiki:
    image: ghcr.io/requarks/wiki:2
    depends_on:
      - db
    init: true
    environment:
      DB_TYPE: postgres
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: wikijs
      DB_PASS: wikijsrocks
      DB_NAME: wiki
    restart: unless-stopped
    ports:
      - "80:3000"
volumes:
  db-data:

שנה את POSTGRES_PASSWORD ואת DB_PASS יחד לפני ההרצה, כיוון שהם מהווים פרט זיהוי אחד והערך לדוגמה גלוי לכולם. התגית מקובעת ל-ghcr.io/requarks/wiki:2 בכוונה תחילה. התיעוד ממליץ להימנע מ-latest, כיוון שקפיצה לגרסה ראשית משנה את מבנה מסד הנתונים תחת מופע פעיל.

גרסה 2 היא הגרסה להרצה. נכון ליולי 2026, הגרסה החדשה ביותר של 2 היא 2.5.314, ממאי 2026. גרסה 3 קיימת, והתיעוד שלה מציין: "אתר זה מיועד לגרסת הבטא הלא יציבה של Wiki.js 3.0. אין להתקין גרסה זו בסביבת ייצור". התייחס לתגית :3 כאל תצוגה מקדימה בלבד.

בטעינה הראשונה, Wiki.js מנחה אותך דרך הגדרה בדפדפן שיוצרת את חשבון מנהל המערכת. עד לסיום התהליך, כל מי שיגיע לפורט יקבל את אשף ההגדרה, לכן יש להציב את השירות מאחורי Reverse Proxy ו-TLS (אבטחת שכבת תעבורה) לפני פתיחת ה-Firewall. ויקי בשם מארח (hostname) משלו יושב באופן טבעי מאחורי Traefik לפני מספר אפליקציות Docker כאשר השרת מארח יותר מאשר שירות זה בלבד.

בחירת העורך היא הסיבה שאנשים בוחרים ב-Wiki.js. מופע אחד יכול להכיל דפי Markdown, דפי עורך ויזואלי, דפי HTML גולמי ודפי AsciiDoc זה לצד זה. זה מסייע בעת ייבוא תוכן ישן בפורמט שאינך מעוניין להמיר. זו גם דרך להגיע למצב של ארבעה סגנונות עיצוב בוויקי אחד, לכן החלט על עורך ברירת המחדל ביום הראשון ותעד החלטה זו.

Outline: העורך הטוב ביותר, דרישות הקדם הכבדות ביותר

Outline הוא מה שאנשים בדרך כלל מתכוונים אליו כשהם אומרים שהם רוצים כלי לניהול הערות שמרגיש כמו מוצר מסחרי. זוהי אפליקציית Node.js, והגרסה העדכנית ביותר נכון ליולי 2026 היא 1.9.2. קובץ הסביבה לדוגמה שלה מפרט את הדרישות: PostgreSQL דרך DATABASE_URL, Redis דרך REDIS_URL, שני מפתחות סודיים אקראיים, ו-URL הנגיש לציבור.

openssl rand -hex 32
openssl rand -hex 32

הריצו זאת פעמיים ושמרו את שני הערכים. הראשון הופך ל-SECRET_KEY, השני ל-UTILS_SECRET. ליבת קובץ הסביבה נראית כך:

NODE_ENV=production
URL=https://docs.example.com
PORT=3000
SECRET_KEY=<first openssl value>
UTILS_SECRET=<second openssl value>
DATABASE_URL=postgres://outline:change_me@postgres:5432/outline
PGSSLMODE=disable
REDIS_URL=redis://redis:6379
FILE_STORAGE=local
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data

PGSSLMODE=disable נכון רק כאשר מסד הנתונים נמצא על אותו המחשב או באותה רשת Docker. השמיטו אותו עבור מסד נתונים אליו ניגשים דרך רשת, אחרת החיבור יעבור בטקסט גלוי. קבצים מצורפים אינם מחייבים אתכם עוד להשתמש באחסון אובייקטים: FILE_STORAGE=local כותב העלאות לספרייה שמעל, אשר חייבת להיות כרך (volume) שהקונטיינר יכול לכתוב אליו ושכלול בגיבויים שלכם. הגדירו את FILE_STORAGE=s3 עם ערכי AWS_* במקום זאת, אם אתם מעוניינים שקבצים אלו יישמרו ב-bucket תואם S3.

כעת החלק שמפתיע אנשים. ל-Outline אין מנגנון מובנה של כניסה באמצעות שם משתמש וסיסמה. קובץ ההגדרות לדוגמה שלה מציין כי נדרשים פרטי התחברות של צד שלישי: "נדרש לפחות אחד מאלה עבור התקנה תקינה, אחרת לא יהיו לכם אפשרויות התחברות". הספקים המתועדים כוללים את Google, Slack, Microsoft Entra, Discord, וכל שרת OpenID Connect (OIDC) גנרי דרך OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI ו-OIDC_USERINFO_URI.

לפיכך, העלות האמיתית של Outline היא Outline בתוספת PostgreSQL בתוספת Redis בתוספת ספק זהות. אם הצוות שלכם כבר מתחבר באמצעות Google Workspace או Microsoft Entra, החלק האחרון יגזול מכם עשר דקות ו-Outline הופך לאטרקטיבי מאוד. אם לא, אתם נדרשים לארח בעצמכם גם שירות כמו Keycloak או Authentik, המהווה שירות נוסף שיש לעדכן ולגבות. תכננו את הזיכרון בהתאם: ההנחיות של Outline מדברות על כ-512 MB לכל תהליך אינטרנט, המוגדר על ידי WEB_CONCURRENCY, בנוסף למסד הנתונים ול-Redis.

כיצד כל מערכת מנהלת הרשאות קריאה

ל-BookStack יש חשבונות מקומיים מבוססי דוא"ל וסיסמה כברירת מחדל, והיא תומכת ב-LDAP, ב-SAML2 וב-OIDC כחלופות. הרשאות נקבעות לפי תפקיד וניתן לדרוס אותן ברמת מדף, ספר, פרק או דף בודד. מכיוון שההיררכיה קבועה, ההרשאות עוברות בירושה במורד המבנה באופן צפוי.

Wiki.js כוללת גם היא חשבונות מקומיים ומוסיפה רשימה ארוכה של אסטרטגיות שניתן להפעיל באזור הניהול. חוקי הדפים שלה מעניקים או שוללים גישה לפי תבנית נתיב. זוהי יכולת עוצמתית שקל לטעות בה, כיוון שחוק שנכתב עבור ops/* יחול באופן אוטומטי על כל דף שתשמור תחת נתיב זה בעתיד.

Outline מאצילה את הסוגיה הזו לחלוטין. החברות במערכת נגזרת מספק הזהות שלך, ובתוך Outline אתה שולט בגישה לפי אוספים וקבוצות. לא נותרים חשבונות מקומיים לאחר שעובד עוזב את החברה, וזהו יתרון משמעותי כאשר ספק הזהות הוא המערכת שדרכה אתה מבצע ביטול הרשאות (deprovisioning).

כיצד פועל החיפוש בכל מערכת

החיפוש הוא המקום שבו ויקי מוכיח את ערכו או הופך לאוסף של קבצים נשכחים.

BookStack מבצע חיפוש במסד הנתונים ומעניק לקוראים שפת שאילתות שניתן ללמוד בדקה. ציטוט של ביטוי, כגון "london meeting", מחייב התאמה מדויקת של המחרוזת. סוגריים מרובעים משמשים לחיפוש תגיות: [location=london] מבצע התאמה לפי שם תגית, ערך או שניהם, עם השוואות הכוללות את !=, >= ו-like. סוגריים מסולסלים מסננים לפי מטא-נתונים, כפי שמופיע ב-{created_after:2016-12-30}. ניתן לשלול כל מונח חיפוש מדויק, תגית או מסנן על ידי הוספת הקידומת -. BookStack מגביל את מספר המונחים מכל סוג ששאילתה אחת יכולה להכיל, כך ששאילתה ארוכה מדי תיחתך במקום שתורץ.

Wiki.js מתייחס לחיפוש כאל מודול הניתן להחלפה. המנועים המתועדים הם מנוע מסד נתונים בסיסי, מנוע PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch ו-Azure Search. המנוע הבסיסי מתאים למאות בודדות של דפים. אם אתם מריצים PostgreSQL, עברו למנוע PostgreSQL באזור הניהול, כיוון שהוא משתמש באינדקס הטקסט המלא של מסד הנתונים עצמו במקום בהתאמה פשוטה. שמרו את Elasticsearch עבור ויקי גדול מספיק כדי להצדיק הרצה ותחזוקה של שירות חיפוש נוסף.

Outline מבצע חיפוש באינדקסים של טקסט מלא ב-PostgreSQL. אין מנוע לבחירה ואין מה לכוונן, והוא גם מחפש בתוך הטקסט של מסמכים שהועלו. עבור ויקי צוותי עם אלפי מסמכים בודדים, זו האופציה שדורשת את מינימום העבודה מבין השלוש. עם זאת, אין אפשרות לשפר את הביצועים אם המערכת מפסיקה להיות מהירה מספיק.

מה מתאים לך

בחר ב-BookStack אם ברצונך שה-wiki יפעל עוד היום ואם אתה מעדיף להתווכח על התוכן מאשר על המבנה. יש לו את מספר הרכיבים הקטן ביותר: אפליקציית PHP אחת ומסד נתונים MySQL אחד. הוא מתאים ל-runbooks פנימיים ולתיעוד לקוחות, ומתאים לצוותים שבהם רוב הכותבים אינם מהנדסים. הוא גם הקל ביותר לגיבוי מבין השלושה, כיוון שכל המצב (state) מורכב מגיבוי מסד נתונים אחד ומספריית ה-uploads.

בחר ב-Wiki.js אם אתה זקוק לעורך ספציפי או לאסטרטגיית אימות מסוימת שהאחרים אינם מציעים, או אם אתה מייבא גוף גדול של קבצי Markdown או AsciiDoc קיימים ורוצה לשמר את מבנה הנתיבים. קבל את העובדה שאתה מריץ stack כבד יותר, וקבע (pin) את תג הגרסה הראשית.

בחר ב-Outline אם איכות הכתיבה היא החשובה ביותר, אם ה-wiki מיועד לצוות ולא לציבור הרחב, ואם כבר יש לך ספק זהות (identity provider). הוא מתגמל הגדרה כזו עם עורך שאנשים באמת נהנים להשתמש בו. אל תבחר בו כאפליקציה הראשונה שאתה מארח בעצמך.

אם אף אחד מהשלושה אינו מתאים, חוסר ההתאמה נובע בדרך כלל מסוג התוכן. חשבוניות וחוזים סרוקים מקומם ב-מערכת לניהול מסמכים כגון Paperless-ngx ולא ב-wiki, וכפייתם לתוך מערכת כזו היא הסיבה לכך שכל כך הרבה אתרי wiki ננטשים בסופו של דבר. למבט רחב יותר על מה עוד ראוי למקום בשרת שלך, ראה את רשימת ה-self-hosting המקוצרת לשנת 2026.

תכנון גודל וגיבויים

כל השלושה מתאימים לשרת VPS קטן, אך רף המשאבים הריאלי משתנה בהתאם לרכיבים הפועלים מאחורי כל אחד מהם. BookStack מורכב מתהליך יישום אחד ומ-MySQL. Wiki.js מורכב מתהליך Node ומ-PostgreSQL. Outline מורכב מתהליך Node, מסד נתונים PostgreSQL ו-Redis, ולרוב דורש גם ספק זהויות נלווה; זו הסיבה שהוא דורש הקצאת זיכרון נוספת.

גבו את מסד הנתונים ואת קבצי ההעלאות יחד, ובצעו שחזור של שניהם לתוך מופע זמני פעם אחת לפני שתסתמכו על הגיבוי. גיבוי של ויקי שאיש לא ביצע לו שחזור הוא בגדר ניחוש בלבד. עבור BookStack, המשמעות היא mysqldump בצירוף נפח האחסון /config. עבור Wiki.js ו-Outline, המשמעות היא pg_dump בצירוף נפח נתוני האחסון, ועבור Outline גם כל מה שנמצא בתוך FILE_STORAGE_LOCAL_ROOT_DIR.

FAQ

איזו מערכת ויקי בניהול עצמי היא הקלה ביותר להתקנה?

BookStack. מדובר ביישום PHP יחיד עם מסד נתונים MySQL, והפרויקט מפיץ סקריפט התקנה עבור Ubuntu 24.04 שמגדיר את Apache, MySQL 8.0 ו-PHP 8.3 בהרצה אחת. תמונת ה-container דורשת רק APP_KEY ופרטי גישה למסד הנתונים. Wiki.js מוסיפה סביבת הרצה של Node ושרת PostgreSQL, ו-Outline מוסיפה על גבי אלו גם Redis וספק זהות חיצוני.

האם ניתן להשתמש ב-Outline ללא Google או ספק SSO אחר?

לא. ל-Outline אין אפשרות התחברות מקומית באמצעות שם משתמש וסיסמה. הגדרות הדוגמה שלה מציינות כי נדרש לפחות ספק התחברות צד-שלישי אחד, אחרת לא יהיו אפשרויות התחברות כלל. ניתן להשתמש ב-Google, Slack, Microsoft Entra, Discord, או בכל שרת OpenID Connect גנרי כגון Keycloak או Authentik בניהול עצמי. הרצת ספק זה היא חלק מהעלות הכרוכה בהרצת Outline.

האם כדאי להתקין את Wiki.js 3 או את Wiki.js 2?

גרסה 2. נכון ליולי 2026, גרסת ה-2 העדכנית ביותר היא 2.5.314, ממאי 2026, והתיעוד של גרסה 3 מציין במפורש שמדובר בגרסת בטא לא יציבה שאין להתקין בסביבת ייצור. קבעו את התמונה שלכם ל-ghcr.io/requarks/wiki:2 במקום ל-latest, כיוון ששינוי גרסה ראשית משנה את סכימת מסד הנתונים תחת מופע פעיל.

איזו מערכת מציעה את החיפוש הטוב ביותר?

לכל אחת מהן יתרונות שונים. BookStack מעניקה לקוראים שפת שאילתות עם ביטויים מדויקים, מסנני תגיות כגון [location=london] ומסנני מטא-דאטה כגון {created_after:2016-12-30}, וניתן לשלול כל אחד מהמונחים הללו באמצעות הוספת - בתחילת הביטוי. Outline אינה דורשת הגדרה ומחפשת בתוך הטקסט של קבצים שהועלו. Wiki.js היא הניתנת לכוונון הרב ביותר, שכן אתם בוחרים את המנוע, וכדאי לעבור למנוע PostgreSQL ברגע שהוויקי שלכם גדל מעבר לכמה מאות דפים.

האם אוכל להעביר את התוכן שלי מאחת לשנייה בעתיד?

באופן חלקי, ועליכם לצפות לעבודה ידנית. כל השלוש מייצאות ומייבאות Markdown, כך שטקסט הדפים בדרך כלל נשמר. המבנה אינו נשמר בצורה נקייה: לספרים ולפרקים של BookStack אין מקבילה במסמכים המקוננים של Outline, והנתיבים של Wiki.js אינם ממופים להיררכיה הקבועה של BookStack. קבצים מצורפים, הרשאות והיסטוריית דפים הם החלקים בעלי הסבירות הגבוהה ביותר לאובדן, לכן ייצאו דוגמה ובדקו אותם לפני שתתחייבו להגירה.

#bookstack#wikijs#outline#wiki#self-hosting#knowledge-base