services:
  traefik:
    image: traefik:v2.0
    container_name: "traefik"
    command:
      - "--api.insecure=true"
      - "--providers.docker"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.http.address=:80"
      - "--entrypoints.https.address=:443"
      - "--serverstransport.insecureskipverify=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=http"
      - "--certificatesresolvers.myresolver.acme.email=acme@example.com"
      - "--certificatesresolvers.myresolver.acme.storage=/acme.json"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.http-catchall.rule=hostregexp(`{host:[a-z-.]+}`)"
      - "traefik.http.routers.http-catchall.entrypoints=http"
      - "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    ports:
      - "80:80"
      - "443:443"
      - "127.0.0.1:8088:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/docker/traefik/acme.json:/acme.json
      - /etc/resolv.conf:/etc/resolv.conf
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "5"

  later42:
    build: .
    container_name: later42
    image: dntskdev/later42:master
    restart: always
    environment:
      SECRET: "ahth3chaquodahh6que8thie1EThe5Iephich8eikei2Uojaemae6gee0kaet4aush2aoqu0ruL9oGhaiR9luu7cohreH6lebo0v"
      DB_TYPE: postgres
      DB_HOST: later42db
      DB_NAME: later42
      DB_USER: later42
      DB_PASS: later42
      DOMAIN: later42.com
      REDIS_URL: redis://redis:6379
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "5"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.later42-opt.rule=Host(`later42.com`)"
      - "traefik.http.routers.later42-opt.entrypoints=https"
      - "traefik.http.routers.later42-opt.tls.certresolver=myresolver"
      - "extdns.cf.later42.hostname=later42.com"

  later42_tasks:
    build: .
    container_name: later42_tasks
    image: dntskdev/later42:master
    restart: always
    command: celery -A later42 worker --loglevel=info
    environment:
      SECRET: "ahth3chaquodahh6que8thie1EThe5Iephich8eikei2Uojaemae6gee0kaet4aush2aoqu0ruL9oGhaiR9luu7cohreH6lebo0v"
      DB_TYPE: postgres
      DB_HOST: later42db
      DB_NAME: later42
      DB_USER: later42
      DB_PASS: later42
      DOMAIN: later42.com
      REDIS_URL: redis://redis:6379
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "5"

  later42db:
    container_name: later42db
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: later42
      POSTGRES_PASSWORD: later42
      POSTGRES_DB: later42
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - /opt/docker/later42/db:/var/lib/postgresql/data
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "5"

  redis:
    image: "redis:alpine"
    hostname: redis
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - /opt/docker/redis-data:/var/lib/redis
    environment:
      - REDIS_REPLICATION_MODE=master