version: "3.5" services: traefik: image: "traefik:v2.2" ports: - "443:443" volumes: - "./traefik.yaml:/etc/traefik/traefik.yaml:ro" - "./letsencrypt:/letsencrypt" - "/var/run/docker.sock:/var/run/docker.sock:ro" restart: unless-stopped sqldb: image: mysql:5.7 environment: - MYSQL_DATABASE=kimai - MYSQL_USER=kimai - MYSQL_PASSWORD - MYSQL_RANDOM_ROOT_PASSWORD=yes volumes: - ./db_data:/var/lib/mysql command: --default-storage-engine innodb restart: unless-stopped healthcheck: test: mysqladmin -pchangemeplease ping -h localhost interval: 20s start_period: 10s timeout: 10s retries: 3 nginx: image: nginx:alpine volumes: - ./nginx_site.conf:/etc/nginx/conf.d/default.conf:ro - ./public:/opt/kimai/public:ro restart: unless-stopped depends_on: - kimai healthcheck: test: wget --spider http://nginx/health || exit 1 interval: 20s start_period: 10s timeout: 10s retries: 3 labels: - "traefik.enable=true" - "traefik.http.routers.kimai.rule=Host(`${APP_DOMAIN}`)" - "traefik.http.routers.kimai.entrypoints=websecure" - "traefik.http.routers.kimai.tls.certresolver=myresolver" - "traefik.http.services.kimai.loadbalancer.server.port=80" - "traefik.http.routers.kimai.middlewares=default-headers@file" kimai: image: kimai/kimai2:fpm-alpine-1.8-prod environment: - APP_ENV=prod - TRUSTED_HOSTS=localhost - ADMINMAIL - ADMINPASS volumes: - ./public:/opt/kimai/public - ./kimai:/opt/kimai/var restart: unless-stopped healthcheck: test: wget --spider http://nginx || exit 1 interval: 20s start_period: 10s timeout: 10s retries: 3