Ctrl K
ComunidadGuías…

docker-compose.yml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# ============================================================
# Graw Server Panel - Docker Compose 编排(完整管理宿主机模式)
#
# 方案说明:
#   将宿主机根目录 "/" 挂载到容器内 "/host",并通过环境变量
#   HOST_ROOT=/host 让面板后端(Go 版 backend-go 的 hostfs 适配层)据此:
#     - 读写宿主机文件(文件管理、网站配置、日志、证书等)
#     - 通过 chroot /host 执行宿主机命令(nginx/certbot/iptables/crontab)
#   配合 privileged + host 网络 + pid:host,面板可完整管理宿主机。
#
# 高权限说明(面板必需):
#   - privileged  授予完整内核能力(访问设备、iptables、chroot、挂载等)
#   - network_mode: host  使用宿主机网络,管理端口/防火墙,直接监听 8000
#   - pid: host    共享宿主机进程命名空间(进程管理/系统监控)
#   - 挂载 Docker socket  启用容器与镜像管理
#
# 安全警告:该容器拥有宿主机 root 级权限,仅部署于可信环境,
# 请务必修改默认密码并妥善保护登录凭据。
#
# 用法:
#   启动:      docker compose up -d --build
#   查看日志:  docker compose logs -f
#   停止:      docker compose down
#
# 注意: privileged / host 网络 / pid host 均为 Linux 特性,
#       在 Docker Desktop for Windows 上无法完整生效。
# ============================================================

services:
  graw:
    build:
      context: .
      dockerfile: Dockerfile
    image: shunx/graw
    container_name: graw-panel
    # ---------- 高权限运行(面板必需) ----------
    privileged: true                # 授予容器全部能力
    network_mode: host              # 使用宿主机网络,直接监听宿主机 8000 端口
    pid: host                       # 共享宿主机进程命名空间(进程管理/监控)

    # ---------- 数据与宿主机资源挂载 ----------
    volumes:
      # 面板自身数据(用户账号、签名密钥、站点/证书/任务配置等)。
      # 用 bind mount 绑定到宿主目录,而不是匿名命名卷:这样才能让
      # 宿主机 docker 直接读到 appstore 的 docker-compose.yml(见 GRAW_HOST_DATA)。
      - /opt/graw/data:/app/backend/data
      # 宿主机根目录:面板据此完整管理宿主机文件系统与命令
      - /:/host:rslave
      # Docker 管理功能(容器 / 镜像 / 日志):复用宿主机 Docker daemon 的 socket
      - /var/run/docker.sock:/var/run/docker.sock

    environment:
      # 告知后端宿主机根目录挂载点,启用 /host 模式(关键配置)
      - HOST_ROOT=/host
      # 宿主上 === 面板 data 目录的路径:宿主 docker 据此读取 compose 文件/导出备份
      - GRAW_HOST_DATA=/opt/graw/data
      - TZ=Asia/Shanghai

    # 使用 host 网络后,端口由宿主机直接占用(8000),无需 ports 映射。
    # 若改用 bridge 网络,可取消下面注释并删除 network_mode 行。
    # ports:
    #   - "8000:8000"

    restart: unless-stopped

# 若希望用命名卷持久化面板数据(非本机化),可注释上方 bind mount 行、
# 取消开下面声明;但此时宿主 docker 无法直接读到 appstore 的 compose 文件,
# 需配合把 GRAW_HOST_DATA 指向该卷在宿主上的实际路径。
# volumes:
#   graw-data: