神代綺凛

[Cloudreve] 树洞网络云盘 使用Docker一键部署
Cloudreve 是一款基于 ThinkPHP 构建的网盘系统,由“树洞外链”的作者开发,能够助您以较低成本快速...
扫描右侧二维码阅读全文
26
2018/03

[Cloudreve] 树洞网络云盘 使用Docker一键部署

Cloudreve 是一款基于 ThinkPHP 构建的网盘系统,由“树洞外链”的作者开发,能够助您以较低成本快速搭建起公私兼备的网盘,并且还有能快速对接目前各家常用云储存等多项特性。

极光柠檬开发了这款网盘系统的 Docker 镜像,本站受邀转载其文章。

Cloudreve on Docker

以下语气均照搬原文,我可没有那么拽啊!(。

几句废话

此镜像目前仍然处于开发中的阶段,不建议大量用在生产环境中!

如果有任何符合如下状况的问题:

  • 确认正确填写启动命令行的前提下,镜像启动过程报错或者执行命令后,超过10分钟依然没有完成部署;
  • 经过检查,确认我写的代码存在致命BUG (主要是Dockerfileentrypoint.sh);
  • 部署完成后,访问网盘地址,得到错误提示

请在此文章下留言,或者E-mail到:ilemonrain@ilemonrain.com,并请附带详细的错误信息,接受以下几种形式的信息:

  • “docker logs [容器ID]” 返回结果;
  • 访问网盘得到的错误信息 (请打开Application/config.php中 debug 开关,以获得详细出错原因)

不接受以下反馈以及E-mail来信:

  • 如何部署(我在 Docker Hub 上写的还不够详细么?不够?我再写点如何?)
  • 为什么部署这么慢(自己找原因,服务器性能不够/服务器网络差/国内服务器/填写错误的参数)
  • 什么时候更新/能不能更新XX功能(随缘,我想写就写点,不想写就咕咕咕,sorry,有技术真的是为所欲为)

镜像说明

此镜像基于ilemonrain/lamp作为母镜像,进行了修改以适配 Cloudreve 的环境要求(但我知道有些地方还是没优化到位……)。

到目前为止,此镜像已经集成:

  • 一套LAMP环境,包括:
    • L:Alpine Linux 3.7.0
    • A:Apache 2.4.29
    • M:MariaDB 10.1.28
    • P:PHP 7.1.15
  • Cloudreve (使用 Composer+Git 同步官网最新版本)
  • Google 2FA 组件 (用于支持 Google 两步验证)
  • 启动过程中的日志追踪功能 (docker run -t或者docker logs)

计划中 (也可能鸽掉不做) 的功能:

  • Apache 2 SSL支持 (目前正在做)
  • Let's Encrypt 支持 (用于部署时自动申请SSL证书)
  • Sendfile 下载支持 (Apache2 的扩展,用于减轻服务器下载压力)
  • 一些 Apache2/PHP7/MariaDB 的性能优化
  • 目前完全是一时冲动(什么鬼)写出来的镜像,所以以后可能会坑掉不写,如果有什么好的建议或者紧急BUG提交,请 Email 到:ilemonrain@ilemonrain.com,谢谢你们的支持!

部署教程

由于 Docker 的特殊性(虚拟化要求),此教程不适用于 OpenVZ 虚拟化架构!OpenVZ 虚拟化的请等待我的后续部署教程!

1. 检测你的服务器虚拟化类型!

如何检测自己的服务器虚拟化类型:

  • CentOS/Fedora:
    yum install virt-what -y  
    virt-what
  • Ubuntu/Debian:
    apt-get install virt-what -y
    virt-what

返回以下结果,请继续往下阅读教程:

KVM
Xen
Xen-PV
Xen-HVM
VMware
不显示任何结果 (多数情况下是独服)

返回以下结果,说明此教程不适合你的服务器:

OpenVZ
Docker
乱七八糟的东西 (virt-what运行报错)

2. 安装Docker环境

首先,在你的服务器上,执行以下命令,安装 Docker 环境并设为开机自启动:

  • CentOS/Fedora:
    yum install docker -y
    systemctl enable docker
    systemctl start docker
  • Ubuntu/Debian:
    apt-get install docker.io
    systemctl enable docker
    systemctl start docker

之后,运行命令:

docker info

来确定你的Docker是否成功启动。如果返回关于你的Docker的相关信息,就像这样:

[root@docker-host ~]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.13.1
(.........)

如果返回以下信息,则说明你的 Docker 没有正确启动:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

一个我常遇到的问题:selinux 权限限制。

遇到这种情况,请执行命令:

setenforce 0

然后再尝试重新启动 Docker 进程,很多时候都会奏效。

3. 下载Docker镜像到本地

执行以下命令,将 Docker 镜像从 Docker Hub 上拉回本地:

docker pull ilemonrain/cloudreve

拉取镜像的速度取决于你服务器的国际出口速度。

一般情况下,美帝的服务器基本上就是秒速拉回来,国内的服务器往往非常慢。

请参考这里 如何为国内服务器加速 Docker Hub 镜像拉取:

https://www.docker-cn.com/registry-mirror

等待拉取结束后,继续部署过程。

4. 启动Docker镜像

启动命令格式如下:

docker run [-d/-t] -p 80:80 -e CLOUDREVE_URL="[Cloudreve URL]" -v /cloudreve:/cloudreve --name docker-cloudreve ilemonrain/cloudreve

启动命令行说明:

-d/-t:决定是以后台运行模式启动或是前台监控模式启动。

  • 使用-d参数启动,镜像将不会输出任何日志到你的Console,直接以 Daemon 模式启动。Deamon 模式启动下,可以使用docker logs docker-cloudreve命令显示启动日志。
  • 使用-t参数启动,将会直接 Attach 你的镜像到你的 Console,这个模式启动下,你可以直观的看到镜像的启动过程,适合于初次部署镜像,以及镜像 Debug部署使用。你可以使用 Ctrl+C 将 Docker 镜像转入后台运行,使用 docker logs docker-cloudreve 命令显示启动日志。

-p 80:80:暴露你的 Docker 容器内部的 80 端口,到你容器外部的 80 端口。目前由于开发状态原因,不建议修改此端口。

-e CLOUDREVE_URL="[Cloudreve URL]":Cloudreve 绑定的地址,此参数务必严格填写,不能丢掉 http/https 前缀和结尾的斜杠!

  • 以下的地址是正确的:
    http://cloudreve.example.com/
    https://netdisk.example.com/
    http://123.234.123.234/
  • 以下的地址是错误的:
    cloudreve.example.com
    netdisk.example.com/
    http://cloudreve.example.com
    https://netdisk.example.com
  • 将会在后期版本中加入对 HTTPS 的支持,目前请使用 http 进行部署!没有域名的话,可以换成IP!

-v /cloudreve:/cloudreve:将Docker容器中的/cloudreve目录,映射到宿主机的/cloudreve目录,冒号前面的是映射路径,冒号后的为容器中路径 (强烈建议进行映射,以确保容器中数据的安全,避免在容器意外崩溃时导致数据丢失)

容器中可以映射的路径:

  • /cloudreve : Cloudreve 程序目录以及网盘文件目录
  • /var/lib/mysql : MariaDB (MySQL)数据库文件目录

--name docker-cloudreve:Docker容器的名称,可以自行修改

ilemonrain/cloudreve:启动的Docker镜像名称,请不要修改!

5. 启动过程

根据我目前设置的entrypoint.sh,目前的启动过程如下:

  1. 通过命令行,启动 Docker 容器
  2. 【开发中】Apache2 初始化
  3. MariaDB (MySQL) 初始化
  4. 安装Cloudreve (通过php composer)
  5. 安装 Google 2FA 验证器插件 (通过php composer)
  6. 安装 用于Google 2FA 验证器的二维码插件 (通过php composer)
  7. 输出容器相关的信息
  8. 以前台模式启动 Apache2

6. 常见问题 Q&A

  • Q:Docker安装和启动感觉好吃力,这正常吗?
    A:Docker安装过程中会涉及到selinux的部署,在安装过程中如果卡在container-selinux,请耐心等待(30秒~1分钟)
  • Q:镜像启动好慢啊……
    A:本身在镜像启动时就要涉及到很多的过程(参考2.5 启动过程章节),尤其是在线安装Cloudreve,更加浪费时间,请耐心等待!如果等不及可以尝试调取启动日志,看看卡在了哪里!
  • Q:Docker Cloudreve运行起来后,为什么占了这么多内存啊
    A:这个镜像本身就是个LAMP环境,尤其是吃内存大户的MySQL,你说占用能少么?
  • Q:你打算什么时候支持SSL?
    A:个人学业关系和时间关系,我会尽可能抽时间开发!

联系/打赏作者

  • 企鹅:942109647 (加好友请注明 Docker Cloudreve 技术交流 ,不带任何注明直接拒加好友)
  • Email:ilemonrain@ilemonrain.com
  • Telegram:@ilemonrain (不会24小时在线,有事情请发E-mail)
  • 打赏通道 (吃土少年求帮助!):请点击下面的赞赏支持~喵~
    才怪啦,如果要打赏柠檬的话就去下面的原文链接中点赞赏吧!
搬瓦工VPS优惠套餐,建站稳如狗,支持支付宝,循环出账94折优惠码BWH3HYATVBJW
年付$47CN2线路,1核/1G内存/20G硬盘/1T@1Gbps【点击购买
季付$47CN2 GIA线路,1核/1G内存/20G硬盘/1T@2.5Gbps【点击购买
Last modification:November 9th, 2019 at 11:50 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

10 comments

  1. Chenwe_i_lin  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.42(Google Chrome 77.0.3865.42)
    在解压Cloudreve 静态文件时出现致命错误"Class 'ZipArchive' not found in /cloudreve/CloudreveInstaller/Installer.php:89" 请求在之后版本中加入安装unzip的部分
    1. 神代綺凜  Mac OS X 10.14.6(Mac OS X 10.14.6) / Google Chrome 76.0.3809.100(Google Chrome 76.0.3809.100)
      @Chenwe_i_lin 请找 docker 镜像作者,文章末尾有原文链接
      1. Chenwe_i_lin  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.42(Google Chrome 77.0.3865.42)
        @神代綺凜 邮件已经发到镜像作者那边去了, 但是到现在为止还没有回复
        现在正在尝试使用另外一个镜像evanshawn/cloudreve.
  2. FRANK  Mac OS X 10.13.6(Mac OS X 10.13.6) / Google Chrome 72.0.3626.109(Google Chrome 72.0.3626.109)
    求助一下,安装过程没有问题,最后提示一条关于httpd的提示,httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message,这个不知道是什么原因?而且office和pdf不能在线预览,也很头痛啊!求教!
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 71.0.3578.98(Google Chrome 71.0.3578.98)
      @FRANK 因为直接把ip作为网站的 servername 了所以会有这条警告信息
      剩下的请自己百度以及询问程序作者把
      1. FRANK  Mac OS X 10.13.6(Mac OS X 10.13.6) / Google Chrome 72.0.3626.109(Google Chrome 72.0.3626.109)
        @神代綺凜 好的,多谢!
  3. hp  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 65.0.3325.181(Google Chrome 65.0.3325.181)
    求助一下
    禁用selinux也重启了docker 但是还是弹错误“页面错误!请稍后再试~”qwq
    有解决方法么 翻了一圈官方论坛发现要目录权限 这个怎么破|´・ω・)
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 65.0.3325.162(Google Chrome 65.0.3325.162)
      @hp 这个你应该去作者博客问一下……因为我只是转载而已,自己并没有操作过(而且我Docker用的少
      1. hp  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 65.0.3325.181(Google Chrome 65.0.3325.181)
        @神代綺凜 OωO已经发邮件啦 感谢博主
        1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 65.0.3325.162(Google Chrome 65.0.3325.162)
          @hp 不用