从0到1搭建自己的服务器,可部署项目/网盘/电影库,告别价高低配的云服务器

134 阅读10分钟

从0到1搭建自己的云服务器

最近自己的腾讯云服务器要到期了,想重新购买才发现腾讯云的所有优惠都只是针对新用户的(而且你重新注册小号也没用,因为他是针对实名认证的实体来的)。如果正常续期或购买的话,价钱贵的惊人,是我这种学生党难以承受的。于是,我萌生了搭建自己的云服务的想法,下面就记录一下搭建的全过程。

性价比对比

这次我购买了一台mini主机,配置为:5800U(8核16线程)+双通道16G内存+1T SSD PCIE3.0+500M带宽(家庭网络),硬件成本1100(主机)+160(内存)+240(固态)=1500元

在开始之前,我们可以先对云服务商提供的云服务器和自己搭建的服务器进行一个性价比的对比:

我之前一直用的2核+4G内存+6M带宽的云服务器,但是说实话这个配置根本不够用,仅仅搭建一些学习使用的MySQL、Redis、RabbitMQ、Nacos、ElasticSearch之后,内存就所剩无几了,最多能再部署2个Java应用。而即使是这样仅供学习的配置,如果你要正常购买:

img

663一年...说实话,对于我这样的垃圾佬,这么多钱完全能配一台E5+16G的电脑了(就是功耗高点)。考虑到自己搭建服务器的话,可能有下面几个问题:

  • 服务器硬件的成本
  • 365*24小时的电费
  • 网络问题,怎么公网访问

首先说硬件成本,这个是最小的问题了,同等配置下,云服务器1年的价钱少说能配2台同配置的电脑,而后者是可长久使用的

其次是电费,这个可能是一个比较大的问题,别想着电脑功率小,如果你算一下365*24小时的电费,你会发现这也是一笔不小的开支。假设服务器的平均运行功率为30W,一度电0.6元,一年下来产生的电费就有157.68元。如果使用比较老旧的服务器CPU,功率就高得多,电费可能会成为主要的成本,因此我们需要使用功耗比较低的CPU

最后是网络问题,这个可能比较取决于个人的情况。我家里是开了500M的宽带,网络状况稳定而且大多时候带宽都在闲置着,我不需要为网络付出额外的成本。至于公网访问,随着IPv6的普及,IPv6+DDNS我觉得是一个非常好的解决方案,其次就是可以使用内网穿透。IPv6+DDNS在网速上比内网穿透快得多,而且不需要再去开通内网穿透服务(往往收费还不是特别稳定),因此我选择IPv6+DDNS

我搭建的服务器使用了低压的笔记本CPU,待机功耗15-20W,就算整机的平均运行功率30W,一年也不过产生160元的电费,算上硬件的成本,我觉得使用个2年基本算回本,使用3年就赚了(相较于使用腾讯云的云服务器)。下面展示了一些宝塔Linux下的截图,整体来说性能还是挺强的,性价比也超过了云服务商的云服务器:

img

CPU8核16线程,日常占用零点几,感觉内存大点还是更重要(一个Java应用占用500+MB)...后面配的兄弟可以上更大的内存

img

这是我下载docker镜像时的网络监控,可以看到下载速度跑到了28MB/s,其实测速的话更快,下行速度能跑到50+MB/s,上行速度10-20MB/s,基本就是500Mbps宽带的速度,妈妈再也不用担心服务器的带宽不够了...

img

16G大内存,部署完docker容器全家桶,空余的内存还可再部署约20个Java应用程序

下面就开始介绍我从0到1搭建的全过程。

购买主机

我是在咸鱼平台上买的那种mini主机,使用笔记本的低压CPU 5800U。主机的整体尺寸很小,大概10几厘米,你们可以跟这个鼠标对比一下。

img

