services: << service_name >>: image: penpotapp/frontend:latest container_name: << service_name >> environment: - TZ=<< timezone >> - PENPOT_FLAGS=enable-registration enable-login-with-password - PENPOT_BACKEND_URI=http://<< service_name >>-backend:6060 - PENPOT_EXPORTER_URI=http://<< service_name >>-exporter:6061 ports: - "<< port >>:8080" depends_on: - << service_name >>-backend restart: unless-stopped << service_name >>-backend: image: penpotapp/backend:latest container_name: << service_name >>-backend environment: - PENPOT_FLAGS=enable-registration enable-login-with-password - PENPOT_PUBLIC_URI=<< app_url >> - PENPOT_SECRET_KEY=<< secret_key >> - PENPOT_DATABASE_URI=postgresql://<< service_name >>-db/penpot - PENPOT_DATABASE_USERNAME=penpot - PENPOT_DATABASE_PASSWORD=<< db_password >> - PENPOT_REDIS_URI=redis://<< service_name >>-redis/0 - PENPOT_ASSETS_STORAGE_BACKEND=assets-fs - PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets volumes: - << appdata_dir >>/<< service_name >>-assets:/opt/data depends_on: - << service_name >>-db - << service_name >>-redis restart: unless-stopped << service_name >>-exporter: image: penpotapp/exporter:latest container_name: << service_name >>-exporter environment: - PENPOT_PUBLIC_URI=http://<< service_name >>:8080 restart: unless-stopped << service_name >>-db: image: postgres:16-alpine container_name: << service_name >>-db environment: - POSTGRES_DB=penpot - POSTGRES_USER=penpot - POSTGRES_PASSWORD=<< db_password >> volumes: - << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data restart: unless-stopped << service_name >>-redis: image: valkey/valkey:8-alpine container_name: << service_name >>-redis command: valkey-server --save 60 1 volumes: - << appdata_dir >>/<< service_name >>-redis:/data restart: unless-stopped