24d9aca812
Test backoffice (smb-crm) / test (push) Has been cancelled
Each client now gets their own clients.ics_token (lazily generated on first /owner/settings visit), which both authenticates and scopes /api/bookings.ics -- closing the gap where any shared-token holder could view another client's bookings by swapping the client_id query param. The owner settings page now surfaces a copyable subscribe URL. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
47 lines
1.2 KiB
YAML
47 lines
1.2 KiB
YAML
services:
|
|
smb-db:
|
|
image: postgres:16-alpine
|
|
container_name: smb-db
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_DB: smbcrm
|
|
POSTGRES_USER: smbcrm
|
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
volumes:
|
|
- smb-db-data:/var/lib/postgresql/data
|
|
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
|
networks: [smb-net]
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U smbcrm -d smbcrm"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
smb-crm:
|
|
build: ./app
|
|
container_name: smb-crm
|
|
restart: unless-stopped
|
|
environment:
|
|
DATABASE_URL: postgresql://smbcrm:${DB_PASSWORD}@smb-db:5432/smbcrm
|
|
CRM_API_TOKEN: ${CRM_API_TOKEN}
|
|
BOOKING_TOKEN_SECRET: ${BOOKING_TOKEN_SECRET}
|
|
SESSION_SECRET_KEY: ${SESSION_SECRET_KEY}
|
|
SMTP_HOST: ${SMTP_HOST}
|
|
SMTP_PORT: ${SMTP_PORT}
|
|
SMTP_USERNAME: ${SMTP_USERNAME}
|
|
SMTP_PASSWORD: ${SMTP_PASSWORD}
|
|
MAIL_FALLBACK_FROM: ${MAIL_FALLBACK_FROM}
|
|
PUBLIC_BASE_URL: ${PUBLIC_BASE_URL}
|
|
depends_on:
|
|
smb-db:
|
|
condition: service_healthy
|
|
networks: [smb-net, proxy]
|
|
|
|
volumes:
|
|
smb-db-data:
|
|
|
|
networks:
|
|
smb-net:
|
|
proxy:
|
|
external: true
|