咸鱼上的mini主机一搜一大堆,价格从几十元到2 3千元不等,但5800U这种8核16线程的已经算比较奢侈了(购入价1099,带AX 200无线网卡),如果你只需要4核甚至2核的处理器,你在硬件上能省下不少钱(个人觉得核心数不用太多,因为真的用不到,我就有点后悔,多余的钱上大内存吧)。在咸鱼上买的话,主要就是看清是不是准系统带不带网卡,准系统就是说你要自己加装内存和硬盘,网卡决定了能不能连WiFi(自己加网卡也要大几十)

安装操作系统

需要U盘+官网系统镜像文件+刻录软件,下面是一个教程仅当参考:

U盘安装Linux详细步骤_hanxh7的博客-CSDN博客

关于刻录软件我是踩到一点小坑的,网上的大多教程都使用了UltraISO这个软件写入iso镜像,但是我使用这个软件制作的U盘在安装操作系统时会遇到一系列BUG,最终还是更换为rufus解决了这个问题,有关该问题的参考博客如下:

CentOS 8.5安装-解决Error setting up base repository问题_Nana8874的博客-CSDN博客

除了刻录软件的小问题,我在安装操作系统的过程中还遇到了特别多的BUG,最终耗费了1天多时间才终于完成操作系统的安装,下面就记录几个比较主要的问题

踩坑1:CentOS 7不支持新CPU

不管是云服务器也好还是本地的虚拟机,我之前一直使用CentOS 7作为操作系统,因此这次也自然而然地选择了CentOS 7,但是一通操作下来,首先是报了下面的错:

img

我到网上搜索相关报错,有不少类似的错误,他们的解决方案有:更换CentOS 7版本(例如7.6换7.7);BIOS中关闭网卡/声卡;安装操作系统时进入高级选项,指定一些额外的参数等等,但最终都没能解决我的问题(有些会引入新的问题)。

最终我注意到了上面的一行报错:AMD-Vi:Unable to write to IOMMU perf counter,于是我将Ryzen和CentOS 7作为关键词进行搜索,才发现这是由于CentOS 7更新停滞,与较新的AMD CPU不兼容,相关的博客如下:

Is CentOS 7 going to support Ryzen 5000 series CPUs?! - CentOS

Kernel panic while installing CentOS 7 - CentOS

踩坑2:Depian 10不支持新网卡

不能安装CentOS7,我于是将目光转到了Depian上(因为宝塔Linux官网的推荐是CentOS7.x > Depian10+ > 其他)。我刚开始安装的是Depian10.7,这次系统倒是成功安装了,但是进入系统后,不管如何无线网卡的驱动都安装不成功。虽然我可以通过网线连接网络,但是我的主机明明有无线网卡,却装不上驱动,这不是白白浪费了网卡钱吗?这让我非常不爽。

经过长时间的网络搜索类似BUG,我最终发现答案其实就藏在Intel的驱动下载官网:

img

AX 200的驱动需要5.1+版本的Linux内核,我通过uname -r查看debian10.9的Linux内核版本,果不其然,是4.几,刚开始我还想着直接升级内核版本,相关参考博客如下:

Debian10升级内核 - 知乎 (zhihu.com)

但是编译的过程异常漫长,而且我也不确定即使升级了内核还会不会有其他问题,于是我直接查询了Debian11使用的Linux内核版本,最终选择安装Debian 11.7

Debian配置全流程

在安装Debian操作系统时,最好连接上网线,这样Debian会在安装时就完成有线网的配置,开机后直接可以下载其他的包(主要是network-manager,这样就可以连WiFi和管理网络了)

有一个注意点就是镜像一定要下载cd-including-firmware版本,这个版本的镜像更大,但是内含了一些驱动,装好系统后就不用自己再下载驱动了,下面是下载的一个链接

Index of /cdimage/unofficial/non-free/cd-including-firmware/archive/11.7.0+nonfree/amd64/iso-cd (debian.org)

安装的过程可以参考这个视频,绝对新手向

