通过SSH隧道将Django连接到远程MySQL数据库的步骤如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_database_name',
'USER': 'your_database_username',
'PASSWORD': 'your_database_password',
'HOST': '127.0.0.1',
'PORT': 'your_local_port', # 本地隧道端口
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
'TEST': {
'NAME': 'your_test_database_name',
},
}
}
# 添加SSH隧道配置
SSH_TUNNEL = {
'SSH_HOST': 'your_ssh_host', # 远程SSH服务器地址
'SSH_PORT': your_ssh_port, # 远程SSH服务器端口
'SSH_USER': 'your_ssh_username', # 远程SSH服务器用户名
'SSH_PASSWORD': 'your_ssh_password', # 远程SSH服务器密码
'REMOTE_HOST': 'your_remote_mysql_host', # 远程MySQL主机地址
'REMOTE_PORT': your_remote_mysql_port, # 远程MySQL主机端口
'LOCAL_PORT': your_local_port, # 本地隧道端口,与上方数据库配置中的PORT对应
}
请注意替换上述代码中的占位符(your_...)为实际的配置值。
import paramiko
from sshtunnel import SSHTunnelForwarder
# 从settings.py中获取SSH隧道配置
ssh_host = settings.SSH_TUNNEL['SSH_HOST']
ssh_port = settings.SSH_TUNNEL['SSH_PORT']
ssh_user = settings.SSH_TUNNEL['SSH_USER']
ssh_password = settings.SSH_TUNNEL['SSH_PASSWORD']
remote_host = settings.SSH_TUNNEL['REMOTE_HOST']
remote_port = settings.SSH_TUNNEL['REMOTE_PORT']
local_port = settings.SSH_TUNNEL['LOCAL_PORT']
# 创建SSH隧道
server = SSHTunnelForwarder(
(ssh_host, ssh_port),
ssh_username=ssh_user,
ssh_password=ssh_password,
remote_bind_address=(remote_host, remote_port),
local_bind_address=('localhost', local_port),
)
# 启动SSH隧道
server.start()
from django.core.management import execute_from_command_line
import sys
# 启动Django开发服务器
execute_from_command_line(sys.argv)
python tunnel.py runserver
请注意,以上步骤仅适用于开发环境。在生产环境中,建议将数据库直接部署在云服务器上,并通过安全的网络连接方式访问,以提高性能和安全性。
领取专属 10元无门槛券
手把手带您无忧上云