简介:本文详细介绍如何将SpringBoot项目部署到云服务器,涵盖环境准备、依赖配置、安全加固及监控优化等关键环节,帮助开发者实现高效稳定的线上部署。
云服务器性能直接影响SpringBoot应用运行效率。建议根据业务场景选择配置:
操作系统选择需考虑技术栈兼容性:
通过SSH连接服务器后执行以下操作:
# 安装Java开发环境(以OpenJDK 11为例)sudo yum install -y java-11-openjdk-devel# 配置JAVA_HOME环境变量echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk" >> ~/.bashrcsource ~/.bashrc# 安装Nginx反向代理sudo yum install -y nginxsystemctl enable nginx
在pom.xml中配置生产环境专用profile:
<profiles><profile><id>prod</id><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><executable>true</executable><excludeDevtools>true</excludeDevtools></configuration></plugin></plugins></build></profile></profiles>
执行打包命令:
mvn clean package -Pprod -DskipTests
推荐使用SCP命令传输jar包:
scp target/your-app-0.0.1.jar root@your-server-ip:/opt/apps/
对于大文件传输,可配置rsync实现增量同步:
rsync -avz --progress target/your-app-0.0.1.jar root@your-server-ip:/opt/apps/
创建systemd服务单元文件/etc/systemd/system/springboot.service:
[Unit]Description=SpringBoot ApplicationAfter=syslog.target network.target[Service]User=rootWorkingDirectory=/opt/appsExecStart=/usr/bin/java -jar /opt/apps/your-app-0.0.1.jarSuccessExitStatus=143Restart=alwaysRestartSec=30[Install]WantedBy=multi-user.target
执行服务管理命令:
systemctl daemon-reloadsystemctl start springbootsystemctl enable springboot
配置日志切割防止磁盘占用:
# 创建日志目录mkdir /var/log/springboot# 配置logrotatecat > /etc/logrotate.d/springboot <<EOF/var/log/springboot/*.log {dailyrotate 7missingoknotifemptycompressdelaycompresscopytruncate}EOF
在启动命令中添加JVM参数:
ExecStart=/usr/bin/java \-Xms1024m -Xmx2048m \-XX:MetaspaceSize=256m \-XX:MaxMetaspaceSize=512m \-XX:+UseG1GC \-jar /opt/apps/your-app-0.0.1.jar
关键参数说明:
-Xms/-Xmx:初始/最大堆内存(建议设为物理内存的50%-70%)-XX:MetaspaceSize:元空间初始大小(避免频繁扩容)-XX:+UseG1GC:G1垃圾收集器(适合大内存应用)编辑/etc/nginx/conf.d/springboot.conf:
server {listen 80;server_name your-domain.com;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# WebSocket支持proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}# 静态资源缓存location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;access_log off;}}
执行Nginx配置测试:
nginx -tsystemctl restart nginx
使用firewalld管理端口:
# 开放必要端口firewall-cmd --zone=public --add-port=80/tcp --permanentfirewall-cmd --zone=public --add-port=443/tcp --permanentfirewall-cmd --reload# 查看开放端口firewall-cmd --list-ports
推荐使用SSH密钥认证替代密码登录:
# 本地生成密钥对ssh-keygen -t rsa -b 4096# 上传公钥到服务器ssh-copy-id -i ~/.ssh/id_rsa.pub root@your-server-ip# 禁用密码认证sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_configsystemctl restart sshd
安装htop进行实时资源监控:
yum install -y htophtop
配置Prometheus监控(需额外安装):
# prometheus.yml配置示例scrape_configs:- job_name: 'springboot'metrics_path: '/actuator/prometheus'static_configs:- targets: ['localhost:8080']
配置ELK日志收集系统(简化版):
# 安装Filebeatyum install -y filebeat# 配置Filebeat收集SpringBoot日志cat > /etc/filebeat/filebeat.yml <<EOFfilebeat.inputs:- type: logpaths:- /var/log/springboot/*.logoutput.elasticsearch:hosts: ["your-elasticsearch-ip:9200"]EOFsystemctl enable filebeatsystemctl start filebeat
使用netstat检查端口占用:
netstat -tulnp | grep 8080
强制终止占用进程:
kill -9 <PID>
当出现OutOfMemoryError时,需分析堆转储文件:
# 添加JVM参数生成堆转储-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/springboot/# 使用MAT工具分析java -jar mat.jar /var/log/springboot/java_pid<PID>.hprof
通过以上系统化的部署方案,开发者可以构建出高可用、易维护的SpringBoot云服务。建议定期进行安全审计(每月一次)和性能调优(每季度一次),同时建立完善的备份机制(每日全量备份+实时日志归档),确保服务稳定运行。实际部署时应根据具体业务需求调整参数配置,并通过A/B测试验证优化效果。