Files
ArchiTools/docker-compose.yml
T
AI Assistant 9bab9db4df feat(geoportal): N8N webhook on sync completion + tile cache monitoring
- weekend-deep-sync.ts: fire webhook to N8N_WEBHOOK_URL after each sync cycle
  (N8N triggers tippecanoe PMTiles rebuild via SSH on host)
- nginx tile-cache: add stub_status at /status, custom log format with cache status
- Add tile-cache-stats.sh: shows HIT/MISS ratio, cache size, slow tiles
- docker-compose: add N8N_WEBHOOK_URL env var

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 09:44:38 +02:00

148 lines
5.5 KiB
YAML

services:
architools:
build:
context: .
args:
- NEXT_PUBLIC_STORAGE_ADAPTER=${NEXT_PUBLIC_STORAGE_ADAPTER:-database}
- NEXT_PUBLIC_APP_NAME=${NEXT_PUBLIC_APP_NAME:-ArchiTools}
- NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL:-https://tools.beletage.ro}
container_name: architools
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NODE_ENV=production
# Database
- DATABASE_URL=postgresql://architools_user:stictMyFon34!_gonY@10.10.10.166:5432/architools_db?schema=public
# MinIO
- MINIO_ENDPOINT=10.10.10.166
- MINIO_PORT=9002
- MINIO_USE_SSL=false
- MINIO_ACCESS_KEY=admin
- MINIO_SECRET_KEY=MinioStrongPass123
- MINIO_BUCKET_NAME=tools
# Authentication (Authentik OIDC)
- NEXTAUTH_URL=https://tools.beletage.ro
- NEXTAUTH_SECRET=8IL9Kpipj0EZwZPNvekbNRPhV6a2/UY4cGVzE3n0pUY=
- AUTHENTIK_CLIENT_ID=V59GMiYle87yd9VZOgUmdSmzYQALqNsKVAUR6QMi
- AUTHENTIK_CLIENT_SECRET=TMeewkusUro0hQ2DMwS0Z5lNpNMdmziO9WXywNAGlK3Y6Y8HYULZBEtMtm53lioIkszWbpPRQcv1cxHMtwftMvsaSnbliDsL1f707wmUJhMFKjeZ0ypIFKFG4dJkp7Jr
- AUTHENTIK_ISSUER=https://auth.beletage.ro/application/o/architools/
# Vault encryption
- ENCRYPTION_SECRET=ArchiTools-Vault-2025!SecureKey@AES256
# ManicTime Tags.txt sync (SMB mount path)
- MANICTIME_TAGS_PATH=/mnt/manictime/Tags.txt
# AI Chat (set AI_PROVIDER to openai/anthropic/ollama; demo if no key)
- AI_PROVIDER=${AI_PROVIDER:-demo}
- AI_API_KEY=${AI_API_KEY:-}
- AI_MODEL=${AI_MODEL:-}
- AI_BASE_URL=${AI_BASE_URL:-}
- AI_MAX_TOKENS=${AI_MAX_TOKENS:-2048}
# Visual CoPilot (at-vim)
- VIM_URL=${VIM_URL:-}
# eTerra ANCPI (parcel-sync module)
- ETERRA_USERNAME=${ETERRA_USERNAME:-}
- ETERRA_PASSWORD=${ETERRA_PASSWORD:-}
# ANCPI ePay (CF extract ordering)
- ANCPI_USERNAME=m.tarau@beletage.ro
- ANCPI_PASSWORD=Beletage@112
- ANCPI_BASE_URL=https://epay.ancpi.ro/epay
- ANCPI_LOGIN_URL=https://oassl.ancpi.ro/openam/UI/Login
- ANCPI_DEFAULT_SOLICITANT_ID=14452
- MINIO_BUCKET_ANCPI=ancpi-documente
# Stirling PDF (local PDF tools)
- STIRLING_PDF_URL=http://10.10.10.166:8087
- STIRLING_PDF_API_KEY=cd829f62-6eef-43eb-a64d-c91af727b53a
# iLovePDF cloud compression (free: 250 files/month)
- ILOVEPDF_PUBLIC_KEY=${ILOVEPDF_PUBLIC_KEY:-}
# Martin vector tile server (geoportal)
- NEXT_PUBLIC_MARTIN_URL=https://tools.beletage.ro/tiles
# PMTiles overview tiles from MinIO (empty = use Martin for all layers)
- NEXT_PUBLIC_PMTILES_URL=http://10.10.10.166:9002/tiles/overview.pmtiles
# DWG-to-DXF sidecar
- DWG2DXF_URL=http://dwg2dxf:5001
# Email notifications (Brevo SMTP)
- BREVO_SMTP_HOST=smtp-relay.brevo.com
- BREVO_SMTP_PORT=587
- BREVO_SMTP_USER=a2d94b001@smtp-brevo.com
- BREVO_SMTP_PASS=xsmtpsib-c2f5dfe1a7809c962d8907afafdc9edc1ff7e74340518539de8f8eccfd1dcc90-ipkNHpvN9RByv1V6
- NOTIFICATION_FROM_EMAIL=noreply@beletage.ro
- NOTIFICATION_FROM_NAME=Alerte Termene
- NOTIFICATION_CRON_SECRET=1547a198feca43af6c05622588c6d3b820bad5163b8c20175b2b5bbf8fc1a987
# Weekend Deep Sync email reports (comma-separated for multiple recipients)
- WEEKEND_SYNC_EMAIL=${WEEKEND_SYNC_EMAIL:-}
# N8N webhook — triggers PMTiles rebuild after sync cycle
- N8N_WEBHOOK_URL=${N8N_WEBHOOK_URL:-}
# Portal-only users (comma-separated, redirected to /portal)
- PORTAL_ONLY_USERS=dtiurbe,d.tiurbe
# Address Book API (inter-service auth for external tools)
- ADDRESSBOOK_API_KEY=abook-7f3e9a2b4c1d8e5f6a0b3c7d9e2f4a1b5c8d0e3f6a9b2c5d8e1f4a7b0c3d6e
depends_on:
dwg2dxf:
condition: service_healthy
volumes:
# SMB share for ManicTime Tags.txt (mount on host: //time/tags → /mnt/manictime)
- /mnt/manictime:/mnt/manictime
labels:
- "com.centurylinklabs.watchtower.enable=true"
dwg2dxf:
build:
context: ./dwg2dxf-api
container_name: dwg2dxf
restart: unless-stopped
healthcheck:
test:
[
"CMD",
"python3",
"-c",
"import urllib.request; urllib.request.urlopen('http://localhost:5001/health')",
]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
martin:
build:
context: .
dockerfile: martin.Dockerfile
container_name: martin
restart: unless-stopped
# No host port — only accessible via tile-cache nginx proxy
command: ["--config", "/config/martin.yaml"]
environment:
- DATABASE_URL=postgresql://architools_user:stictMyFon34!_gonY@10.10.10.166:5432/architools_db
tile-cache:
build:
context: .
dockerfile: tile-cache.Dockerfile
container_name: tile-cache
restart: unless-stopped
ports:
- "3010:80"
depends_on:
- martin
volumes:
- tile-cache-data:/var/cache/nginx/tiles
tippecanoe:
build:
context: .
dockerfile: tippecanoe.Dockerfile
container_name: tippecanoe
profiles: ["tools"]
environment:
- DB_HOST=10.10.10.166
- DB_PORT=5432
- DB_NAME=architools_db
- DB_USER=architools_user
- DB_PASS=stictMyFon34!_gonY
- MINIO_ENDPOINT=http://10.10.10.166:9002
- MINIO_ACCESS_KEY=admin
- MINIO_SECRET_KEY=MinioStrongPass123
volumes:
tile-cache-data: