结合 1Panel 与 SSH 部署 Cloudreve 网盘系统

在自托管(Self-hosting)领域,Cloudreve 是一个功能强大且广受欢迎的开源网盘系统。它支持多种云存储策略,提供在线文件管理、多用户支持和 WebDAV 等丰富功能。本文旨在提供一份详尽、客观的技术指南,阐述如何通过 Docker Compose,并结合 1Panel 服务器管理面板与 SSH 命令行工具,来高效、稳定地部署 Cloudreve 服务。

部署方案解析:为何选择 1Panel 与 SSH 结合?

在部署 Web 应用时,开发者可以有多种选择,从业界标准的纯命令行操作到完全图形化的面板管理。我们此次选择的 1Panel 与 SSH 相结合的方案,旨在融合两者的优点,实现效率与控制力的平衡。

  • 1Panel 的角色与优势: 1Panel 作为一个现代化的 Linux 服务器运维管理面板,提供了一个直观的图形用户界面(GUI)。在此次部署中,它的核心作用是:

    • 文件管理:方便地创建、编辑和管理部署所需的文件和目录结构,如 docker-compose.yml 配置文件。
    • 可视化操作:对于需要精确设置目录权限、查看文件位置的用户而言,GUI 操作比命令行更不易出错。
    • 后期维护:可以轻松地管理反向代理、防火墙和备份任务。
  • SSH 的角色与优势: SSH (Secure Shell) 提供了对服务器最直接、最底层的访问方式。在此次部署中,它的作用是:

    • 执行核心命令docker compose up -d 这类命令的执行与日志查看,在终端中最为直接。
    • 调试与监控:当容器启动失败或需要排查问题时,通过 docker logs 或其他 Docker 命令,SSH 提供了无可替代的即时反馈。
    • 控制力:对于熟悉命令行的用户,SSH 提供了最高的控制自由度。
  • 方案的协同效应与权衡:

    • 优点:此方案将“准备工作”和“执行工作”清晰分离。使用 1Panel 进行目录和文件的可视化准备,降低了配置出错的概率;使用 SSH 执行部署命令,保留了对 Docker 运行状态的完全控制。这种方式对于新手友好,也让资深用户感到便捷。
    • 缺点:此方案要求操作者同时具备使用 Web 面板和 SSH 客户端的能力,需要在两个界面之间进行切换,可能不适合追求极致单一操作流程的用户。

核心组件剖析:理解 docker-compose.yml 技术栈

我们的部署依赖于 Docker Compose,它通过一个 YAML 文件来定义和运行一个多容器的 Docker 应用。以下是本次部署中各个服务容器的作用分析:

  • cloudreve 服务: 这是应用的核心。

    • 功能: 运行 Cloudreve 的主程序,处理所有前端用户交互、后端 API 请求和业务逻辑。
    • 目的: 提供网盘的 Web 界面和核心功能。
    • 关键配置:
      • ports: 将容器的 5212 端口映射到服务器的 5212 端口,使其可以被外部访问。
      • volumes: 这是数据持久化的关键。我们将宿主机的 configuploadsavatar 目录分别挂载到容器内部,确保 Cloudreve 的配置文件、用户上传的文件和头像数据在容器重启或更新后不会丢失。
  • postgresql 服务: 这是一个企业级的开源关系型数据库。

    • 功能: 存储 Cloudreve 的所有结构化数据。
    • 目的: 持久化存储用户信息、文件元数据、分享链接、用户权限等关键信息。相比于默认的 SQLite,PostgreSQL 在高并发和数据完整性方面表现更优,是生产环境的理想选择。
    • 关键配置:
      • environment: 用于初始化数据库的用户名、密码和数据库名。
      • volumes: 将数据库的物理文件存储在宿主机的 postgres_data 目录,这是确保数据库信息安全的生命线。
  • redis 服务: 这是一个高性能的内存键值数据库。

    • 功能: 用作缓存和会话存储。
    • 目的: 缓存常用数据,减少对 postgresql 数据库的直接请求,提升应用的响应速度和性能。同时,它也用于管理用户的登录会话(Session)。

部署前的注意点

在开始部署之前,请确保完成以下准备工作:

  1. 服务器环境: 准备一台已安装好 Docker 和 Docker Compose 的 VPS 或独立服务器。
  2. 1Panel 安装: 确保服务器上已成功安装并可以访问 1Panel。
  3. SSH 访问: 确保你可以通过 SSH 客户端连接到服务器。
  4. 域名(可选但推荐): 准备一个域名并将其 DNS 解析指向你的服务器 IP 地址,这将在后续配置反向代理时使用。
  5. 密码安全: 预先准备一个足够复杂的字符串作为数据库密码,避免使用弱密码。

详细部署步骤

第 1 步:通过 1Panel 准备文件与目录

此步骤的核心是利用 1Panel 的图形化文件管理器,为 Docker 容器的数据持久化建立宿主机目录结构。

  1. 登录 1Panel 面板,导航至 文件 菜单。
  2. 在左侧文件树中,选择一个合适的根路径,例如 /opt,并在此路径下新建目录,命名为 cloudreve。这个目录将作为我们整个项目的根目录。
  3. 进入 /opt/cloudreve 目录,继续创建以下子目录,它们将分别用于挂载各个容器的数据卷:
    • config (存放 Cloudreve 配置文件)
    • uploads (存放用户上传的文件)
    • avatar (存放用户头像)
    • postgres_data (存放 PostgreSQL 数据库文件)
    • redis_data (存放 Redis 数据)
    • (可选)downloads (如果需要使用 Aria2 离线下载,则创建此目录)
  4. /opt/cloudreve 主目录下,点击新建文件,创建一个名为 docker-compose.yml 的文件。

第 2 步:编写 docker-compose.yml 配置文件

双击打开刚刚创建的 docker-compose.yml 文件,将以下经过优化的配置内容粘贴进去。

services:
  cloudreve:
    image: cloudreve/cloudreve:latest
    container_name: cloudreve
    restart: always
    ports:
      - "5212:5212"
    depends_on:
      - postgresql
      - redis
    environment:
      # --- 数据库配置 ---
      - CR_CONF_Database.Type=postgres
      - CR_CONF_Database.Host=postgresql
      - CR_CONF_Database.Port=5432
      - CR_CONF_Database.User=cloudreve
      - CR_CONF_Database.Password=YOUR_POSTGRES_PASSWORD # [重要] 替换为你的强密码
      - CR_CONF_Database.Name=cloudreve
      - CR_CONF_Database.TablePrefix=cr_
  
      # --- Redis 配置 ---
      - CR_CONF_Redis.Server=redis:6379
      - CR_CONF_Redis.Password= # 如果你的Redis设置了密码,请填写
      - CR_CONF_Redis.DB=0
  
      # --- 时区配置 ---
      - TZ=Asia/Shanghai

    volumes:
      - /opt/cloudreve/config:/cloudreve/config
      - /opt/cloudreve/uploads:/cloudreve/uploads
      - /opt/cloudreve/avatar:/cloudreve/avatar
      - /opt/downloads:/downloads # Aria2 离线下载目录,可选

  postgresql:
    image: postgres:15-alpine # 使用明确的版本号以增强稳定性
    container_name: postgresql
    restart: always
    environment:
      - POSTGRES_USER=cloudreve
      - POSTGRES_PASSWORD=YOUR_POSTGRES_PASSWORD # [重要] 确保与上方密码一致
      - POSTGRES_DB=cloudreve
    volumes:
      - /opt/cloudreve/postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine # 使用明确的版本号
    container_name: redis
    restart: always
    volumes:
      - /opt/cloudreve/redis_data:/data

# 注:此配置使用了主机路径映射(Host Path Mapping)而非 Docker 命名卷(Named Volumes)。
# 这种方式使得数据在主机文件系统中清晰可见,便于直接通过1Panel进行管理和备份。

在保存前,务必将文件中两处 YOUR_POSTGRES_PASSWORD 替换为您自己设定的复杂密码。

第 3 步:通过 SSH 执行部署命令

  1. 打开您的 SSH 客户端(如 MobaXterm, Termius, FinalShell 等),连接到您的 VPS。
  2. 使用 cd (Change Directory) 命令,切换到我们刚刚准备好的项目目录:
    cd /opt/cloudreve
    
  3. 执行 Docker Compose 启动命令。-d 参数代表 detached,意为在后台运行服务。
    docker compose up -d
    
  4. Docker 将开始拉取 cloudreve, postgresredis 的镜像,并根据 docker-compose.yml 的定义创建并启动这三个容器。此过程需要一些时间,具体取决于您的网络速度。

第 4 步:初始化 Cloudreve 管理员账户

  1. 部署完成后,在您的浏览器中访问 http://<你的服务器IP地址>:5212
  2. 您将看到 Cloudreve 的登录页面。新版本的 Cloudreve 采用首次注册用户即为管理员的策略。
  3. 点击页面上的注册链接,立即注册您的第一个用户。此账户将自动被授予管理员权限。
  4. 使用刚刚注册的账户登录,即可进入 Cloudreve 主界面。建议立即进入管理面板,熟悉各项配置。

部署后的重要事项

成功的部署只是第一步,为了安全、稳定地长期使用,以下操作至关重要:

  1. 设置反向代理与 HTTPS:

    • 直接通过 IP 和端口访问既不专业也不安全。推荐使用 1Panel 的网站功能来设置反向代理。
    • 在 1Panel 中创建网站,选择反向代理类型。
    • 主域名填写您准备好的域名(例如 disk.yourdomain.com)。
    • 代理地址填写 http://127.0.0.1:5212
    • 在创建过程中或创建后,为该站点申请并配置 SSL 证书以启用 HTTPS。这将加密所有传输数据,保障访问安全。
  2. 制定备份策略:

    • 由于我们采用了主机路径映射,所有重要数据都集中在 /opt/cloudreve 目录中。
    • 您需要定期备份整个 /opt/cloudreve 目录。这个目录包含了 Cloudreve 的配置、用户文件、头像以及完整的数据库和 Redis 数据。
    • 您可以使用 1Panel 的计划任务功能,创建一个定时任务来压缩并备份此目录到另一个位置或远程存储。
  3. 应用更新:

    • 当 Cloudreve 发布新版本时,更新过程非常简单。
    • 通过 SSH 进入 /opt/cloudreve 目录,依次执行以下命令:
      # 拉取最新的镜像
      docker compose pull
      
      # 重新创建并启动容器,新的镜像将被应用
      docker compose up -d
      
    • 由于数据卷是持久化的,此过程不会影响您的任何数据。

结论

通过结合 1Panel 的可视化管理能力和 SSH 的强大执行力,我们完成了一次健壮、可维护的 Cloudreve 部署。此方案不仅清晰地分离了配置准备与服务执行,还通过主机路径映射确保了数据的安全与可管理性。遵循本指南的操作流程和部署后建议,您将能够搭建并长期维护一个稳定、高效的个人或团队云盘系统。