# Installation Bookstack LS

Link: [https://www.bookstackapp.com/docs/admin/installation/#docker](https://www.bookstackapp.com/docs/admin/installation/#docker)

## Docker Containers

Community docker setups are available for those that would prefer to use a containerised version of BookStack:

#### LinuxServer.io

- [GitHub Repository](https://github.com/linuxserver/docker-bookstack)
- [GitHub container package](https://github.com/linuxserver/docker-bookstack/pkgs/container/bookstack)
- [Example compose stack](https://codeberg.org/bookstack/devops/src/branch/main/config/lsio-docker/docker-compose.yml)

#### solidnerd

- [GitHub Repository](https://github.com/solidnerd/docker-bookstack)
- [Docker Hub page](https://hub.docker.com/r/solidnerd/bookstack/)

Example compose stack - LinuxServer.io

\---

\# This is an example complete example docker-compose.yml  
\# file for a linuxserver.io based BookStack setup  
\# using the linuxserver.io MariaDB conatiner.

\# ENSURE YOU PAY ATTENTION TO ALL COMMENTS BELOW.  
\# Many of the values are just examples, and you WILL  
\# have to make changes to suit your environment.

\# These containers are maintained by the linuxserver.io  
\# team, not the official BookStack project.

\# For non-commented options, refer to the linuxserver documentation:   
\# https://docs.linuxserver.io/images/docker-bookstack/#environment-variables-e

services:

 # The container for BookStack itself  
 bookstack:  
 # You should update the version here to match the latest  
 # release of BookStack: https://github.com/BookStackApp/BookStack/releases  
 # You'll change this when wanting to update the version of BookStack used.  
 image: lscr.io/linuxserver/bookstack:version-v25.02  
 container\_name: bookstack  
 environment:  
\- PUID=1000  
\- PGID=1000  
\- TZ=Etc/UTC  
 # APP\_URL must be set as the base URL you'd expect to access BookStack  
 # on via the browser. The default shown here is what you might use if accessing  
 # direct from the browser on the docker host, hence the use of the port as configured below.  
\- APP\_URL=http://localhost:6875  
 # APP\_KEY must be a unique key. Generate your own by running  
 # docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey  
 # You should keep the "base64:" part for the option value.  
\- APP\_KEY=base64:3qjlIoUX4Tw6fUQgZcxMbz6lb8+dAzqpvItqHvahW1c=

 # The below database details are purposefully aligned with those  
 # configuted for the "mariadb" service below:  
\- DB\_HOST=mariadb  
\- DB\_PORT=3306  
\- DB\_DATABASE=bookstack  
\- DB\_USERNAME=bookstack  
\- DB\_PASSWORD=bookstack8432  
 volumes:  
 # You generally only ever need to map this one volume.  
 # This maps it to a "bookstack\_app\_data" folder in the same  
 # directory as this compose config file.  
\- ./bookstack\_app\_data:/config  
 ports:  
 # This exposes port 6875 for general web access.  
 # Commonly you'd have a reverse proxy in front of this,  
 # redirecting incoming requests to this port.  
\- 6875:80  
 restart: unless-stopped

 # The container for the database which BookStack will use to store  
 # most of its core data/content.  
 mariadb:  
 # You should update the version here to match the latest  
 # main version of the linuxserver mariadb container version:  
 # https://github.com/linuxserver/docker-mariadb/pkgs/container/mariadb/versions?filters%5Bversion\_type%5D=tagged  
 image: lscr.io/linuxserver/mariadb:11.4.4  
 container\_name: mariadb  
 environment:  
\- PUID=1000  
\- PGID=1000  
\- TZ=Etc/UTC  
 # You may want to change the credentials used below,  
 # but be aware the latter three options need to align  
 # with the DB\_\* options for the BookStack container.  
\- MYSQL\_ROOT\_PASSWORD=mysupersecretrootpassword  
\- MYSQL\_DATABASE=bookstack  
\- MYSQL\_USER=bookstack  
\- MYSQL\_PASSWORD=bookstack8432  
 volumes:  
 # You generally only ever need to map this one volume.  
 # This maps it to a "bookstack\_db\_data" folder in the same  
 # directory as this compose config file.  
\- ./bookstack\_db\_data:/config

 # These ports are commented out as you don't really need this port  
 # exposed for normal use, mainly only if connecting direct the the  
 # database externally. Otherwise, this risks exposing access to the  
 # database when not needed.  
 # ports:  
 # - 3306:3306  
 restart: unless-stopped