100 lines
5.0 KiB
YAML
100 lines
5.0 KiB
YAML
services:
|
|
hedgedoc2:
|
|
build:
|
|
context: /home/xiteng/src/hedgedoc
|
|
dockerfile: Dockerfile
|
|
image: hedgedoc2:ai-preview
|
|
container_name: hedgedoc2
|
|
restart: unless-stopped
|
|
environment:
|
|
- HD_BACKEND_PORT=3000
|
|
- HD_BACKEND_BIND_IP=0.0.0.0
|
|
- HD_FRONTEND_PORT=3001
|
|
- PORT=3001
|
|
- HD_DATABASE_TYPE=sqlite
|
|
- HD_DATABASE_NAME=/data/hedgedoc.sqlite
|
|
- HD_BASE_URL=https://notes2.xiteng.site
|
|
- HD_RENDERER_BASE_URL=https://notes2.xiteng.site
|
|
- HD_INTERNAL_API_URL=http://localhost:3000/
|
|
# Auth — Authentik OIDC
|
|
- HD_AUTH_SESSION_SECRET=hedgedoc2-experimental-session-secret-min-32-chars!!
|
|
- HD_AUTH_OIDC_SERVERS=AUTHENTIK
|
|
- HD_AUTH_OIDC_AUTHENTIK_ISSUER=https://auth.xiteng.site/application/o/hedgedoc2/
|
|
- HD_AUTH_OIDC_AUTHENTIK_CLIENT_ID=hedgedoc2
|
|
- HD_AUTH_OIDC_AUTHENTIK_CLIENT_SECRET=hedgedoc2-secret-9
|
|
- HD_AUTH_OIDC_AUTHENTIK_PROVIDER_NAME=Authentik
|
|
- HD_AUTH_LOCAL_ENABLE_LOGIN=false
|
|
# Permissions
|
|
- HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE=write
|
|
# Media
|
|
- HD_MEDIA_BACKEND_TYPE=filesystem
|
|
- HD_MEDIA_BACKEND_FILESYSTEM_UPLOAD_PATH=/data/uploads
|
|
# AI assistant config
|
|
- HD_AI_ENABLED=true
|
|
- HD_AI_TIMEOUT_MS=60000
|
|
- HD_AI_MAX_INPUT_CHARS=32000
|
|
- HD_AI_KEY_VAULT_URL=http://ai-gateway:8093
|
|
- HD_AI_KEY_VAULT_TOKEN_FILE=/run/secrets/key_vault_service_token
|
|
- HD_AI_KEY_VAULT_ISSUER=https://auth.xiteng.site
|
|
- HD_AI_KEY_VAULT_OIDC_IDENTIFIER=authentik
|
|
volumes:
|
|
- ./data:/data
|
|
- ../ai-gateway/secrets/portal_gateway_hmac:/run/secrets/key_vault_service_token:ro
|
|
networks:
|
|
- homelab_net
|
|
labels:
|
|
# Traefik routing
|
|
- "traefik.enable=true"
|
|
# Backend routes: API, realtime websocket, uploads, and media
|
|
- "traefik.http.routers.hedgedoc2-api.rule=Host(`notes2.xiteng.site`) && (PathPrefix(`/api`) || PathPrefix(`/realtime`) || PathPrefix(`/uploads`) || PathPrefix(`/media`))"
|
|
- "traefik.http.routers.hedgedoc2-api.entrypoints=websecure"
|
|
- "traefik.http.routers.hedgedoc2-api.tls=true"
|
|
- "traefik.http.routers.hedgedoc2-api.tls.certresolver=cfresolver"
|
|
- "traefik.http.routers.hedgedoc2-api.service=hedgedoc2-api"
|
|
- "traefik.http.services.hedgedoc2-api.loadbalancer.server.port=3000"
|
|
# Backend HTTP entrypoint
|
|
- "traefik.http.routers.hedgedoc2-api-http.rule=Host(`notes2.xiteng.site`) && (PathPrefix(`/api`) || PathPrefix(`/realtime`) || PathPrefix(`/uploads`) || PathPrefix(`/media`))"
|
|
- "traefik.http.routers.hedgedoc2-api-http.entrypoints=web"
|
|
- "traefik.http.routers.hedgedoc2-api-http.service=hedgedoc2-api"
|
|
- "traefik.http.routers.hedgedoc2-api-http.middlewares=force-https"
|
|
- "traefik.http.routers.hedgedoc2-api.middlewares=force-https"
|
|
# Frontend → frontend (3001)
|
|
- "traefik.http.routers.hedgedoc2.rule=Host(`notes2.xiteng.site`)"
|
|
- "traefik.http.routers.hedgedoc2.entrypoints=websecure"
|
|
- "traefik.http.routers.hedgedoc2.tls=true"
|
|
- "traefik.http.routers.hedgedoc2.tls.certresolver=cfresolver"
|
|
- "traefik.http.routers.hedgedoc2.service=hedgedoc2"
|
|
- "traefik.http.services.hedgedoc2.loadbalancer.server.port=3001"
|
|
# HTTP entrypoint (Cloudflare Tunnel)
|
|
- "traefik.http.routers.hedgedoc2-http.rule=Host(`notes2.xiteng.site`)"
|
|
- "traefik.http.routers.hedgedoc2-http.entrypoints=web"
|
|
- "traefik.http.routers.hedgedoc2-http.service=hedgedoc2"
|
|
- "xiteng.site.cache.hedgedoc2.enabled=true"
|
|
- "xiteng.site.cache.hedgedoc2.routers=hedgedoc2,hedgedoc2-http"
|
|
- "xiteng.site.cache.hedgedoc2.paths=/assets/,/static/"
|
|
- "xiteng.site.cache.hedgedoc2.edge-ttl=604800"
|
|
- "xiteng.site.cache.hedgedoc2.stale-while-revalidate=86400"
|
|
# Force X-Forwarded-Proto
|
|
- "traefik.http.routers.hedgedoc2-http.middlewares=force-https"
|
|
- "traefik.http.routers.hedgedoc2.middlewares=force-https"
|
|
- "xiteng.site.component.hedgedoc2.enabled=true"
|
|
- "xiteng.site.component.hedgedoc2.name=HedgeDoc 2 (AI)"
|
|
- "xiteng.site.component.hedgedoc2.description=带本地模型写作助手的 HedgeDoc 2 实验环境。"
|
|
- "xiteng.site.component.hedgedoc2.section=services"
|
|
- "xiteng.site.component.hedgedoc2.category=开发与协作"
|
|
- "xiteng.site.component.hedgedoc2.url=https://notes2.xiteng.site"
|
|
- "xiteng.site.component.hedgedoc2.access=sso"
|
|
- "xiteng.site.component.hedgedoc2.access-label=需要登录"
|
|
- "xiteng.site.component.hedgedoc2.icon=H2"
|
|
- "xiteng.site.component.hedgedoc2.icon-url=https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/hedgedoc.svg"
|
|
- "xiteng.site.component.hedgedoc2.accent=blue"
|
|
- "xiteng.site.component.hedgedoc2.order=120"
|
|
- "xiteng.site.component.hedgedoc2.navigation=new-tab"
|
|
- "xiteng.site.component.hedgedoc2.portal-link=native"
|
|
- "xiteng.site.component.hedgedoc2.monitor.enabled=true"
|
|
- "xiteng.site.component.hedgedoc2.monitor.url=http://hedgedoc2:3001"
|
|
|
|
networks:
|
|
homelab_net:
|
|
external: true
|