Files
Stellar/compose.yaml
T
EFLKumo ce87e56053 auth,feeds,ai,ui,deploy: build Stellar
Use Effect services for requests, AI tasks, and the RSS worker.
Add admin accounts, feed sharing, and stored reading profiles.
Add Biome, Effect tools, and Podman deployment with Caddy.
2026-10-11 16:21:39 +08:00

92 lines
2.2 KiB
YAML

name: stellar
x-application: &application
image: localhost/stellar:latest
build:
context: .
dockerfile: Containerfile
restart: unless-stopped
init: true
env_file:
- .env
environment:
DATABASE_URL: postgresql://stellar:${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}@database:5432/stellar
BETTER_AUTH_URL: ${APP_ORIGIN:-http://localhost:8080}
NODE_ENV: production
HOST: 0.0.0.0
PORT: "3000"
depends_on:
database:
condition: service_healthy
stop_grace_period: 30s
security_opt:
- no-new-privileges:true
services:
database:
image: docker.io/library/postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_DB: stellar
POSTGRES_USER: stellar
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}
volumes:
- database:/var/lib/postgresql
healthcheck:
test: [CMD-SHELL, "pg_isready -U stellar -d stellar"]
interval: 5s
timeout: 5s
retries: 20
start_period: 10s
stop_grace_period: 30s
app:
<<: *application
healthcheck:
test:
- CMD
- node
- -e
- "fetch('http://127.0.0.1:3000/api/health', { signal: AbortSignal.timeout(4000) }).then(r => { if (!r.ok) process.exit(1) }).catch(() => process.exit(1))"
interval: 10s
timeout: 5s
retries: 12
start_period: 60s
worker:
<<: *application
command: [node, --import, tsx, src/server/worker.ts]
healthcheck:
disable: true
depends_on:
database:
condition: service_healthy
app:
condition: service_healthy
proxy:
image: docker.io/library/caddy:2-alpine
restart: unless-stopped
environment:
DOMAIN: ${DOMAIN:-localhost}
ports:
- "${HTTP_PORT:-8080}:80"
- "${HTTPS_PORT:-8443}:443"
- "${HTTPS_PORT:-8443}:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro,Z
- caddy_data:/data
- caddy_config:/config
depends_on:
app:
condition: service_healthy
stop_grace_period: 10s
volumes:
database:
name: stellar_database
caddy_data:
name: stellar_caddy_data
caddy_config:
name: stellar_caddy_config