# documentation: https://help.penpot.app/technical-guide/getting-started/#install-with-docker
# slogan: Penpot is the first Open Source design and prototyping platform for product teams.
# tags: penpot,design,prototyping,figma,open,source
# logo: svgs/penpot.svg
# port: 8080

services:
  frontend:
    image: penpotapp/frontend:latest
    volumes:
      - penpot-assets:/opt/data/assets
    depends_on:
      penpot-backend:
        condition: service_healthy
      penpot-exporter:
        condition: service_healthy
    environment:
      - SERVICE_FQDN_FRONTEND_8080
      - PENPOT_FLAGS=${PENPOT_FRONTEND_FLAGS:-enable-login-with-password}
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://127.0.0.1:8080']
      interval: 2s
      timeout: 10s
      retries: 15

  penpot-backend:
    image: penpotapp/backend:latest
    volumes:
      - penpot-assets:/opt/data/assets
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    environment:
      - PENPOT_FLAGS=${PENPOT_BACKEND_FLAGS:-enable-login-with-password enable-smtp enable-prepl-server}
      - PENPOT_HTTP_SERVER_PORT=6060
      - PENPOT_SECRET_KEY=$SERVICE_REALBASE64_64_PENPOT
      - PENPOT_PUBLIC_URI=$SERVICE_FQDN_FRONTEND_8080
      - PENPOT_BACKEND_URI=http://penpot-backend
      - PENPOT_EXPORTER_URI=http://penpot-exporter
      - PENPOT_DATABASE_URI=postgresql://postgres/${POSTGRES_DB:-penpot}
      - PENPOT_DATABASE_USERNAME=${SERVICE_USER_POSTGRES}
      - PENPOT_DATABASE_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
      - PENPOT_REDIS_URI=redis://redis/0
      - PENPOT_ASSETS_STORAGE_BACKEND=assets-fs
      - PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets
      - PENPOT_TELEMETRY_ENABLED=${PENPOT_TELEMETRY_ENABLED:-false}
      - PENPOT_SMTP_DEFAULT_FROM=${PENPOT_SMTP_DEFAULT_FROM:-no-reply@example.com}
      - PENPOT_SMTP_DEFAULT_REPLY_TO=${PENPOT_SMTP_DEFAULT_REPLY_TO:-no-reply@example.com}
      - PENPOT_SMTP_HOST=${PENPOT_SMTP_HOST:-mailpit}
      - PENPOT_SMTP_PORT=${PENPOT_SMTP_PORT:-1025}
      - PENPOT_SMTP_USERNAME=${PENPOT_SMTP_USERNAME:-penpot}
      - PENPOT_SMTP_PASSWORD=${PENPOT_SMTP_PASSWORD:-penpot}
      - PENPOT_SMTP_TLS=${PENPOT_SMTP_TLS:-false}
      - PENPOT_SMTP_SSL=${PENPOT_SMTP_SSL:-false}
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://127.0.0.1:6060/readyz']
      interval: 10s
      timeout: 30s
      retries: 15

  penpot-exporter:
    image: penpotapp/exporter:latest
    environment:
      - PENPOT_PUBLIC_URI=$SERVICE_FQDN_FRONTEND_8080
      - PENPOT_REDIS_URI=redis://redis/0
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://127.0.0.1:6061/readyz']
      interval: 2s
      timeout: 10s
      retries: 15

  mailpit:
    image: axllent/mailpit:latest
    environment:
      - SERVICE_FQDN_MAILPIT_8025
    healthcheck:
      test: ['CMD', '/mailpit', 'readyz']
      interval: 5s
      timeout: 20s
      retries: 10

  postgres:
    image: postgres:15
    volumes:
      - penpot-postgresql-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_INITDB_ARGS=--data-checksums
      - POSTGRES_USER=$SERVICE_USER_POSTGRES
      - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES
      - POSTGRES_DB=${POSTGRES_DB:-penpot}
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
      interval: 5s
      timeout: 20s
      retries: 10

  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes
    volumes:
      - penpot-redis-data:/data
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
      interval: 5s
      timeout: 20s
      retries: 10
