作者:zka41101959
上一篇中,我已经充分介绍了硬解存在的必要性,本篇让我们一起来配置docker中的各种必须套件,大多数以图形界面安装,小部分以命令行实现,本篇受众定位是有一定计网基础的普通用户。
PART1 Docker与群晖套件联动配置
首先继续昨日未完的话题,docker是什么这里不再解释,可以看做是任意操作系统下可实现相同功能的一组套件(跨平台,且拓展性极高,安全性好)
而后开始选择需要安装的套件与对应的docker注册表,可道云和nextcloud需要redis进行缓存加速,默认群晖不支持redis,因此只有选择注册表安装,默认群晖内的php套件并不支持php-redis和memorycache,因此需要用ssh命令添加至php拓展列表,onlyoffice的安装在此不再赘述,网上一抓一大把。
1.1 docker下的redis安装
至此开始redis的docker版本安装,教程参考了另一位老兄的图形化安装教程
安装完毕后,映射端口为6379,如本地有数据库管理软件,可测试相应nas ip的6379端口可否连接(一般无需密码)
1.2 php-redis
麻烦之处在在于需要为php添加拓展,网上教程林林总总,个人测试过之后只有一种办法可行,遂写于此:
首先确定需要的php版本,可道云支持php7.0以上版本,nextcloud最新版支持php7.3以上版本,于是选择为php7.3添加拓展。
首先打开nas的ssh选项,建议更换端口号为大于1024小于6w的任意数字(防止被黑客肉鸡攻击)
然后登入ssh并取得root权限(需要输入密码)
在之后观察相应目录下是否有编译好的redis.so文件[注:以下的vol均为安装php的卷,需要自行替换]
命令:/volume1/@appstore/PHP7.3/usr/local/lib/php73/modules/
ls
然后为php-fpm.ini文件末尾添加拓展加载索引
命令:vi /volume1/@appstore/PHP7.3/misc/php-fpm.ini
添加的字段:
[Redis]
extension_dir = "/volume1/@appstore/PHP7.3/usr/local/lib/php73/modules/"
extension = memcached.so
最后重启php7.3即可正常使用php-redis拓展
1.3 可道云与nextcloud加载redis
可道云需要使用webstation进行映射安装,nextcloud也一样,方便对文件进行合理的权限控制
1.3.1 可道云的redis配置
如果在初次安装可道云时选择redis作为缓存,则后续不用配置,无脑用就可以了
如果没有,又不想清空配置文件重新安装,则可修改安装目录下config/setting.php中的缓存相关配置,如下图所示 (如果无权限,需要先设置好读写权,否则无法修改)
1.3.2 nextcloud的redis配置
初次安装无法选择缓存,只能从配置文件中修改
根据官方文档对Memory caching的解释,我们需要先验证redis是否在运行,如果在运行,才可添加相关配置
命令如下:
ps ax | grep redis
22203 ? Ssl 0:00 /usr/bin/redis-server 127.0.0.1:6379
将下列命令添加至 安装目录/config/config.php 文件(别忘了最后的 ]; 如果不小心删了程式会报错)
'memcache.distributed' => 'OCMemcacheRedis','redis' => [
'host' => 'redis-host.example.com',
'port' => 6379,],
1.3.3 测试缓存
如果缓存已被应用,则读取文件时内存占用会增加,数据库也会有缓存占用表。
测试过程不表,可以正常写入数据库中缓存表和建立文件列表索引,此功能亦改善了访问文件列表的速度,操作延迟有一定的下降(无图抱歉)
1.3.4 参考链接
参考链接1
参考链接2
参考链接3
PART2 webstation搭建网站并映射本地端口
此步骤较为简单,直接上图
其中有一些杂七杂八的权限问题,此处不表,百度下都是解决方法,目录没权限给他就是了,文件没权限也直接给(这里有一点注意的,webstation读写文件的权限与目前登录用户的一致,因此只需更改登录用户对文件操作/读写权限即可,不要选everyone,有很大的安全隐患)
最后尝试以nas ip:端口号形式是否可正常访问网站,如果可以且通过权限测试,又可正常访问,则阶段到此结束。
nextcloud挂载nas共享文件夹教程在文末(站里好像都说不能挂,结果查了下文档找到个拓展转眼就挂上了 )
nextcloud坑还是比较多的,我直接把我改好的配置文件贴在下面。适度避坑,安全你我
<?php
$CONFIG = array (
'instanceid' => 'oc750mp53d93',
'passwordsalt' => 'zZevG/jrQuNqrqd6srp2xe1PpTRs89',
'secret' => 'JFKTtYSIFj6NaAOugH12NSluKANXQu2k1q6t1N7txzu4vqUL',
'trusted_domains' =>
array (
0 => '192.168.50.10:8088',
1 => 'xxx.xxx.xxx:8088', #此处为允许外网访问配置,下章介绍
),
'datadirectory' => '/volume1/web/nextcloud/data',
'dbtype' => 'mysql',
'version' => '21.0.0.18',
'overwrite.cli.url' => 'http://192.168.50.10:8088',
'dbname' => 'nextcloud',
'dbhost' => 'localhost',
'dbport' => '',
'dbtableprefix' => 'oc_', #数据库表前缀
'dbuser' => 'oc_xxx',
'dbpassword' => 'r2gsqq2q8gYY0q8uqagqSX0VXHkfI3',
'installed' => true,
'allow_local_remote_servers' => true,
'memcache.distributed' => 'OCMemcacheRedis', #缓存配置
'redis' => [
'host' => 'localhost',
'port' => 6379,
],
);
PART3 浅谈网络解析
在讲解外网访问之前,我们必须要了解域名,公网ip,域名解析,csrf,ddns等名词的含义(本章不涉及到ssl/rsa/数字签名等现代密码学算法[也就是常见的https ])
首先域名:
在域名出现之前,人们只有通过ip地址直接访问相应的server,而ip标识性很差(个别除外),直至www的出现改变了现状,server可以直接传输超文本内容,加强了,于是就大众开始关注域名的易记忆性与访问高效性,因此,域名最基本的作用是代替ip地址让访问服务器变得更加容易,服务器开放的不同端口提供不同的服务,例如负责ssh的22端口就无法在浏览器中ip:22的形式打开web服务,有界面服务和无界面服务也要区分开来,不提供界面的服务通常偏向于控制和服务性(例如ftp/ssh/telnet),有界面服务通常注重于交互式服务(例如web)
再者公网IP:全称广域网IP,是为除了保留地址之外的任意ip地址
保留地址如下:
A类:10.0.0.0 到 10.255.255.255
B类:172.16.0.0 到172.31.255.255
C类:192.168.0.0 到192.168.255.255
其中127.0.0.0 到127.255.255.255 为系统环回地址
如果你的路由器拨号(PPP)之后获得的ip不在此列,那么恭喜你,你已经有了一个的广域网ip
怎么测试其可用性呢?
首先更换路由器访问端口为x。(1024<x<65535),然后用手机通过数据网络,啥设备都行,只要不是通过目前局域网接入的互联网即可,直接访问路由拨号获得的 ip:设置好的端口号 如果可以显示路由控制界面,则说明此ip可用,可以进行下一步。(光猫需改桥接模式,路由端负责拨号)
既然前面已经介绍了域名相关知识,那么我们这里就要用上,域名的本质是解析ip地址,而ip对应的server为访问者提供各式各样的服务,群晖用的最多的是web服务(tcp),所以此章只介绍web相关内容。
如果你在本地hosts添加了一条解析记录并刷新了dns缓存,则可以可以通过自定义的域名访问局域网内的nas服务。同理:如果你在互联网上(域名解析方)添加了一条指向广域网某ip地址的解析记录,你就可以通过域名访问广域网上某ip提供的服务。再进一步,如果你用自己注册的域名,解析到你自己路由的广域网ip地址,你就可以通过该域名直接访问你路由上开放的任意端口,此为域名解析原理。(不涉及到五层体系结构的通俗讲解 )
别忘了csrf:
啥是csrf,是一种防跨域请求伪造攻击的手段,可通过多种方式实现,而防护的手段大都为:不允许不合法的域名跳转,不允许HTML标签发送合法的跨域请求,这种防御我只在docker的qbtorrent注册表中见到过,一旦跨域则无法访问,错误码505,个别情况需要注意,普通用户不必深入了解。
为什么需要ddns?
因为一般家庭或企业用户所获得的的广域网ip并非固定,而是会时常变化,一旦变化,我们的域名针对ip的A类解析记录就会失效,因此我们需要DDNS(动态域名解析服务),在本例中选择ax88u的aliddns应用插件实现ddns。
网络解析实践
实践前提:一台内网运行web服务的nas,一个路由器(刷了华硕ML改固件的都可以,其实软路由也可以以定时任务的形式进行解析,此处不表,只阐述逻辑实现)
最终目标:以数据网络访问广域网某域名获得目前局域网内web服务为最终目标,开始搭建整个网络环境(局域网内服务优化先前已介绍,不再赘述)
以外网访问nextcloud为例子(需要事先修改配置文件更改trust域名)
以下为端口转发配置和aliddns设置:详见
先在阿里云申请域名(我相信这个大家都会),然后通过实名认证开放解析权限,如果要用ddns必须先创建一条子域名解析记录,如果不创建则路由内置插件无法更新ip
这样一顿操作过后,等三分钟,你尝试ping下设定的域名地址,如果返回ip和路由拨号获得的ip一致(记得刷新下DNS缓存[ipconfig/flushdns]和清空hosts文件),那么你就可以通过ip:开放端口来实现在广域网上对本地web服务的访问
PS: 推荐群晖内部做静态IP配置,防止端口转发失效
参考链接
参考链接
番外 nextcloud挂载localhost文件夹/nas共享文件夹(smb/sftp)
许久前见站内各位大佬评比nextcloud优劣,其中一条便是其无法访问群晖的共享文件夹。
无意中发现nextcloud可以通过External storage support插件实现对本机sftp及smb内容的访问及分享,速度依托于redis提前建立好的文建索引,文件夹下载速度亦有所提升
本篇到此结束,下篇可能会介绍chevereto图床的APIv1用法详解,讲究更实用的图床。相册,who?
感觉好像没什么人看的样子欸。是我图不够多?
阅读更多精彩内容,可前往什么值得买查看
什么值得买APP 全网实时购物好价优惠
原文链接:http://open.smzdm.com/yidian/article/ad2voxnx