divan/docker-compose.yml
Anas Rashid 41e1ff7827 Database name: museum -> diwan
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 23:49:29 +02:00

70 lines
2.5 KiB
YAML

# Diwan stack: SQL Server + API (RMuseum) + site (DiwanRazor) behind Caddy (automatic HTTPS).
# Setup: cp .env.example .env, edit it, then `docker compose up -d --build`. See DIWAN.md.
services:
db:
image: mcr.microsoft.com/mssql/server:2022-latest # x86-64 only
environment:
ACCEPT_EULA: "Y"
MSSQL_PID: Express
MSSQL_SA_PASSWORD: ${MSSQL_SA_PASSWORD:?set in .env}
volumes:
- mssql:/var/opt/mssql
healthcheck:
test: ["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -C -S localhost -U sa -P \"$$MSSQL_SA_PASSWORD\" -Q 'SELECT 1' || exit 1"]
interval: 10s
timeout: 5s
retries: 30
restart: unless-stopped
api:
build: { context: ., args: { PROJECT: RMuseum } }
depends_on: { db: { condition: service_healthy } }
environment:
ConnectionStrings__DefaultConnection: "Server=db;Database=diwan;User Id=sa;Password=${MSSQL_SA_PASSWORD};TrustServerCertificate=True;MultipleActiveResultSets=true"
Security__Secret: ${JWT_SECRET:?set in .env}
RSecurityBackend__ApplicationName: Diwan
RSecurityBackend__FirstUserEmail: ${ADMIN_EMAIL:?set in .env}
SignUp__Enabled: ${SIGNUP_ENABLED:-False}
WebServiceUrl: https://${API_DOMAIN}
# Linux paths for upstream's Windows defaults
PictureFileService__StoragePath: /data/museum
PictureFileService__TrashStoragePath: /data/museum-trash
AudioUploadService__TempUploadPath: /data/tempaudio
AudioUploadService__LocalAudioRepositoryPath: /data/audio
Diwan__SitemapLocation: /data/sitemap.xml
PublicDataExport__LocalWorkingCopyPath: /data/public-export
volumes:
- data:/data
restart: unless-stopped
site:
build: { context: ., args: { PROJECT: DiwanRazor } }
depends_on: [api]
environment:
APIRoot: http://api:8080 # server-side calls stay on the docker network
GlobalAPIRoot: https://${API_DOMAIN} # what browsers use
SiteUrl: https://${SITE_DOMAIN}
DataProtectionPersistPath: /data/keys
TrackingScript: "" # upstream's is Diwan's analytics
SemanticSearchAPIRoot: "" # upstream's indexes Persian Diwan, not Diwan
volumes:
- data:/data
restart: unless-stopped
caddy:
image: caddy:2
depends_on: [site, api]
ports: ["80:80", "443:443"]
environment:
SITE_DOMAIN: ${SITE_DOMAIN}
API_DOMAIN: ${API_DOMAIN}
volumes:
- ./deploy/Caddyfile:/etc/caddy/Caddyfile:ro
- caddy:/data
restart: unless-stopped
volumes:
mssql:
data:
caddy: