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

使用Render部署FastAPI时无法连接MongoDB的求助

部署FastAPI到Render时MongoDB连接失败的解决方案

问题概述

  • 本地终端运行FastAPI项目,发送POST请求可正常连接MongoDB
  • 部署到Render后,POST请求触发数据库连接失败,错误信息如下:
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms), Timeout: 30s, Topology Description: <TopologyDescription id: 673d3b500f19ce930ab7ddcf, topology_type: Unknown, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 111] Connection refused (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>]>
  • 当前启动命令:uvicorn main:app --reload --host 0.0.0.0 --port $PORT

原因分析

错误日志显示程序尝试连接localhost:27017,说明部署后的代码未正确配置MongoDB远程连接地址,大概率是代码中硬编码的URI占位符未替换,或环境变量未正确设置。

解决方案

1. 替换硬编码的MongoDB URI

检查代码中的MongoDB连接部分,确保将占位符<my_mongoDB_uri>替换为实际的远程MongoDB连接字符串(例如MongoDB Atlas提供的完整URI,包含用户名、密码、集群地址):

# 替换后(示例)
mongodb_uri = 'mongodb+srv://<username>:<password>@cluster0.mongodb.net/?retryWrites=true&w=majority'
client = AsyncIOMotorClient(mongodb_uri)
database = client["Cluster"]
users = database["Collection"]

注意:删除URI中的<>符号,填入真实的用户名和密码。

2. 使用环境变量存储敏感信息(推荐)

为避免硬编码敏感信息,改用环境变量读取URI:

  • 修改代码:
import os
from motor.motor_asyncio import AsyncIOMotorClient

# 读取环境变量
mongodb_uri = os.getenv("MONGODB_URI")
if not mongodb_uri:
    raise ValueError("必须设置MONGODB_URI环境变量")

client = AsyncIOMotorClient(mongodb_uri)
database = client["Cluster"]
users = database["Collection"]
  • 在Render项目控制台中,进入「Environment」选项卡,添加环境变量MONGODB_URI,值为你的MongoDB连接字符串。

3. 验证MongoDB网络权限

  • 若使用MongoDB Atlas,进入Atlas控制台,确保Render的服务器IP已添加到IP白名单(或临时设置为允许所有IP0.0.0.0/0用于测试)。
  • 确认MongoDB集群状态正常,无停机或维护情况。

4. 优化启动命令

生产环境部署时,移除开发模式的--reload参数,避免资源浪费:

uvicorn main:app --host 0.0.0.0 --port $PORT

内容的提问来源于stack exchange,提问作者Andrei Mendez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:03:09