সেরা সেলফ-হোস্টেড উইকি: BookStack, Wiki.js ও Outline তুলনা
BookStack, Wiki.js ও Outline সফটওয়্যারগুলোর সেটআপ, এডিটর ও লগইন পদ্ধতি নিয়ে বিস্তারিত আলোচনা। আপনার টিমের জন্য কোনটি সেরা এবং কেন, তা জানতে এই তুলনামূলক বিশ্লেষণটি পড়ুন।
কোন সেলফ-হোস্টেড উইকি আপনার চালানো উচিত
একটি সেলফ-হোস্টেড উইকি আপনার টিমের নথিপত্রকে আপনার নিয়ন্ত্রণাধীন একটি সার্ভারে অনুসন্ধানযোগ্য অবস্থায় এক জায়গায় রাখে। 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স্ক্রিপ্টটি চালানোর আগে এর সতর্কবার্তাটি পড়ুন। নথিপত্রে বলা হয়েছে এটি "শুধুমাত্র নতুন OS-এর জন্য, এটি Apache, MySQL 8.0 এবং PHP 8.3 ইনস্টল করবে এবং মেশিনে বিদ্যমান যেকোনো ওয়েব সেটআপ ওভাররাইট করতে পারে"। যে সার্ভার ইতিমধ্যে পোর্ট 80-এ সাড়া দিচ্ছে, সেখানে স্ক্রিপ্টটি সেই পোর্টটি দখল করে নেবে এবং Apache কনফিগারেশন নতুন করে লিখবে। সেক্ষেত্রে কন্টেইনার ব্যবহার করুন, অথবা Ubuntu 24.04-এ বিদ্যমান LAMP স্ট্যাকের ওপর ম্যানুয়ালি BookStack ইনস্টল করুন।
কন্টেইনার পদ্ধতিটি LinuxServer.io ইমেজ ব্যবহার করে, যা BookStack নথিপত্রে নির্দেশিত বিকল্প। BookStack-এর একটি সেশন এনক্রিপশন কি (key) প্রয়োজন এবং এটি ছাড়া এটি কোনো পেজ সার্ভ করবে না, তাই প্রথমে এটি তৈরি করুন।
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-stoppedAPP_URL-কে অবশ্যই সেই ঠিকানার সাথে মিলতে হবে যা ব্যবহারকারীরা টাইপ করেন, যার মধ্যে স্কিম এবং যেকোনো পোর্ট অন্তর্ভুক্ত। এটিকে http://localhost-এ সেট করুন এবং তারপর HTTPS-এর মাধ্যমে সাইটটি সার্ভ করুন। অন্যথায়, জেনারেট হওয়া লিঙ্ক এবং রিডাইরেক্টগুলো ভুল হোস্টের দিকে নির্দেশ করবে, যা ব্যবহারকারীরা একটি লগইন পেজ হিসেবে দেখবেন যা বারবার নিজেকেই লুপ করে। যদি compose ফাইল আপনার কাছে নতুন হয়, তবে এটি শুরু করার আগে VPS-এ Docker Compose-এর মৌলিক বিষয়গুলো দেখে নিন।
এটি চালু করুন এবং নিশ্চিত করুন যে অ্যাপ্লিকেশনটি সাড়া দিচ্ছে, শুধুমাত্র কন্টেইনারটি চলছে কি না তা নয়:
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-ও সমর্থন করে। এটি প্রজেক্টের নিজস্ব Docker পেজ থেকে নেওয়া compose ফাইল:
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 আপনাকে ইন-ব্রাউজার সেটআপের মাধ্যমে নিয়ে যাবে যা অ্যাডমিনিস্ট্রেটর অ্যাকাউন্ট তৈরি করে। এটি শেষ না করা পর্যন্ত, যে কেউ পোর্টে পৌঁছালে সেই উইজার্ডটি দেখতে পাবে, তাই ফায়ারওয়াল খোলার আগে সার্ভিসটিকে আপনার রিভার্স প্রক্সি এবং TLS (ট্রান্সপোর্ট লেয়ার সিকিউরিটি)-এর পেছনে রাখুন। যখন সার্ভারে এই সার্ভিস ছাড়াও আরও অনেক কিছু থাকে, তখন একটি নিজস্ব হোস্টনামে থাকা উইকি স্বাভাবিকভাবেই একাধিক Docker অ্যাপের সামনে Traefik-এর পেছনে থাকে।
এডিটর নির্বাচনই হলো সেই কারণ যার জন্য মানুষ Wiki.js বেছে নেয়। একটি ইনস্ট্যান্স পাশাপাশি Markdown পেজ, ভিজ্যুয়াল এডিটর পেজ, র-HTML পেজ এবং AsciiDoc পেজ ধারণ করতে পারে। এটি তখন সাহায্য করে যখন আপনি এমন ফরম্যাটের পুরনো কন্টেন্ট ইম্পোর্ট করছেন যা আপনি কনভার্ট করতে চান না। এটি একটি উইকিতে চারটি ভিন্ন স্টাইল থাকার কারণ হতে পারে, তাই প্রথম দিনেই ডিফল্ট এডিটর নির্ধারণ করুন এবং সেই সিদ্ধান্তটি লিখে রাখুন।
Outline: সেরা এডিটর, সবচেয়ে ভারী পূর্বশর্তসমূহ
Outline বলতে সাধারণত মানুষ এমন কিছু বোঝায় যা বাণিজ্যিক নোট টুলের মতো কাজ করে। এটি একটি Node.js অ্যাপ্লিকেশন এবং জুলাই 2026 অনুযায়ী এর বর্তমান রিলিজ হলো 1.9.2। এর নমুনা এনভায়রনমেন্ট ফাইলে প্রয়োজনীয় বিষয়গুলোর তালিকা দেওয়া আছে: DATABASE_URL এর মাধ্যমে PostgreSQL, REDIS_URL এর মাধ্যমে Redis, দুটি র্যান্ডম সিক্রেট এবং একটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য 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/dataPGSSLMODE=disable শুধুমাত্র তখনই সঠিক হয় যখন ডেটাবেসটি একই মেশিনে বা একই Docker নেটওয়ার্কে থাকে। নেটওয়ার্কের মাধ্যমে অ্যাক্সেস করা ডেটাবেসের ক্ষেত্রে এটি বাদ দিন, অন্যথায় সংযোগটি প্লেইন টেক্সটে (in the clear) আদান-প্রদান হবে। অ্যাটাচমেন্টের জন্য এখন আর অবজেক্ট স্টোরেজ বাধ্যতামূলক নয়: FILE_STORAGE=local আপলোডগুলোকে উপরের ডিরেক্টরিতে লেখে, যা এমন একটি ভলিউম হতে হবে যেখানে কন্টেইনার লিখতে পারে এবং যা আপনার ব্যাকআপের অন্তর্ভুক্ত। আপনি যদি সেই ফাইলগুলো S3 সামঞ্জস্যপূর্ণ বাকেটে রাখতে চান, তবে AWS_* মানগুলো দিয়ে FILE_STORAGE=s3 সেট করুন।
এখন সেই অংশটি যা মানুষকে অবাক করে। Outline-এ কোনো বিল্ট-ইন ইউজারনেম এবং পাসওয়ার্ড লগইন নেই। এর নিজস্ব নমুনা কনফিগারেশনে বলা হয়েছে যে থার্ড-পার্টি সাইন-ইন ক্রেডেনশিয়াল প্রয়োজন: "একটি কার্যকর ইনস্টলেশনের জন্য এগুলোর মধ্যে অন্তত একটি প্রয়োজন, অন্যথায় আপনার কাছে কোনো সাইন-ইন অপশন থাকবে না"। নথিভুক্ত প্রোভাইডারগুলোর মধ্যে রয়েছে Google, Slack, Microsoft Entra, Discord এবং OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI ও OIDC_USERINFO_URI এর মাধ্যমে যেকোনো জেনেরিক OpenID Connect (OIDC) সার্ভার।
সুতরাং, Outline-এর প্রকৃত খরচ হলো Outline প্লাস PostgreSQL প্লাস Redis প্লাস একটি আইডেন্টিটি প্রোভাইডার। যদি আপনার টিম ইতিমধ্যে Google Workspace বা Microsoft Entra দিয়ে সাইন-ইন করে থাকে, তবে শেষোক্ত অংশটির জন্য আপনার দশ মিনিট সময় লাগবে এবং Outline অত্যন্ত আকর্ষণীয় হয়ে উঠবে। যদি তা না হয়, তবে আপনাকে Keycloak বা Authentik-এর মতো কিছু সেলফ-হোস্ট করতে হবে, যা প্যাচ এবং ব্যাকআপ করার জন্য একটি দ্বিতীয় সার্ভিস। সেই অনুযায়ী মেমোরি বাজেট করুন: Outline-এর নিজস্ব নির্দেশিকা অনুযায়ী প্রতি ওয়েব প্রসেসের জন্য প্রায় 512 MB মেমোরি প্রয়োজন, যা WEB_CONCURRENCY দ্বারা সেট করা হয়, এবং এর সাথে ডেটাবেস ও Redis-এর মেমোরি যোগ করতে হবে।
প্রতিটি প্ল্যাটফর্ম যেভাবে অ্যাক্সেস নিয়ন্ত্রণ পরিচালনা করে
BookStack-এ ডিফল্টভাবে লোকাল ইমেইল এবং পাসওয়ার্ড অ্যাকাউন্ট ব্যবহারের সুবিধা রয়েছে। এছাড়াও এটি বিকল্প হিসেবে LDAP, SAML2 এবং OIDC সমর্থন করে। প্রতিটি রোলের (role) জন্য আলাদাভাবে পারমিশন সেট করা যায় এবং প্রয়োজনে নির্দিষ্ট কোনো শেলফ (shelf), বুক (book), চ্যাপ্টার (chapter) বা পেজের (page) ক্ষেত্রে তা পরিবর্তন করা সম্ভব। যেহেতু এর হায়ারার্কি বা কাঠামোটি নির্দিষ্ট, তাই পারমিশনগুলো একটি অনুমানযোগ্য পদ্ধতিতে ওপরের স্তর থেকে নিচের স্তরে উত্তরাধিকারসূত্রে (inherit) প্রবাহিত হয়।
Wiki.js-এও লোকাল অ্যাকাউন্ট ব্যবহারের সুবিধা রয়েছে। এছাড়া অ্যাডমিন এরিয়া থেকে আপনি বিভিন্ন ধরনের অথেন্টিকেশন স্ট্র্যাটেজি সক্রিয় করতে পারেন। এর পেজ রুলগুলো (page rules) পাথ প্যাটার্নের (path pattern) ওপর ভিত্তি করে অ্যাক্সেস প্রদান বা বাতিল করে। এটি অত্যন্ত শক্তিশালী একটি ফিচার, তবে ভুল হওয়ার সম্ভাবনাও থাকে। কারণ ops/*-এর জন্য লেখা একটি রুল পরবর্তীতে ওই পাথের অধীনে আপনি যে পেজই তৈরি করবেন, তার সবগুলোর ওপরই কার্যকর হয়ে যাবে।
Outline এই বিষয়টি পুরোপুরি তার আইডেন্টিটি প্রোভাইডারের ওপর ছেড়ে দেয়। মেম্বারশিপ বা সদস্যপদ আপনার আইডেন্টিটি প্রোভাইডার অনুযায়ী নির্ধারিত হয়। Outline-এর ভেতরে আপনি কালেকশন (collection) এবং গ্রুপের (group) মাধ্যমে অ্যাক্সেস নিয়ন্ত্রণ করেন। কেউ কোম্পানি ছেড়ে চলে গেলে কোনো লোকাল অ্যাকাউন্ট অবশিষ্ট থাকে না। যখন আপনার আইডেন্টিটি প্রোভাইডারই সেই সিস্টেম হয় যার মাধ্যমে আপনি ইউজারদের ডিপ্রভিশন (deprovision) করেন, তখন এটি একটি বড় সুবিধা হিসেবে কাজ করে।
সার্চ যেভাবে কাজ করে
সার্চ হলো সেই বৈশিষ্ট্য যা একটি উইকিকে প্রয়োজনীয় করে তোলে, নতুবা এটি কেবল ভুলে যাওয়া ফাইলের একটি ফোল্ডারে পরিণত হয়।
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 বেছে নিন। এতে সবচেয়ে কম সংখ্যক উপাদান রয়েছে: একটি PHP অ্যাপ্লিকেশন এবং একটি MySQL ডেটাবেস। এটি অভ্যন্তরীণ রানবুক এবং গ্রাহক নথিপত্রের জন্য উপযুক্ত, এবং এমন দলের জন্য ভালো যেখানে অধিকাংশ লেখক প্রকৌশলী নন। ব্যাকআপ নেওয়ার ক্ষেত্রেও এটি এই তিনটির মধ্যে সবচেয়ে সহজ, কারণ এর সম্পূর্ণ স্টেট একটি ডেটাবেস ডাম্প এবং একটি আপলোড ডিরেক্টরির সমন্বয়ে গঠিত।
আপনার যদি এমন কোনো নির্দিষ্ট এডিটর বা অথেন্টিকেশন কৌশলের প্রয়োজন হয় যা অন্যগুলোতে নেই, অথবা আপনি যদি প্রচুর পরিমাণে বিদ্যমান Markdown বা AsciiDoc ফাইল ইমপোর্ট করতে চান এবং পাথ স্ট্রাকচার বজায় রাখতে চান, তবে Wiki.js বেছে নিন। মনে রাখবেন যে আপনি একটি ভারী স্ট্যাক চালাচ্ছেন, তাই এর মেজর ভার্সন ট্যাগটি পিন করে রাখুন।
লেখার মান যদি সবচেয়ে গুরুত্বপূর্ণ হয়, উইকিটি যদি জনসাধারণের জন্য না হয়ে কোনো নির্দিষ্ট দলের জন্য হয় এবং আপনার যদি আগে থেকেই কোনো আইডেন্টিটি প্রোভাইডার থাকে, তবে Outline বেছে নিন। এই সেটআপের সুবিধা হলো এর এডিটরটি ব্যবহার করা অত্যন্ত আনন্দদায়ক। আপনার প্রথম সেলফ-হোস্টেড অ্যাপ্লিকেশন হিসেবে এটি বেছে নেবেন না।
যদি এই তিনটির কোনোটিই আপনার জন্য উপযুক্ত না হয়, তবে সাধারণত বিষয়বস্তুর ধরনের সাথে অমিল থাকার কারণে এমনটি ঘটে। স্ক্যান করা ইনভয়েস এবং চুক্তিপত্রগুলো উইকির পরিবর্তে Paperless-ngx এর মতো ডকুমেন্ট ম্যানেজমেন্ট সিস্টেমে রাখা উচিত। সেগুলোকে জোর করে উইকিতে রাখার ফলেই অনেক উইকি শেষ পর্যন্ত পরিত্যক্ত হয়ে যায়। আপনার নিজস্ব সার্ভারে আর কী কী রাখা যেতে পারে সে সম্পর্কে বিস্তারিত জানতে, 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 সেটআপ করে। কন্টেইনার ইমেজটির জন্য শুধুমাত্র একটি APP_KEY এবং ডাটাবেস ক্রেডেনশিয়াল প্রয়োজন। Wiki.js-এর জন্য একটি Node রানটাইম এবং একটি PostgreSQL সার্ভার প্রয়োজন হয়, আর Outline-এর ক্ষেত্রে এর পাশাপাশি Redis এবং একটি বাইরের আইডেন্টিটি প্রোভাইডার যোগ করতে হয়।
আমি কি Google বা অন্য কোনো SSO প্রোভাইডার ছাড়া Outline ব্যবহার করতে পারি?
না। 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-এর নির্দিষ্ট হায়ারার্কির সাথে মেলে না। অ্যাটাচমেন্ট, পারমিশন এবং পৃষ্ঠার ইতিহাস হারিয়ে যাওয়ার সম্ভাবনা সবচেয়ে বেশি। তাই মাইগ্রেশনের সিদ্ধান্ত নেওয়ার আগে একটি নমুনা এক্সপোর্ট করে সেগুলো যাচাই করে নিন।