1. SSM项目部署前的环境准备
在开始部署SSM项目之前,我们需要确保服务器环境已经准备就绪。我通常会从基础环境开始搭建,这是整个部署过程中最容易被忽视但至关重要的环节。
1.1 服务器操作系统选择与配置
对于SSM项目部署,我推荐使用CentOS 7.x或Ubuntu 20.04 LTS作为服务器操作系统。这两个版本在稳定性和兼容性方面表现优异,社区支持也较为完善。以阿里云ECS为例,购买后需要完成以下基础配置:
- 安全组设置:开放22(SSH)、80(HTTP)、443(HTTPS)端口
- 系统更新:执行
yum update -y或apt update && apt upgrade -y - 创建部署专用用户:避免直接使用root账户操作
提示:生产环境强烈建议禁用root远程登录,配置SSH密钥认证而非密码登录。
1.2 Java环境安装与优化
SSM框架基于Java技术栈,JDK版本选择尤为关键。我建议使用OpenJDK 8或11,这两个LTS版本经过长期验证,兼容性最好。安装步骤如下:
bash复制# CentOS
yum install -y java-1.8.0-openjdk-devel
# Ubuntu
apt install -y openjdk-8-jdk
安装完成后,需要配置JAVA_HOME环境变量。我习惯在/etc/profile.d目录下创建单独的环境配置文件:
bash复制echo 'export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))' > /etc/profile.d/java.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile.d/java.sh
source /etc/profile
1.3 数据库环境部署
根据项目需求选择MySQL或MariaDB,我建议使用MySQL 5.7或8.0版本。以MySQL 8.0为例:
bash复制# CentOS
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-community-server
# Ubuntu
apt install -y mysql-server
安装后需要进行安全配置:
bash复制mysql_secure_installation
特别要注意的是,MySQL 8.0默认使用caching_sha2_password认证插件,如果SSM项目中使用旧版连接驱动,需要在my.cnf中添加:
ini复制[mysqld]
default_authentication_plugin=mysql_native_password
1.4 Tomcat安装与调优
Tomcat作为Servlet容器,版本选择应与项目兼容。我推荐Tomcat 8.5或9.0:
bash复制wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.68/bin/apache-tomcat-9.0.68.tar.gz
tar -xzf apache-tomcat-9.0.68.tar.gz -C /opt
mv /opt/apache-tomcat-9.0.68 /opt/tomcat
创建专用用户并设置权限:
bash复制useradd -r -s /bin/false tomcat
chown -R tomcat:tomcat /opt/tomcat
优化Tomcat配置(/opt/tomcat/conf/server.xml):
xml复制<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="10"
enableLookups="false"
acceptCount="100"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"/>
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SSM项目打包与配置调整
2.1 Maven项目打包
在本地开发环境,使用Maven进行项目打包。确保pom.xml中包含war打包插件:
xml复制<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
</plugins>
</build>
执行打包命令:
bash复制mvn clean package -DskipTests
打包完成后,会在target目录生成war文件。我习惯在打包时包含环境标识:
bash复制mvn clean package -DskipTests -Pprod
2.2 配置文件分离策略
生产环境与开发环境的配置分离至关重要。我通常采用以下方案:
-
在resources目录下创建不同环境的配置文件:
code复制resources/ ├── application-dev.properties ├── application-prod.properties └── application.properties -
在application.properties中使用spring.profiles.active指定默认环境:
properties复制spring.profiles.active=@activatedProperties@
- 在pom.xml中配置profile:
xml复制<profiles>
<profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
</profiles>
2.3 数据库连接池配置优化
生产环境中,数据库连接池的配置直接影响系统性能。以Druid为例,推荐配置:
properties复制# 数据源配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/ssm_db?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
spring.datasource.username=ssm_user
spring.datasource.password=ComplexPwd@123
# 连接池配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
3. 项目部署与Tomcat集成
3.1 部署war包到Tomcat
将打包好的war文件上传到服务器,我通常使用scp命令:
bash复制scp target/ssm-project.war user@server_ip:/tmp
然后将其部署到Tomcat的webapps目录:
bash复制mv /tmp/ssm-project.war /opt/tomcat/webapps/
chown tomcat:tomcat /opt/tomcat/webapps/ssm-project.war
Tomcat会自动解压war文件。如果想指定上下文路径,可以:
bash复制mv /tmp/ssm-project.war /opt/tomcat/webapps/ROOT.war
3.2 配置Tomcat服务
创建systemd服务文件(/etc/systemd/system/tomcat.service):
ini复制[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
启用并启动服务:
bash复制systemctl daemon-reload
systemctl enable tomcat
systemctl start tomcat
3.3 日志配置与管理
配置日志轮转(/etc/logrotate.d/tomcat):
bash复制/opt/tomcat/logs/catalina.out {
copytruncate
daily
rotate 30
compress
missingok
notifempty
dateext
}
在logback-spring.xml中配置应用日志:
xml复制<configuration>
<property name="LOG_HOME" value="/var/log/ssm-app" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
4. 生产环境优化与维护
4.1 Nginx反向代理配置
使用Nginx作为前端代理可以提高性能并实现负载均衡。基本配置示例:
nginx复制upstream tomcat_server {
server 127.0.0.1:8080;
keepalive 32;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://tomcat_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
access_log /var/log/nginx/ssm-access.log;
error_log /var/log/nginx/ssm-error.log;
}
4.2 HTTPS安全配置
使用Let's Encrypt免费SSL证书:
bash复制# 安装Certbot
yum install -y epel-release
yum install -y certbot python3-certbot-nginx
# 获取证书
certbot --nginx -d yourdomain.com
自动续期配置:
bash复制echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew" | sudo tee -a /etc/crontab > /dev/null
4.3 监控与维护
配置基础监控:
- 使用Spring Boot Actuator:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application-prod.properties中配置:
properties复制management.endpoints.web.exposure.include=health,info,metrics
management.endpoint.health.show-details=always
- 使用Prometheus监控:
xml复制<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
application-prod.properties添加:
properties复制management.endpoints.web.exposure.include=prometheus,health,info,metrics
management.metrics.export.prometheus.enabled=true
4.4 备份策略
数据库备份脚本(/usr/local/bin/mysql_backup.sh):
bash复制#!/bin/bash
DATE=$(date +%Y%m%d%H%M)
BACKUP_DIR="/backup/mysql"
MYSQL_USER="backup_user"
MYSQL_PASSWORD="BackupPwd@123"
mkdir -p $BACKUP_DIR
databases=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|sys)")
for db in $databases; do
mysqldump --force --opt --user=$MYSQL_USER --password=$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$db-$DATE.sql.gz"
done
find $BACKUP_DIR -type f -mtime +30 -delete
添加到crontab:
bash复制0 2 * * * /usr/local/bin/mysql_backup.sh
项目文件备份:
bash复制0 3 * * * tar -czf /backup/app/ssm-project-$(date +\%Y\%m\%d).tar.gz /opt/tomcat/webapps/ROOT /var/log/ssm-app
