前言
最近用一台家里的老旧笔记本搭了一台本地服务器,体验下来还是不错的,于是写一篇博客记录一下。
主要流程就是安装 Ubuntu Server 系统,路由器支持 IPv6 实现公网 IPv6 访问,宽带有公网 IPv4 或者有一台云服务器实现公网 IPv4 访问,最终实现通过 IPv4 + IPv6 双栈访问服务器,安装 docker 来快速部署和方便管理服务。
使用笔记本搭建本地服务器有两个独特的好处:
有一块显示屏,当服务器出现问题,并且无法通过 SSH 连接进行调试时,不用额外接一块显示屏就可以直接进行调试。
有一块电池,当直流供电中断时,一块电池可以起到 UPS 的作用。
不过这俩平时都用不到,我们需要进行一定的设置,我在文末会提及。
Thinkpad E431
neofetch系统信息
首先介绍一下我用的笔记本,联想 Thinkpad E431:
发布于 2013 年左右的笔记本
CPU 是“Intel i3-3110M @2.400GHz”
GPU 是“NVIDIA GeForce GT 740M”
4G 内存
原装 500G 机械硬盘,后来换的 256G 固态。
这台笔记本之前安装个 Windows 7 还能勉强够用,开机内存占用基本就过半了,4G 内存运行图形化界面还是比较吃力的,但装个 Ubuntu Server,我到目前见到最高的内存占用也就 25%。
如果你不是 Thinkpad E431,也可以参照一下这篇博客,毕竟 Linux 还是不怎么挑硬件的。
Ubuntu Server
你需要准备:一个 8G+ 的 U 盘用于制作启动盘,一根网线用于有线网络。
(1) 制作启动盘
这里使用的是 Rufus,其他制作工具也可以。
Ubuntu Server ISO 镜像文件下载地址:https://ubuntu.com/download/server
将 U 盘插入电脑,打开 Rufus,选择下载好的 Ubuntu Server 镜像,分区类型选择“MBR”,文件系统选择“NTFS”,点击“开始”,等待制作完成后拔出 U 盘。
rufus制作启动盘
(2) 从启动盘引导
搜索你笔记本对应的进入 BIOS 的方式,Thinkpad E431 是在开机时连续单击 F12 键进入 BIOS。
在 BIOS 中关闭安全启动 Secure Boot,在启动顺序中将启动盘(U 盘)置顶后,保存并退出,进入开机界面。
如果顺利的话,应该是进入 Ubuntu Server 的安装界面了。
(3) 安装 Ubuntu Server
推荐视频教程:【系统篇】安装Ubuntu Server 20.04
安装过程参照上面的视频就可以了,我安装也是跟着他来。
强调几点:
语言最好保持 en_US,服务器也没必要要中文。
手动配置静态 IP,和视频中不一样,如果要配置的话可以自己找找教程。
配置阿里云镜像源:https://mirrors.aliyun.com/ubuntu/
勾选 SSH 服务,因为你要通过其他电脑连接到服务器来进行操作。
等待安装完成后,你就拥有了一台本地服务器,一些有关服务器的杂项设置可以参考文末。
如果你是第一次使用服务器,可以参考我这篇博客:连接到服务器
公网访问
2024-04-20 更新:DDNS v Tailscale v Cloudflared,在这篇文章中我弃用了下面的方案,转用 Tailscale,仅供参考。
至此,我们仅仅是搭建了一个能在局域网连接和访问的服务器,如果需要在非局域网环境连接或是访问,则需要进行相应的配置。
(1) 公网 IPv6 + DDNS
你需要准备:一个域名 www.example.com,托管在阿里云、腾讯云、Cloudflare 都可以。
现如今公网 IPv4 还是很难申请到了,但只要你的路由器支持 IPv6,就大概是公网 IPv6,只是每次路由器重新拨号时,IPv6 地址会改变,所以我们要采用 DDNS(动态域名解析)将 IPv6 绑定到一个域名,通过域名来固定访问地址。
ddns-go 项目地址:https://github.com/jeessy2/ddns-go
我是使用 docker(host)部署的,使用方式很简单,等你打开 ddns-go 的 webUI 界面看看就会用了,这里解释一下 DDNS 的原理。
ddns-go 定期获取本机 IP 地址,再通过阿里云/腾讯云/Cloudflare 的相应 API 更改域名 www.example.com 的解析结果为最新的 IP 地址。
PS 如果你有动态公网 IPv4 地址的话,也是使用 DDNS 绑定域名进行访问。
(2) FRP 实现 IPv4 公网访问
你需要准备:一台云服务器,最好是国内服务器,可能需要备案,或者用国外服务器。
因为我没有公网 IPv4,所以需要一台云服务器进行内网穿透,这里采用的是 FRP 来实现 IPv4 公网访问。
在云服务器上部署 frps 并开放相应端口,在本地服务器上部署 frpc,进行相应配置,如何写配置网上教程很多。
我原本是用 docker 部署 frps 和 frpc,但动不动报错,最后采用二进制文件使用系统服务开机自启。
PS 如果你没有云服务器,其实也不一定要配置 IPv4 公网访问,毕竟现在国内 IPv6 还是比较普及的,实在不行就用流量访问。
一些推荐的服务
除了前面提及的 ddns-go 和 frp 之外,这里推荐一些服务让你知道一个本地服务器能干什么。
Dockge:使用 docker compose 来管理 docker 容器。
AList:将多种云存储挂载到一起统一管理,支持大多数网盘及云存储,可以通过 webdav 访问。
qbittorrent:种子和磁力链接下载工具。
Duplicati:用于在线存储加密备份的备份软件,支持增量备份。
Syncthing:在不同设备间同步文件,全平台支持。
……
你也可以参考我这篇博客:搭建自己的在线动漫资源库
你可能需要
设置合盖不休眠
因为是用笔记本搭建的服务器,如果设置合盖不休眠的话,占用体积会更小,或许也会降低功耗(毕竟关闭显示屏了)。
sudo vim /etc/systemd/logind.conf
- #HandleLidSwitch=suspend
+ HandleLidSwitch=ignore
sudo systemctl restart systemd-logind.service
Copy
开盖关闭显示器
在设置合盖不休眠后使用过程中,会发现因为合盖导致笔记本散热减弱,后面改成了“开盖关闭显示器”。
使用一行命令开启/关闭显示器,配置开盖时打开显示器。
(1) 安装相关软件
sudo apt update
sudo apt install acpid vbetool
Copy
(2) 配置 ACPI 开盖事件
sudo vim /etc/acpi/events/lid
event=button/lid LID0 open
action=/etc/acpi/lid.sh
Copy
(3) 创建 ACPI 脚本
sudo vim /etc/acpi/lid.sh
#!/bin/bash
sudo vbetool dpms on
sudo chmod +x /etc/acpi/lid.sh
Copy
(4) vbetool 命令
sudo vbetool dpms on #开启显示器
sudo vbetool dpms off #关闭显示器
Copy
电池供电主动关机
我们希望服务器能 7x24 小时保持工作,但总会出现突发情况,导致突然断电,如果我们不进行相关设置,电池耗尽导致突然关机,可能会出现数据丢失等问题,所以这里讲一下如何设置成电池供电时主动关机。
网上常见的是 ACPI 电源管理一套流程,但我实际用下来貌似没效果,所以直接用的是 crontab 每 5 分钟检测,如果是电池供电则执行关机命令。
vim path/to/auto_shutdown.sh
这里涉及两个文件,脚本文件和日志文件,请注意修改相应地址
#!/bin/bash
if [ `cat /sys/class/power_supply/AC/online` -eq 0 ]; then
shutdown -h 3
echo "$(date +%Y-%m-%d\ %H:%M:%S):检测到直流供电断开,准备关机。" >> /home/xxx/log/auto_shutdown.log
fi
chmod +x path/to/auto_shutdown.sh # 给脚本执行权限
Copy
sudo -i # 关机是高权限操作,需要 root 的 crontab
crontab -e # G 跳转到末尾,o 新建一行进行输入,键入下面命令后 :wq 退出
*/5 * * * * path/to/auto_shutdown.sh
Copy
以 root 用户登录
安装完 Ubuntu Server 你会发现你并不知道 root 用户的密码,我们需要重新设置 root 密码。
sudo -i # 进入 root 用户
passwd # 设置 root 密码
Copy
修改 SSH 端口
sudo vim /etc/ssh/sshd_config
在配置文件中找到“Port”行,取消注释并改为你要使用的端口
sudo service ssh restart
Copy
配置 ufw 防火墙
sudo apt update
sudo apt install ufw
sudo ufw allow 22 # 首先放行 SSH 端口,如果你修改了 SSH 端口则放行相应端口
sudo ufw enable # 开启 ufw 防火墙
sudo ufw status # 查看 ufw 规则
sudo ufw delete allow 22 # 删除放行 22 端口的规则
Copy
公网无法访问 IPv6
如果你发现在局域网内能正常解析域名并访问,但在公网(比如使用流量)却无法正常访问,这可能是因为你的路由器或是光猫有 IPv6 防火墙,请自行搜索关闭防火墙的方法。
在此之前,请确认服务器防火墙是否放行相应端口。
Server-Box
推荐一个开源安卓软件 Server Box,用于在手机上查看服务器状态。
项目地址:https://github.com/lollipopkit/flutter_server_box
homeserver network
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
新盘首开 新盘首开 征召客户!!!
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com