腾讯云服务器部署 Spring Boot 项目完整指南
一、前言
对于开发者来说,将自己开发的项目部署到云服务器上是必备技能。腾讯云作为国内主流的云服务商,提供了稳定可靠的云服务器产品。
本文将从零开始,详细讲解如何在腾讯云服务器上部署 Spring Boot 项目,包括环境搭建、项目打包、部署运行、域名配置、HTTPS 配置等完整流程,适合初学者参考。
二、服务器准备
2.1 选购云服务器
首先需要在腾讯云官网购买一台云服务器。对于个人项目或小型应用,推荐配置:
- CPU:2核
- 内存:4GB
- 系统盘:40GB SSD
- 带宽:5Mbps
- 操作系统:CentOS 7.x 或 Ubuntu 20.04
提示:新用户通常有优惠活动,可以关注腾讯云的新用户特惠活动,性价比很高。
2.2 安全组配置
购买服务器后,需要在安全组中开放必要的端口:
- 22 端口:SSH 远程登录
- 80 端口:HTTP 访问
- 443 端口:HTTPS 访问
- 3306 端口:MySQL 数据库(如需要远程访问)
- 8080 端口:Spring Boot 默认端口(或你项目使用的端口)
- 8888 端口:宝塔面板(如使用宝塔)
2.3 连接服务器
使用 SSH 工具连接服务器,推荐工具:
- Windows:Xshell、Putty、FinalShell
- Mac:自带终端、iTerm2
连接命令:
ssh root@你的服务器IP
三、环境搭建
3.1 安装 JDK
Spring Boot 项目需要 Java 运行环境。以 JDK 8 为例:
# 查看是否已安装Java
java -version
# CentOS 安装 OpenJDK 8
yum install -y java-1.8.0-openjdk-devel
# Ubuntu 安装 OpenJDK 8
apt update
apt install -y openjdk-8-jdk
验证安装:
java -version
javac -version
3.2 安装 MySQL
以 MySQL 8.0 为例,CentOS 安装步骤:
# 下载MySQL Yum源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装源
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL
yum install -y mysql-server
# 启动MySQL
systemctl start mysqld
# 设置开机自启
systemctl enable mysqld
获取初始密码并修改:
# 查看初始密码
grep 'temporary password' /var/log/mysqld.log
# 登录MySQL
mysql -u root -p
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
# 允许远程访问(可选)
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
3.3 安装宝塔面板(推荐)
宝塔面板是一款服务器管理面板,可以大大简化服务器运维。安装命令:
# CentOS 安装命令
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
安装完成后,会显示面板地址、用户名和密码。通过浏览器访问面板地址即可登录管理。
四、项目打包
4.1 修改配置文件
部署前需要修改项目的配置文件,将数据库连接、端口等改为服务器环境的配置:
# 服务器端口
server.port=8080
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=你的数据库密码
4.2 Maven 打包
在项目根目录执行打包命令:
# 跳过测试打包
mvn clean package -DskipTests
# 或者执行完整测试后打包
mvn clean package
打包完成后,在 target 目录下会生成 jar 包,如:app-upgrade-server-1.0.0.jar
4.3 上传到服务器
使用 FTP 工具或 scp 命令将 jar 包上传到服务器:
# scp 命令上传
scp target/app-upgrade-server-1.0.0.jar root@你的服务器IP:/www/wwwroot/app/
五、项目部署
5.1 直接运行
最简单的方式是直接运行 jar 包:
java -jar app-upgrade-server-1.0.0.jar
但这种方式关闭 SSH 连接后程序就会停止,只适合临时测试。
5.2 后台运行
使用 nohup 命令让程序在后台运行:
nohup java -jar app-upgrade-server-1.0.0.jar > app.log 2>&1 &
参数说明:
nohup:不挂断运行> app.log:将输出重定向到 app.log 文件2>&1:将错误输出也重定向到标准输出&:后台运行
5.3 查看运行状态
# 查看Java进程
ps -ef | grep java
# 查看日志
tail -f app.log
# 停止进程
kill -9 进程ID
5.4 编写启动脚本
为了方便管理,可以编写启动、停止、重启脚本:
#!/bin/bash
# 启动脚本 start.sh
APP_NAME=app-upgrade-server-1.0.0.jar
LOG_FILE=app.log
# 检查是否已运行
PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
echo "应用已在运行,PID: $PID"
exit 1
fi
# 启动应用
nohup java -jar $APP_NAME > $LOG_FILE 2>&1 &
echo "应用启动成功,PID: $!"
echo "日志文件: $LOG_FILE"
#!/bin/bash
# 停止脚本 stop.sh
APP_NAME=app-upgrade-server-1.0.0.jar
PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}')
if [ -z "$PID" ]; then
echo "应用未运行"
exit 1
fi
echo "正在停止应用,PID: $PID"
kill -9 $PID
echo "应用已停止"
5.5 Systemd 服务(推荐)
使用 Systemd 管理服务,可以实现开机自启、自动重启等功能:
# 创建服务文件
vi /etc/systemd/system/app-upgrade.service
文件内容:
[Unit]
Description=App Upgrade Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/www/wwwroot/app
ExecStart=/usr/bin/java -jar app-upgrade-server-1.0.0.jar
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
常用命令:
# 启动服务
systemctl start app-upgrade
# 停止服务
systemctl stop app-upgrade
# 重启服务
systemctl restart app-upgrade
# 查看状态
systemctl status app-upgrade
# 设置开机自启
systemctl enable app-upgrade
# 查看日志
journalctl -u app-upgrade -f
六、域名配置
6.1 域名解析
在域名服务商处添加 A 记录,将域名指向服务器 IP:
- 主机记录:@(主域名)或 www(www子域名)
- 记录类型:A
- 记录值:你的服务器 IP
6.2 Nginx 反向代理
使用 Nginx 做反向代理,可以通过域名直接访问,不需要加端口号:
server {
listen 80;
server_name yourdomain.com www.yourdomain.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;
}
}
七、HTTPS 配置
7.1 申请 SSL 证书
可以在腾讯云申请免费的 SSL 证书,或者使用 Let's Encrypt 免费证书。
7.2 Nginx 配置 HTTPS
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/private.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$server_name$request_uri;
}
八、常见问题
8.1 端口无法访问
检查以下几点:
- 安全组是否开放了端口
- 服务器防火墙是否开放了端口
- 程序是否正常启动
- 端口是否被占用
8.2 项目启动失败
查看日志文件,根据错误信息排查:
- 数据库连接失败:检查数据库地址、用户名、密码
- 端口被占用:更换端口或停止占用端口的程序
- 内存不足:增加服务器内存或调整 JVM 参数
8.3 上传文件大小限制
Spring Boot 默认上传文件大小限制为 1MB,可以在配置文件中修改:
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
Nginx 也需要配置:
client_max_body_size 100M;
九、安全建议
- 修改 SSH 默认端口,避免暴力破解
- 使用密钥登录,禁用密码登录
- 定期更新系统和软件
- 数据库不要对外开放 3306 端口
- 配置防火墙,只开放必要端口
- 定期备份数据
- 使用 HTTPS 加密传输
十、总结
本文详细介绍了在腾讯云服务器上部署 Spring Boot 项目的完整流程,包括服务器选购、环境搭建、项目打包、部署运行、域名配置、HTTPS 配置等内容。
对于初学者,建议使用宝塔面板来管理服务器,可以大大降低运维难度。部署过程中遇到问题时,多查看日志,根据错误信息逐步排查。
希望本文能帮助大家顺利完成项目部署。如有问题,欢迎在评论区交流讨论。