引言
支持多家云存储驱动的公有云文件系统.
获取 PUID 和 PGID
为什么要使用 PUID 和 PGID 参见 Understanding PUID and PGID。 假设当前登陆用户为 root
,则执行 id root
就会得到类似于下面的一段代码:
uid=1000(root) gid=1001(root)
则在运行命令中的 PUID 填入 1000
,PGID填入 1001
。
Docker Compose
参考:
- cloudreve-docker/README-DOCKER-COMPOSE.md at master · justxuewei/cloudreve-docker
代码语言:javascript复制.env
# 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数据库文件夹路径
代码语言:javascript复制xavier-niu/cloudreve-docker 该docker-compose文件仅适用于linux/amd64架构,如果您正在使用arm请尝试修改部分参数。
docker-compose.yml
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
- 其他选项按照默认值即可
- RPC服务器地址:
- 测试连接并保存
完成
补充
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 文件中定义环境变量等。
$ 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
并且您提供以下配置:
db:
image: "postgres:${POSTGRES_VERSION}"
当您docker-compose up
使用此配置运行时,ComposePOSTGRES_VERSION
在 shell 中查找 环境变量并将其值替换为 in。对于此示例,Compose在运行配置之前解析image
to 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}
退出并显示错误消息,其中包含环境中的err
ifVARIABLE
未设置或为空。${VARIABLE?err}
退出并显示一条错误消息,其中包含err
ifVARIABLE
在环境中未设置。
${VARIABLE/foo/bar}
不支持其他扩展的 shell 样式功能,例如。
$$
当您的配置需要文字美元符号时,您可以使用(双美元符号)。这也可以防止 Compose 插入值,因此 a$$
允许您引用不想由 Compose 处理的环境变量。
web:
build: .
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
如果您忘记并使用单个美元符号 ( $
),Compose 会将值解释为环境变量并警告您:
The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.
使用“--env-file”选项
代码语言:javascript复制docker-compose --env-file ./config/.env.dev up
代码语言:javascript复制单个容器指定 env-file
env_file:
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
代码语言:javascript复制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 themy_secret
andmy_other_secret
secrets. The value ofmy_secret
is set to the contents of the file./my_secret.txt
, andmy_other_secret
is defined as an external resource, which means that it has already been defined in Docker, either by running thedocker secret create
command or by another stack deployment. If the external secret does not exist, the stack deployment fails with asecret not found
error.
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
代码语言:javascript复制https://github.com/nextcloud/docker
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 许可协议。转载请注明出处!