跳至主要內容

使用Nas搭建一个私有服务器

科哒大约 12 分钟

目录

一、背景

二、什么是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连接终端

  1. 极空间开启SSH功能。

在使用电脑安装好客户端之后,登录账号进入系统,打开系统设置,开启SSH。

这里有极空间硬性的规定,端口不能低于10000,插上网线之口就可以看到局域网了。

在你的电脑上打开连接工具,使用局域ip 地址连接SSH

  1. 使用管理身份操作

输入 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/open in new window

192.168.0.102open in new window 就是极空间分配到的局域网ip。上面有提到局域网在哪看。

首次登录需要注册账号

这里我已经注册过了,直接登录

其实到这里已经成功部署了。

五、docker部署开发环境

上面我已经通过手动成功部署了Portainer。下面是是部署mysql、redis、等等。

这回我就不在一步一步的去手动设置了。直接使用编写好的docker_compose.yml 文件借助docker compose命令一件部署。

首先获取文件

通过gitee拉取项目文件

  1. 可以通过zhengqingya 的项目地址拉取
git@gitee.com:zhengqingya/docker-compose.git
  1. 也可以通过我的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. 更换更大的内存条。
  2. 调整启动参数(这里就自行研究了)。

例如:

办法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访问

  1. 前提必须是有一个云服务器。现在各大云服务器厂商都在搞活动,也很便宜。一台2-2的也够用了。
  2. 使用frp 内网穿透组件, 在Nas 上启动一个 frpc的客户端, 在云服务上启动一个frps的服务端。

github地址:https://github.com/fatedier/frp?tab=readme-ov-fileopen in new window

frp中文文档地址: https://gofrp.org/zh-cn/open in new window

本次使用 fatedier/frp 0.60 版本进行搭建。

脚本地址:

git@gitee.com:keyyds/frp.git

工程目录结构如下:

  • frpc 客户端
  • frps 服务端
  1. 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 =
  1. 云服务器启动frps服务端

先要将拉下的脚本项目,把frps上传到云服务器之后启动。

之后查看一下运行日志:

  1. 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
  1. nas 启动 frpc

把frpc上传到nas。

然后再SSH连接下 切换到frpc 目录下 执行启动命令

#命令执行
docker-compose -f docker-compose.yml up -d

查看运行状态

到此我们的整个过程都结束了。

八、测试公网ip访问

测试一下mysql公网ip访问

好了到此整个过程就全部结束了。

nas上部署的msyql 通过 公网ip 或者局域网ip访问都可成功。

九、总结

  1. 想要更好的nas环境、需要加装内存条和固态。
  2. 要会使用和设置科学上网。
  3. 了解frp内网穿透实现的技术原理。
  4. 要会使用docker,使用docker部署和启动脚本。
  5. 了解和购买云服务器,安全组怎么设置以及防火墙端口的开发和关闭。
  6. 使用一台“丐版”云服务器 + nas , 搭建了一台高性能的 私有云服务器。
上次编辑于:
贡献者: 黄科铭