services: traefik: image: traefik:v3.2 command: - --api.insecure=true - --providers.docker=true - --providers.docker.exposedbydefault=false - --entrypoints.web.address=:80 ports: - "80:80" - "8888:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro postgres: image: postgres:16-alpine environment: POSTGRES_USER: writekit POSTGRES_PASSWORD: writekit POSTGRES_DB: writekit volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U writekit"] interval: 5s timeout: 5s retries: 5 imaginary: image: h2non/imaginary:latest command: -enable-url-source=false -max-allowed-size=15728640 minio: image: minio/minio:latest command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin ports: - "9000:9000" - "9001:9001" volumes: - minio_data:/data minio-init: image: minio/mc:latest depends_on: - minio entrypoint: > /bin/sh -c " sleep 2; mc alias set local http://minio:9000 minioadmin minioadmin; mc mb local/writekit --ignore-existing; mc anonymous set download local/writekit; exit 0; " vite: image: node:20-alpine working_dir: /app/studio environment: - CHOKIDAR_USEPOLLING=true - CHOKIDAR_INTERVAL=100 command: sh -c "npm install && npm run dev -- --host" volumes: - ./studio:/app/studio - vite_node_modules:/app/studio/node_modules app: image: cosmtrek/air working_dir: /app depends_on: postgres: condition: service_healthy environment: air_wd: /app ENV: local VITE_URL: http://vite:5173 DATABASE_URL: postgres://writekit:writekit@postgres:5432/writekit?sslmode=disable DOMAIN: writekit.lvh.me BASE_URL: http://writekit.lvh.me DATA_DIR: /data SESSION_SECRET: dev-secret-change-in-prod-must-be-32-chars IMAGINARY_URL: http://imaginary:9000 R2_ACCOUNT_ID: local R2_ACCESS_KEY_ID: minioadmin R2_SECRET_ACCESS_KEY: minioadmin R2_BUCKET: writekit R2_PUBLIC_URL: http://localhost:9000/writekit R2_ENDPOINT: http://minio:9000 GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID:-} GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET:-} JARVIS_URL: http://jarvis:8090 volumes: - .:/app - app_data:/data - go_mod:/go/pkg/mod labels: - traefik.enable=true - traefik.http.routers.app.rule=HostRegexp(`writekit.lvh.me`) || HostRegexp(`{subdomain:[a-z0-9-]+}.writekit.lvh.me`) - traefik.http.routers.app.entrypoints=web - traefik.http.services.app.loadbalancer.server.port=8080 jarvis: build: context: ../jarvis ports: - "8090:8090" - "9999:9999" environment: PORT: "8090" LSP_PORT: "9999" volumes: postgres_data: minio_data: app_data: go_mod: vite_node_modules: