使用Nas搭建一个私有服务器
目录
一、背景
二、什么是Nas
三、Nas采购
四、玩转极空间docker
五、docker部署开发环境
六、内网穿透技术介绍
七、公网ip访问
八、测试公网ip访问
九、总结
一、背景
最近购买的云服务器快要过期了,重新续费的话价格又点让人肉疼,价格贵,配置不够高,性价比极低。我使用云服务器的目的就是挂博客,搭建一些云的开发环境,安装mysql、redis、mq、es等等以及部署私有项目。并且防止电脑系统破环,需要重装系统的时候,又得重新把这些软件重新装一次,因为我最近就是遭遇了这个问题。
二、什么是Nas ?
NAS(Network Attached Storage,网络附加存储)是一种通过标准的网络拓扑结构(例如以太网)连接到一群计算机上的存储设备。它是一种具有很大存储容量的电脑外敷设备,通过集线器或交换机直接连在网络上,提供跨平台文件共享功能。
更简单的来讲,你就把它当做一台部署在家里的 Linux 服务器就好,只不过它的体积不大,但有很大的硬盘容量。所有开通了权限的用户,都可以使用这台共享服务器。并且它提供了很多的软件资源和网络访问服务。
三、Nas采购
市面的 Nas 厂商有很多家,如;群晖、威联通、绿联、极空间、华为。
其各有不同,其中老牌厂商、生态比较齐全,稳定性有保障,但是价格比较贵。
相比于后期之秀,比如极空间,性价比比较高一些,适合个人,虽然生态还不是那么完善,对于我个人的的需求,足够了。
不管你采购哪个厂商,一定要注意一个前提条件,那就是一定要支持docker。
我买的是一台 极空间Nas,z4Pro
并配置了32G内存
+ 4TB
机械硬盘+512GB
固态硬盘,为了提高docker环境的运行效率,我选择加装一条固态硬盘,因为咱们要使用 Docker 安装各类软件,硬件配置好、内存大那就更好一些,性能方面也会有显著的提升。之后吗,我们就可以像使用 Linux 服务器一样使用 Nas 满足开发和存储需求。
这是我采购 极空间z4Pro
的一些硬件配置信息。
四、玩转极空间docker
SSH连接终端
- 极空间开启SSH功能。
在使用电脑安装好客户端之后,登录账号进入系统,打开系统设置,开启SSH。
这里有极空间硬性的规定,端口不能低于10000,插上网线之口就可以看到局域网了。
在你的电脑上打开连接工具,使用局域ip 地址连接SSH
- 使用管理身份操作
输入 sudo -i
再输入密码 成功切换到管理员身份操作。
确定磁盘目录
极空间的磁盘目录 是以 /tmp/zfsv3 开头的。
cd /tmp/zfsv3
切换到这个目录下,就可看到我安装的固态硬盘和机械硬盘。
固态硬盘是nvme 开头,机械硬盘则是sata开头。
注意:
如果你的文件安全要求系数很高,建议你装在机械硬盘里,万一硬盘坏了,可恢复的程度还是很高。
如果是固态硬盘,坏了就是坏了,基本恢复不过来。
这里我选的固态硬盘,原因也很简单存读取速度快,安全系数要求不高。
启动科学上网
如果我们不启用科学上网,那么镜像的拉取将变得极其麻烦,所有我们这里要使用科学上网(挂梯子)
使用科学上网的前提:
- 必须是同一局域网内,可以理解为电脑和极空间插的网线插的是同一个路由器。
- 电脑开启科学上网
- 在极空间docker内设置代理设置,这样nas才能代理到电脑本地。
docker部署Portainer
命令查询一下极空间现在的一些版本信息:
cat /proc/version # 查看当前版本及编译信息
docker --version # 查看当前 Docker 的版本
docker-compose --version # 查看当前 Docker Compose 的版本
信息如下:
极空间的SSH连接功能也是近期才推出的,当前还不支持sftp 上传文件。所以文件只能通过极空间界面操作进行上传。
这里我选择把数据存储在固态硬盘之下,也就是 M.2存储12。
在个人空间,新建存储Portainer数据的目录 /Docker/portainer/data。
刚才新建的目录,在SSH连接界面对应的目录地址是
/tmp/zfsv3/nvme12/手机号/data/Docker/portainer/data
docker run -d --restart=always --name="portainer" -p 9000:9000 -v /tmp/zfsv3/nvme12/xxxx/data/Docker/portainer/data:/data -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce
要注意修改启动命令,
测试访问
部署成功之后,访问测试,电脑浏览器打开 http://192.168.0.102:9000/
192.168.0.102 就是极空间分配到的局域网ip。上面有提到局域网在哪看。
首次登录需要注册账号
这里我已经注册过了,直接登录
其实到这里已经成功部署了。
五、docker部署开发环境
上面我已经通过手动成功部署了Portainer。下面是是部署mysql、redis、等等。
这回我就不在一步一步的去手动设置了。直接使用编写好的docker_compose.yml 文件借助docker compose命令一件部署。
首先获取文件
通过gitee拉取项目文件
- 可以通过zhengqingya 的项目地址拉取
git@gitee.com:zhengqingya/docker-compose.git
- 也可以通过我的gitee项目地址拉去,我这里整理的比较简单,东西较少
git@gitee.com:keyyds/docker-compose.git
项目拉取下来之后,项目工程结构如下,下面演示一下mysql的安装。
安装MySQL8.0
步骤只有两步:
- mysql8.0文件夹上传到nas
上传msyql文件夹到空间,跟上面安装的Portainer是同级目录。
提醒:上传之前记得设置自己想要的mysql密码,文件里默认设置的是root
- 启动脚本命令
在SSH连接页面,来到我们刚上传的mysql8.0目录下。
然后执行启动命令
docker-compose -f docker-compose.yml -p mysql8 up -d
之后就是部署成功了。
在Portainer界面也可以看到。
连接测试
使用navicat连接测试,如果文件没有修改过端口,端口是3308,账号密码都是root
说明已经连接成功了
后续,后面可以按照此类方法继续部署其他的环境了。
特别说明一下,如果有配置 :
部署其他环境
后续成功部署其他环境
但是我们看到一个不好的信号,由于安装应用过多,有没有对启动参数进行设置。
导致内存接近占满,负载极高。
这里的配置是原配件的配置 4核 + 8GB的配置,显然已经接近极限。
**
**
解决办法:
- 更换更大的内存条。
- 调整启动参数(这里就自行研究了)。
例如:
办法1的操作过程:
这是我询问客服之后的建议
这里就想到通过增加内存来提高数据的交换效率。但是极空间4ZPro 只支持一跟内存条,想增加内存,只能更换内存条。
哈哈,然后这是我采购清单、合理使用“超频”这个概念。特别注意:是DDR5-4800MHZ。
即使你是DDR5-5600MHZ,效果跟DDR5-4800MHZ是一样的。
在将8G内存更换为32G内存条之后,负载显著下降。
六、内网穿透技术介绍
因为是同一个路由器,分发出来的网线,所以当前的本地电脑、Nas所属在同一局域网内,可以相互访问。 但是想要外部的用户也可以访问到Nas, 则必须要借助内网穿透技术。
内网穿透(NAT穿透、端口映射)是一种网络技术,用于在公网和本地网络之间建立直接通信的连接。通常情况下,内网中的设备(如家庭路由器内的电脑)无法直接从互联网访问,因为这些设备没有公网IP地址,或者它们的IP地址被网络地址转换(NAT)隐藏起来。内网穿透技术通过以下几种方式实现:
- 端口映射:通过配置路由器,将公网的某个端口映射到内网中某台设备的特定端口,从而实现从外部网络访问内部设备。
- 反向代理:使用服务器作为中介,客户端首先连接到服务器,服务器再将请求转发给内网中的设备。
- VPN:通过建立虚拟专用网络(VPN),将内网和外网连接起来,使得外部用户可以通过VPN访问内网资源。
- P2P技术:通过点对点(P2P)穿透,直接在两个端点之间建立连接,绕过NAT设备。
虽然市面也有一些内网穿透的服务,包括; natapp、coplar、花生壳等,操作起来也简单,但是需要收费。
本文则通过反向代理的方式实现(最省事)。
七、公网ip访问
- 前提必须是有一个云服务器。现在各大云服务器厂商都在搞活动,也很便宜。一台2-2的也够用了。
- 使用frp 内网穿透组件, 在Nas 上启动一个 frpc的客户端, 在云服务上启动一个frps的服务端。
github地址:https://github.com/fatedier/frp?tab=readme-ov-file
frp中文文档地址: https://gofrp.org/zh-cn/
本次使用 fatedier/frp 0.60 版本进行搭建。
脚本地址:
git@gitee.com:keyyds/frp.git
工程目录结构如下:
- frpc 客户端
- frps 服务端
- frps服务端
先要采购一台云服务器来启动frps服务端。
需要注意一下这些事项:
- 云服务器防护规则,设置开放端口。
- 必须安装好docker ,因为frps服务端要借助docker启动。
- 服务器上的防火墙端口,注意开放。
# https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml
[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板的账号密码(修改成自己的)
dashboard_user = admin
dashboard_pwd = admin
# token =
- 云服务器启动frps服务端
先要将拉下的脚本项目,把frps上传到云服务器之后启动。
之后查看一下运行日志:
- frpc客户端
# 服务端地址 https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml
serverAddr = "云服务器公网ip"
# 服务端配置的bindPort
serverPort = 7000
# token =
[[proxies]]
# 代理应用名称,根据自己需要进行配置
name = "mysql8"
# 代理类型 有tcp\udp\stcp\p2p
type = "tcp"
# 客户端代理应用IP
localIP = "192.168.0.102"
# 客户端代理应用端口
localPort = 3308
# 服务端反向代理端口;提供给外部访问
remotePort = 3306
- nas 启动 frpc
把frpc上传到nas。
然后再SSH连接下 切换到frpc 目录下 执行启动命令
#命令执行
docker-compose -f docker-compose.yml up -d
查看运行状态
到此我们的整个过程都结束了。
八、测试公网ip访问
测试一下mysql公网ip访问
好了到此整个过程就全部结束了。
nas上部署的msyql 通过 公网ip 或者局域网ip访问都可成功。
九、总结
- 想要更好的nas环境、需要加装内存条和固态。
- 要会使用和设置科学上网。
- 了解frp内网穿透实现的技术原理。
- 要会使用docker,使用docker部署和启动脚本。
- 了解和购买云服务器,安全组怎么设置以及防火墙端口的开发和关闭。
- 使用一台“丐版”云服务器 + nas , 搭建了一台高性能的 私有云服务器。