超详细 物理机安装debian11.5 绝对新手向哔哩哔哩bilibili

安装好Debian后的一些配置:

# 安装vim
apt-get install vim
​
# 配置ssh
vim /etc/ssh/sshd_config
# 修改其中PermitRootLogin后的prohibit-password为yes
/etc/init.d/ssh restart
​
# xshell连接...# 配置vim
vim ~/.vimrc
# 添加如下内容
set tabstop=4
syntax enable
if has('mouse')
    set mouse-=a
endif
​
# 配置网络
apt-get install network-manager
# 修改配置文件
vim /etc/NetworkManager/NetworkManager.conf
# 修改为如下内容:
[main]
plugins=ifupdown,keyfile
​
[ifupdown]
managed=true
# 重新启动
systemctl restart NetworkManager
​
# 扫描无线网络
nmcli device wifi list
# 连接无线热点
nmcli device wifi connect "SSID-Name" password "your password"
# 查看连接状态
nmcli c
# 配置WiFi连接
cd /etc/NetworkManager/system-connections/
vim Yuanyuan.nmconnection
# [ipv4]配置为
[ipv4]
address1=192.168.1.128/22,192.168.1.1
dns=192.168.1.1;
dns-search=
method=manual
​
# 创建静态连接
nmcli c add type ethernet con-name Wired ifname eno1 \
ipv4.addr 192.168.2.128/22 ipv4.gateway 192.168.1.1 ipv4.method manual \
ipv4.dns 192.168.1.1
​
# 查看现有连接
nmcli c
# 删除多余连接...(只保留Wired和WiFi连接即可)
nmcli c del '有线连接 1'
​
# 重启网络配置生效
reboot

img

# 安装宝塔Linux
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh ed8484bec
# 查看面板的内网地址、账号密码
bt default
# 修改面板配置(账号密码等)
bt

其他

一些有用的命令:

# 重启并进入BIOS
systemctl reboot --firmware-setup

关于network-manager的使用:

「Linux」- 使用NetworkManager连接Wi-Fi热点 @20210330 - 研究林纳斯写的 - 博客园 (cnblogs.com)

LInux使用NetworkManager管理网络 - ascertain - 博客园 (cnblogs.com)


DDNS

DDNS,即动态域名解析。传统的DNS,就像我们在腾讯云的DNSPod里配置那样,哪个域名对应哪个IP是写死的,而家庭网络的IP都是运营商动态分配的,可能今天是这个IP,明天就变成另外一个IP了,这就决定了我们无法使用普通的DNS来建立域名和家庭网络的映射。

而DDNS是在本地开启一个服务,实时地监控本机的IP地址,当本机IP地址发生变化时,拿着DNS服务商的SecretId和SecretKey去更新DNS解析,这样我们就能通过域名稳定地访问家庭网络了(有一定更新域名解析的延迟,可能是几分钟)

现在三大运营商的宽带都支持IPv6了,因此我通过DDNS+IPv6实现服务器的外网可访问,具体来说,我是通过ddns-go实现的,下面是ddns-go的github地址和docker安装教程

jeessy2/ddns-go: 简单好用的DDNS。自动更新域名解析到公网IP(支持阿里云、腾讯云、Dnspod、Cloudflare、Callback、华为云、百度云、Porkbun、GoDaddy、Google Domain) (github.com)

Docker部署ddns-go,动态域名解析公网IPv6地址_Star-tears的博客-CSDN博客

选用ddns-go的一个重要原因就是它配置傻瓜化,而且占用内存很小,下面是ddns-go的配置界面

img

img

img

通过宝塔的监控面板,我们可以看到ddns-go占用的内存也只有20MB,相比于一个Spring Boot项目动辄700-800MB,内存资源的压力几乎可以忽略不计

img

上面的所有过程完成后,恭喜你,你得到了一台可以公网访问的服务器!通过域名:宝塔端口/后缀就可以访问宝塔面板,部署项目也十分方便