You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在Azure VM的Nest.js应用无法连接CleverCloud远程数据库

问题分析与解决方法

核心问题拆解

当前报错Error: Access denied for user 'root'@'4.227.196.53' (using password: YES)结合本地能正常连接的情况,主要排查方向集中在IP权限限制、环境变量加载异常、数据库用户授权这几个点。


1. CleverCloud数据库IP白名单未放行Azure虚拟机IP

报错中的4.227.196.53是Azure虚拟机的公网IP,CleverCloud远程数据库默认会限制IP访问范围:

  • 登录CleverCloud控制台,找到对应数据库实例;
  • 在「安全」或「访问控制」板块,将Azure虚拟机的公网IP添加到白名单列表;
  • 保存设置后等待1-2分钟,重新启动应用尝试连接。

2. .env文件未正确加载

本地能正常读取.env,但Azure上可能存在路径、权限或加载时机问题:

  • 指定.env绝对路径:修改ConfigModule配置,明确指定.env文件位置避免路径歧义:
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: join(process.cwd(), '.env'), // 强制使用项目根目录的.env
    })
    
  • 检查文件权限:在Azure虚拟机上执行ls -l .env,确保Node进程拥有读取权限,若权限不足可执行chmod 644 .env调整;
  • 提前加载环境变量:在main.ts最顶部添加代码,强制在应用初始化前加载.env:
    require('dotenv').config(); // TypeScript环境也可使用import 'dotenv/config'
    

3. 数据库用户未授权AzureIP访问

CleverCloud的MySQL用户默认可能仅允许从本地IP访问,需手动授权:

  • 登录CleverCloud数据库的终端(或通过本地连接执行SQL):
    -- 授权root用户从Azure虚拟机IP访问指定数据库
    GRANT ALL PRIVILEGES ON `your_database_name`.* TO 'root'@'4.227.196.53' IDENTIFIED BY 'your_database_password';
    FLUSH PRIVILEGES;
    
  • 若需要临时测试,可授权从任意IP访问(生产环境不推荐):
    GRANT ALL PRIVILEGES ON `your_database_name`.* TO 'root'@'%' IDENTIFIED BY 'your_database_password';
    FLUSH PRIVILEGES;
    

4. Azure虚拟机网络限制

检查Azure虚拟机的网络安全组(NSG)是否允许出站访问3306端口(MySQL默认端口):

  • 登录Azure门户,找到对应虚拟机的NSG;
  • 确认出站规则中允许目标端口3306的流量;
  • 若未配置,添加一条允许所有IP访问3306端口的出站规则(或仅允许CleverCloud数据库的IP)。

内容的提问来源于stack exchange,提问作者Sefirot Hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:20:58