八、优化Nextcloud
前面折腾https访问,难免重启docker甚至重启系统。搞定后,发现挂载的nfs上的文件看不到了。一翻查找后解决并优化,记下备用:
1、设置Nextcloud
关掉弹出窗口(Dashboard)、Talk、Contacts、设置–基本设置–后台任务选Cron
2、redis和APCu
笔者系统docker中已安装redis,APCu也是nextcloud容器自带,配置一下即可:
# 在nextcloud配置redis,编辑config.php
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => '192.168.2.9',
'port' => 6379,
),
3、计划任务
容器没有Crontab,只好在宿主机执行了,ext文件系统须指定用户。
# 定时每五分钟执行cron.php
*/5 * * * * docker exec --user www-data nextcloud php cron.php
# 文件找不到,手动运行一次后,配置个自动任务,每天自动执行一次
59 23 * * * docker exec --user www-data nextcloud php occ files:scan --all
4、开启视频缩略图
直接命令行解决:
docker exec -it --user root nextcloud sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
docker exec -it --user root nextcloud apt-get update
docker exec -it --user root nextcloud apt-get -y install ffmpeg
docker exec --user www-data nextcloud php occ config:system:set enable_previews --value="true" --type=boolean
docker exec --user www-data nextcloud php occ config:system:set enabledPreviewProviders 0 --value="OC\\Preview\\Movie"
docker exec --user www-data nextcloud php occ config:system:set enabledPreviewProviders 1 --value="OC\\Preview\\HEIC"
docker exec --user www-data nextcloud php occ config:system:set enabledPreviewProviders 2 --value="OC\\Preview\\MarkDown"
5、用openwrt的nginx做https代理
上一回都已经整好了ssl证书,这肯定要用给nextcloud服务配上,加强安全性,并且nextcloud很多app要求https连接。
上一回已经分析了nginx的启动过程,所以这回直接写个server在conf.d下就可以了,新开一个端口号,其实也可以写成域名代理,但是ipv4也没有443给我用,域名代理也没多大用处了。
# 新建一个server
vi /etc/nginx/conf.d/nextcloud
# 内容
server {
listen 4443 ssl;
listen [::]:4443 ssl;
server_name example.com;
include conf.d/nextcloud.locations;
ssl_certificate /etc/nginx/conf.d/fullchain.crt;
ssl_certificate_key /etc/nginx/conf.d/example.com.key;
ssl_session_cache shared:SSL:32k;
ssl_session_timeout 64m;
access_log off; # logd openwrt;
# location / { ... } # root location for this server.
}
就这样算了,反正也没80口给我跳转 ~
再写个locations:
vi /etc/nginx/conf.d/nextcloud.locations
# 内容
location / {
# proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://192.168.2.9:8086;
}
nextcloud容器中有apache2服务器的,所以openwrt这里的nginx直接传过去参数就得了,不用再折腾什么,反正直升机(apache)和汤姆猫(tomcat)笔者都看不懂。
还得去nextcloud的config.php添加一下信任和协议转换!不然nextcloud以为nginx是半路劫道的(如下图)!
笔者这里是映射到宿主机的,直接开su帐号怼上去就算了!
# 注意路径
vi /path/to/config.php
# 添加这行写在自己的地址下面好了
'overwriteprotocol' => 'https',
# 再在这个数组中添加1,2,3等信任主机
'trusted_domains' =>
array (
0 => '192.168.2.9:8086',
1 => 'localhost:8086',
2 => 'example.com:4443',
3 => 'ipv6.example.com:4443', # 这行可有可无啦,作个示例而已
...
),
重启一下docker就ok了! 这回差不多了吧,这篇超长博文应该要完了!