skip to Main Content

I’m trying to set up Bookstack with traefik as a reverse proxy. traefik is already set up and running fine with Nextcloud and other services.

I’m using the image provide by linuxserver and am modifying the docker-compose file as follows:

version: "2"
services:
  bookstack:
    image: lscr.io/linuxserver/bookstack
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - APP_URL=my-sub.domain.com
      - DB_HOST=bookstack_db
      - DB_USER=dbusernamesetbyme
      - DB_PASS=thedbpasswordichose
      - DB_DATABASE=bookstackapp
    volumes:
      - /path/to/data:/config
    ports:
      - 6875:80
    restart: unless-stopped
    depends_on:
      - bookstack_db
  bookstack_db:
    image: lscr.io/linuxserver/mariadb
    container_name: bookstack_db
    environment:
      - PUID=1000
      - PGID=1000
      - MYSQL_ROOT_PASSWORD=modifiedpassword
      - TZ=Europe/Berlin
      - MYSQL_DATABASE=bookstackapp
      - MYSQL_USER=usernamesetbyme
      - MYSQL_PASSWORD=anotherpassword
    volumes:
      - /path/to/data:/config
    restart: unless-stopped
    labels:
      traefik.enable: "true" 
      traefik.http.routers.bookstack.entrypoints: "http" 
      traefik.http.routers.bookstack.rule: "Host(`my-sub.domain.de`)"
      traefik.http.middlewares.bookstack-https-redirect.redirectscheme.scheme: "https" 
      traefik.http.routers.bookstack.middlewares: "bookstack-https-redirect" 
      traefik.http.routers.bookstack-secure.entrypoints: "https" 
      traefik.http.routers.bookstack-secure.rule: "Host(`my-sub.domain.com`)"
      traefik.http.routers.bookstack-secure.tls: "true" 
      traefik.http.routers.bookstack-secure.tls.certresolver: "http" 
      traefik.http.routers.bookstack-secure.service: "bookstack" 
      traefik.http.services.bookstack.loadbalancer.server.port: "80" 
      traefik.docker.network: "nameofmyproxynetwork" 
   networks:
     - nameofmyproxynetwork

When I call my-sub.domain.com I get a Gateway Timeout. If I leave out the labels and the APP_URL, I can call bookstack via the host-ip and the port e. g. 101.101.101.101:6875 it works just fine.

Any ideas?

Best regards!

2

