version: '3'

services:
  postgres:
    image: postgres:14.2-alpine
    container_name: postgres
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    ports:
      - 5432:5432
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U postgres" ]
      start_period: 15s
      interval: 30s
      timeout: 30s
      retries: 3
    restart: always

  traefik:
    image: traefik:rocamadour
    container_name: traefik
    command:
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

  server:
    image: amruthpillai/reactive-resume:server-latest
    container_name: server
    environment:
      - TZ=UTC
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3000/api
      - PUBLIC_GOOGLE_CLIENT_ID=
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - SECRET_KEY=
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_SSL_CERT=
      - JWT_SECRET=
      - JWT_EXPIRY_TIME=604800
      - GOOGLE_CLIENT_SECRET=
      - GOOGLE_API_KEY=
      - SENDGRID_API_KEY=
      - SENDGRID_FORGOT_PASSWORD_TEMPLATE_ID=
      - SENDGRID_FROM_NAME=
      - SENDGRID_FROM_EMAIL=
      - STORAGE_BUCKET=
      - STORAGE_REGION=
      - STORAGE_ENDPOINT=
      - STORAGE_URL_PREFIX=
      - STORAGE_ACCESS_KEY=
      - STORAGE_SECRET_KEY=
    depends_on:
      - traefik
      - postgres
    labels:
      - traefik.enable=true
      - traefik.http.routers.server.entrypoints=web
      - traefik.http.routers.server.rule=Host(`localhost`) && PathPrefix(`/api/`)
      - traefik.http.routers.server.middlewares=server-stripprefix
      - traefik.http.middlewares.server-stripprefix.stripprefix.prefixes=/api
      - traefik.http.middlewares.server-stripprefix.stripprefix.forceslash=true
    restart: always

  client:
    image: amruthpillai/reactive-resume:client-latest
    container_name: client
    environment:
      - TZ=UTC
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3000/api
      - PUBLIC_GOOGLE_CLIENT_ID=
      - PUBLIC_FLAG_DISABLE_SIGNUPS=false
    depends_on:
      - traefik
      - server
    labels:
      - traefik.enable=true
      - traefik.http.routers.client.rule=Host(`localhost`)
      - traefik.http.routers.client.entrypoints=web
    restart: always

volumes:
  pgdata:
