Azure DevOps部署Django时无法连接Postgres Flexible Server
Django测试无法连接Azure Postgres Flexible Server的解决办法
问题根源
你用的Postgres Flexible Server如果和VNet绑定了,默认就只允许VNet内部的流量访问。Azure DevOps的微软托管代理不在这个VNet里,所以不管用域名还是IP都连不上——哪怕你没手动设防火墙规则,VNet集成本身就相当于把公共访问关了。
具体解决步骤
1. 调整Postgres的网络配置
先去Azure门户找到你的Postgres服务器,进入「网络」设置页:
- 测试阶段快速方案:切换到「公共访问」选项,勾选「允许所有Azure服务访问此服务器」,或者把Azure DevOps代理的IP范围加进去(微软托管代理的IP可在Azure DevOps组织的代理池设置中查询)。保存配置后重新运行流水线。
- 生产环境合规方案:不要开启公共访问,改用自托管代理——在VNet内的虚拟机上部署Azure DevOps自托管代理,让代理机器处于VNet内部,就能直接访问数据库。
2. 核对Django的数据库配置
settings.py里的数据库配置必须注意这几个细节:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名', 'USER': '用户名@你的服务器名', # 必须带@服务器名后缀 'PASSWORD': '你的数据库密码', 'HOST': '你的服务器名.postgres.database.azure.com', 'PORT': '5432', 'OPTIONS': { 'sslmode': 'require', # Azure Postgres强制要求SSL连接 }, } }
3. 在流水线中添加排查步骤
可以在测试步骤前加一段脚本,手动验证连通性,快速定位问题:
# 测试DNS解析是否正常 nslookup 你的服务器名.postgres.database.azure.com # 测试5432端口是否可访问 nc -zv 你的服务器名.postgres.database.azure.com 5432
如果解析失败,大概率是代理的DNS配置问题;解析成功但端口不通,还是网络权限的限制导致的。
4. 检查Postgres服务器状态
确认Postgres服务器处于运行中状态,没有被暂停或重启。另外可以查看服务器的「日志」选项,里面会有拒绝连接的记录,能帮你更快定位具体原因。
内容的提问来源于stack exchange,提问作者Juan Botero
相关产品推荐
相关产品推荐

