টিমের ডকুমেন্টেশন সাধারণত দুভাবে মরে: এমন চ্যাট থ্রেডে ছড়িয়ে থাকে যেখানে কেউ খুঁজতে পারে না, বা এমন আনাড়ি উইকিতে চাপা পড়ে যা কেউ আপডেট করে না। BookStack সেই বিরল নিজে হোস্ট করা উইকি যা মানুষ সত্যিই ব্যবহার করে। কনটেন্ট থাকে তাক, বই, অধ্যায় আর পাতায় — এমন কাঠামো যা সবাই প্রশিক্ষণ ছাড়াই বোঝে। আর এর প্রায় কোনো সার্ভারই লাগে না।
কেন BookStack
- স্পষ্ট কাঠামো। পাতার সমতল স্তূপের বদলে বই আর অধ্যায়।
- এমন সম্পাদনা যা কাউকে ভয় দেখায় না। ডিফল্টভাবে WYSIWYG এডিটর, যারা পছন্দ করেন তাদের জন্য Markdown।
- আসল অনুমতি। প্রতিটি তাক, বই বা পাতার জন্য ভূমিকা — HR-এর নথি ঠিকাদারদের থেকে দূরে থাকে।
- কোম্পানির লগইন। LDAP, SAML2 আর OpenID Connect অন্তর্নির্মিত।
- আপনার ডেটা। সবকিছু একটা MariaDB ডেটাবেস আর আপনার সার্ভারের একটা ফোল্ডারে।
এটা সব কাজের সঠিক টুল নয়। যে ডেভেলপার ডকুমেন্টেশন কোডের সাথে বদলাতে হয়, তার জায়গা রিপোজিটরিতে, উইকিতে নয়।
এর কী লাগে
BookStack হালকা। বেশিরভাগ টিমের জন্য Micro-IP — 1 vCPU, 2 GB, মাসে $10 — যথেষ্টর বেশি। ডেডিকেটেড IP-ই সহকর্মীদের আপনার ডোমেইনে HTTPS দিয়ে পৌঁছাতে দেয়। ডিস্ক বাড়ে আপলোড করা স্ক্রিনশট আর PDF দিয়ে, পাতার সংখ্যা দিয়ে নয়।
Docker Compose দিয়ে ইনস্টল
আমরা LinuxServer.io-র জনপ্রিয় ইমেজ ব্যবহার করব। আগে একটা অ্যাপ্লিকেশন কী তৈরি করুন:
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey
যে base64:... মান ছাপে সেটা কপি করুন। তারপর docker-compose.yml তৈরি করুন:
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
environment:
- PUID=1000
- PGID=1000
- APP_URL=https://wiki.example.com
- APP_KEY=base64:paste-your-key-here
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=bookstack
- DB_USERNAME=bookstack
- DB_PASSWORD=change-me
volumes:
- ./bookstack:/config
ports:
- 127.0.0.1:6875:80
depends_on:
- db
restart: unless-stopped
db:
image: lscr.io/linuxserver/mariadb:latest
environment:
- PUID=1000
- PGID=1000
- MYSQL_ROOT_PASSWORD=change-me-too
- MYSQL_DATABASE=bookstack
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=change-me
volumes:
- ./db:/config
restart: unless-stopped
docker compose up -d
docker compose logs -f bookstack
APP_URL মানুষ যে ঠিকানা ব্যবহার করবে তার সাথে মিলতে হবে, https:// সহ। ভুল হলে ছবি আর লিংক অদ্ভুতভাবে ভাঙে। Compose নিয়ে আরও আছে আমাদের স্ট্যাক ডিপ্লয় গাইডে।
HTTPS আর প্রথম লগইন
একটা সাবডোমেইনকে সার্ভারের দিকে নির্দেশ করুন (কীভাবে), 127.0.0.1:6875-এর সামনে nginx বসান আর certbot দিয়ে সার্টিফিকেট যোগ করুন — reverse proxy গাইড ধাপে ধাপে দেখায়।
তারপর ডিফল্ট অ্যাকাউন্ট দিয়ে লগইন করুন: admin@admin.com / password। লিংক শেয়ার করার আগে ইমেইল আর পাসওয়ার্ড সাথে সাথে বদলান। বাকিরা নিজের অ্যাকাউন্ট পান বা আপনার পরিচয় সরবরাহকারী দিয়ে লগইন করেন।
ব্যাকআপ
দুটো জিনিস রক্ষা করতে হবে: ডেটাবেস আর ./bookstack-এর ভেতরের আপলোড। এমন একটা রাতের কাজ ডেটাবেস কভার করে:
docker compose exec -T db mysqldump -u bookstack -pchange-me bookstack > /var/backups/bookstack.sql
তারপর /var/backups আর compose ফোল্ডারের সার্ভারের বাইরে ব্যাকআপ নিন — আমাদের restic গাইড ঠিক এটাই করে। Managed Backups এর ওপর পুরো সার্ভারের দৈনিক রিস্টোর পয়েন্ট যোগ করে।
রক্ষণাবেক্ষণ
আপডেট করা মানে docker compose pull && docker compose up -d। BookStack চালু হওয়ার সময় ডেটাবেস মাইগ্রেশন চালায়। বড় সংস্করণের আগে রিলিজ নোট পড়ুন; সেগুলো ছোট আর পরিষ্কার।
আপনার টিম টিকিট আর কোডের জন্যও জায়গা চাইলে নিজে হোস্ট করা একটা Git সার্ভার একই ধরনের প্ল্যানে এর পাশে ভালো বসে।
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।