前言
虽然我们前面介绍了图床之类的应用,但其实云盘服务才是更加贴近大众生活的应用 。
是一个类似于百度网盘、阿里云盘的服务,可以通过容器的方式搭建在自己的个人服务器或NAS上,有安卓和IOS客户端 。我不知道有没有人在VPS上布署 。一般都是NAS用户吧!有中文界面 。我个人一般是用于进行手机照片的云同步 , 同时还储存一些小文件,并且偶尔可以分享文件给朋友,此时朋友下载文件的速度不像免费百度云那样受到限制 。
除了基本的文件云同步和云储存的功能外,其实还有很多进阶功能,以后有机会再开系列博文来描述它的使用吧 。
本篇博文主要讲述如何通过来安装,并且借助NPM进行ssl证书的申请和自动续期 。安装应用往往不是难事,难就难在如何方便地获得https,而这个和个人信息安全密切相关的主题在多数教程中均少有提及 。
的特别之处还在于:仅仅提供特色功能 。它的性能提升往往依赖其它应用,比如MYSQL和Redis;它的拓展性往往依赖强大的插件 。如果你用默认的方法安装,那么它的性能会受到较大的限制 。
如果你可以熟练使用原生Nginx,可参考这位大佬的方案:使用-搭建+Nginx+MySQL+Redis 。我请了杜比的大佬测试,这个博客的方案是有效的,只是数据库权限的设置方法要变通一下 。由于我对于原生Nginx的配置并不熟悉,所以并没有采用他的方案 。对于新手而言,他的设置过于复杂 。本回的安装方法是一种对性能有较大提升并且较为简便的方法 。原理上,唯一不同的是我们采用原生app , 即使用进行80端口映射,而不是像大佬那样采用Nginx+:fpm的方法 。
最后提醒一下:这个方法配置的对内存的占用还是比较大的 。如果你觉得安装完卡顿的话,可以到htop看看是不是的问题 。这里我大致展示一下(不知道是不是和有关):
不知长期使用会怎么样,现阶段感觉对其它应用没有明显的不良影响 。
其它关于的其它信息,可以访问:
另外 , **如果有使用非443端口的NAS的童鞋在安装中有任何问题的,欢迎评论区留言 。**我什么坑都踩过!
测试环境
我是在VPS里演示安装的:
uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linuxdocker --version # Docker version 20.10.5, build 55c4c88docker-compose --version # docker-compose version 1.28.6, build 5db8d86f
准备工作
# 工作目录请按需修改work=~/docker/nextcloud && mkdir -p $work && cd $work# 防火墙sudo ufw allow 7602/tcp comment 'nextcloud' && sudo ufw reloadsudo ufw allow 6379/tcp comment 'nextcloud' && sudo ufw reload# 提前拉取镜像docker pull nextcloud:latestdocker pull mariadb:latestdocker pull redis
配置yml文件
添加一个-文件:
vim $work/docker-compose.yml
添加以下内容:
---version: '3.2'networks:default:name: nextcloudservices:app:image: nextcloud:latestrestart: unless-stoppedvolumes:- ./app:/var/www/htmlenvironment:- MYSQL_PASSWORD=nextcloud_password # 按需修改- MYSQL_DATABASE=nextcloud- MYSQL_USER=nextcloud- MYSQL_HOST=dbports:- 7602:80 # 按需修改networks:- defaultcache:image: redisrestart: unless-stoppedexpose:- "6379" # 可用此默认 。因为这是暴露而不是映射volumes:- ./cache:/datacommand: redis-server --requirepass 'redis_password' # 按需修改networks:- defaultdb:image: mariadb:latestrestart: unless-stopped# 下面的command与官网略有不同 。它将有助于避免MYSQL数据库的4047报错 。command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressedvolumes:- ./db:/var/lib/mysqlenvironment:- MYSQL_ROOT_PASSWORD=nextcloud_password_root # 按需修改- MYSQL_PASSWORD=nextcloud_password# 按需修改- MYSQL_DATABASE=nextcloud- MYSQL_USER=nextcloudnetworks:- default
上线服务
cd $work && docker-compose up -d
配置NPM
ddns-go或者域名托管商后台解析好域名 。
添加一个Proxy Host,反代地址是:7602 。可用泛域名的SSL证书 。
在中添加以下记录以增强兼容性 。详见官网配置关于反代的说明 。
location /.well-known/carddav {return 301 $scheme://$host/remote.php/dav;}location /.well-known/caldav {return 301 $scheme://$host/remote.php/dav;}
完整配置图如下所示:
NPM有443端口时的配置
观察的客户端日志,当出现:
Initializing finishedNew nextcloud instance
即可直接登陆网站:进行设置 。
我随便设置一个帐户 。这个可以自定义!
adminGoK*@s3%oXiQTewxoE*v*5@Q*a!D7WGLQDbwFt!NTiaQ!P6DUf5v
如图所示:

文章插图

文章插图
有些人不安装推荐应用 。我这里就直接安装试试看 。国内环境安装速度也还行 。你也可以不点,反正你需要的话以后可以自己装嘛!最后,耐心地等待初始化的完成吧 。
很快就成功了 。有443端口就是简单!
最后 , 为了让redis生效,我们需要配置$work/app//.php:
sudo vim $work/app/config/config.php
添加以下内容:
//'memcache.local' => '\OC\Memcache\APCu' // 用本地式缓存使用APCu // 注释这行 'memcache.local' => '\OC\Memcache\Redis','memcache.distributed' => '\OC\Memcache\Redis', // 分布式缓存使用Redis'memcache.locking' => '\OC\Memcache\Redis', // 启用Redis缓存的文件锁'redis' => array('host' => 'cache', // 这里和mariadb的逻辑相同,填写容器links时映射的主机名'port' => 6379,'password' => 'redis_password' // 这是之前在配置docker-compose时配置的redis密码),'filelocking.enabled' => 'true',
然后重启-服务:
cd $work && docker-compose down && docker-compose up -d
NPM无443端口时的额外配置
当初我在NAS安装的时候,没有443端口,安装非常地费劲!有时跳转的时候docker可以图形化吗,地址栏的可能会消失掉 。
经过一翻折腾 , 我发现用非443端口使用还要进行一些额外的配置 。相关的教程非常的少,真的恶心!市面上很多Up主也是直接在自己的NAS里安装,但他们往往是在局域网中使用,不会配https 。然而作为一个云盘 , 没有https能忍吗?
又或者他们只在VPS中演示怎么安装 。如上所述,如果你有443端口,这些问题根本不可能出现 。
下面我们对于无443端口的NAS给另外一些配置上的建议 。
首先,上线服务后不要登陆网站并注册用户 。我们修改$work/app//.php文件的内容:
sudo vim $work/app/config/config.php
在文件中添加以下内容:
如果内容已经有默认值 , 则添加或更改记录即可 。比如 。自己看着办!
每一行最后的,号一定不可以省略!
//'memcache.local' => '\OC\Memcache\APCu' // 用本地式缓存使用APCu // 注释这行 'memcache.local' => '\OC\Memcache\Redis','memcache.distributed' => '\OC\Memcache\Redis', // 分布式缓存使用Redis'memcache.locking' => '\OC\Memcache\Redis', // 启用Redis缓存的文件锁'redis' => array('host' => 'cache', // 这里和mariadb的逻辑相同,填写容器links时映射的主机名'port' => 6379,'password' => 'redis_password' // 这是之前在配置docker-compose时配置的redis密码),'filelocking.enabled' => 'true','trusted_domains' => array (0 => '', // 这一般是可以识别,不用改),'overwritehost' => ':', // 按需修改'overwriteprotocol' => 'https','overwrite.cli.url' => 'http://:', # 这里有个逗号不要忘记
为什么要特别地设置.php文件的相关参数呢?如果访问地址带端口号且属于反向代理 , 往往无法正确地识别 , 此时内部将阻止此地址对进行访问 。因此,我们需要提前对变量进行特别声明 。和.cli.url是为了强制https访问,这里也顺便加上以防NPM的设置不生效(还没试过删除会不会影响登陆) 。
如图所示(如果没有设置管理员帐户 , 有些参数和值是没有;但我们要设置的几个参数的样式是类似的):
重启服务,让.php的改动生效:
cd $work && docker-compose down && docker-compose up -d
观察客户端的日志(也可以用看):
docker logs -f nextcloud_app_1 # 有时候是nextcloud-app-1
当log出现 line: ' -D '的字样时,说明已经重启成功 。
此时可以访问:创建管理员帐户 。后面的操作和VPS一样 。设置完管理帐户后,可以自动登陆或者访问:登陆后台使用 。
如果你不小心注册了帐户再来修改.php , 在日志中很可能会有这种报错:
[access_compat:error] [pid 32] [client ] AH01797: client denied by server configuration: /var/www/html/data/htaccesstest.txt
这全是由于地址原因导致的不过关 。**所以端口号的问题真的很烦!**这个时候你可以重新注册一个帐户 。这个时候的系统就会有2个用户 。它们的权限区别我以后再了解一下 。
后台任务
的官话,自己感受一下:为了优化性能,正确配置后台任务非常重要 。对于较大的实例docker可以图形化吗,推荐配置为 ‘Cron’ 。详情请参考相关文档 。
根据使用-搭建+Nginx+MySQL+Redis大佬文章的建议:由于内部的文件和配置会在用户操作过程中产生变化 , 所以需要启用一个定时任务去定期整理和归档这些数据到数据库或者应用到配置中 。问了大佬,这个也是必要的,说是属于php的优化 。
如果你不配置,可能在设置——管理——基本设置会有这种警告:
首先 , 使用 ps -a查看的容器ID 。如果你按本教程,一般是或者是-app-1 。
【Docker系列 搭建个人云盘服务nextcloud】本文到此结束,希望对大家有所帮助 。
- Linux系统虚拟机和云服务配置,快速搭建学习环境
- 一起来学大数据|Linux常用管理命令,及大数据集群的搭建
- 矩形大法,四点共圆等 ?初三培优系列94: 两个难题巧解
- 一 学习语文有方法,我来指导你进步之系列:议论文写作指导
- 碟中谍系列票房 ?谍影重重票房为什么不如碟中谍
- 普通人如何15分钟学会搭建一个自己的网站
- 基础操作系列「2」
- 开课吧前端课程怎么样,学员真实职业“上升通道”搭建过程
- 一文说清汾酒巴拿马系列产品
- 红色警戒2:狂狮怒吼 超难版