Extract receipt UI components, add view/edit/create dialog modes with list receipt previews, add docker-compose.coolify.yml and clearer COOLIFY/S3 path-style guidance for Application + MinIO setups. Co-authored-by: Cursor <cursoragent@cursor.com>
110 lines
4.0 KiB
YAML
110 lines
4.0 KiB
YAML
# Production stack (app + Postgres + MinIO). Local dev Postgres/MinIO: docker-compose.dev.yml
|
|
#
|
|
# Coolify: deploy docker-compose.coolify.yml as ONE Docker Compose resource (preferred),
|
|
# or this file. S3_ENDPOINT=http://minio:9000 works only inside a single stack.
|
|
# Application + separate MinIO → docs/COOLIFY.md.
|
|
#
|
|
# After git pull, rebuild before starting — a plain `docker compose up -d` reuses
|
|
# the existing local image and will NOT include new code. Use:
|
|
# ./scripts/docker-deploy.sh
|
|
# docker compose up -d --build
|
|
services:
|
|
app:
|
|
build:
|
|
context: .
|
|
args:
|
|
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3000}
|
|
BETTER_AUTH_URL: ${BETTER_AUTH_URL:-http://localhost:3000}
|
|
# Fixed default tag (beenvoice:local) is reused until you --build. docker-deploy.sh
|
|
# sets BEENVOICE_IMAGE=beenvoice:<git-sha> so each deploy gets a fresh tag.
|
|
image: ${BEENVOICE_IMAGE:-beenvoice:local}
|
|
environment:
|
|
NODE_ENV: production
|
|
AUTH_SECRET: ${AUTH_SECRET:?Set AUTH_SECRET in .env}
|
|
DATABASE_URL: postgres://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@db:5432/${POSTGRES_DB:-postgres}
|
|
DB_DISABLE_SSL: "true"
|
|
BETTER_AUTH_URL: ${BETTER_AUTH_URL:-http://localhost:3000}
|
|
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3000}
|
|
RESEND_API_KEY: ${RESEND_API_KEY:-}
|
|
RESEND_DOMAIN: ${RESEND_DOMAIN:-}
|
|
NEXT_PUBLIC_UMAMI_WEBSITE_ID: ${NEXT_PUBLIC_UMAMI_WEBSITE_ID:-}
|
|
NEXT_PUBLIC_UMAMI_SCRIPT_URL: ${NEXT_PUBLIC_UMAMI_SCRIPT_URL:-https://analytics.umami.is/script.js}
|
|
NEXT_PUBLIC_AUTHENTIK_ENABLED: ${NEXT_PUBLIC_AUTHENTIK_ENABLED:-false}
|
|
DISABLE_SIGNUPS: ${DISABLE_SIGNUPS:-true}
|
|
AUTHENTIK_ISSUER: ${AUTHENTIK_ISSUER:-}
|
|
AUTHENTIK_CLIENT_ID: ${AUTHENTIK_CLIENT_ID:-}
|
|
AUTHENTIK_CLIENT_SECRET: ${AUTHENTIK_CLIENT_SECRET:-}
|
|
AUTHENTIK_ORIGIN: ${AUTHENTIK_ORIGIN:-}
|
|
S3_ENDPOINT: http://minio:9000
|
|
S3_BUCKET: ${S3_BUCKET:-beenvoice-receipts}
|
|
S3_ACCESS_KEY: ${MINIO_ROOT_USER:-minioadmin}
|
|
S3_SECRET_KEY: ${MINIO_ROOT_PASSWORD:-minioadmin}
|
|
S3_REGION: ${S3_REGION:-us-east-1}
|
|
ports:
|
|
- "${WEB_PORT:-${PORT:-3000}}:3000"
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
minio:
|
|
condition: service_healthy
|
|
minio-init:
|
|
condition: service_completed_successfully
|
|
restart: unless-stopped
|
|
|
|
db:
|
|
image: postgres:17-alpine
|
|
environment:
|
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
|
POSTGRES_DB: ${POSTGRES_DB:-postgres}
|
|
volumes:
|
|
- beenvoice_pg_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test:
|
|
["CMD-SHELL", 'pg_isready -U "$${POSTGRES_USER}" -d "$${POSTGRES_DB}"']
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 10
|
|
restart: unless-stopped
|
|
|
|
# S3-compatible receipt storage. API :9000, web console :9001 (host-mapped in dev compose).
|
|
minio:
|
|
image: minio/minio:latest
|
|
environment:
|
|
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
|
|
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin}
|
|
volumes:
|
|
- beenvoice_minio_data:/data
|
|
command: server /data --console-address ":9001"
|
|
ports:
|
|
- "${MINIO_API_PORT:-9000}:9000"
|
|
- "${MINIO_CONSOLE_PORT:-9001}:9001"
|
|
healthcheck:
|
|
test: ["CMD", "mc", "ready", "local"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 10
|
|
restart: unless-stopped
|
|
|
|
minio-init:
|
|
image: minio/mc:latest
|
|
depends_on:
|
|
minio:
|
|
condition: service_healthy
|
|
environment:
|
|
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
|
|
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin}
|
|
S3_BUCKET: ${S3_BUCKET:-beenvoice-receipts}
|
|
entrypoint: ["/bin/sh", "-c"]
|
|
command:
|
|
- >-
|
|
mc alias set local http://minio:9000
|
|
"$${MINIO_ROOT_USER:-minioadmin}"
|
|
"$${MINIO_ROOT_PASSWORD:-minioadmin}" &&
|
|
mc mb "local/$${S3_BUCKET:-beenvoice-receipts}" --ignore-existing
|
|
restart: "no"
|
|
|
|
volumes:
|
|
beenvoice_pg_data:
|
|
beenvoice_minio_data:
|