网盘是一种存储、备份、分享文件的便捷方式,在近十年得到了长足发展。许多公司都在自家产品的生态圈里加入了云存储的功能,例如苹果的 iCloud 和微软的 OneDrive,它们的侧重点是本地文件的备份和同步。而百度网盘和已经凉掉的 360 网盘,则注重于文件分享和离线下载。只可惜很多网盘服务商和迅雷这样的下载工具都有会员制度,并对非会员进行了下载限速,这对免费用户很不友好。那么,有没有办法集合这些网盘服务的优点呢?答案是存在的,那就是自行部署私有云服务。无论是一台树莓派,还是一个 VPS 主机,都可以轻松地搭建支持离线下载、方便进行同步和分享的私有云。
目前几种主流的私有云服务包括:Seafile ,Pydio ,ownCloud 和 Nextcloud 。这些服务都各有特色。SeaFile 面向的是企业网盘,基于 Python 开发。Pydio 新推出的 Cells 由 Go 语言重写,提供面向团队的文件共享服务,但是在社区支持上有所欠缺。而 ownCloud 和 Nextcloud 则是基于 PHP 的开源项目,Nextcloud 是由原来的 ownCloud 团队成员独立出来开发的,它们有很多相似之处,但 Nextcloud 在许多方面都更胜一筹(例如移动端的支持)。 经过笔者自己的测试,不管是搭建个人使用还是团队协作用的私有云服务,Nextcloud 的功能基本上都可以击败其他的竞争对手。这篇文章也将主要介绍 Nextcloud,其它服务的搭建方式可以在它们各自的官网上找到。
安装 Nextcloud 笔者几年前安装过一次 Nextcloud,当时还需要手工配置 PHP 和 MySQL 的环境,步骤有些繁琐。现在,Nextcloud 已经提供了一键安装的 Docker 镜像 ,可以让我们在几分钟内搭建起一个 Nextcloud 服务。使用方法是,创建一个 docker-compose.yml
文件,并填入以下内容:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 version: '2' volumes: nextcloud: db: services: db: image: mariadb:10.6 restart: always command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW volumes: - db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD= - MYSQL_PASSWORD= - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud app: image: nextcloud restart: always ports: - 8080 :80 links: - db volumes: - nextcloud:/var/www/html environment: - MYSQL_PASSWORD= - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_HOST=db
其中,需要设置 MYSQL_ROOT_PASSWORD
和两个相同的 MYSQL_PASSWORD
,使 Nextcloud 可以连接数据库。然后,运行以下命令:
完成后,访问 http://localhost:8080
就可以看到 Nextcloud 的页面了。在初次登录时,需要设置管理员账号和密码,然后就可以开始使用了。
配置 Cloudflare Tunnel 如果服务器有公网 IP,那么配置好防火墙就可以直接访问 Nextcloud 了。但是,如果服务器没有公网 IP,那么就需要进行内网穿透。下文将介绍使用 Cloudflare 的 Tunnel 服务来实现内网穿透的方法。
首先,需要注册 Cloudflare 账号,并将域名托管在 Cloudflare 上。随后,在 Cloudflare 的控制面板中点击 Zero Trust,并在侧栏目录中选择 Access 下的 Tunnels。在这个页面中,就可以创建一个新的 Tunnel。在 Tunnel 的设置页面中,可以根据你的操作系统选择安装的命令。以 Debian 系为例,命令类似1 2 3 curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb sudo dpkg -i cloudflared.debsudo cloudflared service install ...
完成后,就可以在 Public hostnames 面板中设置公网访问的域名了。将域名设置为你的一个子域名,并将添加的 Service 设置为 http://localhost:8080
即可。这样,我们就可以在外网访问 Nextcloud 了。