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
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