Ubuntu 22.04 部署若依前后端分离版:MySQL 8.0 远程访问与 Nginx 反向代理 3 步配置
Ubuntu 22.04 生产级若依系统部署:MySQL 8.0 远程访问与 Nginx 反向代理实战指南
1. 生产环境部署的核心挑战
对于需要将若依系统部署到生产环境的开发者而言,Ubuntu 22.04 LTS 提供了稳定的基础,但两个关键配置环节往往成为拦路虎:MySQL 8.0 的远程访问权限配置和 Nginx 反向代理的精准调优。这些配置不仅关系到系统能否正常运行,更直接影响生产环境的安全性和性能表现。
传统部署教程往往停留在基础软件安装层面,而本文将聚焦这两个 生产环境必须解决 的核心问题。我们将通过三个关键步骤,提供可直接复用的配置模板和自动化测试方案,帮助开发者避开常见陷阱。
2. MySQL 8.0 生产级远程访问配置
2.1 用户权限精细化管理
MySQL 8.0 的权限系统相比早期版本有重大变化,直接使用 root 账户进行远程访问是极不安全的行为。以下是生产环境推荐的最小权限配置方案:
-- 创建专用管理用户(避免使用root)
CREATE USER 'ruoyi_admin'@'%' IDENTIFIED BY 'ComplexP@ssw0rd!2023';
-- 授予ruoyi数据库的完整权限
GRANT ALL PRIVILEGES ON ruoyi.* TO 'ruoyi_admin'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
关键安全注意事项:
- 密码复杂度应包含大小写字母、数字和特殊字符
- 限定IP范围比使用'%'更安全(如'192.168.1.%')
- 定期审计用户权限
2.2 配置文件深度优化
Ubuntu 22.04 中MySQL配置文件位于 /etc/mysql/mysql.conf.d/mysqld.cnf ,需要修改以下关键参数:
[mysqld]
bind-address = 0.0.0.0 # 允许所有IP连接
skip-name-resolve # 禁用DNS反查提升性能
max_connections = 200 # 根据服务器配置调整
wait_timeout = 600 # 连接超时时间(秒)
修改后重启服务:
sudo systemctl restart mysql
2.3 防火墙与安全组配置
确保服务器防火墙和云平台安全组放行MySQL端口(默认3306):
# Ubuntu UFW防火墙
sudo ufw allow 3306/tcp
云服务器还需在控制台配置安全组规则,建议将源IP限制为应用服务器IP段。
3. Nginx 反向代理高级配置
3.1 生产级Nginx配置模板
以下是为若依系统优化的Nginx配置,保存在 /etc/nginx/sites-available/ruoyi :
server {
listen 80;
server_name your-domain.com;
# 前端静态资源
location / {
root /var/www/ruoyi-ui/dist;
try_files $uri $uri/ /index.html;
index index.html;
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
# 后端API代理
location /prod-api/ {
proxy_pass http://localhost: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;
# 连接超时设置
proxy_connect_timeout 60s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
# 防止爬虫抓取敏感接口
location ~* ^/(register|resetPwd) {
if ($http_user_agent ~* (bot|crawl|spider)) {
return 403;
}
proxy_pass http://localhost:8080;
}
# 错误页面处理
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
3.2 关键性能优化参数
在 /etc/nginx/nginx.conf 的http块中添加以下全局优化配置:
http {
# 基础性能优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# Gzip压缩配置
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_vary on;
# 连接限制
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 100;
}
3.3 SSL/TLS 安全配置(可选但强烈推荐)
使用Let's Encrypt免费证书启用HTTPS:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
证书自动续期测试:
sudo certbot renew --dry-run
4. 部署验证与自动化测试
4.1 连通性测试脚本
创建 check_deployment.sh 脚本,一键验证各服务状态:
#!/bin/bash
# MySQL连接测试
mysql_check=$(mysql -h 127.0.0.1 -u ruoyi_admin -p'ComplexP@ssw0rd!2023' -e "SELECT 1" 2>&1)
[ $? -eq 0 ] && echo "✅ MySQL连接正常" || echo "❌ MySQL连接失败: $mysql_check"
# 后端服务检测
backend_check=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080)
[ "$backend_check" == "200" ] && echo "✅ 后端服务运行正常" || echo "❌ 后端服务异常: HTTP $backend_check"
# Nginx配置测试
nginx_check=$(sudo nginx -t 2>&1)
[ $? -eq 0 ] && echo "✅ Nginx配置验证通过" || echo "❌ Nginx配置错误: $nginx_check"
# 前端资源检查
frontend_check=$(find /var/www/ruoyi-ui/dist -name "index.html" -type f | wc -l)
[ $frontend_check -eq 1 ] && echo "✅ 前端资源部署完整" || echo "❌ 前端资源缺失"
# 端口连通性测试
ports=(80 3306 8080)
for port in "${ports[@]}"; do
nc -z 127.0.0.1 $port && echo "✅ 端口 $port 监听正常" || echo "❌ 端口 $port 未开启"
done
赋予执行权限:
chmod +x check_deployment.sh
4.2 性能基准测试
使用ab工具进行压力测试(需安装 apache2-utils ):
# 前端静态资源测试
ab -n 1000 -c 100 http://your-domain.com/
# API接口测试
ab -n 500 -c 50 -p post_data.json -T 'application/json' http://your-domain.com/prod-api/login
其中 post_data.json 内容为:
{"username":"admin","password":"admin123"}
5. 生产环境维护要点
5.1 日志监控方案
配置集中式日志收集:
# 查看Nginx访问日志
sudo tail -f /var/log/nginx/access.log
# 查看后端应用日志
sudo journalctl -u ruoyi.service -f
# MySQL慢查询日志(需先在my.cnf中启用)
sudo tail -f /var/log/mysql/mysql-slow.log
5.2 定期备份策略
创建数据库备份脚本 /usr/local/bin/backup_ruoyi.sh :
#!/bin/bash
BACKUP_DIR="/backups/ruoyi"
DATE=$(date +%Y%m%d%H%M)
MYSQL_USER="ruoyi_admin"
MYSQL_PWD="ComplexP@ssw0rd!2023"
# 创建备份目录
mkdir -p $BACKUP_DIR
# MySQL全库备份
mysqldump -u$MYSQL_USER -p$MYSQL_PWD --all-databases | gzip > $BACKUP_DIR/ruoyi_db_$DATE.sql.gz
# 前端代码备份
tar -czf $BACKUP_DIR/ruoyi_ui_$DATE.tar.gz /var/www/ruoyi-ui/dist
# 保留最近7天备份
find $BACKUP_DIR -type f -mtime +7 -delete
添加到cron定时任务:
0 3 * * * /usr/local/bin/backup_ruoyi.sh
5.3 安全加固措施
- MySQL安全 :定期运行
mysql_secure_installation - SSH防护 :修改默认端口,禁用密码登录
- 防火墙策略 :仅开放必要端口
- 系统更新 :设置自动安全更新
# 启用自动安全更新
sudo dpkg-reconfigure -plow unattended-upgrades
更多推荐




所有评论(0)