diff --git a/README.docker.md b/README.docker.md new file mode 100644 index 00000000..774d7f4b --- /dev/null +++ b/README.docker.md @@ -0,0 +1,197 @@ +# Docker 用户文档 + +> 本文档详细介绍 Cloudreve Docker 镜像使用以及其工作原理; **本文档假设用户有一定 Linux 和 Docker 基本知识储备.** + +## 一、基本准备 + +### 1.1、Docker 环境 + +请确保您已经成功安装好 Docker, 且 `docker info` 命令 Server 部分有正确返回结果: + +```sh +❯❯❯ docker info +Client: + Context: aarch64 + Debug Mode: false + Plugins: + buildx: Docker Buildx (Docker Inc., v0.8.2) + compose: Docker Compose (Docker Inc., 2.6.0) + +Server: + Containers: 1 + Running: 1 + Paused: 0 + Stopped: 0 + Images: 32 + Server Version: 20.10.17 + Storage Driver: overlay2 + Backing Filesystem: extfs + Supports d_type: true + Native Overlay Diff: false + userxattr: true + Logging Driver: json-file + Cgroup Driver: systemd + Cgroup Version: 2 +... +``` + +**如果 Docker 尚未安装, 请参考 Docker 官方文档完成安装, Linux 用户推荐使用 `curl -fsSL https://get.docker.com | sh` 命令安装.** + +### 1.2、Docker Compose + +如果您期望使用 Docker Compose, 请确保执行 `docker compose version` 命令有正确结果返回: + +```sh +❯❯❯ docker compose version +Docker Compose version 2.6.0 +``` + +**老版本的 Docker Compose 作为独立命令存在, 您需要自行替换为 `docker-compose`.** + +### 1.3、Buildx 编译环境 + +如果您需要自行进行交叉编译 Docker 镜像, 请确保安装了 [Docker Buildx](https://docs.docker.com/buildx/working-with-buildx/), 由于 Buildx 部分有些深入, 当您使用时本文档假设您已充分了解该工具故不做过多阐述. + +## 二、Docker 运行示例 + +### 2.1、直接运行 + +当安装好 Docker 以后, 可以通过以下命令运行单节点的 Cloudreve 实例: + +```sh +# -v: 挂载当前目录下的 data 目录到容器内的 /data, Cloudreve 默认将数据存放于此目录 +# -p: Cloudreve 默认使用 5212 端口提供服务, 如果您更改端口后, 请重新创建容器并同步修改此参数 +# --name: 该参数用于指定运行后的容器名称, 后续可使用 `docker ps` 命令查看 +docker run -dt --name cloudreve -v $(pwd)/data:/data -p 5212:5212 cloudreve/cloudreve +``` + +**运行成功后, Cloudreve 默认会生成随机密码, 请使用 `docker logs cloudreve` 从日志中查找登录密码.** + +### 2.2、`.cloudreve.bin` 文件 + +由于代码限制, Cloudreve 默认将数据保存到二进制文件的同级目录下, Docker 镜像为了简化挂载逻辑, **默认在每次启动时都将删除 `/data/.cloudreve.bin` 文件并重新将可执行文件复制到此, 然后再启动;** 所以您可能会发现数据存储目录中存在该文件, 且该文件具有一定的空间占用(小于50MB). + +### 2.3、老镜像迁移 + +在以前版本的 Docker 镜像中, 您可能挂载了以下目录/文件: + +- `/cloudreve/uploads` +- `/cloudreve/conf.ini` +- `/cloudreve/cloudreve.db` +- `/cloudreve/avatar` + +**新版本的 Docker 镜像您仅需复制这些文件到 `/data` 目录即可.** `/cloudreve` 和 `/data` 指的是您运行容器时的外部挂载目录, 即 `-v` 参数**冒号**之前的目录. + +## 三、Compose 样例 + +### 3.1、直接运行 + +如果您已经安装好了 Docker Compose 并希望快速体验 Cloudreve, 您可以直接按照以下命令运行一个 Cloudreve 节点且附带 Aria2 离线下载功能: + +```sh +# 创建单独的运行目录 +mkdir cloudreve && cd cloudreve + +# 下载 docker compose 配置文件 +curl -sSL https://raw.githubusercontent.com/cloudreve/Cloudreve/master/docker-compose.yml > docker-compose.yaml + +# 启动 Cloudreve +docker compose up -d +``` + +**运行成功后, Cloudreve 默认会生成随机密码, 请使用 `docker compose logs cloudreve` 从日志中查找登录密码.** + +### 3.2、离线下载配置 + +Compose 配置文件中默认附带了 Aria2 实例以及 Aria2 专用的 UI; 当启动完成后您可以登录 Cloudreve 并按照以下步骤联动 Aria2: + +- 1、登录 Cloudreve +- 2、点击左上角用户头像, 选择 **管理面板** +- 3、选择左侧菜单栏的 **离线下载节点** +- 4、点击默认节点右侧的 **编辑按钮** +- 5、在 "是否需要主机接管离线下载任务?" 中选择 **启用** +- 6、"RPC 服务器地址" 填写 **`http://127.0.0.1:6800/`** +- 7、"RPC 授权令牌" 填写 **`your_aria_rpc_token`** +- 8、"Aria2 用作临时下载目录" 填写 **`/tmp`** +- 9、点击 "下一步", 后续保持默认即可 + +至此, 您可以在 Cloudreve 中体验整合了 Aria2 的离线下载功能. + +### 3、3 Compose 配置细节 + +> **默认情况下, Compose 中的 Aria2 RPC Token 为 `your_aria_rpc_token`, 请务必在正式使用时将其修改为特定密码; 否则任何知道次默认 Token 的人都可以尝试连接您的 Aria2 实例.** + +```yaml +version: "3.8" +services: + cloudreve: + container_name: cloudreve + image: cloudreve/cloudreve:latest + restart: unless-stopped + ports: # 默认暴露端口, 注意 Docker 容器端口映射可能无视您的 ufw、firewalld 等防火墙配置, 所以请务必设置好相关密码 + - "5212:5212" # Cloudreve 默认使用的端口 + - "6800:6800" # Aria2 RPC 端口 + - "6880:6880" # Aria2 UI 默认端口 + volumes: + - ./data:/data # Cloudreve 数据挂载位置(当前目录下的 `data` 目录) + - temp_data:/tmp # aria2 共享数据目录位置(用于离线下载使用) + aria2: + container_name: aria2 + image: p3terx/aria2-pro # third party image, please keep notice what you are doing + restart: unless-stopped + network_mode: service:cloudreve # 共享 cloudreve 的 network namespace, 这样可以方便使用 127.0.0.1 调用 + environment: + - RPC_SECRET=your_aria_rpc_token # 请务必修改此处 Token 为随机字符串, 否则其他人可以随意使用你的 Aria2 服务器 + volumes: + - ./aria2_config:/config + - temp_data:/tmp + aria2-ui: + container_name: aria2-ui + image: p3terx/ariang + restart: unless-stopped + network_mode: service:cloudreve # 共享 cloudreve 的 network namespace, 这样可以方便使用 127.0.0.1 调用 +volumes: + temp_data: +``` + +### 四、自行编译 + +出于紧急 BUG 修复等原因, 有时您如果需要自行构建 master 分支的 Docker 镜像, 您可以按照以下操作来完成编译: + +```sh +# 创建单独的空目录存放 Dockerfile +# ⚠️注意: 请务必在单独目录中进行构建, 绝对不要尝试在根目录(`/`)下构建 Docker 镜像; +# 这将导致 docker cli 将整个系统上传到 Docker Context 从而造成死机等问题 +mkdir cloudreve_docker && cd cloudreve_docker + +# 下载构建所需的文件 +curl -sSL https://raw.githubusercontent.com/cloudreve/Cloudreve/master/Dockerfile > Dockerfile +curl -sSL https://raw.githubusercontent.com/cloudreve/Cloudreve/master/docker-entrypoint.sh > docker-entrypoint.sh + +# 确保脚本具有可执行权限 +chmod +x docker-entrypoint.sh + +# 执行构建, 构建成功后镜像名为: cloudreve_docker +docker build -t cloudreve_docker . +``` + +构建完成后您可将 Compose 或 Docker 命令中的 `cloudreve/cloudreve` 替换为 `cloudreve_docker` 运行并测试. + +### 五、多平台交叉编译 + +> 本部分假设您已经安装好 Docker Buildx 相关工具链. + +部分情况下您可能需要在异构环境中同时运行多个 cloudreve 实例, 此时您可能可以按照以下流程通过 Docker Buildx 来进行交叉编译; 交叉编译后的镜像具体有相同的镜像名称, 但同时支持多个 CPU 架构. + +```sh +# 登录您的 Docker Hub 账号(您需要自行前往 https://hub.docker.com/signup 注册) +docker login + +# 创建 Buildx 实例 +docker buildx create --use --name builder + +# 进行多平台构建 +docker buildx build --platform=linux/amd64,linux/arm64 --push -t 您的用户名/cloudreve_docker . +``` + +构建完成后改镜像将会自动推送到 Docker Hub 中, 后续您可以在目标机器上使用 `您的用户名/cloudreve_docker` 作为镜像名称来运行 Cloudreve 实例; **运行时 Docker 将会自动选择与目标平台相符的镜像层来运行.** \ No newline at end of file