services: web: image: ghcr.io/hoarder-app/hoarder:${HOARDER_VERSION:-release} container_name: karakeep volumes: - /opt/stacks/karakeep/localdata/data:/data ports: - 17001:3000 environment: HOARDER_VERSION: ${HOARDER_VERSION} NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} MEILI_MASTER_KEY: ${MEILI_MASTER_KEY} NEXTAUTH_URL: ${NEXTAUTH_URL} MAX_ASSET_SIZE_MB: ${MAX_ASSET_SIZE_MB} OPENAI_API_KEY: ${OPENAI_API_KEY} OPENAI_BASE_URL: ${OPENAI_BASE_URL} INFERENCE_TEXT_MODEL: ${INFERENCE_TEXT_MODEL} INFERENCE_IMAGE_MODEL: ${INFERENCE_IMAGE_MODEL} INFERENCE_CONTEXT_LENGTH: ${INFERENCE_CONTEXT_LENGTH} INFERENCE_JOB_TIMEOUT_SEC: ${INFERENCE_JOB_TIMEOUT_SEC} DISABLE_SIGNUPS: ${DISABLE_SIGNUPS} OAUTH_WELLKNOWN_URL: ${OAUTH_WELLKNOWN_URL} OAUTH_CLIENT_ID: ${OAUTH_CLIENT_ID} OAUTH_CLIENT_SECRET: ${OAUTH_CLIENT_SECRET} OAUTH_PROVIDER_NAME: ${OAUTH_PROVIDER_NAME} OAUTH_ALLOW_DANGEROUS_EMAIL_ACCOUNT_LINKING: ${OAUTH_ALLOW_DANGEROUS_EMAIL_ACCOUNT_LINKING} MEILI_ADDR: http://meilisearch:7700 BROWSER_WEB_URL: http://chrome:9222 DATA_DIR: /data deploy: resources: limits: cpus: "1.0" memory: 2G reservations: cpus: "0.5" memory: 1G healthcheck: # karakeep serves health at /api/health (/health is 404) test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s restart: unless-stopped labels: - "homepage.group=productivity" - "homepage.name=Karakeep" - "homepage.icon=sh-karakeep" - "homepage.href=https://hoarder.nuclide.systems" - "homepage.instance.internal.href=http://192.168.1.40:17001" - "homepage.instance.public.href=https://hoarder.nuclide.systems" - "homepage.widget.type=karakeep" - "homepage.widget.url=http://192.168.1.40:17001" - "homepage.widget.key=ak2_19817764ad2d3b7bc010_add146880ec70ee560cc8fbf87b46085" chrome: image: gcr.io/zenika-hub/alpine-chrome:123 container_name: karakeep_chrome shm_size: '512m' command: - --no-sandbox - --disable-gpu - --disable-dev-shm-usage - --remote-debugging-address=0.0.0.0 - --remote-debugging-port=9222 - --hide-scrollbars deploy: resources: limits: cpus: "0.5" memory: 1G reservations: cpus: "0.25" memory: 512M healthcheck: # alpine-chrome has no curl; busybox wget is present. Use 127.0.0.1 NOT # localhost — localhost resolves to ::1 but Chrome binds IPv4 only. test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1:9222/json/version"] interval: 30s timeout: 10s retries: 3 start_period: 40s restart: unless-stopped meilisearch: image: getmeili/meilisearch:v1.11.1 container_name: karakeep_meilisearch environment: MEILI_MASTER_KEY: ${MEILI_MASTER_KEY} MEILI_NO_ANALYTICS: "true" volumes: # - meilisearch:/meili_data - /opt/stacks/karakeep/localdata/meili:/meili_data deploy: resources: limits: cpus: "1.0" memory: 2G reservations: cpus: "0.5" memory: 1G healthcheck: test: ["CMD", "curl", "-f", "http://localhost:7700/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s restart: unless-stopped networks: default: external: true name: shared_backend