乐于分享
好东西不私藏

旧电脑别扔!装Linux搭建Java轻量测试服务器,全程手把手教程.

旧电脑别扔!装Linux搭建Java轻量测试服务器,全程手把手教程.

家里淘汰的旧电脑完全可以变身为功能完备的Java测试服务器,零成本、数据自主、内网穿透后还能外网访问。本文将从系统安装到Java环境部署,提供完整的实战指南。

前言:为什么要把旧电脑变成服务器?

家里那台用了5年的笔记本、淘汰的台式机,是不是正躺在角落里吃灰?先别急着扔!对于Java开发者来说,这些"电子垃圾"完全可以变身为轻量级测试服务器用于:

  • 本地微服务联调测试
  • CI/CD构建节点
  • 数据库/缓存中间件沙箱环境
  • 个人项目部署演示

相比云服务器,它的优势很明显:

零月租数据自主可控内网穿透可外网访问

一、硬件评估与系统选型

1.1 你的旧电脑还能战吗?

配置等级
硬件要求
适用场景
入门款
双核CPU + 4G内存 + 机械硬盘
单应用测试、学习用
标准款
四核CPU + 8G内存 + SSD
微服务联调、MySQL+Redis
进阶款
四核以上 + 16G内存 + SSD
多容器编排、压力测试

我的测试机配置参考:Intel i5-4590 / 8GB DDR3 / 120G SSD(2015年的老台式机)

1.2 Linux发行版选择

发行版
特点
适合人群
Ubuntu Server LTS
生态完善、文档丰富、长期支持
新手首选 ⭐
Debian
稳定精简、资源占用低
追求稳定的用户
AlmaLinux/Rocky Linux
RHEL系、企业级兼容
熟悉CentOS的开发者
Lubuntu/Xubuntu
带图形界面但极轻量
需要偶尔GUI操作

本文以 Ubuntu Server 22.04 LTS 为例(2026年4月前仍受支持,可平滑升级至24.04)

二、系统安装:从U盘到开机

1 制作启动盘

  1. 下载镜像:Ubuntu Server 22.04.5 LTS
  2. 使用Rufus(Windows)或balenaEtcher(跨平台)写入U盘
  3. 注意: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 -y

3.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

方案
命令
适用场景
系统自带OpenJDK
apt install default-jdk
快速部署,版本较旧
指定版本OpenJDK
apt install openjdk-17-jdk
推荐!稳定且免费
手动安装Oracle JDK
官网下载tar.gz
需要商业支持特性

推荐安装 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:$PATH

4.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.jar

6.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/fstab

6.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
自建穿透,完全自主
有公网IP的服务器做中转
ngrok
即开即用,有免费额度
临时演示、快速验证
Cloudflare Tunnel
免费、安全、支持HTTPS
长期稳定使用 ⭐
Zerotier/Tailscale
虚拟局域网,P2P直连
团队协作、多设备组网

☁️ 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>&1

backup.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 -delete

8.2 安全加固清单

修改SSH默认22端口(编辑/etc/ssh/sshd_config
禁止root登录:PermitRootLogin no
启用密钥登录,禁用密码:PasswordAuthentication no
安装fail2ban防暴力破解:sudo apt install fail2ban
定期检查日志:sudo cat /var/log/auth.log | grep Failed

结语:旧物的技术新生

通过本文的教程,你已经将一台即将被遗弃的旧电脑,改造成了具备完整Java生态的轻量服务器。这不仅是技术能力的实践更是可持续技术消费理念的体现。

下一步可以探索的方向:

  • 部署Jenkins/GitLab Runner作为持续集成节点
  • 安装Kubernetes(k3s轻量版)学习容器编排
  • 搭建Home Assistant智能家居中枢
  • 作为NAS存储服务器(OpenMediaVault)

技术的世界里,没有绝对的"垃圾",只有放错位置的资源。那台旧电脑,现在正为你的代码运行着呢!

📋 附录:常用命令速查表

查看Java进程
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 -

往期推荐:

2026高性价比笔记本避坑清单(3k-8k全覆盖)