利用旧电脑与家庭宽带搭建24小时运行的家庭服务器:从Minecraft私服到个人网站
1. 项目概述从闲置资源到生产力工具手头有台淘汰下来的旧电脑每个月还得为家里的宽带套餐付费总觉得这些资源就这么闲置着有点浪费。最近琢磨着能不能把它们利用起来搭个能24小时运行的小服务器这个想法其实挺实在的比如给家里小孩或者和朋友一起搭个《我的世界》Minecraft私服不用受限于公共服务器的规则和延迟或者一直想有个自己能完全掌控的网站放点个人项目、学习笔记甚至是做个家庭相册或智能家居的控制面板。这听起来好像需要很高的技术门槛或者昂贵的云服务但其实利用现有的宽带和一台老旧的电脑完全有可能实现。这不仅仅是“废物利用”更是一个深入了解从硬件、网络到系统、服务部署全流程的绝佳实践。整个过程会涉及到硬件评估、操作系统选择、网络穿透、服务部署和安全加固等多个环节我会把每个环节的细节、踩过的坑以及最终稳定运行的配置都梳理出来目标就是让你看完后能用自己的设备独立复现一个稳定可用的家庭服务器。2. 核心需求与可行性分析2.1 需求场景拆解这个项目的核心需求可以明确为两点一是搭建一个《我的世界》游戏服务器二是构建一个个人网站。这两类服务对资源的需求模式有所不同。《我的世界》Java版服务器其性能瓶颈主要在于单核CPU的主频和内存。游戏服务端如PaperMC在运行时会大量进行物理计算、实体AI和区块加载这些运算对CPU单核性能非常敏感。内存方面一个容纳5-10人同时在线、视距view-distance设置中等的服务器分配2GB到4GB的Java堆内存是比较基础的起点。此外硬盘的I/O性能尤其是随机读写会影响世界加载和保存的速度一块固态硬盘SSD能显著提升体验。个人网站的需求则更多样。如果只是一个静态博客比如用Hugo或Hexo生成那么对计算资源的需求极低主要消耗带宽和一点点内存。但如果网站包含动态内容例如使用WordPressPHPMySQL或者你想运行一些自研的Python/Node.js应用那么对CPU、内存和数据库的持续消耗就会增加。不过对于个人或小范围访问老机器的硬件通常也能胜任。2.2 老旧硬件与家庭宽带的潜力评估很多人觉得老机器性能不行但作为服务器它的评价标准与日常办公或游戏电脑不同。一台五六年前甚至更早的台式机或笔记本只要不是特别低端的型号其CPU如Intel i5四代、AMD FX系列和内存8GB DDR3对于轻量级服务而言性能是绰绰有余的。关键在于稳定性和功耗。你需要检查几个关键点机器能否7x24小时稳定运行散热是否良好风扇噪音是否可接受以及它的待机和满载功耗是多少。一台老旧台式机满载可能超过100瓦长期开机电费是个需要考虑的因素。家庭宽带是另一个关键。你需要明确两点上行带宽和公网IP地址。我们通常关注的“下载速度每秒34MB”指的是约272Mbps的下载带宽但这对于服务器而言意义不大。服务器主要对外提供服务消耗的是上行带宽。你需要联系你的网络服务提供商或者使用测速工具如speedtest.net查看你的实际上行带宽。很多家庭宽带套餐的上行带宽只有下行的十分之一甚至更低例如下行300Mbps上行可能只有30Mbps。30Mbps的上行带宽理论上传速度约为3.75MB/s这对于一个小型《我的世界》服务器10人以内和一个图文为主的个人网站来说是完全足够的。更关键的是公网IP。绝大多数家庭宽带分配的是运营商级NATCGNAT后的内网IP这意味着从互联网无法直接访问到你家里的设备。这是搭建可公开访问服务器的最大障碍。解决这个问题通常有两种主流方法一是向运营商申请某些套餐可能付费获取一个动态公网IP然后通过DDNS动态域名解析服务将变化的IP绑定到一个固定域名上二是使用内网穿透工具如frp、ngrok或一些商业化的服务将内网服务映射到一台拥有公网IP的中继服务器上。本文将重点讨论第一种更自主、免费除域名费用外的方案。2.3 操作系统选型为什么是Ubuntu Server在众多Linux发行版中Ubuntu Server LTS版本是此类家庭服务器项目的首选这背后有充分的理由。首先**长期支持LTS**意味着每个版本如20.04 LTS, 22.04 LTS提供长达5年的安全更新和维护这对于需要稳定运行、不希望频繁折腾重装的服务环境至关重要。其次庞大的社区和丰富的文档。几乎你遇到的任何问题都能在Ubuntu的官方论坛、Ask Ubuntu或海量的技术博客中找到解决方案和讨论。这对于初学者和经验丰富的管理员 alike都是巨大的财富。再者软件生态完善。无论是通过apt包管理器安装的软件还是Docker镜像对Ubuntu的支持通常都是最好、最及时的。例如安装《我的世界》服务端所需的Java运行时环境JRE或者网站所需的Nginx、MySQL在Ubuntu上都是一条命令的事。相比于带有图形界面的桌面版Ubuntu Server版本去掉了GUI资源占用更低更安全也迫使你通过SSH进行命令行管理这本身就是一项有价值的技能学习。对于老机器来说节省下来的每一分内存和CPU资源都能用于运行你的服务。3. 前期准备与基础环境搭建3.1 硬件检查与系统安装在动手安装系统前需要对老机器做一次“体检”。打开机箱清理积灰检查所有风扇CPU、显卡、电源是否运转正常。如果机器年代久远可以考虑更换CPU硅脂以改善散热。用U盘制作一个Ubuntu Server 22.04 LTS的安装镜像使用Rufus或BalenaEtcher等工具即可。安装过程有几个关键点需要注意网络配置在安装时连接网线系统通常会通过DHCP自动获取IP。记下这个IP地址或者最好在路由器后台为这台机器的MAC地址设置一个静态IP分配即DHCP保留这样它每次启动都会获得同一个内网IP便于后续管理。磁盘分区对于服务器建议采用手动分区。一个简单的方案是一个/boot分区1GB Ext4格式一个swap交换分区大小通常等于物理内存对于8GB内存8GB swap是合理的剩余所有空间分配给根分区/Ext4或XFS格式。如果你有多个硬盘可以考虑将数据密集型的服务如《我的世界》世界文件、数据库放在单独的硬盘或分区上。用户创建务必创建一个具有sudo权限的非root用户。安装过程中会提示你设置用户名和密码。永远避免直接使用root用户进行日常操作这是一个基本的安全准则。选择安装包在软件选择界面对于最小化服务器只需勾选“OpenSSH server”即可。其他服务如Web服务器、数据库等我们后续按需安装这样可以保持系统纯净。安装完成后重启系统你就可以通过另一台电脑使用SSH客户端如Windows下的PowerShell、Terminal或PuttymacOS/Linux下的终端连接到你的服务器了。命令格式是ssh 你的用户名服务器内网IP。3.2 基础系统优化与安全加固系统装好后的第一件事不是急着部署服务而是进行基础优化和安全加固这能为后续的稳定运行打下基础。系统更新与基础工具安装sudo apt update sudo apt upgrade -y # 更新系统所有软件包 sudo apt install -y vim htop net-tools curl wget git ufw # 安装常用工具htop可以让你直观地查看系统资源使用情况ufw是防火墙配置工具。配置防火墙UFW 默认情况下Ubuntu的防火墙是关闭的。我们需要打开SSH端口22并默认拒绝所有其他入站连接。sudo ufw allow 22/tcp # 允许SSH连接 sudo ufw default deny incoming # 默认拒绝所有入站 sudo ufw default allow outgoing # 默认允许所有出站 sudo ufw enable # 启用防火墙 sudo ufw status verbose # 查看状态注意在启用UFW前务必确保sudo ufw allow 22/tcp规则已添加否则你可能会把自己关在服务器外面如果误操作可能需要通过物理接触或路由器管理界面如果服务器IP被禁止来调整。配置SSH安全 编辑SSH配置文件sudo vim /etc/ssh/sshd_config修改以下几项Port 2222 # 将默认的22端口改为一个非标准端口比如2222可以减少自动化扫描攻击 PermitRootLogin no # 禁止root用户直接SSH登录 PasswordAuthentication no # 禁用密码登录强制使用密钥对更安全 PubkeyAuthentication yes # 启用公钥认证修改端口后记得更新防火墙规则sudo ufw allow 2222/tcp并重启SSH服务sudo systemctl restart sshd。在禁用密码登录前必须先将你的公钥~/.ssh/id_rsa.pub内容添加到服务器的~/.ssh/authorized_keys文件中。配置时区与时间同步 服务器时间准确对于日志分析、证书验证等都至关重要。sudo timedatectl set-timezone Asia/Shanghai # 设置时区 sudo apt install -y chrony # 安装chrony时间同步服务 sudo systemctl enable --now chronyd4. 核心服务一搭建《我的世界》服务器4.1 服务端选型与Java环境配置《我的世界》官方服务端性能一般社区有众多优化版本。对于小型私服PaperMC是一个极佳的选择。它基于Spigot进行了大量性能优化和Bug修复兼容大部分Bukkit/Spigot插件且配置简单。首先安装合适的Java版本。PaperMC推荐使用Java 17或更高版本。sudo apt install -y openjdk-17-jre-headless # 安装无图形界面的Java 17运行时 java -version # 验证安装创建一个专门的用户和目录来运行游戏服务这有利于权限管理和安全隔离。sudo adduser --system --home /opt/minecraft --shell /bin/bash minecraft sudo mkdir -p /opt/minecraft/server sudo chown -R minecraft:minecraft /opt/minecraft4.2 PaperMC服务端部署与配置切换到minecraft用户并下载服务端。sudo su - minecraft cd /opt/minecraft/server # 从PaperMC官网获取最新版本的下载链接例如1.20.4版本 wget https://api.papermc.io/v2/projects/paper/versions/1.20.4/builds/445/downloads/paper-1.20.4-445.jar首次运行服务端以生成配置文件和世界。java -Xms2G -Xmx2G -jar paper-1.20.4-445.jar nogui-Xms2G和-Xmx2G分别设置了JVM堆内存的初始大小和最大大小这里设为2GB请根据你的机器内存调整建议不超过物理内存的70%。首次运行会失败因为需要同意EULA协议。编辑生成的eula.txt文件将eulafalse改为eulatrue。现在关键的配置文件是server.properties。你需要修改以下几项以适应家庭服务器环境server-port25565 # 游戏默认端口确保防火墙开放此端口 max-players10 # 最大玩家数根据性能设置 view-distance8 # 视距降低此值如从10降到8能显著减少服务器负载 online-modefalse # 如果你不希望玩家必须有正版账号才能登录可以设为false离线模式但请注意安全风险 motdA Awesome Home Minecraft Server # 服务器描述修改后再次启动服务端java -Xms2G -Xmx2G -jar paper-1.20.4-445.jar nogui。你应该能看到服务器成功启动并生成世界的日志。4.3 进程守护与自动化管理我们不能一直开着SSH窗口运行服务端。我们需要一个进程守护工具来确保服务器在崩溃或系统重启后能自动恢复。systemd是Ubuntu自带的完美解决方案。为minecraft服务创建一个systemd单元文件sudo vim /etc/systemd/system/minecraft.service输入以下内容[Unit] DescriptionMinecraft Server Afternetwork.target [Service] Userminecraft WorkingDirectory/opt/minecraft/server ExecStart/usr/bin/java -Xms2G -Xmx2G -jar paper-1.20.4-445.jar nogui Restarton-failure RestartSec10 [Install] WantedBymulti-user.target保存后启用并启动服务sudo systemctl daemon-reload sudo systemctl enable minecraft.service sudo systemctl start minecraft.service sudo systemctl status minecraft.service # 查看状态现在你的《我的世界》服务器就在后台稳定运行了。你可以使用sudo systemctl stop/start/restart minecraft.service来管理它。日志可以通过sudo journalctl -u minecraft.service -f来实时查看。实操心得对于内存有限的老机器view-distance视距是影响性能最关键的参数之一。每增加2点视距客户端需要从服务器加载的区块数量呈指数级增长对CPU和内存都是巨大压力。对于家庭服务器设置为6-8是一个在体验和性能间很好的平衡点。另外定期备份world文件夹至关重要可以写一个简单的cron定时任务每天凌晨压缩备份世界文件到另一个硬盘或网盘。5. 核心服务二构建个人网站5.1 Web服务器选型Nginx vs. Apache对于资源有限的家庭服务器Nginx通常是比Apache更优的选择。Nginx采用事件驱动的异步架构在处理大量并发静态请求时内存占用更低效率更高。它同样能通过FastCGI等方式很好地处理PHP等动态请求。安装Nginx非常简单sudo apt install -y nginx sudo systemctl enable --now nginx安装完成后在浏览器中输入你的服务器内网IP应该能看到Nginx的欢迎页面这证明Web服务器已正常运行。5.2 网站部署静态站点与动态站点示例场景一部署静态博客如Hugo生成假设你已经用Hugo在本地电脑生成了静态网站文件通常在public目录下。只需将这些文件上传到服务器即可。在服务器上创建网站目录并设置权限sudo mkdir -p /var/www/myblog sudo chown -R $USER:$USER /var/www/myblog使用scp命令从本地电脑上传文件# 在本地电脑终端执行 scp -r -P 2222 ./public/* 你的用户名服务器公网IP或DDNS域名:/var/www/myblog/为你的博客创建一个Nginx服务器块相当于虚拟主机配置文件sudo vim /etc/nginx/sites-available/myblog输入以下基础配置server { listen 80; server_name your-domain.com www.your-domain.com; # 替换为你的域名 root /var/www/myblog; index index.html; location / { try_files $uri $uri/ 404; } }启用该配置并测试sudo ln -s /etc/nginx/sites-available/myblog /etc/nginx/sites-enabled/ sudo nginx -t # 测试配置文件语法 sudo systemctl reload nginx # 重载配置场景二部署动态网站如WordPress这需要安装PHP和数据库如MariaDBMySQL的一个分支。安装必要的软件包sudo apt install -y php-fpm php-mysql mariadb-server运行MariaDB安全安装脚本设置root密码等sudo mysql_secure_installation为WordPress创建数据库和用户sudo mysql -u root -p # 在MySQL提示符下执行 CREATE DATABASE wordpressdb; CREATE USER wpuserlocalhost IDENTIFIED BY strong_password_here; GRANT ALL PRIVILEGES ON wordpressdb.* TO wpuserlocalhost; FLUSH PRIVILEGES; EXIT;下载并解压WordPress到网站目录如/var/www/wordpress并配置Nginx。 Nginx配置的关键在于将PHP请求转发给php-fpm处理。一个简化的location块配置如下location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 注意PHP版本号 }你需要根据PHP实际安装的版本修改sock文件路径。可以通过ls /var/run/php/来查看。5.3 启用HTTPS加密使用Let‘s Encrypt在公网提供Web服务启用HTTPS是必须的它加密数据传输并提升信任度。Certbot工具可以让我们免费获取Let‘s Encrypt证书并自动配置Nginx。安装Certbot和Nginx插件sudo apt install -y certbot python3-certbot-nginx确保你的域名如your-domain.com的DNS记录已经指向了你服务器的公网IP或DDNS地址并且Nginx的服务器块配置中server_name正确。运行Certbot获取并自动配置证书sudo certbot --nginx -d your-domain.com -d www.your-domain.com按照交互提示操作即可。Certbot会自动修改你的Nginx配置将HTTP重定向到HTTPS并设置好证书路径。Let‘s Encrypt证书有效期为90天。Certbot安装了一个定时任务cron job来自动续期通常无需手动干预。你可以手动测试续期sudo certbot renew --dry-run。6. 网络穿透与公网访问实现6.1 获取动态公网IP与DDNS配置这是让家庭服务器能被外网访问的核心步骤。首先你需要确认你的宽带是否拥有公网IP。登录你的路由器管理后台通常是192.168.1.1或192.168.0.1查看WAN口获取的IP地址。然后访问ip.cn或whatismyip.com等网站对比两者显示的IP是否一致。如果一致恭喜你拥有公网IP尽管可能是动态的如果不一致你可能处于运营商的大内网中需要拨打客服电话申请成功率因地区和运营商政策而异。获得动态公网IP后我们需要一个DDNS服务将变动的IP绑定到一个固定域名上。国内外有很多服务商例如Cloudflare管理DNS非常方便、DuckDNS免费且简单或国内的花生壳等。以Cloudflare为例假设你已有一个域名并将其DNS托管在Cloudflare在Cloudflare的DNS管理页面为你的服务器创建一个A记录比如home.yourdomain.com。IP地址可以先随便填一个因为后面会自动更新。在你的Ubuntu服务器上安装一个DDNS客户端来定期更新这个A记录。一个常用的工具是ddclient。sudo apt install -y ddclient安装过程中会有一个交互式配置向导。你需要提供协议protocol选择cloudflare。登录名login你的Cloudflare注册邮箱。密码/密钥password使用Cloudflare的“API令牌”。你需要在Cloudflare控制面板“我的个人资料”-“API令牌”处创建一个具有“编辑区域DNS”权限的令牌。域名zone你的根域名如yourdomain.com。需要更新的记录home.yourdomain.com。配置完成后ddclient会作为守护进程运行定期默认每5分钟检查你的公网IP如果发生变化就调用Cloudflare API更新DNS记录。6.2 路由器端口转发现在外部网络可以通过域名home.yourdomain.com找到你的路由器公网IP但流量还需要被路由器转发到内网具体的服务器上。这需要在路由器上设置端口转发或叫虚拟服务器。登录路由器管理后台找到“端口转发”或“虚拟服务器”功能。你需要添加两条规则规则一用于《我的世界》外部端口25565(TCP/UDP Minecraft默认端口)内部IP地址你的Ubuntu服务器的内网IP如192.168.1.100内部端口25565协议TCP或TCP/UDP规则二用于Web服务外部端口443(HTTPS) 和80(HTTP用于重定向到HTTPS)内部IP地址你的Ubuntu服务器的内网IP内部端口443和80协议TCP保存设置后理论上你就可以通过home.yourdomain.com:25565连接你的《我的世界》服务器通过https://home.yourdomain.com访问你的网站了。6.3 备用方案内网穿透无公网IP时如果你无法获得公网IP内网穿透是唯一的方案。这里以使用frp一个流行的开源反向代理为例简述原理。你需要一台拥有公网IP的VPS云服务器作为中转。在VPS服务端上运行frpsFRP Server配置一个监听端口如7000用于与家庭服务器建立连接再配置一些端口如7500用于Web管理25565和443用于转发流量。在家庭服务器客户端上运行frpcFRP Client配置它连接到VPS的7000端口并声明“将发送到VPS的25565端口的流量转发到本地的25565端口Minecraft服务”对443端口也做类似配置。这样当朋友连接你的VPS公网IP:25565时流量路径是朋友 - VPS:25565 - (通过已建立的隧道) - 家庭服务器:25565。这种方案的缺点是依赖第三方VPS且有流量中转的延迟VPS的带宽也可能成为瓶颈。但对于无法获取公网IP的情况这是最可行的办法。7. 安全加固与日常维护7.1 基础安全实践服务器暴露在公网安全是重中之重除了之前提到的修改SSH端口、禁用密码登录和配置防火墙还有以下几点Fail2ban防暴力破解自动封禁多次尝试失败登录的IP地址。sudo apt install -y fail2ban sudo systemctl enable --now fail2ban它会监控/var/log/auth.log等日志文件默认配置已足够应对常见的SSH暴力破解。定期更新系统设置无人值守更新或定期手动更新。sudo apt update sudo apt upgrade -y可以配置一个每周自动运行的cron任务。最小化服务原则只安装和运行必需的服务。用sudo ss -tulpn或sudo netstat -tulpn查看所有监听端口的进程关闭任何你不认识或不必要的服务。使用非标准端口我们已经修改了SSH端口。对于其他服务如果条件允许也可以考虑使用非标准端口并在防火墙中精确放行。7.2 监控与日志管理了解服务器的运行状态是维护的基础。基础监控htop用于实时查看CPU、内存、进程。df -h查看磁盘空间。sudo journalctl -u service_name -f跟踪特定服务的日志。网络监控iftop或nethogs可以查看实时的网络带宽占用情况帮助你判断是否被异常流量攻击。日志轮转系统和服务日志会不断增长。Ubuntu使用logrotate管理日志轮转。对于《我的世界》这样的应用日志可以为其创建自定义的logrotate配置定期压缩旧日志并删除过期的文件防止磁盘被占满。7.3 备份策略任何数据没有备份就等于没有。一个简单的备份策略应包括本地备份使用rsync或tar命令将关键数据如/opt/minecraft/server/var/www//etc/配置文件目录定期备份到服务器上的另一个物理硬盘或分区。可以编写一个Shell脚本通过cron定时执行。异地备份将最重要的数据如《我的世界》世界存档、网站数据库导出文件加密后定期同步到云端网盘如通过rclone工具同步到OneDrive, Google Drive等。记住3-2-1备份原则至少3份副本用2种不同介质其中1份异地保存。8. 常见问题与排查技巧实录在实际搭建和运维过程中你几乎一定会遇到各种问题。这里记录一些典型场景和排查思路。8.1 服务无法从外网访问这是最常见的问题。请按照以下清单逐项排查就像医生问诊一样症状可能原因排查命令/方法域名解析失败DNS记录未生效或DDNS未更新在外部网络执行ping home.yourdomain.com和nslookup home.yourdomain.com看IP是否正确且可达。检查DDNS客户端日志sudo journalctl -u ddclient -f。连接超时路由器防火墙未放行/端口转发错误1. 在服务器本地sudo ufw status确认端口已开放。2. 在路由器确认端口转发规则指向正确的内网IP和端口。3. 尝试暂时关闭路由器的SPI防火墙或DMZ功能测试测试后请恢复。连接被拒绝目标服务器上的服务未运行或本地防火墙阻止1. 在服务器上sudo systemctl status minecraft.service nginx查看服务状态。2. 在服务器上sudo ss -tulpn | grep :25565或sudo ss -tulpn | grep :443查看端口是否被监听。3. 从家庭内网的另一台电脑尝试用内网IP连接服务排除服务器本身配置问题。仅HTTPS访问失败SSL证书问题或443端口未转发1. 检查Certbot配置和Nginx的SSL配置块。2. 使用sudo certbot renew --dry-run测试证书续期。3. 确保路由器转发了TCP 443端口到服务器。一个强大的诊断工具是在服务器本地使用tcpdump抓包。例如怀疑Minecraft端口不通可以在服务器上运行sudo tcpdump -i any port 25565 -nn然后从外网尝试连接观察服务器网卡是否收到了连接请求的SYN包。如果收到了但没响应问题可能在服务器防火墙或应用本身如果根本没收到问题一定出在路由器或运营商链路上。8.2 服务器性能瓶颈诊断当服务器卡顿玩家掉线时需要快速定位瓶颈。CPU瓶颈运行htop观察是否有进程长期占用100%的单个CPU核心。对于《我的世界》这很可能是主线程。尝试降低view-distance减少红石机器、实体数量。内存瓶颈htop顶部的内存和交换分区Swap使用情况。如果Swap被频繁使用SI/SO数值高说明物理内存不足需要增加Java的-Xmx参数或优化插件/模组。但注意不要设置得过大以免引发GC垃圾回收停顿。磁盘I/O瓶颈使用iotop命令查看实时磁盘读写。如果《我的世界》世界保存或加载时卡顿考虑将服务器数据迁移到SSD。网络带宽瓶颈使用iftop查看实时流量。如果上行带宽持续跑满可能是玩家过多或有人在下载资源包。需要在路由器或服务器层面进行流量限制QoS。8.3 服务进程异常退出与恢复如果服务如Minecraft偶尔崩溃我们配置的systemd的Restarton-failure会自动重启它。但更重要的是分析崩溃原因。查看日志sudo journalctl -u minecraft.service --since 1 hour ago -xe查看最近一小时的详细日志寻找错误堆栈信息。常见Minecraft崩溃原因内存不足JVM抛出OutOfMemoryError。需要增加-Xmx值或者检查是否有内存泄漏插件。线程阻塞某个插件操作如数据库查询耗时过长导致看门狗线程杀死服务。需要优化插件或更换。世界文件损坏异常关机可能导致世界文件损坏。定期备份至关重要。可以尝试使用《我的世界》工具如MCA Selector修复或回滚到备份。对于Web服务Nginx或PHP-FPM的日志位于/var/log/nginx/和/var/log/php8.x-fpm.log版本号可能不同是排查500错误或连接问题的第一现场。8.4 数据库连接问题针对WordPress等网站出现“建立数据库连接错误”通常有以下原因数据库服务未运行sudo systemctl status mariadb凭据错误检查WordPress配置文件wp-config.php中的数据库名、用户名、密码和主机localhost是否正确。权限问题确保MariaDB中创建的用户拥有对应数据库的权限且允许从localhost连接。套接字文件路径错误在wp-config.php中有时需要明确指定MySQL套接字文件路径如define(DB_HOST, localhost:/var/run/mysqld/mysqld.sock);。可以通过sudo find / -name *.sock \| grep mysql查找确切路径。整个项目从硬件评估到服务上线的过程其价值远不止于获得一个可用的服务器。它迫使你去理解操作系统、网络协议、服务配置和安全原则这些知识是通用的。当你成功通过域名访问到自己搭建的网站或者和朋友在自建的《我的世界》世界里畅玩时那种对数字世界的掌控感和创造带来的满足感是使用现成云服务无法比拟的。这个老机器改造的服务器就像你的数字家园的基石你可以不断在上面添砖加瓦尝试部署更多有趣的服务如家庭媒体库Jellyfin、智能家居中枢Home Assistant、私有云盘Nextcloud等等让闲置的资源真正焕发新生。