networks:
  traefik-net:
    name: traefik-net
    external: true

volumes:
  joplin-pg-data:
    name: joplin-pg-data

services:
  db:
    image: postgres:15
    volumes:
      - joplin-pg-data:/var/lib/postgresql/data
    restart: unless-stopped
    networks:
      - default
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_DB=${POSTGRES_DATABASE}

  joplin:
    image: joplin/server:2.14.2-beta
    depends_on:
      - db
    restart: unless-stopped
    environment:
      - APP_PORT=22300
      - APP_BASE_URL=https://${HOST}
      - DB_CLIENT=pg
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DATABASE=${POSTGRES_DATABASE}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PORT=${POSTGRES_PORT}
      - POSTGRES_HOST=db
      - MAILER_ENABLED=${MAILER_ENABLED}
      - MAILER_HOST=${MAILER_HOST}
      - MAILER_PORT=${MAILER_PORT}
      - MAILER_SECURITY=${MAILER_SECURITY}
      - MAILER_AUTH_USER=${MAILER_AUTH_USER}
      - MAILER_AUTH_PASSWORD=${MAILER_AUTH_PASSWORD}
      - MAILER_NOREPLY_NAME=${MAILER_NOREPLY_NAME}
      - MAILER_NOREPLY_EMAIL=${MAILER_NOREPLY_EMAIL}
    networks:
      - traefik-net
      - default
    deploy:
      labels:
        - traefik.enable=true
        - traefik.docker.network=traefik-net
        - traefik.http.routers.joplin.rule=Host(`${HOST}`)
        - traefik.http.routers.joplin.entrypoints=websecure
        - traefik.http.routers.joplin.tls.certresolver=le
        - traefik.http.services.joplin.loadbalancer.server.port=22300