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

为何GitHub Actions无法连接MongoDB Atlas?

解决GitHub Actions连接MongoDB Atlas超时问题

问题诊断

本地运行爬取脚本完全正常,但通过GitHub Actions定时执行时触发pymongo.errors.ServerSelectionTimeoutError,核心原因是GitHub Actions的云Runner无法建立到MongoDB Atlas的连接,大概率是IP白名单限制或凭证配置问题导致。


解决方案

1. 配置MongoDB Atlas IP白名单,允许GitHub Actions访问

GitHub Actions的云Runner使用动态公网IP,无法提前固定。针对个人/测试项目,最简单的解决方式是将Atlas的IP访问规则设置为允许所有IP(生产环境建议使用静态IP或VPC对等连接):

  • 登录MongoDB Atlas控制台,进入目标项目
  • 左侧导航栏选择Network Access
  • 点击Add IP Address,在弹出框中输入 0.0.0.0/0,备注GitHub Actions后保存设置

2. 移除脚本硬编码凭证,改用GitHub Secrets存储

脚本直接硬编码MongoDB凭证既不安全,也可能在Actions环境中出现配置错误:

修改Python脚本(scraping_daily.py)

# 替换原有的MongoClient初始化代码
import os
from pymongo import MongoClient

# 从环境变量读取凭证
mongo_username = os.getenv("MONGO_USERNAME")
mongo_password = os.getenv("MONGO_PASSWORD")

# 初始化连接并添加超时配置
client = MongoClient(
    f"mongodb+srv://{mongo_username}:{mongo_password}@project1.lpu4kvx.mongodb.net/?retryWrites=true&w=majority",
    serverSelectionTimeoutMS=30000  # 设为30秒超时,避免不必要的长等待
)

# 新增连接测试(可选,方便调试)
try:
    client.admin.command('ping')
    print("MongoDB连接成功")
except Exception as e:
    print(f"MongoDB连接失败: {str(e)}")
    raise

在GitHub仓库配置Secrets

  • 打开目标GitHub仓库,进入Settings → Secrets and variables → Actions
  • 点击New repository secret,分别创建两个Secret:
    • 名称:MONGO_USERNAME,值:你的MongoDB Atlas用户名
    • 名称:MONGO_PASSWORD,值:你的MongoDB Atlas密码

修改GitHub Actions配置(actions.yml)

在执行脚本步骤中注入环境变量,并修正脚本运行命令:

- name: execute the script
  run: python scraping_daily.py  # 移除-m参数,直接运行脚本即可
  env:
    MONGO_USERNAME: ${{ secrets.MONGO_USERNAME }}
    MONGO_PASSWORD: ${{ secrets.MONGO_PASSWORD }}

3. 优化脚本数据加载逻辑(可选)

本地测试时读取全量数据没问题,但Actions环境中若集合数据量较大,list(collection.find())会占用大量内存,建议只读取去重所需字段:

# 替换原有的加载数据代码
df = pd.DataFrame(collection.find({}, {"reviewId": 1, "userName": 1, "_id": 0}))

这样能减少数据传输量,提升脚本执行效率。


内容的提问来源于stack exchange,提问作者Mathew Darren Kusuma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:54:54