version: "3" services: db: image: mysql:8.0.13 container_name: db command: --default-authentication-plugin=mysql_native_password restart: always env_file: .env volumes: - /etc/localtime:/etc/localtime:ro - db-datavolume:/var/lib/mysql - ./mysql:/etc/mysql/conf.d ports: - "3306:3306" labels: - traefik.enable=false traccar: image: traccar/traccar:4.8-alpine container_name: traccar depends_on: - db restart: always volumes: - ./traccar/conf/traccar.xml:/opt/traccar/conf/traccar.xml:ro - /var/log/traccar:/opt/traccar/logs:rw - ./traccar/web/favicon.ico:/opt/traccar/web/favicon.ico:ro - ./traccar/web/icon.png:/opt/traccar/web/icon.png:ro - ./traccar/web/logo.svg:/opt/traccar/web/logo.svg:ro - ./traccar/web/release.html:/opt/traccar/web/release.html:ro - ./traccar/web/app.css:/opt/traccar/web/app.css:ro ports: - "5000-5150:5000-5150" - "8082:8082" labels: - traefik.http.routers.traccar.rule=Host(`web.${DOMAIN}`) - traefik.http.services.traccar_web.loadbalancer.server.port=8082 rev_proxy: image: traefik:v2.2 container_name: rev_proxy restart: always env_file: .env ports: - "80:80" - "443:443" - "8080:8080" labels: - traefik.http.routers.api.rule=Host(`proxy.${DOMAIN}`) - traefik.http.routers.api.service=api@internal - traefik.http.routers.api.middlewares=auth - traefik.http.middlewares.auth.basicauth.users=${AUTH_USER_PASSWORD} volumes: - ./traefik/traefik.toml:/traefik.toml - ./traefik/acme.json:/acme.json - /var/log/traefik:/logs - /var/run/docker.sock:/var/run/docker.sock volumes: db-datavolume: