Docker 部署 Cloudreve

2022-04-01 16:36:24 浏览数 (1)

引言

支持多家云存储驱动的公有云文件系统.

获取 PUID 和 PGID

为什么要使用 PUID 和 PGID 参见 Understanding PUID and PGID。 假设当前登陆用户为 root,则执行 id root 就会得到类似于下面的一段代码:

代码语言:javascript复制
uid=1000(root) gid=1001(root)

则在运行命令中的 PUID 填入 1000,PGID填入 1001

Docker Compose

参考:

  • cloudreve-docker/README-DOCKER-COMPOSE.md at master · justxuewei/cloudreve-docker

.env

代码语言:javascript复制
# Required

# > PUID & PGID
CLOUDREVE_PUID=<PUID>
CLOUDREVE_PGID=<PGID>

# > Aria2
ARIA2_RPC_SECRET=<SECRET>

# Optional
# But I highly recommend you keep items below as default 
# unless you know what you are doing.

# > Temp download folder for Aria2 & Cloudreve
TEMP_FOLDER_PATH=/dockercnf/aria2/temp

# > Aria2
ARIA2_CONFIG_PATH=/dockercnf/aria2/conf

# > Cloudreve
CLOUDREVE_UPLOAD_PATH=/sharedfolders
CLOUDREVE_CONF_PATH=/dockercnf/cloudreve/config
CLOUDREVE_DB_PATH=/dockercnf/cloudreve/db
CLOUDREVE_AVATAR_PATH=/dockercnf/cloudreve/avatar

根据需要对环境变量进行修改

必填项

CLOUDREVE_PUID: PUID的获取方式详见 获取 PUID 和 PGID CLOUDREVE_PGID: PGID的获取方式详见 获取 PUID 和 PGID ARIA2_RPC_SECRET: Aria2 RPC密码(你可以去 这里 生成随机字符串)。请记下该密码!在后续Cloudreve设置Aria2中会使用。

选填项(如无特殊需要不建议修改)

TEMP_FOLDER_PATH: 离线下载临时文件夹路径 ARIA2_CONFIG_PATH: Aria2的配置文件夹路径 CLOUDREVE_UPLOAD_PATH: Cloudreve上传文件夹路径 CLOUDREVE_CONF_PATH: Cloudreve配置文件夹路径 CLOUDREVE_DB_PATH: Cloudreve数据库文件夹路径

xavier-niu/cloudreve-docker 该docker-compose文件仅适用于linux/amd64架构,如果您正在使用arm请尝试修改部分参数。

docker-compose.yml

代码语言:javascript复制
version: '3'

services: 

    aria2: 
        image: p3terx/aria2-pro
        logging: 
            options: 
                max-size: 1m
        ports: 
            - 6800:6800
            - 6888:6888
            - 6888:6888/udp
        environment: 
            - PUID=${CLOUDREVE_PUID}
            - PGID=${CLOUDREVE_PGID}
            - RPC_SECRET=${ARIA2_RPC_SECRET}
        volumes: 
            - ${ARIA2_CONFIG_PATH}:/config
            - ${TEMP_FOLDER_PATH}:/downloads
        networks: 
            - cloudreve-network
        restart: unless-stopped

    cloudreve: 
        image: xavierniu/cloudreve
        ports: 
            - 5212:5212
        environment: 
            - PUID=${CLOUDREVE_PUID}
            - PGID=${CLOUDREVE_PGID}
        volumes: 
            - ${CLOUDREVE_UPLOAD_PATH}:/cloudreve/uploads
            - ${TEMP_FOLDER_PATH}:/downloads
            - ${CLOUDREVE_CONF_PATH}:/cloudreve/config
            - ${CLOUDREVE_DB_PATH}:/cloudreve/db
            - ${CLOUDREVE_AVATAR_PATH}:/cloudreve/avatar
        networks: 
            - cloudreve-network


networks: 
    cloudreve-network:
代码语言:javascript复制
docker-compose up -d

说明

  • Aria2-RPC会暴露于外网,访问端口6800,Secret为你对ARIA2_RPC_SECRET设置的随机字符串。

配置Cloudreve连接Aria2服务器

  • 以管理员身份登陆
  • 点击"头像(右上角) > 管理面板"
  • 点击"离线下载节点 -> 点击当前主节点 (编辑)"
    • RPC服务器地址: http://aria2:6800/
    • RPC Secret: 你对ARIA2_RPC_SECRET设置的随机字符串
    • 临时下载地址: /downloads
    • 其他选项按照默认值即可
  • 测试连接并保存

完成

补充

docker-compose.yml 使用环境变量

参考:

  • Environment variables in Compose | Docker Documentation
  • Declare default environment variables in file | Docker Documentation

如果要使用 docker-compose.yml 文件中定义的环境变量,则必须将它们放在 .env 文件中。 你可以使用 env_file 配置选项来使用具有变量定义的任何文件。

在文件中声明默认环境变量

Compose 支持在名为.env放置在项目目录中的环境文件中声明默认环境变量。如果 Docker Compose 版本早于1.28.env则从执行命令的当前工作目录加载文件,如果使用--project-directory选项显式设置,则从项目目录加载文件。这种不一致已经 v1.28通过将默认.env文件路径限制为项目目录来解决。您可以使用--env-file命令行选项覆盖默认值 .env并指定自定义环境文件的路径。

项目目录按优先顺序指定:

  • --project-directory 旗帜
  • 第一个--file标志的文件夹
  • 当前目录

语法规则

以下语法规则适用于该.env文件:

  • Compose 期望env文件中的每一行都符合VAR=VAL格式。
  • 以 开头的行#作为注释处理并被忽略。
  • 空行被忽略。
  • 没有对引号进行特殊处理。这意味着 它们是 VAL 的一部分

注意:

  • 运行时环境中存在的值始终会覆盖.env文件中定义的值。同样,通过命令行参数传递的值也优先。
  • .env文件中定义的环境变量在容器内不会自动可见。要设置容器适用的环境变量,请遵循Compose中的环境变量主题中的指南,该主题 描述了如何将 shell 环境变量传递到容器、在 Compose 文件中定义环境变量等。
代码语言:javascript复制
$ cat .env
TAG=v1.5

$ cat docker-compose.yml
version: '3'
services:
  web:
    image: "webapp:${TAG}"

在 docker-compose.yml 使用环境变量

如果您有多个环境变量,则可以通过将它们添加到名为的默认环境变量文件.env或使用--env-file命令行选项提供环境变量文件的路径来替换它们。

您的配置选项可以包含环境变量。Compose 使用来自docker-compose运行的 shell 环境的变量值。例如,假设 shell 包含POSTGRES_VERSION=9.3并且您提供以下配置:

代码语言:javascript复制
db:
  image: "postgres:${POSTGRES_VERSION}"

当您docker-compose up使用此配置运行时,ComposePOSTGRES_VERSION在 shell 中查找 环境变量并将其值替换为 in。对于此示例,Compose在运行配置之前解析imageto postgres:9.3

如果未设置环境变量,Compose 将替换为空字符串。在上面的示例中,如果POSTGRES_VERSION未设置,则该image选项的值为postgres:

您可以使用.env文件设置环境变量的默认值 ,Compose 会自动在项目目录(您的 Compose 文件的父文件夹)中查找该文件。在 shell 环境中设置的值会覆盖在.env文件中设置的值。

使用 docker stack deploy 时的注意事项.env file功能仅在您使用该docker-compose up命令时有效,而不适用于docker stack deploy.

这两个$VARIABLE${VARIABLE}语法的支持。此外,当使用2.1 文件格式时,可以使用典型的 shell 语法提供内联默认值:

  • ${VARIABLE:-default}评估default是否VARIABLE在环境中未设置或为空。
  • ${VARIABLE-default}``default仅当VARIABLE在环境中未设置时才评估为。

同样,以下语法允许您指定必需变量:

  • ${VARIABLE:?err}退出并显示错误消息,其中包含环境中的errif VARIABLE未设置或为空。
  • ${VARIABLE?err}退出并显示一条错误消息,其中包含errif VARIABLE在环境中未设置。

${VARIABLE/foo/bar}不支持其他扩展的 shell 样式功能,例如。

$$当您的配置需要文字美元符号时,您可以使用(双美元符号)。这也可以防止 Compose 插入值,因此 a$$ 允许您引用不想由 Compose 处理的环境变量。

代码语言:javascript复制
web:
  build: .
  command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"

如果您忘记并使用单个美元符号 ( $),Compose 会将值解释为环境变量并警告您:

代码语言:javascript复制
The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.

使用“--env-file”选项

代码语言:javascript复制
docker-compose --env-file ./config/.env.dev up

单个容器指定 env-file env_file:

代码语言:javascript复制
version: '3'

services:

  app:
    image: nextcloud:fpm-alpine
    container_name: nextcloud_app
    restart: always
    volumes:
      - ${DATA_DIR_APP}:/var/www/html
    environment:
      - POSTGRES_HOST=db
      - REDIS_HOST=redis
    env_file:
      - db.env

使用 ' -compose run' 设置环境变量

代码语言:javascript复制
docker-compose run -e DEBUG=1 web python console.py

Docker Secrets

参考:

  • docker secret | Docker Documentation
  • Docker Secret的管理和使用 - iveBoy - 博客园
  • Compose file version 3 reference | Docker Documentation

Grant access to secrets on a per-service basis using the per-service secrets configuration. Two different syntax variants are supported.

The short syntax variant only specifies the secret name. This grants the container access to the secret and mounts it at /run/secrets/<secret_name> within the container. The source name and destination mountpoint are both set to the secret name.

The following example uses the short syntax to grant the redis service access to the my_secret and my_other_secret secrets. The value of my_secret is set to the contents of the file ./my_secret.txt, and my_other_secret is defined as an external resource, which means that it has already been defined in Docker, either by running the docker secret create command or by another stack deployment. If the external secret does not exist, the stack deployment fails with a secret not found error.

代码语言:javascript复制
version: "3.9"

services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    secrets:
      - my_secret
      - my_other_secret

secrets:
  my_secret:
    file: ./my_secret.txt
  my_other_secret:
    external: true

https://github.com/nextcloud/docker

代码语言:javascript复制
version: '3.2'

services:
  db:
    image: postgres
    restart: always
    volumes:
      - db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB_FILE=/run/secrets/postgres_db
      - POSTGRES_USER_FILE=/run/secrets/postgres_user
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
    secrets:
      - postgres_db
      - postgres_password
      - postgres_user

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    volumes:
      - nextcloud:/var/www/html
    environment:
      - POSTGRES_HOST=db
      - POSTGRES_DB_FILE=/run/secrets/postgres_db
      - POSTGRES_USER_FILE=/run/secrets/postgres_user
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
      - NEXTCLOUD_ADMIN_PASSWORD_FILE=/run/secrets/nextcloud_admin_password
      - NEXTCLOUD_ADMIN_USER_FILE=/run/secrets/nextcloud_admin_user
    depends_on:
      - db
    secrets:
      - nextcloud_admin_password
      - nextcloud_admin_user
      - postgres_db
      - postgres_password
      - postgres_user

volumes:
  db:
  nextcloud:

secrets:
  nextcloud_admin_password:
    file: ./nextcloud_admin_password.txt # put admin password in this file
  nextcloud_admin_user:
    file: ./nextcloud_admin_user.txt # put admin username in this file
  postgres_db:
    file: ./postgres_db.txt # put postgresql db name in this file
  postgres_password:
    file: ./postgres_password.txt # put postgresql password in this file
  postgres_user:
    file: ./postgres_user.txt # put postgresql username in this file

参考

感谢帮助!

  • xavierniu/cloudreve
  • justxuewei/cloudreve-docker: Source code of Docker image for Cloudreve V3

本文作者: yiyun

本文链接: https://moeci.com/posts/分类-docker/docker-cloudreve/

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

0 人点赞