Answers


  1. Chosen as BEST ANSWER

    So, I've got some external help and got a .yml-file that worked:

    version: "3.7"
    services:
      bookstack:
        image: linuxserver/bookstack:latest
        container_name: bookstack
        environment:
          - APP_URL=https://my-sub.domain.com
          - TZ=Europe/Berlin
          # - PUID= # = stat ./bookstack/app --format "%u"
          # - PGID= # = stat ./bookstack/app --format "%g"
          - DB_HOST=bookstack_db
          - DB_DATABASE=bookstackdb
          - DB_USERNAME=<dbuser>
          - DB_PASSWORD=<dbpassword>
        volumes:
          - ./bookstack/app:/config
        ports:
          - 6875:80
        restart: unless-stopped
        depends_on:
          - bookstack_db
        labels:
          traefik.enable: "true"
          traefik.docker.network: "proxy"
          traefik.http.routers.bookstack.entrypoints: "http"
          traefik.http.routers.bookstack.rule: "Host(`my-sub.domain.com`)"
          traefik.http.middlewares.bookstack-https-redirect.redirectscheme.scheme: "https"
          traefik.http.routers.bookstack.middlewares: "bookstack-https-redirect"
          traefik.http.routers.bookstack-secure.entrypoints: "https"
          traefik.http.routers.bookstack-secure.rule: "Host(`my-sub.domain.com`)"
          traefik.http.routers.bookstack-secure.tls: "true"
          traefik.http.routers.bookstack-secure.tls.certresolver: "http"
          traefik.http.services.bookstack.loadbalancer.server.port: "80"
        networks:
         - default
         - proxy
      bookstack_db:
        image: lscr.io/linuxserver/mariadb
        container_name: bookstack_db
        environment:
          - TZ=Europe/Berlin
          - MYSQL_ROOT_PASSWORD=<dbrootpassword>
          - MYSQL_DATABASE=bookstackdb
          - MYSQL_USER=<dbuser>
          - MYSQL_PASSWORD=<dbpassword>
        volumes:
          - ./bookstack/db:/var/lib/mysql
        restart: unless-stopped
        networks:
         - default
    networks:
      default:
        name: bookstack-default
      proxy:
        external: true
    

    One issue of mine was, that I did not realize, that DB_USERNAME and MYSQL_USER, and DB_PASSWORD and MYSQL_PASSWORD had to contain the same variable.

    Furthermore I'm going to provide my traefik.yml, as it shows that I did not use the typical labelnames.

    api:
      dashboard: true
    entryPoints:
      http:
        address: ":80"
      https:
        address: ":443"
    providers:
      docker:
        endpoint: "unix:///var/run/docker.sock"
        exposedByDefault: false
      file:
        filename: "./dynamic_conf.yml"
    certificatesResolvers:
      http:
        acme:
          email: [email protected]
          storage: acme.json
          httpChallenge:
            entryPoint: http
    

    Hope that helps somebody else!


  2. Try to move labels: from bookstack_db: to bookstack:. I set up Bookstack with Trefik locally and it worked.

    You can use this docker-compose.yaml for reference:

    version: "3.7"
    services:
      bookstack:
        image: linuxserver/bookstack:latest
        container_name: bookstack
        environment:
          - APP_URL=my-sub.domain.com
          - TZ=Europe/Berlin
          - DB_HOST=bookstack_db:3306
          - DB_DATABASE=bookstackapp
          - DB_USERNAME=dbusernamesetbyme
          - DB_PASSWORD=thedbpasswordichose
        volumes:
          - ./bookstack/app:/config
        ports:
          - 6875:80
        restart: unless-stopped
        depends_on:
          - bookstack_db
        labels:
          traefik.enable: "true" 
          traefik.http.routers.bookstack.entrypoints: "http" 
          traefik.http.routers.bookstack.rule: "Host(`my-sub.domain.de`)"
          traefik.http.middlewares.bookstack-https-redirect.redirectscheme.scheme: "https" 
          traefik.http.routers.bookstack.middlewares: "bookstack-https-redirect" 
          traefik.http.routers.bookstack-secure.entrypoints: "https" 
          traefik.http.routers.bookstack-secure.rule: "Host(`my-sub.domain.com`)"
          traefik.http.routers.bookstack-secure.tls: "true" 
          traefik.http.routers.bookstack-secure.tls.certresolver: "http" 
          traefik.http.routers.bookstack-secure.service: "bookstack" 
          # traefik.http.services.bookstack.loadbalancer.server.port: "80" 
          # traefik.docker.network: "nameofmyproxynetwork" 
        networks:
         - nameofmyproxynetwork
      bookstack_db:
        image: mariadb:10.9
        container_name: bookstack_db
        environment:
          - TZ=Europe/Berlin
          - MYSQL_ROOT_PASSWORD=modifiedpassword
          - MYSQL_DATABASE=bookstackapp
          - MYSQL_USER=usernamesetbyme
          - MYSQL_PASSWORD=anotherpassword
        volumes:
          - ./bookstack/db:/var/lib/mysql 
        ports:
          - 3306:3306
        restart: unless-stopped
        networks:
         - nameofmyproxynetwork
    networks:
      nameofmyproxynetwork:
        external: true
    

    I attach also my original labels: config, just in case.

    labels:
        - traefik.enable=true
        - traefik.http.routers.bookstack-http.entrypoints=web
        - traefik.http.routers.bookstack-http.rule=Host(`bookstack.docker.localdev`)
        - traefik.http.routers.bookstack-http.middlewares=bookstack-https
        - traefik.http.middlewares.bookstack-https.redirectscheme.scheme=https
        - traefik.http.routers.bookstack-https.entrypoints=websecure
        - traefik.http.routers.bookstack-https.rule=Host(`bookstack.docker.localdev`)
        - traefik.http.routers.bookstack-https.tls=true"
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search