1. SSM项目服务器部署核心流程解析
作为一名长期从事Java后端开发的工程师,我经历过数十次SSM项目的部署工作。与本地开发环境不同,生产服务器的部署需要更严谨的流程和更全面的考虑。本文将基于CentOS 7系统,详细拆解从零开始部署SSM项目的完整流程,包含大量实战中积累的经验技巧。
服务器部署与本地开发的主要差异体现在三个方面:
- 操作系统环境差异(Linux vs Windows)
- 网络访问配置(公网IP、防火墙等)
- 服务持久化运行要求(避免SSH断开后服务终止)
重要提示:生产环境部署前,请确保已完成代码审查和本地测试,避免将存在明显问题的版本部署到服务器。
2. 服务器基础环境准备
2.1 服务器连接与初始化
推荐使用MobaXterm作为连接工具,它集成了SSH终端和SFTP文件传输功能。首次连接时需要:
- 输入服务器公网IP
- 端口默认22(如修改过需对应)
- 认证方式选择密码或密钥(企业环境推荐密钥认证)
连接成功后,建议立即执行以下初始化操作:
bash复制# 更新系统组件
yum update -y
# 安装常用工具包
yum install -y vim wget curl net-tools lsof
2.2 MySQL数据库部署
对于SSM项目,MySQL的配置尤为关键。以下是优化后的安装流程:
bash复制# 添加MySQL官方Yum源
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
rpm -ivh mysql80-community-release-el7-7.noarch.rpm
# 安装MySQL服务(推荐5.7版本更稳定)
yum install -y mysql-community-server --enablerepo=mysql57-community --disablerepo=mysql80-community
# 启动服务并设置开机自启
systemctl start mysqld
systemctl enable mysqld
安装完成后需要特别注意:
- 获取初始密码:
grep 'temporary password' /var/log/mysqld.log - 执行安全配置:
mysql_secure_installation - 创建项目专用数据库用户(避免使用root账户)
3. Java环境与Tomcat配置
3.1 JDK安装与配置
bash复制# 安装OpenJDK(推荐1.8长期支持版本)
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
# 验证安装
java -version
javac -version
环境变量配置建议:
- 在
/etc/profile.d/下新建java.sh - 添加以下内容:
bash复制export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
- 执行
source /etc/profile使配置生效
3.2 Tomcat优化部署
推荐使用Tomcat 9.x版本,下载安装建议采用wget直接下载:
bash复制cd /usr/local/
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz
tar -zxvf apache-tomcat-9.0.85.tar.gz
mv apache-tomcat-9.0.85 tomcat9
关键目录说明:
bin/:启停脚本conf/:配置文件(重点修改server.xml和context.xml)logs/:日志文件(catalina.out是主要输出)webapps/:项目部署目录
4. 项目部署实战
4.1 项目打包注意事项
在IDEA中打包前必须检查:
- pom.xml中确保包含资源文件打包配置:
xml复制<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
- 数据库配置需改为服务器环境参数
- 推荐使用
mvn clean package -DskipTests跳过测试
4.2 文件上传与部署
使用SFTP上传war包到/usr/local/tomcat9/webapps/目录后:
bash复制# 进入Tomcat目录
cd /usr/local/tomcat9/
# 清理旧版本(重要!)
rm -rf webapps/ROOT* work/Catalina/localhost/ROOT
# 上传新war包后重启Tomcat
bin/shutdown.sh
bin/startup.sh
# 实时查看日志
tail -f logs/catalina.out
常见启动问题排查:
- 端口冲突:
netstat -tlnp | grep 8080 - 权限不足:
chmod +x bin/*.sh - 内存不足:调整
bin/catalina.sh中的JVM参数
5. 生产环境优化配置
5.1 Tomcat性能调优
修改conf/server.xml中的Connector配置:
xml复制<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="30"
acceptCount="100"
enableLookups="false"
compression="on" />
5.2 服务守护与自动重启
使用systemd管理Tomcat服务:
- 创建
/etc/systemd/system/tomcat.service文件 - 添加以下内容:
ini复制[Unit]
Description=Tomcat 9 servlet container
After=network.target
[Service]
Type=forking
User=root
Group=root
Environment="CATALINA_HOME=/usr/local/tomcat9"
ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomcat9/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
- 执行:
bash复制systemctl daemon-reload
systemctl enable tomcat
systemctl start tomcat
6. 安全加固措施
-
修改Tomcat管理密码:
- 编辑
conf/tomcat-users.xml - 添加角色和用户:
xml复制<role rolename="manager-gui"/> <user username="admin" password="复杂密码" roles="manager-gui"/> - 编辑
-
关闭不必要端口:
bash复制
firewall-cmd --permanent --remove-port=8080/tcp firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload -
定期日志清理:
bash复制# 添加定时任务(每周清理) 0 3 * * 0 find /usr/local/tomcat9/logs/ -mtime +30 -exec rm -f {} \;
7. 常见问题解决方案
7.1 数据库连接失败
典型错误信息:
code复制org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection
排查步骤:
- 确认MySQL服务运行状态:
systemctl status mysqld - 检查防火墙设置:
firewall-cmd --list-all - 验证连接权限:
mysql -u用户名 -p密码 -h127.0.0.1
7.2 静态资源404问题
解决方案:
- 检查Spring MVC配置:
xml复制<mvc:resources mapping="/static/**" location="/static/" />
- 确保webapp目录下有对应资源文件
- 清理浏览器缓存或使用无痕模式测试
7.3 内存溢出处理
JVM参数调整示例:
bash复制export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
8. 高级部署方案
8.1 Nginx反向代理配置
安装Nginx:
bash复制yum install -y nginx
systemctl start nginx
配置/etc/nginx/conf.d/tomcat.conf:
nginx复制server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
8.2 多项目部署策略
-
域名区分:
nginx复制server { listen 80; server_name project1.com; location / { proxy_pass http://127.0.0.1:8080/project1; } } -
端口区分:
xml复制<!-- 修改server.xml新增Service --> <Service name="Catalina2"> <Connector port="8081" ... /> <Engine name="Catalina2" defaultHost="localhost"> <Host name="localhost" appBase="webapps2" ... /> </Engine> </Service>
经过多次项目部署实践,我总结出三个关键点:第一,一定要有完整的部署检查清单;第二,日志监控必须实时进行;第三,回滚方案要提前准备。建议将部署过程脚本化,可以大幅提高效率减少人为错误。