version: "3.8" 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:-} # DWG-to-DXF sidecar - DWG2DXF_URL=http://dwg2dxf:5001 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