75 lines
2.7 KiB
YAML
75 lines
2.7 KiB
YAML
# Optional all-in-one stack for Coolify's "Docker Compose" build pack.
|
|||
|
|
# Bundles the app + a PostgreSQL database + persistent volumes.
|
||
|
|
#
|
||
|
|
# If you instead provision Postgres separately in Coolify (recommended for
|
||
|
|
# production), deploy with the Dockerfile build pack and skip this file.
|
||
|
|
#
|
||
|
|
# Set the referenced variables in Coolify's Environment Variables. Mark the
|
||
|
|
# NEXT_PUBLIC_* and POSTGRES_* values as available at build time.
|
||
|
|
|
||
|
|
services:
|
||
|
|
app:
|
||
|
|
build:
|
||
|
|
context: .
|
||
|
|
dockerfile: Dockerfile
|
||
|
|
args:
|
||
|
|
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL}
|
||
|
|
NEXT_PUBLIC_APP_NAME: ${NEXT_PUBLIC_APP_NAME:-Property Management Network}
|
||
|
|
restart: unless-stopped
|
||
|
|
depends_on:
|
||
|
|
db:
|
||
|
|
condition: service_healthy
|
||
|
|
environment:
|
||
|
|
DATABASE_URL: postgres://${POSTGRES_USER:-pmn}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-pmn}
|
||
|
|
# Bundled Postgres talks plaintext over the private compose network.
|
||
|
|
DATABASE_SSL: ${DATABASE_SSL:-disable}
|
||
|
|
RUN_MIGRATIONS_ON_START: "true"
|
||
|
|
BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}
|
||
|
|
BETTER_AUTH_URL: ${BETTER_AUTH_URL}
|
||
|
|
GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}
|
||
|
|
GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}
|
||
|
|
STORAGE_DIR: /app/storage
|
||
|
|
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY:-}
|
||
|
|
STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET:-}
|
||
|
|
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY: ${NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY:-}
|
||
|
|
STRIPE_PRO_MONTHLY_PRICE_ID: ${STRIPE_PRO_MONTHLY_PRICE_ID:-}
|
||
|
|
STRIPE_LANDLORD_MONTHLY_PRICE_ID: ${STRIPE_LANDLORD_MONTHLY_PRICE_ID:-}
|
||
|
|
STRIPE_LIFETIME_PRICE_ID: ${STRIPE_LIFETIME_PRICE_ID:-}
|
||
|
|
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
|
||
|
|
RESEND_API_KEY: ${RESEND_API_KEY:-}
|
||
|
|
RESEND_FROM_EMAIL: ${RESEND_FROM_EMAIL:-noreply@propertymanagement.network}
|
||
|
|
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL}
|
||
|
|
NEXT_PUBLIC_APP_NAME: ${NEXT_PUBLIC_APP_NAME:-Property Management Network}
|
||
|
|
CRON_SECRET: ${CRON_SECRET}
|
||
|
|
volumes:
|
||
|
|
- app-storage:/app/storage
|
||
|
|
expose:
|
||
|
|
- "3000"
|
||
|
|
healthcheck:
|
||
|
|
test:
|
||
|
|
["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
|
||
|
|
interval: 30s
|
||
|
|
timeout: 5s
|
||
|
|
retries: 3
|
||
|
|
start_period: 25s
|
||
|
|
|
||
|
|
db:
|
||
|
|
image: postgres:17-alpine
|
||
|
|
restart: unless-stopped
|
||
|
|
environment:
|
||
|
|
POSTGRES_USER: ${POSTGRES_USER:-pmn}
|
||
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||
|
|
POSTGRES_DB: ${POSTGRES_DB:-pmn}
|
||
|
|
volumes:
|
||
|
|
- db-data:/var/lib/postgresql/data
|
||
|
|
healthcheck:
|
||
|
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-pmn} -d ${POSTGRES_DB:-pmn}"]
|
||
|
|
interval: 10s
|
||
|
|
timeout: 5s
|
||
|
|
retries: 10
|
||
|
|
start_period: 10s
|
||
|
|
|
||
|
|
volumes:
|
||
|
|
app-storage:
|
||
|
|
db-data:
|