当前位置: 首页 > article >正文

FastAPI + SQLAlchemy + SSH + Doris 生产连接问题技术复盘

FastAPI + SQLAlchemy + SSH + Doris 生产连接报错1045本文内容在公众号免费阅读;获取方式:关注公众号 [李指导数据前沿],回复关键词 “FastApi隧道” 即可获取本文配套的完整源代码文件及高清晰度系统架构图,助你少踩坑,直接起飞!背景:将 FastAPI 项目拉到本地,在本地通过ssh_tunnel全局 SSH 跳板管理 连接有SSH的生产环境数据库进行调试;但是报错:1045, “Access denied for user ‘数据库用户@SSH 服务器 IP’ (using password: YES)”;但是单独创建一个测试类 doris_ssh_test.py 通过SSH Tunnel建立 127.0.0.1 连接 成功通过SSH跳转到生产数据库没有问题;关键词:FastAPI、SQLAlchemy 2.x、Doris、SSH 隧道、URL.render_as_string、密码脱敏、1045适用场景:FastAPI + SQLAlchemy 2.x通过统一 SSH 跳板机访问 Doris(MySQL 协议)使用.env/.env.prod管理配置大致流程图1. 业务需求 技术目标1.1 业务要求项目使用FastAPI提供接口。数据层包括:MySQL(多个库)Doris(查询分析库)生产环境(APP_ENV=prod)只能通过 SSH 跳板机访问 Doris,不能直连。需要一个统一的 SSH 隧道通道,而不是“一个数据库建一个 SSH”。目标行为:当满足:APP_ENV=prod(Config.py)SSH_TUNNEL__ENABLED=true两个图中的两处配置开启后此时所有数据库连接(包括 Doris、MySQL 等)都必须经由 SSH 隧道。2. 相关模块总览本次问题涉及四个关键模块:配置中心:app/core/config.py使用pydantic-settings管理多环境.env。暴露全局settings对象(settings.doris.url、settings.ssh_tunnel等)。统一 SSH 隧道:app/infra/ssh_tunnel.py封装SSHTunnelForwarder,为“某个远程 host:port”建立 / 复用本地端口。暴露get_tunneled_url(original_url: str) - str:输入:原始 DB URL(例如 Doris 的mysql+pymysql://...@10.111.160.243:9030/product?...)输出:改写为通过本地端口的 URL(mysql+pymysql://...@127.0.0.1:随机端口/product?...)Doris 接入:app/infra/doris.py用 SQLAlchemycreate_engine+sessionmaker构造 Doris Engine 和 Session。使用get_tunneled_url处理 URL,统一走 SSH。验证脚本:app/infra/doris_ssh_test.py独立脚本,通过 SSH 访问 Doris 并执行 SQL,用来验证配置和 SSH 是否正确。建议在文档中画一张架构图(图 1):FastAPI →doris.py→ssh_tunnel.py→ SSH 跳板机 → Doris方便大家快速理解链路。3. 配置体系 get_settings工作方式3.1 Settings 结构简化版app/core/config.py关键部分如下:# app/core/config.py(关键字段)fromenumimportEnumfromtypingimportOptional,ListfrompydanticimportBaseModelfrompydantic_settingsimportBaseSettings,SettingsConfigDict""" 配置环境 """classEnvEnum(str,Enum):local="local"dev="dev"test="test"prod="prod"classMysqlSettings(BaseModel):""" MySQL 相关配置: - main_url: 主库连接串 - back_url: 备库 1 - back2_url: 备库 2 """main_url:str=""back_url:Optional[str]=Noneback2_url:Optional[str]=NoneclassDorisSettings(BaseModel):""" Doris 相关配置: """url:str=""classSshTunnelSettings(BaseModel):""" 全局 SSH 跳板机配置(统一控制 MySQL / Doris 等是否走 SSH): - enabled: 是否启用 SSH 隧道 - ssh_host / ssh_port: 跳板机地址 - ssh_username / ssh_password: SSH 登录凭据 - private_key_path: 如需走私钥,可在 .env.* 中配置 """enabled:bool=Falsessh_host:str=""ssh_port:int=22ssh_username:str=""ssh_password:str=""classSettings(BaseSettings):""" 全局配置入口。 通过 pydantic-settings 从以下文件加载配置: - .env - .env.env (env 由 OS 环境变量 APP_ENV 决定,默认 prod) 嵌套配置使用 env_nested_delimiter="__": - MYSQL__MAIN_URL - settings.mysql.main_url - MYSQL__BACK_URL - settings.mysql.back_url - MYSQL__BACK2_URL - settings.mysql.back2_url - DORIS__URL - settings.doris.url - REDIS__URL - settings.redis.url - SSH_TUNNEL__ENABLED - settings.ssh_tunnel.enabled 等等。 """model_config=SettingsConfigDict(extra="ignore",env_nested_delimiter="__",)app_name:str="项目名称"debug:bool=Trueapi_prefix:str="/api"# 只是标记当前环境,用于日志展示,真正选择 .env.env 的是 OS 的 APP_ENVenv:EnvEnum=EnvEnum.local mysql:MysqlSettings=MysqlSettings()doris:DorisSettings=DorisSettings()ssh_tunnel:SshTunnelSettings=SshTunnelSettings()defget_settings()-"Settings":""" 读取 OS 环境变量 APP_ENV 来决定加载哪一个 .env.env 文件。 如果 APP_ENV 非法,则回退为 local。 """env_from_os=os.getenv("APP_ENV","prod")try:env=EnvEnum(env_from_os)exceptValueError:env=EnvEnum.local base_env_file=".env"env_specific_file=f".env.{env.value}"returnSettings(_env_file=[base_env_file,env_specific_file],_env_file_encoding="utf-8",)settings:Settings=get_settings()defdump_critical_config()-None:""" 调试用:打印与环境 / Doris / SSH 隧道相关的关键配置。 """print("=== CONFIG DEBUG ===")print(f"os.getenv('APP_ENV') =

相关文章:

FastAPI + SQLAlchemy + SSH + Doris 生产连接问题技术复盘

FastAPI + SQLAlchemy + SSH + Doris 生产连接报错1045 本文内容在公众号免费阅读; 获取方式: 关注公众号 [李指导数据前沿],回复关键词 “FastApi隧道” 即可获取本文配套的完整源代码文件及高清晰度系统架构图,助你少踩坑,直接起飞! 背景: 将 FastAPI 项目拉到本地,在…...

基于Spring Boot的高校学生心理健康管理系统设计与实现

目录 需求分析与功能模块设计技术选型与架构设计数据库设计关键功能实现安全与隐私保护测试与部署扩展性考虑 项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 需求分析与功能模块设计 明确系统核心需…...

强化学习实践:Q-learning算法在游戏AI中的训练过程

强化学习实践:Q-learning算法在游戏AI中的训练过程 在人工智能领域,强化学习因其独特的“试错”机制成为游戏AI开发的重要工具。其中,Q-learning作为一种经典的无模型强化学习算法,因其简单高效的特点,被广泛应用于游…...

普通人也能上手的 GoViewPro 平台,输入描述 AI 一键生成大屏神器

家人们,今天我必须要给大家安利这个超绝的 GoViewPro 平台!你是不是常常为制作大屏而烦恼,觉得过程繁琐又复杂?但是!有了 GoViewPro,一切都变得超简单。 点击前往 GoViewPro 地址查看👈&#xf…...

IDEA中如何使用注释模版(创建类时自动带上注释)

打开IDEA中设置可以参考我的模版:/*** Author: ${USER}* Date: ${DATE} ${TIME}* Description: TODO*/...

(9-3)多模态融合理论与方法:高层融合

9.3 高层融合高层融合位于多模态感知与系统控制的最上层,其核心目标不是对原始数据或中间状态进行联合估计,而是基于多模态信息形成统一的认知结果与决策输出。在这一层级中,多模态信息通常以语义、任务状态、风险评估或策略建议的形式参与融…...

现代Qt QWidget界面美化与用户体验提升深度技术报告

现代Qt QWidget界面美化与用户体验提升深度技术报告 在当今软件工程领域,桌面应用程序的视觉美学与交互质感已成为产品核心竞争力的重要组成部分。Qt框架凭借其卓越的跨平台能力与深厚的底层沉淀,始终是工业软件、工程工具及企业级应用的首选。然而&…...

vscode运行开发uniapp项目

1. 环境准备 安装 Node.js 确保已安装 Node.js(建议使用 LTS 版本)。下载地址:Node.js 官网。安装 VSCode 下载并安装最新版 VSCode:VSCode 官网。安装 HBuilderX(可选但推荐) UniApp 官方推荐使用 HBuild…...

【Iced】core库Vector 结构体源码解析(vector.rs)

这是 iced_core 中定义的 2D向量 类型&#xff0c;用于表示位移、方向、速度等具有大小和方向的量。 &#x1f3d7;️ 结构体定义 /// 2D向量 #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct Vector<T f32> {/// X分量pub x: T,/// Y分量pub y: T, …...

政务与金融机构数据交换“生死线”:用对网闸,杜绝“网络泄密”

在政务、金融等核心领域&#xff0c;网络如同“血管”&#xff0c;数据则是“血液”。既要保证“血液”在内外网间安全流动&#xff0c;又要严防“生命核心”被反向侵入&#xff0c;是信息安全建设的顶级难题。今天&#xff0c;我们就来拆解一个关键设备——网闸&#xff0c;看…...

保姆级教程:如何 5 分钟领养一只“龙虾”?

还在为飞书消息回复不过来而烦恼吗&#xff1f;想不想给团队引入一个能秒回信息、自动查数据、发通知的 AI 助手&#xff1f;没问题&#xff0c;今天我们就带你实现&#xff01;只需5分钟&#xff0c;在云端部署 ArkClaw 并接入飞书&#xff0c;就能把它变成你团队里 7x24 小时…...

U盘插入电脑没反应?亲测有效解决方法,新手零门槛搞定

相信很多朋友都遇到过这种情况&#xff0c;U盘插入电脑没反应&#xff0c;不知道是U盘坏了&#xff0c;还是电脑出了问题&#xff0c;生怕里面的资料丢失&#xff0c;只能到处找办法&#xff0c;甚至花钱找维修&#xff0c;既耽误时间又浪费钱。其实不用慌&#xff0c;U盘插入没…...

【实时Linux工业PLC解决方案系列】第三十一篇 - 实时Linux PLC容器化部署实践

一、简介&#xff1a;为什么PLC需要容器化&#xff1f;传统痛点&#xff1a;产线换型时&#xff0c;PLC程序需逐台烧录&#xff0c;停机2小时起。不同项目依赖冲突&#xff08;库版本、内核模块&#xff09;&#xff0c;"这台能跑&#xff0c;那台报错"。现场调试出差…...

全球企业动画制作市场运作商机研究报告

2026-2032年全球企业动画制作市场运作商机研究报告 【出版时间】&#xff1a;【2026.3月】 【出版机构】&#xff1a;【智信中科研究网】 【内容省略&#xff0c;详见官网内容】 1 行业定义 1.1 企业动画制作定义 1.2 行业分类 1.2.1 按产品类型分类 1.2.2 按内容分类 1.2.3 按…...

SQL注入 基于报错的回显分析

在URL中修改对应的ID值&#xff0c;数值型&#xff0c;字符型等等字符型&#xff1a;修改id值为1’&#xff0c;查看报错回显如图&#xff0c;1没有被执行&#xff0c;字符错误&#xff0c;则对应的SQL语句为&#xff1a;select * from User where id"$id" limit 0,1…...

angular问题及解决

1.问题&#xff1a; 列表点击进入一个详情页面&#xff0c;div的显示隐藏控制的&#xff0c;此详情页面有附件列表&#xff0c;当点第一个的时候正常显示的附件&#xff0c;当点第二个的时候&#xff0c;接口返回的是正确的&#xff0c;但是页面还是显示的第一个 考虑得需要强制…...

论文全流程规范化指南:从选题到定稿的学术逻辑拆解

在学术深造的道路上&#xff0c;论文写作是无法绕开的核心关卡。无论是本科毕业论文、硕士学位论文&#xff0c;还是博士阶段的期刊小论文&#xff0c;其本质都是一项严谨的学术研究。许多同学并非学术能力不足&#xff0c;而是缺乏对论文写作规范与逻辑的系统性认知。本文将从…...

DnsJumper:网页加速神器

软件获取地址 网络故障修复工具合集 有时候&#xff0c;你网络测速速度并不低&#xff0c;但打开网页加载却慢如蜗牛&#xff0c;这是由于你DNS解析过慢导致&#xff0c;今天给大家带来一款DNS切换神器DnsJumper&#xff0c;内置几十个最快的DNS&#xff0c;可以一键应用。 软…...

IAR扩展嵌入式开发平台,推出面向安全关键型应用的长期支持(LTS)服务

IAR今日宣布&#xff0c;对其嵌入式开发平台进行扩展&#xff0c;推出全新长期支持&#xff08;Long-Term Support&#xff0c;LTS&#xff09;服务&#xff0c;旨在帮助客户在漫长的产品生命周期中&#xff0c;维持稳定、可复现的工具链。 在汽车、工业自动化、医疗等安全关键…...

收藏!90天打造你的AI同事:从0到1落地AI Agent实战清单

把 AI 变成“同事”&#xff0c;不是插件&#xff1a;一份可落地的 AI Agent 路线图 从工厂车间的智能排产&#xff0c;到办公室里能自主决策的智能体&#xff0c;越来越多企业正在经历一场跃迁&#xff1a;从“数字化”进阶到“智能化”。但现实也很一致: 投入不小&#xff0c…...

高效集成的DCIM管理系统引领数据中心智能化管理革命

高效集成的DCIM管理系统正在重新定义数据中心的管理方式。通过优化各项资源配置&#xff0c;该系统可以有效整合不同管理模块&#xff0c;实现信息的实时传递和处理。这不仅提高了数据中心的整体运行效率&#xff0c;还大幅提升了安全性。系统内置环境监控功能&#xff0c;能够…...

【回溯算法——N皇后】

本次复习的是回溯算法中的一道经典问题——N皇后问题&#xff0c;对应leetcode 51.N皇后 内容来源于代码随想录 题目描述 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&…...

Python面向对象编程(OOP)详解:类、对象、继承、多态、封装

面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种主流的编程范式&#xff0c;核心思想是“以对象为中心”&#xff0c;将数据&#xff08;属性&#xff09;和操作数据的方法&#xff08;行为&#xff09;封装在一起&#xff0c;通过…...

灵机一物AI智能电商小程序(已上线)-从“帮我买抽纸”到自动下单支付——大模型驱动全链路自动购物系统实战

作者&#xff1a;vx:Maris5188摘要&#xff1a;传统电商购物需要用户手动搜索、对比、选规格、下单、支付&#xff0c;操作路径长、决策成本高。本文基于大模型LangGraph状态机Chainlit任务编排&#xff0c;实现一套从自然语言指令到支付完成的端到端自动购物系统。用户只需一句…...

CoMAM:让多智能体记忆系统学会“团队协作“的强化学习框架

图解CoMAM&#xff1a;让多智能体记忆系统学会"团队协作"的强化学习框架 开篇导读 你有没有想过&#xff0c;为什么和AI对话久了&#xff0c;它还是记不住你的偏好&#xff1f;上下文窗口限制是根本原因——LLM只能看到有限的历史对话。为了解决这个问题&#xff0c;…...

2026最新版 Android Studio 安装与配置全教程(保姆级)

哈喽各位小伙伴&#xff5e; 想要入门Android开发&#xff0c;第一步就是把开发环境搭好。今天这篇博客&#xff0c;我会带你从零开始安装Android Studio&#xff0c;覆盖下载、安装、SDK配置、模拟器、环境变量、新建项目全流程&#xff0c;新手也能一次成功&#xff0c;少走弯…...

jdbc通信原理

一、普通查询&#xff08;默认行为&#xff09; 正确流程 JDBC客户端通过Socket与MySQL服务器建立TCP连接。客户端发送SQL查询语句。MySQL服务器执行查询&#xff0c;将结果集数据从存储引擎读出&#xff0c;放入服务器内核的发送缓冲区&#xff08;位于操作系统内核空间&#…...

从零构建RAG系统:小白程序员必备的全局观与收藏指南

本文旨在帮助读者建立RAG系统的全局观&#xff0c;从离线解析、Query理解、在线召回到上下文生成&#xff0c;详细阐述了四大模块及其间的六个关键联动点&#xff0c;如Chunk大小与LLM窗口的配合、Query解析结果对检索策略的指导等。文章强调模块间的相互影响&#xff0c;并通过…...

量化开发实战手册·第2篇:数据源选型五大维度——像评估股票一样科学评估你的行情接口

这是《量化开发实战手册》系列的第二篇文章。在第一篇里&#xff0c;我帮你梳理了主流数据源的优缺点和适用场景。但很多读者问&#xff1a;到底怎么科学地评估一个行情接口&#xff1f;看官网介绍都挺好&#xff0c;一用就踩坑。今天&#xff0c;我从产品体验官的视角&#xf…...

Python 免费开源库精选:那些“不要钱”却“值千金”的神器

⚠️ 再次长文预警&#xff01;前方是“免费开源”的宝藏海洋&#xff01;⚠️&#x1f4e2; 写在前面&#xff08;老规矩&#xff09;&#xff1a; 嘿&#xff0c;朋友&#xff01;既然你看到了这里&#xff0c;说明你对 Python 的**“免费午餐”很感兴趣&#xff01;&#x1…...