如何使用JetBrains Gateway调试远程Gunicorn Python Web应用?
远程EC2+JetBrains Gateway调试Flask的解决方案(无静态IP)
核心思路
用ngrok把本地的调试监听端口映射到公网,让远程EC2上的JetBrains IDE实例能反向连接到本地调试服务,绕开静态IP缺失和ISP入站连接限制的问题。
操作步骤
1. 本地启动ngrok端口转发
- 下载ngrok到本地并安装(对应自己系统的版本即可)
- 打开本地终端,运行命令把PyCharm默认调试端口
5678转到公网:ngrok tcp 5678 - 运行后会得到一个公网地址,比如
tcp://0.tcp.ngrok.io:12345,记下来这个域名(0.tcp.ngrok.io)和端口(12345)
2. 配置远程IDE的Python Debug Server
- 在远程Gateway的
Edit Configurations里新建/编辑Python Debug Server:- Host填刚才的ngrok公网域名,Port填对应的端口
- 复制配置面板里的那段调试代码(就是带
pydevd_pycharm.settrace的那行)
3. 在Flask代码里加调试触发
- 找到Flask入口文件(比如
app.py),在启动代码前插入复制的调试代码,最好加个判断避免影响生产:if __name__ == '__main__': # 调试用,生产环境注释掉 import pydevd_pycharm pydevd_pycharm.settrace('0.tcp.ngrok.io', port=12345, stdoutToServer=True, stderrToServer=True) app.run(host='0.0.0.0', port=5000)
4. 启动调试
- 先在本地JetBrains客户端里启动刚才配置的
Python Debug Server(点调试按钮) - 然后在远程IDE里启动Flask应用,这时候EC2会通过ngrok连到本地的调试服务
- 接下来就跟本地调试一样,设断点、看变量、单步走都没问题
注意点
- 每次重启ngrok,公网地址和端口都会变,要同步更新IDE配置和代码里的参数
- 先在EC2上用
telnet 0.tcp.ngrok.io 12345测下能不能连通,确保网络没问题 - 如果用Gunicorn这类生产服务器,要把调试代码加到启动脚本里,或者确保进程能加载到调试逻辑
内容的提问来源于stack exchange,提问作者Nathan Wailes
相关产品推荐
相关产品推荐

