我如何搭建一台永久运行的个人服务器 发表于: 2024.08.21 | 分类于: 后端 | 阅读次数: 149 **我如何搭建一台永久运行的个人服务器** ## 背景 **88年**,**全栈开发**,喜欢折腾,总想在网络上留点啥,虽然也没人看,但总是乐此不疲。云服务器的费用就不用说了,新账户优惠还能接受,续费时肉疼。所以干脆自己搭建一个! ## 清单 ### 1.域名一个 > 小白解惑:比如你要搜索,第一想到的是百度,百度的域名是 www.baidu.com 腾讯域名注册为例: | 后缀 | 参考价格/元 | 备注 | | ------ | ------------- | -------| | .icu | 8 | 在2019年3月底,有程序员为了抗议互联网996工作制,特意注册了一个域名“996.icu” | | .xyz | 15 | 2014年新的顶级域名,主要是好记 | | .cn | 33 | cn是中国国家顶级域名 | | .com | 75 | com域名是国际最广泛流行的通用域名 | ### 2.云服务器一台 > 上面才说的云服务器贵,为什么又要买一个呢?原因是需要**固定的公网IP**,这个后面会讲到 | 服务器 | 价格/元 | 备注 | | ------ | ----------- | -------------- | | 阿里云 | 99 | 2核2G/3M固定宽带 | ### 3.本地服务器 > 本地是指什么?就是**自己家里**! 别一听**服务器**,就觉得不懂,也不会,说白了就是一台电脑而已,通用的来说是一台计算机,可以是家里淘汰下来的设备,如手机,Ipad,笔记本,台式主机。也可以是,树莓派,工控机,Mini小主机,专业服务器等。刷成Liunx,Windows系统就行! `注:只想搭建一个博客什么的,可以忽略3,一般的博客阿里的99云服务器就够了。看博客技术栈选型,甚至2都不需要,买个域名,就可以白嫖Github,Gitee的静态部署` (按照自己的需求场景来,我这边折腾的比多) **3.1 从技术层面,会用到很多数据库,语言。** - 安装的有Mysql,Mongdb,Redis,Nginx,Docker,MinIO等基础服务。 - Web服务,例如: [博客(https://blogs.luckday.cn)](https://blogs.luckday.cn "博客(https://blogs.luckday.cn)"),[文档站(https://doc.luckday.cn)](https://doc.luckday.cn "文档站(https://doc.luckday.cn)"),[公众号排版工具(https://md.luckday.cn)](https://md.luckday.cn "公众号排版工具(https://md.luckday.cn)"),[绘图工具(https://draw.luckday.cn)](https://draw.luckday.cn "绘图工具(https://draw.luckday.cn)") 等等。 - 还有很多很有意思的项目,后面有时间会一一部署上去。 **3.2 从经济层面,想省钱,放家里小巧不占位置,还得省电,又想短期一步到位** *简单来说,就是既要,又要,还要。。。所以综合考虑,Mini小主机比较适合我。* | 品牌 | 价格 | 备注 | | ---------- | ------- | ----------------------- | | 极摩客G3 | 547 | 准系统(无内存硬盘) | | 内存 | 408 | 雷克沙 32G | | 固态硬盘 | 406 | 雷克沙 1T |   ## 安装系统 > 我这边用CentOS7.9 无界面版最小化暗转,使用U盘做启动盘安装。(目前CentOS 已经停止维护了,用习惯了,停止维护不代表不能用了,也可以用Ubantu,不会Linux系统,装个Windows系统也一样) ### 一、准备 | | 备注 | | ---------------- | ------------------- | | U盘一个 | 建议最小16G | | CentOS 7.9系统 | 下载地址:[阿里镜像站](https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spm=a2c6h.25603864.0.0.6324f5adfWQnb2 "阿里镜像站") | | UltraISO(系统烧录工具) | 下载地址: [软碟通](https://cn.ultraiso.net/xiazai.html "软碟通") |  ### 二、制作系统镜像 > 软碟通傻瓜安装即可(不在赘述) **2.1、点击继续试用**  **2.2、点击 【文件 —> 打开 —> 找到CentOS镜像】**  **2.3、找到下载到电脑上的镜像文件**  **2.4、点击UltraISO 【启动 -> 写入硬盘印象】**  **2.5、硬盘驱动 选择我们插入的U盘,点击写入按钮**  **2.6、格式化U盘警告,选择是(制作镜像文件会清空U盘数据,`注意提前保存数据`)**  **2.7、等待系统写入(大概10分钟左右,完成后会显示`刻录成功`)**  ### 三、系统安装 >**问题:** 在安装的时候会阻塞无法安装,直到报错,然后提示找不到启动盘 >**原因:** CentOS 启动盘默认是通过 By Label 设备卷标引导启动盘的,但是U盘的卷标又有 **长度限制** 所以当制作完U盘后,卷标的名称是 **CentOS 7 x8**。但是在启动连接中的命令却是`Linuxefi /images/pxeboot/vmlinuz inst.stage22=hd:LABEL=CentOS\x207\x20x86_64 quiet` 可以看到该命令 **LABEL** 名称需要的是 **CentOS 7 x86_64** ,所以会找不到启动盘。(注:"\x20"是空格符)  >**解决方案:** 很简单,删除启动链接中的 `6_64` ,后续会讲到。 **3.1、进入BIOS** (注:我买的是无内存硬盘,无需设置U盘启动,其他请自行设置) 开机后,连续按Esc,如果设置正确,并且U盘制作没有问题,会显示如下界面  **3.2、选择第一个 Install CentOS 7,根据提示,按e进入编辑页面** **3.3、光标移到后面,删除LABEL 指向的 6_64,删除后如下图**  **3.4、根据提示 按Ctrl+X,没问题的话会进入以下安装界面(选择中文)**  **3.5、日期时间,汉语** > 软件选择:**最小安装**(注:该选择是没有界面的,只有一个乌漆嘛黑的控制台,优点是体积小,节省资源性能。需要界面的选择带GUI或者是GHOME桌面的,不懂Linux命令的还是建议安装带界面的,缺点是体积大,会额外占用大量的系统资源) > 安装位置:**已选择自动分区** 这个看个人喜好  **3.6、用户设置(建议设置一下)**  **3.7、安装成功,点击重启**  **3.8、许可协议**  **3.9、重启后出现指令输入界面(输入密码进入)**  -------------------- **问题:** 安装完成后没有网络,插网线也不行,无法识别网卡 **原因:** 由于Mini小主机网卡型号比较新,系统会无法识别网卡,导致没有网络 **解决方案:** 需要自行安装网卡驱动程序。(注:我是当服务器用,插网线会更稳定一些) `通过升级CentOS7.9版本系统内核,解决无法识别网线问题!` **3.10、USB线连接手机共享网络** > 华为手机,将USB数据线连接上之后,找到设置,点击"移动网络",进入之后点击"个人热点",在点击"更多共享设置",最后打开"USB共享网络"即可。 (注:个人热点里面禁止截屏。。。)    **3.11、CentOS7.9 默认内核版本为3.10.0,升级到6.9.7解决网线识别问题** > 内核升级不在赘述,百度一下  ## 内网穿透 ### 什么是内网穿透? >内网穿透简单来说就是将内外网通过natapp隧道打通,让内网的数据让外网可以获取访问。 知道了什么是内网穿透,那么就是如何去内网穿透,国内有很多免费的,大部分免费的版本都是引流,限制多,不安全,也不稳定。要求不高的话,免费的也还是很香的。想更多的的自定义,稳定,那不用说,付费。。。所以我选择自己搭建!!! ### 如何搭建自己的内网穿透? **1、准备** | 必须 | 备注 | |--------------------|---------------------------------------------| | 一台**公网IP**的服务器 | 上面说的阿里 99 云服务器,它提供公网IP,3M无限宽带,目前对我来说够用了 | | 内网穿透工具 | nps / frp (版本0.57.0) | 环境准备 | | os | 端口 | 备注 | | ------- | ----------------------------|-------- | ------- | | frps | 阿里云服务器 (CentOS7.6) | 17000 | 阿里云服务器安全组开放 17000端口 | | frpc | 家里 Mini主机(CentOS7.9) | | | 推荐两款免费开源的工具: - nps : [官方文档:https://ehang-io.github.io/nps/](https://ehang-io.github.io/nps/ "官方文档:https://ehang-io.github.io/nps/")  - frp : [官方文档:https://gofrp.org/zh-cn/docs/overview/](https://gofrp.org/zh-cn/docs/overview/ "官方文档:https://gofrp.org/zh-cn/docs/overview/")  这两款都不错,没有什么好不好的,选适合自己的就行,我用的是frp。 **2、安装** > 当前选择二进制包安装 ``` # 下载 frp 二进制压缩包 wget https://github.com/fatedier/frp/releases/download/v0.57.0/frp_0.57.0_linux_amd64.tar.gz # 解压 tar xf frp_0.57.0_linux_amd64.tar.gz -C /home/frp/ cd /home/frp/ ```   解压后里面只有4个文件:frpc, frpc.toml, frps, frps.toml。 其中上图中404.html 是自定义页面(家里的frp挂了,或者没网穿透不了,就会显示我指定的这个404.html),frps.log是运行起来指定的日志文件。 frps是服务端二进制文件,用于启动,frps.toml是服务端的配置文件,同理frpc是客户端的,也就是家里的小主机端用的 **下面配置 frps.toml** ``` # 可以参考官方配置frps_full_example.toml,里面有详细配置说明 # https://github.com/fatedier/frp/blob/405969085fb6b5c8058c88ca250e930ba6092153/conf/frps_full_example.toml #frps监听端口 bindPort = 17000 # 配置 frp dashboard,一个可视化界面 webServer.addr = "127.0.0.1" webServer.port = 7500 webServer.user = "admin" webServer.password = "*******" # http请求端口,可以通过该端口穿透所有htpp请求 vhostHTTPPort = 60001 # 自定义404页面 custom404Page = "/home/frp/404.html" # 配置 token 认证,可以随便填,但是frpc 客户端也需指定一样的token auth.method = "token" auth.token = "qazwsx123456" # 只允许frpc绑定指定ports. allowPorts = [ { start = 60000, end = 60500 } ] ``` 重要的事情说三遍: `frps.toml/frpc.toml配置文件中上面所有 注释说明全部删掉,不然后导致启动报错失败!!!` `frps.toml/frpc.toml配置文件中上面所有 注释说明全部删掉,不然后导致启动报错失败!!!` `frps.toml/frpc.toml配置文件中上面所有 注释说明全部删掉,不然后导致启动报错失败!!!` **设置开机自启** > 可以用 systemd 来管理 frps 服务,并设置开机自启 - 首先创建frps.service文件 ``` vi /etc/systemd/system/frps.service ``` 写入如下内容: ``` [Unit] Description=FRP After=network.target [Service] # 启动frps的命令,需修改为您自己的frps的安装路径 ExecStart=/home/frp/frps -c /home/frp/frps.toml Type=simple [Install] WantedBy=multi-user.target ``` - 其次、设置frps开机启动,并启动 frps ``` # 设置frps开机启动 systemctl enable frps # 后台启动运行命令 cd /home/frp nohup ./frps -c frps.toml > ./frps.log 2>&1 & ``` **3、家里小主机安装** 下载解压步骤同上,不在赘述! 配置客户端 frpc.toml文件 ``` # 可以参考官方配置frpc_full_example.toml,里面有详细配置说明 # https://github.com/fatedier/frp/blob/405969085fb6b5c8058c88ca250e930ba6092153/conf/frpc_full_example.toml # 填写你的frps server的公网IP 和端口,我这边随便写的1.1.1.1,要改成自己的 serverAddr = "1.1.1.1" serverPort = 17000 # 配置 token 认证,frpc 客户端需指定frps一样的token auth.method = "token" auth.token = "qazwsx123456" # 配置ssh,配置完成后可以直接通过阿里外网IP 直连家里Mini主机 [[proxies]] name = "ssh" type = "tcp" localIp = "localhost" localPort = 22 remotePort = 60002 # 配置http请求 # 我的博客部署在家里小主机上,端口8090 [[proxies]] name = "blogs" type = "http" localIP = "localhost" localPort = 8090 customDomains = ["blogs.luckday.cn"] ``` **设置开机启动** > 同服务端一样,只是要改成frpc - 首先创建frpc.service文件 ``` vi /etc/systemd/system/frpc.service ``` 写入如下内容: ``` [Unit] Description=FRP After=network.target [Service] # 启动frps的命令,需修改为您自己的frps的安装路径 ExecStart=/home/frp/frpc -c /home/frp/frpc.toml Type=simple [Install] WantedBy=multi-user.target ``` - 其次、设置frps开机启动,并启动 frps ``` # 设置frpc开机启动 systemctl enable frpc # 后台启动运行命令 cd /home/frp nohup ./frpc -c frpc.toml > ./frpc.log 2>&1 & ```  已经成功运行! ## 域名解析 > 找到自己的域名管理后台,添加一条解析,blogs是二级子域名,选A记录,1.1.1.1改成自己云服务器的公网IP,我的 luckday.cn是在西部数码上买的,腾讯,阿里,万网都能买,域名解析都是差不多的。  生效后可以通过https://blogs.luckday.cn 访问我的博客了  ## END 我是6.18买的Mini主机,主要是下班回家才能弄一下,大概折腾了个把星期,小主机也设置了来电自启,开机后运行到现在,2个多月,没出现任何问题,稳定的很。小主机的功耗最高15W,电费可以忽略不计,搞了散热风扇对着一直吹。可以看到我部署了一很多服务,cup基本上没用多少,内存也才用了5G,32G还可以使劲造! 参考费用: | / | 价格 | | ------------ | ------------ | | 域名 | 33元 | | 阿里服务器 | 99元 | | Mini小主机 | 547元 | | 内存 | 408元 | | 硬盘 | 406元 | | 合计 | 1493元 | 