Note: since i don't use this service anymore, this page might be not updated.
BookStack is a very cool kind of Wiki / knowledge / publishing tool. It's Open Source, very polished and also very simple to use.
I don't use Bookstack because i don't really need it, Silverbullet is just enough for my needs, even if it's a different stuff.
Installing BookStack can be done on bare-metal with your existing PHP / MariaDB stack or use a pre-built container. I choose to go with the container because i find it easier than properly segregate yet another PHP installation.
BookStack do not provide container images themselves, but they rely on external providers and i choose the Linux Server guys because they have a great reputation and maintain lots of well polished images.
Of course i will show you how to install it via Podman on Gentoo instead of Docker, to go fully rootless and secure.
As usual, you need to create a dedicated user and create the data folder:
useradd -d /data/daemons/bookstack -m bookstack mkdir /data/bookstack chown bookstack:bookstack /data/bookstack
As user bookstack create the compose yaml file:
--- services: bookstack: image: lscr.io/linuxserver/bookstack container_name: bookstack environment: # - PUID=1050 # - PGID=1050 - TZ=Europe/Rome - APP_URL=https://mydomain.com/bookstack - DB_HOST=bookstack_db - DB_PORT=3306 - DB_USER=bookstack - DB_PASS=<your password> - DB_DATABASE=bookstackapp volumes: - /deposito/bookstack:/config ports: - 6875:80 depends_on: - bookstack_db networks: - bookstack-net bookstack_db: image: lscr.io/linuxserver/mariadb container_name: bookstack_db environment: # - PUID=1050 # - PGID=1050 - TZ=Europe/London - MYSQL_ROOT_PASSWORD=<random root password> - MYSQL_DATABASE=bookstackapp - MYSQL_USER=bookstack - MYSQL_PASSWORD=<your password> volumes: - /data/bookstack:/config networks: - bookstack-net networks: bookstack-net: {}
A few notes: you could use PUID / PGID but it's not really working, so i commented them out. They work for docker anyway, but podman is rootless by default, so there is no real reason to use them.
Of course choose proper available port (6875) and set the correct URL under APP_URL as well.
As usual, you should access the service only via Reverse Proxy (see The Reverse Proxy concept), the following NGINX configuration file will be enough:
location = /bookstack { return 301 https://$host/bookstack/; } location /bookstack/ { proxy_pass http://127.0.0.1:6875/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; }
If you follow my Custom User Services guide, just create, as root, the following links:
cd /etc/local.d ln -s _servicer.sh 62-bookstack--podman.start ln -s _servicer.sh 62-bookstack--podman.stop
Login to https://mydomain.com/bookstack/ as user admin@admin.org with password as password.