跳到主要内容

单节点

部署 File 文件服务

  1. 下载镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:2.1.0
  2. 创建数据目录

    mkdir -p /data/file/volume/{cache,data,fetchtmp,multitmp,tmp}
  3. 创建配置文件存放目录

    mkdir -p /usr/local/MDPrivateDeployment/clusterMode/config
  4. 创建对接对象存储的 s3-config.json 文件 ,模板如下

    cat > /usr/local/MDPrivateDeployment/clusterMode/config/s3-config.json << 'EOF'
    {
    "mode": 1,
    "accessKeyID": "your_accessKey",
    "secretAccessKey": "your_secretKey",
    "bucketEndPoint": "http://192.168.0.11:9011",
    "bucketName": {
    "mdmedia": "mdmedia",
    "mdpic": "mdpic",
    "mdpub": "mdpub",
    "mdoc": "mdoc"
    },
    "region": "1",
    "addressingModel": 1
    }
    EOF
    • 对接自建 MinIO 对象存储

      • 将 accessKeyID 与 secretAccessKey 分别替换为 MinIO 服务环境变量 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 的对应值。
      • 将 bucketEndPoint 改成 MinIO 服务的访问地址
      • MinIO 默认未定义 region,此处可随意填写,例如设置为 "1"。
      • MinIO 通常通过 IP 地址 访问,因此需设置 "addressingModel": 1,以防止系统在 endpoint 前自动拼接 bucket 名导致访问异常。
    • 对接云厂商对象存储(如阿里云 OSS、腾讯云 COS、AWS S3 等)

      • 按照云厂商提供的 AccessKey 配置 accessKeyID 与 secretAccessKey。
      • 将 bucketEndPoint 与 bucketName 映射关系,改成实际的对象存储信息。
      • 根据实际部署区域填写 region 参数。
      • 使用云厂商对象存储时,请删除 "addressingModel" 参数,以确保连接方式正确。
  5. 创建 file.yaml 文件

    cat > /usr/local/MDPrivateDeployment/clusterMode/file.yaml <<EOF
    version: '3'
    services:
    file:
    image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:2.1.0
    volumes:
    - /usr/share/zoneinfo/Etc/GMT-8:/etc/localtime
    - /data/file/volume:/data/storage
    - /usr/local/MDPrivateDeployment/clusterMode/config/s3-config.json:/usr/local/file/s3-config.json
    ports:
    - "9000:9000"
    environment:
    ENV_ACCESS_KEY_FILE: storage
    ENV_SECRET_KEY_FILE: 12345678910
    ENV_MINGDAO_PROTO: "http"
    ENV_MINGDAO_HOST: "hap.domain.com"
    ENV_MINGDAO_PORT: "80"
    # Redis 主从模式
    ENV_FILE_CACHE: "redis://:123456@192.168.10.13:6379"
    # Redis 哨兵模式
    #ENV_REDIS_SENTINEL_ENDPOINTS: "192.168.10.13:26379,192.168.10.14:26379,192.168.10.15:26379"
    #ENV_REDIS_SENTINEL_MASTER: "mymaster"
    #ENV_REDIS_SENTINEL_PASSWORD: "password"
    ENV_FILECACHE_EXPIRE: "false"
    ENV_FILE_ID: "file1"
    ENV_FILE_DOMAIN: "http://192.168.10.16:9000"
    command: ["./main", "server", "/data/storage/data"]
    EOF
    • ENV_ACCESS_KEY_FILEENV_SECRET_KEY_FILEfile 服务的访问认证信息,请在实际部署时设置为高强度口令。
    • ENV_MINGDAO_PROTOENV_MINGDAO_HOSTENV_MINGDAO_PORT 用于配置 HAP 系统访问主地址,需与 HAP 微服务中 ENV_ADDRESS_MAIN 环境变量的协议、主机及端口保持一致。
    • Redis 连接信息请根据实际部署环境替换为正确的 IP 地址与密码
    • ENV_FILECACHE_EXPIRE 用于设置 缩略图缓存过期策略"false" 表示不过期(默认),"true" 表示定期自动清理缓存。
    • 多节点部署时,每个实例的 ENV_FILE_ID 需保持唯一,例如 file1file2file3 等。
    • ENV_FILE_DOMAIN 需配置为所有 file 节点的实际访问地址,并在前方添加协议前缀(如 http://),如多个地址则使用逗号分隔。
  6. 创建启停脚本

    cat > /usr/local/MDPrivateDeployment/clusterMode/start.sh <<EOF
    docker stack deploy -c /usr/local/MDPrivateDeployment/clusterMode/file.yaml file --detach=false
    EOF

    cat > /usr/local/MDPrivateDeployment/clusterMode/stop.sh <<EOF
    docker stack rm file
    EOF

    chmod +x /usr/local/MDPrivateDeployment/clusterMode/start.sh
    chmod +x /usr/local/MDPrivateDeployment/clusterMode/stop.sh
  7. 初始化 swarm(如此节点已初始化过可忽略)

    docker swarm init
  8. 启动服务

    bash /usr/local/MDPrivateDeployment/clusterMode/start.sh
  9. 检查服务状态

    docker stack ps file
    docker ps -a | grep file
  10. 部署完成后,将 预制文件 上传至 MinIO 对象存储