--- version: '3.6' networks: frontend: name: frontend services: traefik: container_name: 'traefik' image: traefik:v2.1 labels: traefik.enable: 'true' traefik.http.routers.traefik.entrypoints: 'http' traefik.http.routers.traefik.rule: "Host(`app.example.com`)" traefik.http.routers.traefik.middlewares: 'redirect@file' traefik.http.routers.traefik-secure.entrypoints: 'https' traefik.http.routers.traefik-secure.rule: "Host(`app.example.com`)" traefik.http.routers.traefik-secure.middlewares: 'traefik-auth@file' traefik.http.routers.traefik-secure.tls: 'true' volumes: - source: '/data/docker/traefik_data/traefik.toml' target: '/traefik.toml' type: 'bind' read_only: 'yes' - source: '/data/docker/traefik_data/dynamic_conf.toml' target: '/dynamic_conf.toml' type: 'bind' - source: '/data/docker/certbot/cert.pem' target: '/cert.pem' type: 'bind' read_only: 'yes' - source: '/data/docker/certbot/key.pem' target: '/key.pem' type: 'bind' read_only: 'yes' - source: '/run/docker.sock' target: '/run/docker.sock' type: 'bind' read_only: 'yes' networks: - 'default' - 'frontend' ports: - "80:80" - "443:443" - "8080:8080" expose: - "8080" restart: "unless-stopped" environment: - PUID=2000 - PGID=2000 portainer: container_name: 'portainer' image: portainer/portainer environment: - PUID=2000 - PGID=2000 command: '-H unix:///run/docker.sock' labels: traefik.enable: 'true' traefik.http.routers.portainer.rule: "Host(`portainer.app.example.com`)" traefik.http.routers.portainer.tls: 'true' volumes: - source: "/data/docker/portainer_data" target: '/data' type: 'bind' - source: '/run/docker.sock' target: '/run/docker.sock' type: 'bind' read_only: 'yes' networks: - 'default' - 'frontend' restart: "unless-stopped" # MariaDB database for Kanboard kanboard-mariadb: container_name: "kanboard-mariadb" image: linuxserver/mariadb environment: PUID: "2000" PGID: "2000" MYSQL_ROOT_PASSWORD: "NOTMYPASSWORD" TZ: 'Europe/London' MYSQL_DATABASE: 'kanboard' MYSQL_USER: 'kanboard' MYSQL_PASSWORD: "NOTMYPASSWORD" volumes: - source: "/data/docker/kanboard-mariadb" target: '/var/lib/mysql' type: 'bind' ports: - "3306:3306" networks: - 'default' - 'frontend' restart: "unless-stopped" # Kanboard task management kanboard: container_name: 'kanboard' image: kanboard/kanboard:latest environment: PUID: "2000" PGID: "2000" DATABASE_URL: "mysql://kanboard:NOTMYPASSWORD@kanboard-mariadb/kanboard" labels: traefik.enable: 'true' traefik.http.routers.kanboard.rule: "Host(`kanboard.app.example.com`)" traefik.http.routers.kanboard.tls: 'true' volumes: - source: "/data/docker/kanboard/data" target: '/var/www/app/data' type: 'bind' - source: "/data/docker/kanboard/plugins" target: '/var/www/app/plugins' type: 'bind' - source: '/data/docker/certbot/cert.pem' target: '/etc/nginx/ssl/kanboard.crt' type: 'bind' read_only: 'yes' - source: '/data/docker/certbot/key.pem' target: '/etc/nginx/ssl/kanboard.key' type: 'bind' read_only: 'yes' depends_on: - kanboard-mariadb networks: - 'default' - 'frontend' restart: "unless-stopped" vikunja-backend: container_name: 'vikunja-backend' image: vikunja/api environment: VIKUNJA_DATABASE_HOST: 'vikunja-db' VIKUNJA_DATABASE_PASSWORD: "NOTMYPASSWORD" VIKUNJA_DATABASE_TYPE: 'mysql' VIKUNJA_DATABASE_USER: 'vikunja' VIKUNJA_DATABASE_DATABASE: 'vikunja' VIKUNJA_REDIS_ENABLED: 1 VIKUNJA_REDIS_HOST: 'vikunja-redis:6379' VIKUNJA_CACHE_ENABLED: 1 VIKUNJA_CACHE_TYPE: redis VIKUNJA_SERVICE_FRONTENDURL: "https://vikunja.app.example.com" VIKUNJA_SERVICE_ENABLEREGISTRATION: 1 PUID: "2000" PGID: "2000" volumes: - source: "/data/docker/vikunja-backend" target: '/app/vikunja/files' type: 'bind' depends_on: - vikunja-db - vikunja-redis restart: "unless-stopped" labels: traefik.enable: 'true' traefik.http.routers.vikunja-backend.rule: "Host(`vikunja.app.example.com`) && PathPrefix(`/api/v1`)" traefik.http.routers.vikunja-backend.tls: 'true' networks: - 'default' - 'frontend' vikunja-frontend: container_name: 'vikunja-frontend' image: vikunja/frontend environment: PUID: "2000" PGID: "2000" labels: traefik.enable: 'true' traefik.http.routers.vikunja-frontend.rule: "Host(`vikunja.app.example.com`) && PathPrefix(`/`)" traefik.http.routers.vikunja-frontend.tls: 'true' depends_on: - vikunja-backend networks: - 'default' - 'frontend' restart: "unless-stopped" vikunja-db: container_name: 'vikunja-db' image: linuxserver/mariadb environment: MYSQL_ROOT_PASSWORD: "NOTMYPASSWORD" MYSQL_USER: 'vikunja' MYSQL_PASSWORD: "NOTMYPASSWORD" MYSQL_DATABASE: 'vikunja' TZ: 'Europe/London' PUID: "2000" PGID: "2000" volumes: - source: "/data/docker/vikunja-mariadb" target: '/var/lib/mysql' type: 'bind' restart: "unless-stopped" networks: - 'default' vikunja-redis: container_name: 'vikunja-redis' image: redis environment: PUID: "2000" PGID: "2000" networks: - 'default' restart: "unless-stopped"