services:
  openlist:
    image: 'openlistteam/openlist:v4.2.5'
    container_name: openlist
    user: '1000:1000' # Please replace `0:0` with the actual user ID and group ID you want to use to run OpenList.
    volumes:
      - './openlist/data:/opt/openlist/data'
      - '/home/mickey:/local'
    ports:
      - '2000:5244'
    environment:
      - UMASK=022
    restart: unless-stopped

  copyparty:
    image: copyparty/min:1.20.20
    container_name: copyparty
    user: "1000:1000"
    ports:
      - 2100:3923
    volumes:
      - /home/mickey:/w:ro
    command:
      # 将 /w 映射到 Web 根目录，并仅授予匿名读取/下载权限。
      - "-v"
      - "/w::r"
      # 允许 OpenList 跨端口提交多选 ZIP 表单。
      - "--acao"
      # 匿名只读卷无需 Cookie/HTTP 认证；兼容浏览器下载窗口的 Origin:null。
      - "*"
      - "--acam"
      - "GET,HEAD,POST"
      # OpenList 多选 ZIP 使用跨站 POST；Chromium 会发送 Origin:null。
      # 仅适用于当前匿名只读、LAN-only 实例。
      - "--allow-csrf"
      # 仅使用 HTTP，并关闭当前下载场景不需要的功能。
      - "--http-only"
      - "--no-crt"
      - "--no-dav"
      - "--no-del"
      - "--no-mv"
      - "--no-cp"
      - "--no-zls"
      - "--no-robots"
      - "-nih"
      - "-nid"
      - "-nb"
    environment:
      PYTHONUNBUFFERED: 1
    restart: unless-stopped
    stop_grace_period: 15s # thumbnailer is allowed to continue finishing up for 10s after the shutdown signal

  meilisearch:
    # 固定补丁版本，升级前请先导出 dump 并阅读官方升级说明。
    image: getmeili/meilisearch:v1.53.0
    container_name: meilisearch
    # OpenList 容器通过 http://meilisearch:7700 访问；宿主机/Caddy 通过此地址访问。
    # 仅绑定回环地址，避免将管理 API 直接暴露到局域网或公网。
    ports:
      - '2700:7700'
    environment:
      MEILI_ENV: production
      MEILI_HTTP_ADDR: '0.0.0.0:7700'
      MEILI_MASTER_KEY: '83b2f54f7b78109f62d26a9b0f9e6dceb24bb57d60d418d5c159702413f95e4b'
      MEILI_DB_PATH: /meili_data
      MEILI_DUMP_DIR: /meili_dumps
      MEILI_SNAPSHOT_DIR: /meili_snapshots
      # 每 24 小时生成一次快照；只保留最新快照。
      MEILI_SCHEDULE_SNAPSHOT: '86400'
      MEILI_LOG_LEVEL: INFO
      # 默认最多使用约 2/3 可用内存、1/2 CPU 线程，通常比固定值更适合未知规格的宿主机。
      # 如需限制，可按实际资源取消注释：
      # MEILI_MAX_INDEXING_MEMORY: '2GiB'
      # MEILI_MAX_INDEXING_THREADS: '2'
    command:
      - /bin/meilisearch
      - --no-analytics
    volumes:
      - './meilisearch/data:/meili_data'
      - './meilisearch/dumps:/meili_dumps'
      - './meilisearch/snapshots:/meili_snapshots'
    restart: unless-stopped
    stop_grace_period: 1m
