[{"data":1,"prerenderedAt":176},["ShallowReactive",2],{"seo-verification":3,"blog-host-bookstack-on-your-own-vps-ma-en":6,"promo-bar-likely":175},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-host-bookstack-on-your-own-vps-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":133,"ctaBody":134,"ctaButton":135,"ctaUrl":136,"relatedPosts":137},79,"host-bookstack-on-your-own-vps",{"fr":12,"en":10,"ar":13,"es":14},"heberger-bookstack","استضافة-bookstack-على-خادم-vps-الخاص-بك","alojar-bookstack-en-un-vps","Host BookStack on your own VPS","Complete guide to installing BookStack on a VPS with Docker Compose, SSL, SMTP and backups. Open source wiki, ~2 GB RAM, deployed in 15 minutes.",7,2,false,"2026-04-02T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[28],{"id":17,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-bookstack-poster.svg",{"categorySlug":33,"appSlug":34},"collaboration-productivity","bookstack","BookStack is an open source documentation platform organized into shelves, books, chapters and pages. Self-hosted on a VPS, it becomes your team or agency's internal wiki: full-text search, WYSIWYG editor, granular permissions. This guide covers the full installation with Docker Compose, SSL configuration, troubleshooting common errors and setting up a reliable backup.",[37,41,52,55,84,103,106,109,112,120,123,127],{"type":38,"title":39,"body":40},"h2","Why self-host BookStack on a VPS","BookStack stands out for its simplicity: where other wikis overwhelm the user with options, it enforces a clear hierarchy — shelves, books, chapters, pages — that makes documentation immediately navigable. Built on Laravel, it is lightweight and easy to maintain. Self-hosted on a VPS, it keeps all your internal documentation — procedures, runbooks, customer knowledge base — on your own infrastructure, with no per-user subscription. For an agency documenting its projects or a technical team centralizing its procedures, it is a private wiki you control end to end, with full-text search, fine-grained permission management and a WYSIWYG or Markdown editor.",{"type":42,"title":43,"items":44},"ul","Concrete benefits of a self-hosted BookStack",[45,46,47,48,49,50,51],"Clear structure of shelves\u002Fbooks\u002Fchapters\u002Fpages: effortlessly navigable documentation.","WYSIWYG and Markdown editor of your choice, with integrated Draw.io diagrams.","Granular permissions by role and by book to partition sensitive content.","Fast full-text search across the entire knowledge base.","LDAP, SAML or OAuth authentication to integrate with your enterprise directory.","Lightweight footprint: a VPS with 2 GB of RAM is enough for team documentation.","No per-user subscription — as many contributors as needed at no extra cost.",{"type":38,"title":53,"body":54},"Hardware and software prerequisites","BookStack is undemanding. A VPS with 1 to 2 vCPU and **at least 2 GB of RAM** comfortably hosts a team's documentation; with BookStack and MariaDB running together, 2 GB is the recommended minimum — below that, Laravel migrations on first startup can fail due to out-of-memory. Consumption climbs mainly with the volume of uploaded images.\n\nPlan for 15 to 25 GB of SSD depending on the volume of attachments. On the software side: Docker 24+ and the Compose v2 plugin (`docker compose` without a hyphen), a `wiki.yourdomain.com` subdomain with an A record, and SMTP access for invitations and email notifications.",{"type":56,"title":57,"headers":58,"rows":63},"comparison","BookStack vs self-hosted alternatives",[59,60,61,62],"Tool","Stack","Min. RAM","Strength",[64,69,74,79],[65,66,67,68],"BookStack","Laravel + MariaDB","2 GB","Book\u002Fchapter hierarchy, WYSIWYG",[70,71,72,73],"Wiki.js","Node.js + any DB","512 MB","Modern editor, Git sync",[75,76,77,78],"Outline","Node.js + PostgreSQL","1 GB","Notion-like UI, rich API",[80,81,82,83],"Confluence","SaaS \u002F on-premise","4 GB+","Atlassian integration, mature",{"type":85,"title":86,"steps":87},"steps","Deploy BookStack with Docker Compose and SSL",[88,91,94,97,100],{"title":89,"body":90},"Prepare the VPS and install Docker","Connect via SSH then install Docker and the Compose plugin:\n\n```bash\ncurl -fsSL https:\u002F\u002Fget.docker.com | sh\napt install docker-compose-plugin\nmkdir -p \u002Fopt\u002Fbookstack && cd \u002Fopt\u002Fbookstack\n```\n\nVerify: `docker compose version` should show v2.x or higher. The community image `lscr.io\u002Flinuxserver\u002Fbookstack` is the most widely used and best maintained for containerized deployment.",{"title":92,"body":93},"Create the docker-compose.yml file","Create `\u002Fopt\u002Fbookstack\u002Fdocker-compose.yml` with two services — MariaDB and BookStack — on a dedicated network:\n\n```yaml\nservices:\n  mariadb:\n    image: mariadb:10.11\n    environment:\n      MYSQL_ROOT_PASSWORD: changeme_root\n      MYSQL_DATABASE: bookstack\n      MYSQL_USER: bookstack\n      MYSQL_PASSWORD: changeme_bk\n    volumes:\n      - .\u002Fdata\u002Fmariadb:\u002Fvar\u002Flib\u002Fmysql\n    networks: [bookstack]\n\n  bookstack:\n    image: lscr.io\u002Flinuxserver\u002Fbookstack:latest\n    environment:\n      PUID: 1000\n      PGID: 1000\n      APP_URL: https:\u002F\u002Fwiki.yourdomain.com\n      DB_HOST: mariadb\n      DB_USER: bookstack\n      DB_PASS: changeme_bk\n      DB_DATABASE: bookstack\n      MAIL_DRIVER: smtp\n      MAIL_HOST: smtp.yourdomain.com\n      MAIL_PORT: 587\n      MAIL_FROM: wiki@yourdomain.com\n      MAIL_USERNAME: wiki@yourdomain.com\n      MAIL_PASSWORD: your_smtp_password\n    ports:\n      - \"6875:80\"\n    volumes:\n      - .\u002Fdata\u002Fbookstack:\u002Fconfig\n    depends_on: [mariadb]\n    networks: [bookstack]\n\nnetworks:\n  bookstack:\n```\n\n`APP_URL` must exactly match the final HTTPS URL. An incorrect value breaks internal links and uploads.",{"title":95,"body":96},"Start the stack and check logs","```bash\ndocker compose up -d\ndocker compose logs -f bookstack\n```\n\nOn first startup, BookStack automatically runs the Laravel migrations to create the database schema. Wait for the line `Server running on http:\u002F\u002F0.0.0.0:80` before continuing — this takes 30 to 60 seconds.",{"title":98,"body":99},"Configure reverse proxy and SSL","With **Caddy** (automatic certificate management):\n\n```\nwiki.yourdomain.com {\n    reverse_proxy localhost:6875\n}\n```\n\nReload Caddy: `systemctl reload caddy`.\n\nWith **Nginx + Certbot**:\n\n```nginx\nserver {\n    listen 80;\n    server_name wiki.yourdomain.com;\n    return 301 https:\u002F\u002F$host$request_uri;\n}\nserver {\n    listen 443 ssl;\n    server_name wiki.yourdomain.com;\n    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fwiki.yourdomain.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fwiki.yourdomain.com\u002Fprivkey.pem;\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:6875;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n\nObtain the certificate with `certbot --nginx -d wiki.yourdomain.com`.",{"title":101,"body":102},"First login and securing the admin account","Open `https:\u002F\u002Fwiki.yourdomain.com`. The default account is `admin@admin.com` with the password `password`. Change them immediately under **Settings → Profile**.\n\nThen verify that SMTP works: **Settings → Email configuration → Send a test email**. If the test fails, check the logs: `docker compose logs bookstack | grep -i mail`.",{"type":38,"title":104,"body":105},"Advanced configuration: SSO, LDAP and SAML","BookStack supports several centralized authentication mechanisms, configurable via environment variables in `docker-compose.yml`.\n\n**LDAP \u002F Active Directory**: add the variables `AUTH_METHOD=ldap`, `LDAP_SERVER`, `LDAP_BASE_DN`, `LDAP_USER_FILTER` and `LDAP_VERSION`. Users then sign in with their corporate credentials without a separate BookStack account.\n\n**SAML 2.0** (for providers such as Authentik, Keycloak or Azure AD): set `AUTH_METHOD=saml2` and fill in `SAML2_IDP_ENTITYID`, `SAML2_IDP_SSO` and `SAML2_IDP_SLO`. The official BookStack documentation provides examples per provider.\n\n**Social OAuth** (GitHub, Google, Slack): each provider has its own `*_APP_ID` \u002F `*_APP_SECRET` variable pair. This option suits teams that want to avoid managing passwords without deploying an LDAP server.",{"type":38,"title":107,"body":108},"Backing up and restoring BookStack","A BookStack instance rests on **three elements**: the MariaDB database, the `uploads` folder (images and attachments) and the `APP_KEY` value in the configuration. Without the `APP_KEY`, encrypted content is unrecoverable after restoration.\n\nDaily backup script to place in `\u002Fetc\u002Fcron.daily\u002Fbookstack-backup`:\n\n```bash\n#!\u002Fbin\u002Fbash\nBACKUP_DIR=\u002Fvar\u002Fbackups\u002Fbookstack\nmkdir -p $BACKUP_DIR\nDATE=$(date +%Y%m%d)\ndocker exec $(docker ps -qf name=mariadb) \\\n  mysqldump -u bookstack -pchangeme_bk bookstack \\\n  > $BACKUP_DIR\u002Fbookstack-db-$DATE.sql\ntar -czf $BACKUP_DIR\u002Fbookstack-uploads-$DATE.tar.gz \u002Fopt\u002Fbookstack\u002Fdata\u002Fbookstack\u002Fuploads\nfind $BACKUP_DIR -mtime +14 -delete\n```\n\nThen copy these archives to external storage (S3, Backblaze B2, or your VPS object storage). Keep the `APP_KEY` in a secrets manager off the server — it is the only element that cannot be recreated.",{"type":38,"title":110,"body":111},"Troubleshooting: common errors","A few errors come up regularly during a fresh installation or an update.",{"type":42,"title":113,"items":114},"Frequent issues and solutions",[115,116,117,118,119],"**SMTP error 'Connection refused' or timeout**: check that `MAIL_PORT` matches the actual port (587 for STARTTLS, 465 for SSL). Some SMTP servers block outgoing port 25. Test connectivity from the container: `docker exec -it bookstack curl -v telnet:\u002F\u002Fsmtp.yourdomain.com:587`.","**Permissions on `storage\u002F`: 500 error or blank page**: the `\u002Fopt\u002Fbookstack\u002Fdata\u002Fbookstack` folder must be owned by UID 1000 (the `PUID` variable). Fix with `chown -R 1000:1000 \u002Fopt\u002Fbookstack\u002Fdata\u002Fbookstack` then restart the container.","**Slowness or MariaDB timeout at startup**: BookStack waits for MariaDB to be ready. If the BookStack container restarts in a loop during the first seconds, that is normal. Add a `healthcheck` to the `mariadb` service in the Compose file or wait 30 seconds before inspecting logs.","**Images not displaying after a domain change**: `APP_URL` must exactly match the public HTTPS URL. If you change domains, update `APP_URL` in the Compose file, restart the container, then run `php artisan bookstack:update-url` from inside the container to update the URLs stored in the database.","**Migrations hang on first startup (OOM)**: if the VPS has less than 2 GB of RAM, Laravel migrations can be killed by the OOM killer. Add a 2 GB swap file (`fallocate -l 2G \u002Fswapfile && mkswap \u002Fswapfile && swapon \u002Fswapfile`) or increase the VPS RAM before retrying.",{"type":38,"title":121,"body":122},"Updating BookStack","The `lscr.io\u002Flinuxserver\u002Fbookstack:latest` image receives new versions shortly after their publication on GitHub. To update:\n\n```bash\ncd \u002Fopt\u002Fbookstack\ndocker compose pull\ndocker compose up -d\ndocker compose logs -f bookstack\n```\n\nDatabase migrations are applied automatically on startup. Check the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBookStackApp\u002FBookStack\u002Freleases\">BookStack release notes\u003C\u002Fa> before any major update: some versions introduce schema or configuration changes.",{"type":124,"title":125,"body":126},"tip","Security tip","Configure a `robots.txt` entry or protect your BookStack instance behind a web application firewall if it contains sensitive internal procedures. BookStack does not offer an 'intranet-only' mode by default — the public URL is accessible to anyone who knows the address. For truly private documentation, combine BookStack's granular permissions with a UFW rule or a WireGuard VPN that restricts access to port 443.",{"type":42,"title":128,"items":129},"Further reading",[130,131,132],"\u003Ca href=\"\u002Fblog\u002Fheberger-nextcloud\">Host Nextcloud on a VPS\u003C\u002Fa> — cloud storage and document collaboration.","\u003Ca href=\"\u002Fblog\u002Fheberger-gitea\">Host Gitea on a VPS\u003C\u002Fa> — self-hosted Git forge for your development teams.","\u003Ca href=\"\u002Fblog\u002Fself-host-authentik-vps\">Authentik on a VPS\u003C\u002Fa> — open source SSO to centralize authentication for BookStack and your other apps.","Install BookStack on a ServOrbit VPS with one click","BookStack is available in the ServOrbit Marketplace. Order a Cloud VPS and the structured wiki installs automatically, MariaDB included.","See BookStack listing","\u002Fapplications\u002Fcollaboration-productivity\u002Fbookstack",[138,157],{"id":139,"slug":140,"slugs":141,"title":145,"excerpt":146,"readTime":147,"views":148,"isPinned":19,"noindex":19,"publishedAt":149,"updatedAt":150,"category":151,"categories":152,"featuredImage":29,"bgImage":30,"posterImage":154,"relatedSolution":155},81,"host-wikijs-on-your-own-vps",{"fr":142,"en":140,"ar":143,"es":144},"heberger-wiki-js","استضافة-wikijs-على-خادمك-الافتراضي-الخاص-vps","alojar-wiki-js-en-un-vps","Host Wiki.js on Your Own VPS","Install Wiki.js on your VPS: a modern Markdown wiki with Git, PostgreSQL, authentication and SSL via Docker. Step-by-step tutorial.",4,1,"2026-03-31T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[153],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-wiki-js-poster.svg",{"categorySlug":24,"appSlug":156},"wiki-js",{"id":158,"slug":159,"slugs":160,"title":164,"excerpt":165,"readTime":166,"views":148,"isPinned":19,"noindex":19,"publishedAt":167,"updatedAt":168,"category":169,"categories":170,"featuredImage":29,"bgImage":30,"posterImage":172,"relatedSolution":173},71,"hosting-nextcloud-on-your-own-vps",{"fr":161,"en":159,"ar":162,"es":163},"heberger-nextcloud","استضافة-nextcloud-على-خادمك-الـvps-الخاص","alojar-nextcloud-en-su-propio-vps","Self-Host Nextcloud on VPS: NC 35, PHP 8.3 and MariaDB 11 Guide","Host Nextcloud on a VPS: Docker Compose, Redis, MariaDB backup, uploads over 40 GB behind Cloudflare and an alternative to Office 2021.",20,"2026-04-10T00:00:00+00:00","2026-11-08T16:32:50+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[171],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":24,"appSlug":174},"nextcloud",true,1794270408599]