在如今的开发环境中,把Java程序跑在云服务器上已经成了家常便饭。不管是公司的小型后台服务,还是个人做的练手项目,往云服一扔,外网随时能访问,方便得很。
选对系统和环境
大多数云服务商默认提供Linux系统镜像,比如CentOS、Ubuntu这些。装Java环境时,建议用OpenJDK,省事还免费。比如在Ubuntu上,直接一条命令就行:
sudo apt update && sudo apt install openjdk-17-jdk -y
装完检查一下版本,确认环境变量JAVA_HOME也设好了,避免后面启动报错。
上传和运行Java程序
写好的jar包,比如myapp.jar,可以用scp命令传到云服:
scp myapp.jar user@your-server-ip:/home/user/
登录服务器后,进目录运行:
java -jar myapp.jar
如果想让它在后台一直跑,加个&或者用nohup更稳妥:
nohup java -jar myapp.jar > app.log 2>&1 &
开放端口别忘了
Java服务通常监听8080或别的端口,但刚开的云服防火墙默认是关着的。得去控制台安全组里,把对应端口打开。不然你程序明明跑起来了,外网就是连不上,干着急。
小问题常见处理
有时候启动报错“无法绑定到端口”,可能是之前进程没杀干净。查一下:
ps aux | grep java
找到对应的PID,kill掉再重试。另外内存不够也会出问题,尤其是低配机器跑Spring Boot这种大块头,可以调小堆内存试试:
java -Xms128m -Xmx256m -jar myapp.jar
有次我朋友部署一个定时任务服务,结果第二天发现停了。后来才知道没用systemd托管,断ssh连接后进程被系统回收了。改成服务方式管理就稳多了。
让服务更可靠
手动启动适合临时测试,长期运行建议写个systemd服务文件。比如创建/etc/systemd/system/myapp.service:
[Unit]
Description=My Java Application
After=network.target
[Service]
Type=simple
User=appuser
ExecStart=/usr/bin/java -jar /opt/myapp/myapp.jar
Restart=always
[Install]
WantedBy=multi-user.target
启用后就能用systemctl start myapp来管理,开机自启也安排上了。
云服跑Java没那么玄乎,就跟在家开电脑差不多,只是换了个地方。只要你清楚每一步在干啥,出了问题也能顺藤摸瓜找原因。多试几次,自然就熟了。