120 lines
3 KiB
YAML
120 lines
3 KiB
YAML
|
|
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:
|