使用 Docker 在 Linux 上安装 NextCloud 私有云盘
ps. 本文实时更新于 个人网站,请移步阅读。
国内的网盘虽然免费,但总让人对隐私不太放心,毕竟 “免费的永远是最贵的”。
自己之前购买了一个 VPS,搭建自己的网站后,感觉没有充分利用 VPS 的流量和性能,于是琢磨搭建一个私人的云服务,随后就发现了 Nextcloud 这一开源云服务。
通过 链接 注册并购买搬瓦工 VPS,就可以按下面的教程安装 NextCloud 私人云盘啦,我也可以得到新客注册的返现。
About NextCloud
Nextcloud is the open source file sync and share software for everyone from individuals to large enterprises and service providers. Nextcloud provides a safe, secure and compliant file sync and share solution on servers you control.
With Nextcloud you can share one or more folders on your PC, and sync them with your Nextcloud server. Place files in your local shared directories, and those files are immediately synced to the server, and then to other PCs via the desktop client. Not near a desktop client? No problem, simply log in with the web client and manage your files there. The Android and iOS mobile apps allow you to browse, download and upload photos and videos.
Whether using a mobile device, a workstation, or a web client, Nextcloud provides the ability to put the right files in the right hands at the right time on any device in one simple-to-use, secure, private and controlled solution.
简而言之,Nextcloud 是一个自由及开放源代码的私有云网盘,每个人都可以在私人服务器上安装并运行它,能够快速同步你的文件到你的私有服务器,方便你跨平台 (现在支持 PC、Android 和 iOS) 同步和分享文件,功能和百度云不差多少,优点是隐私好,同步下载速度取决于服务器带宽。
与 Dropbox 等专有服务相比,Nextcloud 的开放架构让用户可以利用应用程序的方式在服务器上新增额外的功能,并让用户可以完全掌控自己的数据。同时,Nextcloud 可与在 Windows、macOS 或是多种 Linux 发布版上运行的客户端同步。
Nextcloud 用户可以管理日历、联系人、计划工作与流媒体。此外,用户也可以在 Nextcloud 上使用基于浏览器的文本编辑器、书签服务、缩略网址服务、相册、RSS 阅读器与文件查看器。因为有良好的扩展性,Nextcloud 可以透过鼠标点一下即可完成安装的应用程序强化其功能,并可连线至 Dropbox、Google 云端硬盘与 Amazon S3 等产品。
安装简介
Nextcloud 虽然这么好用,但是安装依赖却非常复杂,需要安装 LNMP 集成环境 (i.e. Linux + Nginx + MySql + PHP),在搭建过程中或多或少都会出点问题。
本文推荐一个很方便的安装方法 docker-nextcloud,使用纯命令形式在 Docker 上安装 NextCloud (Docker file 会帮你把负责的依赖都配置好),并探讨如何配置反向代理,适合尝鲜的新手。
安装 Docker 后,需要安装两个容器:mysql 和 nextcloud。其中,mysql 用于存储用户的数据,nextcloud 通过向 mysql 容器读写数据,从而实现数据的存储和访问。
安装 Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
1 | # CentOS 7、Debian、Ubuntu |
复习知识点
- curl 是一个工具,用于传输来自服务器或者到服务器的数据。
- systemctl 是一个系统管理守护进程、工具和库的集合,用于取代 system V、service 和 chkconfig 命令,初始进程主要负责控制 systemd 系统和服务管理器。
- systemctl start 启动服务
- systemctl enable 激活服务并在开机时启用
安装 Nextcloud 服务器
1 | # 拉取 Mysql 镜像和 Nextcloud 镜像 |
MariaDB 和 MySQL 的关系:MariaDB 数据库管理系统是 MySQL 的一个分支。开发这个分支的原因之一是:甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。
恭喜你,现在初级版的云服务器已经搭建成功。访问地址为 http://your_ip:3000。
启动命令里的 3000 端口可自行替换,不过后面有关端口的命令都可自行修改,/var/nextcloud/data 为网盘的数据库,可以自行修改。
复习知识点
- docker pull 是从镜像仓库拉取镜像。
- docker run 是创建一个新的容器并运行一个命令。
- –restart=always,设置开机重启
防火墙开启端口
1 | #CentOS 7 |
初始设置
- 访问 http://your_ip:3000。
- 创建管理员帐号和密码
- 数据库选择 MySQL/MariaDB,如果配置不成功,可以选择 SQLite (性能差点,但是可以满足个人基本的需求)。
名称 | 值 |
---|---|
用户名 | test |
密码 | test |
数据库名 | test |
地址 | nextcloud_db:3306 |
mysql 数据库默认端口是 3306。
- 恭喜你,进入自己的网盘界面。
域名访问
IP 访问会直接把云盘的 IP 和端口暴露出来,感觉不太妥。如果要通过域名访问自己的网盘,就需要反代了。
反代可以用 Nginx、Apache、Caddy,本文讲述如何使用 Nginx。
Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。其特点是占有内存少,并发能力强,
默认用户已经完成购买域名、安装 Nginx 的前序步骤,鼓励折腾一下,有问题欢迎下面留言交流。
certbot 生成 https 证书
Let’s Encrypt 是很火的一个免费 SSL 证书发行项目,自动化发行证书,证书有 90 天的有效期。适合个人使用或者临时使用,不用再忍受自签发证书不受浏览器信赖的提示。
附上 CentOS 7.2 的 免费 SSL 证书 Let’s Encrypt 流程。
1 | ./certbot-auto certonly --email your_mail --agree-tos --no-eff-email --webroot -w /var/nextcloud -d drive.example.com |
配置 Nginx 配置文件
在 /etc/nginx/conf.d/ 下的配置文件里添加如下配置。
1 | server { |
最后,重启 nginx,就可以通过网址访问自己的云盘啦!
1 | systemctl restart nginx |
安装中可能遇到的问题 FQA
- Q: 初始化时,提示 “看起来您正在尝试重新安装您的 Nextcloud。但您的 config 文件夹中没有 CAN_INSTALL 文件。请在您的 config 文件夹中创建 CAN_INSTALL 文件以继续。”
- A: 运行如下命令。
1 | cd /var/nextcloud/data/config && touch CAN_INSTALL |
其中,/var/nextcloud/data 为网盘的数据库,请自行修改。
- Q: 反向代理后,网址无法直接访问,比如提示 403。
- A:请先定位问题,可以在 /var/log/nginx/error.log 查看代理错误。
- Q: 关机重启后,原来配置好的网盘无法访问。
- A: 在使用 docker run 启动容器时,已经使用–restart 参数来设置容器开机自启。如果发现服务器重启后,无法访问网盘,可以尝试 update 命令设置 --restart=always。
1 | docker update --restart=always 容器名称 |
Docker 提供了 restart policy 机制,可以在容器退出或者 Docker 重启时控制容器能够自启动。这种 Restart policy 可以保证相关容器按照正确顺序启动。
- Q: 通过 IP 方式 登录时,没有出现登录界面,显示 “HTTP ERROR 500”.
- A: 根据 Nextcloud 12 HTTP Error 500 提供的方法,更新 PHP 模块可以解决问题。
- 我使用 apt-get upgrade 升级了所有软件的版本,然后问题得到修复。
HTTP 500 错误,全称为 HTTP 500 Internal Server Error,即 HTTP 500 内部服务器错误。HTTP 500 内部服务器错误表示服务器遇到意外情况,导致其无法履行请求,但它无法说明具体错误或发生错误的根本原因。当发生错误时,访问的网站会显示发生错误。