家里淘汰的旧电脑完全可以变身为功能完备的Java测试服务器,零成本、数据自主、内网穿透后还能外网访问。本文将从系统安装到Java环境部署,提供完整的实战指南。
前言:为什么要把旧电脑变成服务器?
家里那台用了5年的笔记本、淘汰的台式机,是不是正躺在角落里吃灰?先别急着扔!对于Java开发者来说,这些"电子垃圾"完全可以变身为轻量级测试服务器,用于:
本地微服务联调测试 CI/CD构建节点 数据库/缓存中间件沙箱环境 个人项目部署演示
相比云服务器,它的优势很明显:
零月租数据自主可控内网穿透可外网访问
一、硬件评估与系统选型
1.1 你的旧电脑还能战吗?
我的测试机配置参考:Intel i5-4590 / 8GB DDR3 / 120G SSD(2015年的老台式机)
1.2 Linux发行版选择
| Ubuntu Server LTS | ||
本文以 Ubuntu Server 22.04 LTS 为例(2026年4月前仍受支持,可平滑升级至24.04)
二、系统安装:从U盘到开机
1 制作启动盘
下载镜像:Ubuntu Server 22.04.5 LTS 使用Rufus(Windows)或balenaEtcher(跨平台)写入U盘 注意:U盘会被格式化,提前备份数据
2 BIOS设置要点
开机按Del/F2/F12(视主板而定)进入BIOS:
必须设置项:├── Boot Mode: UEFI(推荐)或 Legacy├── Boot Priority: U盘设为第一启动项└── Secure Boot: 建议关闭(避免驱动兼容问题)3 安装过程关键配置
网络配置
优先使用网线连接,自动获取IP 记录显示的IP地址(如 192.168.1.105),后续SSH要用
存储配置
选择Use entire disk(整盘安装) 若原盘有数据,选Erase disk清空
用户配置
# 建议设置(示例)Your name: devuser # 全名Server name: java-test # 主机名,局域网内可识别Username: devuser # 登录用户名Password: [强密码] # 务必复杂!这是你的服务器入口# 勾选 [X] Install OpenSSH server(必须!远程管理全靠它)软件包选择时,光标移动到OpenSSH server按空格勾选。Docker可选(本文后续会手动安装最新版)
安装完成后重启,拔掉U盘,系统安装完毕!
三、基础环境配置:让服务器"可用"
3.1 首次登录与网络确认
开机后看到登录提示:
java-test login: devuserPassword: [输入密码,不显示字符]检查网络连通性:
# 查看IP地址ip addr show# 测试外网ping -c 4 www.baidu.com# 更新软件源(必须!)sudo apt update && sudo apt upgrade -y3.2 SSH远程连接(重要!)
从此刻起,你可以在主力电脑上通过SSH操作,不再需要显示器:
Windows用户:使用 PowerShell 或Windows TerminalMac/Linux用户:自带终端
# 格式:ssh 用户名@服务器IPssh devuser@192.168.1.105# 首次连接会提示指纹确认,输入 yes# 输入密码后即可远程操作🔐 配置SSH密钥免密登录(推荐)
# 在主力电脑上生成密钥(如果没有)ssh-keygen -t ed25519 -C "your_email@example.com"# 复制公钥到服务器(自动配置)ssh-copy-id devuser@192.168.1.105# 此后登录无需密码,且更安全3.3 安装必要工具包
# 基础工具sudo apt install -y vim wget curl net-tools htop git# 网络工具(排查问题用)sudo apt install -y iputils-ping telnet dnsutils# 文件传输sudo apt install -y lrzsz # 配合Xshell/SecureCRT使用3.4 防火墙配置(UFW简易版)
# 启用防火墙sudo ufw enable# 默认拒绝入站,允许出站sudo ufw default deny incomingsudo ufw default allow outgoing# 开放必要端口sudo ufw allow 22/tcp # SSHsudo ufw allow 80/tcp # HTTPsudo ufw allow 443/tcp # HTTPSsudo ufw allow 8080/tcp # Java应用常用# 查看状态sudo ufw status四、Java环境部署:核心环节
4.1 方案选择:OpenJDK vs Oracle JDK
apt install default-jdk | ||
apt install openjdk-17-jdk | ||
推荐安装 OpenJDK 17/21(LTS长期支持版)
# 检查可用版本apt search openjdk | grep jdk# 安装OpenJDK 17sudo apt install -y openjdk-17-jdk# 验证安装java -version# 输出:openjdk version "17.0.x" ...4.2 多版本Java管理(进阶)
# 安装多个版本(示例)sudo apt install -y openjdk-8-jdk openjdk-11-jdk openjdk-17-jdk# 查看已安装版本sudo update-alternatives --config java# 会出现交互菜单,输入数字选择默认版本# 例如:输入 2 切换至Java 17# 手动指定临时版本(当前终端有效)export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64export PATH=$JAVA_HOME/bin:$PATH4.3 环境变量永久配置
# 编辑全局配置sudo vim /etc/profile# 在文件末尾添加:export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64export PATH=$PATH:$JAVA_HOME/binexport CLASSPATH=.:$JAVA_HOME/lib# 使配置生效source /etc/profile# 验证echo $JAVA_HOME # 应输出路径五、应用部署实战:跑起来!
5.1 简单Spring Boot应用部署
假设你有一个可运行的JAR包app.jar:
# 创建应用目录mkdir -p ~/apps && cd ~/apps# 上传JAR包(方式1:scp命令)scp app.jar devuser@192.168.1.105:~/apps/# 方式2:使用lrzsz(在服务器上执行 rz 命令,选择文件上传)# 运行应用(前台运行,测试用)java -jar app.jar --server.port=8080# 后台持久化运行(生产推荐)nohup java -jar app.jar --server.port=8080 > app.log 2>&1 &# 查看运行状态ps aux | grep javatail -f app.log # 实时查看日志5.2 使用Systemd管理服务(推荐)
创建系统服务,实现开机自启、崩溃重启:
# 创建服务文件sudo vim /etc/systemd/system/myapp.service写入配置:
[Unit]Description=My Java ApplicationAfter=network.target[Service]Type=simpleUser=devuserWorkingDirectory=/home/devuser/appsExecStart=/usr/bin/java -jar -Xms512m -Xmx1024m /home/devuser/apps/app.jar --server.port=8080Restart=alwaysRestartSec=10[Install]WantedBy=multi-user.target# 重载配置sudo systemctl daemon-reload# 启动服务sudo systemctl start myapp# 开机自启sudo systemctl enable myapp# 查看状态sudo systemctl status myapp# 常用命令sudo systemctl stop myapp # 停止sudo systemctl restart myapp # 重启sudo journalctl -u myapp -f # 查看日志5.3 安装MySQL/Redis(Docker方式)
# 安装Dockercurl -fsSL https://get.docker.com | sudo bash -s docker --mirror Aliyun# 添加用户到docker组(免sudo执行)sudo usermod -aG docker $USER# 重新登录生效,或执行:newgrp docker# 安装Docker Composesudo apt install -y docker-compose# 一键启动MySQL+Redis(docker-compose.yml)mkdir -p ~/docker && cd ~/dockercat > docker-compose.yml << 'EOF'version: '3'services: mysql: image: mysql:8.0 container_name: mysql environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: testdb ports: - "3306:3306" volumes: - ./mysql_data:/var/lib/mysql redis: image: redis:7-alpine container_name: redis ports: - "6379:6379" volumes: - ./redis_data:/dataEOFdocker-compose up -d # 后台启动六、性能优化:让老机器流畅运行
6.1 JVM参数调优(针对8G内存以下)
# 在systemd的ExecStart中调整:ExecStart=/usr/bin/java \ -Xms256m \ # 初始堆内存 -Xmx768m \ # 最大堆内存(不超过物理内存70%) -XX:+UseG1GC \ # G1垃圾回收器(低延迟) -XX:MaxGCPauseMillis=200 \ -jar app.jar6.2 系统级优化
# 禁用不必要的服务sudo systemctl disable bluetooth # 服务器不需要蓝牙sudo systemctl disable snapd # 如不使用snap应用# 调整swappiness(减少swap使用,保护SSD)echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.confsudo sysctl -p# 创建swap文件(如果内存<4G,建议2G swap)sudo fallocate -l 2G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfileecho '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab6.3 监控面板(可选)
# 安装btop(比top更美观的资源监控)sudo snap install btop # 或编译安装# 浏览器访问监控(Netdata,极轻量)docker run -d --name=netdata \ -p 19999:19999 \ --cap-add SYS_PTRACE \ --security-opt apparmor=unconfined \ netdata/netdata# 访问 http://服务器IP:19999 查看实时性能七、内网穿透:让外网访问你的服务器
| frp | ||
| Cloudflare Tunnel | ||
☁️ Cloudflare Tunnel快速配置
# 安装cloudflaredwget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.debsudo dpkg -i cloudflared-linux-amd64.deb# 登录授权(会给出URL,浏览器登录Cloudflare账号)cloudflared tunnel login# 创建隧道(示例:暴露8080端口)cloudflared tunnel create my-java-servercloudflared tunnel route dns my-java-server java-test.yourdomain.com# 配置并运行(~/.cloudflared/config.yml)tunnel: <你的隧道ID>credentials-file: /home/devuser/.cloudflared/<隧道ID>.jsoningress: - hostname: java-test.yourdomain.com service: http://localhost:8080 - service: http_status:404cloudflared tunnel run my-java-server八、维护与备份建议
8.1 定时备份脚本
# 编辑crontabcrontab -e# 添加以下任务(每天凌晨2点备份)0 2 * * * /home/devuser/scripts/backup.sh >> /home/devuser/logs/backup.log 2>&1backup.sh示例:
#!/bin/bashBACKUP_DIR="/home/devuser/backups"DATE=$(date +%Y%m%d)mkdir -p $BACKUP_DIR# 备份应用数据tar czf $BACKUP_DIR/app-data-$DATE.tar.gz /home/devuser/apps# 备份数据库docker exec mysql mysqldump -uroot -proot123 testdb > $BACKUP_DIR/db-$DATE.sql# 保留最近7天find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -deletefind $BACKUP_DIR -name "*.sql" -mtime +7 -delete8.2 安全加固清单
/etc/ssh/sshd_config)PermitRootLogin noPasswordAuthentication nosudo apt install fail2bansudo cat /var/log/auth.log | grep Failed结语:旧物的技术新生
通过本文的教程,你已经将一台即将被遗弃的旧电脑,改造成了具备完整Java生态的轻量服务器。这不仅是技术能力的实践,更是可持续技术消费理念的体现。
下一步可以探索的方向:
部署Jenkins/GitLab Runner作为持续集成节点 安装Kubernetes(k3s轻量版)学习容器编排 搭建Home Assistant智能家居中枢 作为NAS存储服务器(OpenMediaVault)
技术的世界里,没有绝对的"垃圾",只有放错位置的资源。那台旧电脑,现在正为你的代码运行着呢!
📋 附录:常用命令速查表
jps -l | |
sudo netstat -tulpn | grep :8080 | |
tail -f app.log | |
free -h | |
df -h | |
sudo systemctl restart networking | |
sudo ufw status verbose |
本文基于Ubuntu Server 22.04 LTS编写,部分命令在其他发行版中可能需要调整。
如有疑问,欢迎在评论区交流!
- END -
往期推荐:
夜雨聆风