如何通过SSH将Django应用连接到Namecheap上托管的MySQL数据库
通过SSH连接Namecheap托管MySQL到Django的操作步骤
前提准备
先确认你已经拥有以下信息:
- SSH连接信息:服务器地址、SSH端口、SSH用户名、认证凭据(密码或SSH私钥文件)
- MySQL连接信息:数据库名称、数据库用户名、数据库密码、MySQL绑定地址(Namecheap默认是
127.0.0.1)、MySQL端口(默认3306)
方法一:手动建立SSH端口转发(适合本地开发场景)
这种方式操作最简单,不需要修改额外代码,只需要提前在本地启动SSH隧道即可:
- 终端执行端口转发命令,将远程MySQL端口映射到本地:
参考示例(适配Namecheap共享主机默认配置):ssh -L <本地自定义端口>:<MySQL绑定地址>:<MySQL端口> <SSH用户名>@<SSH服务器地址> -p <SSH端口>
注:Namecheap共享主机默认SSH端口为21098,可替换为你自己的实际端口ssh -L 3307:127.0.0.1:3306 your_ssh_user@192.168.1.100 -p 21098 - 保持终端窗口不关闭,隧道就会持续生效。此时修改Django项目
settings.py中的数据库配置:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名称', 'USER': '你的数据库用户名', 'PASSWORD': '你的数据库密码', 'HOST': '127.0.0.1', 'PORT': '3307', # 对应你刚才设置的本地自定义端口 } } - 执行
python manage.py makemigrations测试连接是否正常即可。
方法二:代码内嵌SSH隧道(适合不需要手动维护隧道的场景)
如果不想每次都手动开终端维持隧道,可以用sshtunnel库在Django启动时自动创建隧道:
- 安装依赖包:
pip install sshtunnel mysqlclient - 修改
settings.py文件,在数据库配置前添加隧道初始化逻辑:
注:生产环境建议将SSH密码、数据库密码等敏感信息存入环境变量,不要硬编码在代码中import sshtunnel # 初始化SSH隧道 tunnel = sshtunnel.SSHTunnelForwarder( ('你的SSH服务器地址', 21098), # 替换为实际SSH地址和端口 ssh_username='你的SSH用户名', ssh_password='你的SSH密码', # 如果用私钥认证则替换为 ssh_pkey='~/.ssh/私钥文件路径' remote_bind_address=('127.0.0.1', 3306) ) tunnel.start() DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名称', 'USER': '你的数据库用户名', 'PASSWORD': '你的数据库密码', 'HOST': '127.0.0.1', 'PORT': tunnel.local_bind_port, # 自动读取隧道绑定的本地端口 } }
常见问题排查
- 连接失败优先验证隧道是否正常:执行
mysql -h 127.0.0.1 -P <本地映射端口> -u <数据库用户名> -p测试是否能正常登录MySQL,排除SSH配置问题 - Namecheap的MySQL默认仅允许本地访问,远程绑定地址必须填写
127.0.0.1,不能填公网IP - 使用SSH私钥认证时,确保私钥文件权限为
600,否则SSH会拒绝连接 - 生产环境部署建议用系统服务(如systemd)常驻SSH隧道,比代码内嵌隧道稳定性更高
内容的提问来源于stack exchange,提问作者Peace TheeCoder
相关产品推荐
相关产品推荐

