1. 环境准备从零配置Linux服务器第一次在Linux服务器上部署SpringBoot项目可能会觉得无从下手但跟着我的步骤来保证你能轻松搞定。我去年给公司部署电商系统时也是从零开始摸索现在把这些经验都分享给你。首先需要准备一台干净的Linux服务器推荐使用CentOS 7.x或Ubuntu 20.04 LTS版本。云服务器和本地虚拟机的主要区别在于网络配置和安全组规则这点要特别注意。我遇到过不少新手在云服务器上部署后无法访问八成都是安全组没配置好。必备软件清单JDK 1.8推荐OpenJDK 11MySQL 5.7/MariaDB防火墙配置工具文件传输工具如lrzsz安装JDK最稳妥的方式是直接用yum安装# CentOS sudo yum install -y java-11-openjdk-devel # Ubuntu sudo apt update sudo apt install -y openjdk-11-jdk安装完成后别忘记验证java -version # 应该看到类似下面的输出 # openjdk version 11.0.12 2021-07-20 LTSMySQL安装稍微复杂些我建议用官方仓库安装最新版# CentOS wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm sudo rpm -ivh mysql80-community-release-el7-6.noarch.rpm sudo yum install -y mysql-server # Ubuntu sudo apt install -y mysql-server安装完成后一定要做这三件事运行安全脚本sudo mysql_secure_installation创建应用数据库用户修改绑定地址为0.0.0.0如果需要远程连接2. 项目打包与上传告别坑爹的配置问题打包SpringBoot项目看似简单但这里面的坑我几乎都踩过。最常见的就是打包后运行报错没有主清单属性。这是因为maven配置有问题正确的pom.xml应该包含build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId version2.7.0/version executions execution goals goalrepackage/goal /goals /execution /executions /plugin /plugins /build打包命令也有讲究我推荐用这个mvn clean package -DskipTests打包完成后你会得到一个形如your-project-0.0.1-SNAPSHOT.jar的文件。这个文件通常有30-50MB大小如果发现只有几KB那肯定是打包出问题了。上传文件到服务器我习惯用scp命令scp target/your-project.jar useryourserver:/home/user/app/如果觉得命令行麻烦也可以用WinSCP这类图形化工具。但要注意文件权限问题遇到过好几次因为权限导致应用无法读取配置文件的坑。3. 服务启动与管理生产环境必备技能直接运行java -jar虽然简单但在生产环境远远不够。我们需要考虑服务意外退出如何自动重启日志如何收集如何优雅停止服务方案一nohup简单版适合测试环境nohup java -jar your-project.jar app.log 21 这命令的意思是nohup忽略挂断信号 app.log重定向标准输出到文件21将错误输出也重定向到标准输出后台运行方案二systemd专业版生产推荐创建服务配置文件/etc/systemd/system/your-app.service[Unit] DescriptionYour SpringBoot Application Aftersyslog.target network.target [Service] Userappuser ExecStart/usr/bin/java -jar /home/user/app/your-project.jar SuccessExitStatus143 Restartalways RestartSec30 [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl start your-app sudo systemctl enable your-app # 开机自启用systemd管理服务的好处是完善的日志管理journalctl -u your-app自动重启机制服务状态监控启动顺序控制4. 安全与优化专业部署的加分项防火墙配置# 查看已开放端口 sudo firewall-cmd --list-ports # 开放应用端口比如8080 sudo firewall-cmd --zonepublic --add-port8080/tcp --permanent sudo firewall-cmd --reloadJVM调优建议生产环境一定要配置JVM参数这是我的常用配置java -Xms512m -Xmx1024m -XX:MaxMetaspaceSize256m \ -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/tmp \ -jar your-project.jar-Xms和-Xmx设置堆内存初始和最大值-XX:MaxMetaspaceSize限制元空间大小-XX:HeapDumpOnOutOfMemoryError在OOM时生成dump文件日志管理技巧使用logback或log4j2的滚动日志配置日志文件按天切割保留最近7天的日志单个日志文件不超过50MB这是我的logback配置片段appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_PATH}/app.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_PATH}/app.%d{yyyy-MM-dd}.%i.log/fileNamePattern maxFileSize50MB/maxFileSize maxHistory7/maxHistory /rollingPolicy /appender5. 常见问题排查指南问题1端口被占用# 查看端口占用情况 sudo netstat -tulnp | grep 8080 # 如果被占用可以kill掉进程 sudo kill -9 PID问题2数据库连接失败检查数据库服务是否运行连接字符串是否正确用户权限是否足够防火墙是否放行3306端口问题3文件权限不足# 查看文件权限 ls -l your-project.jar # 修改权限 chmod 755 your-project.jar chown appuser:appgroup your-project.jar问题4内存不足查看内存使用free -h top如果是OOM问题可以用jmap分析jmap -heap pid # 查看堆内存 jmap -histo:live pid | head -20 # 查看对象数量6. 进阶技巧持续部署与监控使用Git Hook自动部署在服务器上配置Git Hook可以在代码push时自动构建部署#!/bin/bash # /var/www/your-project.git/hooks/post-receive APP_DIR/home/user/app GIT_DIR/var/www/your-project.git echo Starting deployment... cd $APP_DIR # 拉取最新代码 git --git-dir$GIT_DIR pull origin master # 构建项目 mvn clean package -DskipTests # 重启服务 sudo systemctl restart your-app echo Deployment complete!基础监控配置使用Spring Boot Actuator可以快速开启监控端点# application.properties management.endpoints.web.exposure.includehealth,info,metrics management.endpoint.health.show-detailsalways配合Prometheus和Grafana可以搭建完整的监控系统。7. 前后端分离项目部署现代项目大多是前后端分离架构部署时需要注意前端静态文件用Nginx托管配置API反向代理解决跨域问题典型Nginx配置server { listen 80; server_name yourdomain.com; location / { root /var/www/html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:8080; proxy_set_header Host $host; } }8. 备份与回滚策略备份方案数据库每日全量备份binlog应用打包备份配置文件版本控制简单回滚脚本#!/bin/bash VERSION$1 APP_DIR/home/user/app echo Rolling back to version $VERSION... cd $APP_DIR/backups cp -f your-project-$VERSION.jar $APP_DIR/your-project.jar sudo systemctl restart your-app echo Rollback complete!使用方式./rollback.sh 1.0.09. 性能优化实战数据库连接池配置# application.properties spring.datasource.hikari.maximum-pool-size20 spring.datasource.hikari.minimum-idle10 spring.datasource.hikari.idle-timeout30000 spring.datasource.hikari.max-lifetime1800000Tomcat调优server.tomcat.max-threads200 server.tomcat.min-spare-threads20 server.tomcat.accept-count100 server.tomcat.connection-timeout5000缓存配置Configuration EnableCaching public class CacheConfig { Bean public RedisCacheManager cacheManager(RedisConnectionFactory factory) { RedisCacheConfiguration config RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(30)) .disableCachingNullValues(); return RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); } }10. 容器化部署方案选学虽然本文主要讲传统部署方式但简单提下Docker部署FROM openjdk:11-jre COPY target/your-project.jar /app.jar ENTRYPOINT [java,-jar,/app.jar]构建和运行docker build -t your-app . docker run -d -p 8080:8080 --name your-app your-app使用Docker Compose可以更方便管理多容器应用。