有没有Python本地方式通过SSH隧道连接Django到数据库的方法?我看到有人在主机上使用SSH端口转发,但我更希望一个可以轻松容器化的解决方案。
有没有Python本地方式通过SSH隧道连接Django到数据库的方法?我看到有人在主机上使用SSH端口转发,但我更希望一个可以轻松容器化的解决方案。
这很顺畅。
要求:
sshtunnel
包https://github.com/pahaz/sshtunnel
settings.py
中,在django DB设置块之前创建一个SSH隧道:from sshtunnel import SSHTunnelForwarder
# Connect to a server using the ssh keys. See the sshtunnel documentation for using password authentication
ssh_tunnel = SSHTunnelForwarder(
SERVER_IP,
ssh_private_key=PATH_TO_SSH_PRIVATE_KEY,
ssh_private_key_password=SSH_PRIVATE_KEY_PASSWORD,
ssh_username=SSH_USERNAME,
remote_bind_address=('localhost', LOCAL_DB_PORT_ON_THE_SERVER),
)
ssh_tunnel.start()
settings.py
中添加DB信息块。这里我正在添加一个默认的本地DB和远程DB,我们使用ssh隧道连接到它DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'HOST': NORMAL_DB_HOST,
'PORT': NORMAL_DB_PORT,
'NAME': NORMAL_DB_NAME,
'USER': NORMAL_DB_USER,
'PASSWORD': NORMAL_DB_PASSWORD,
},
'shhtunnel_db': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'HOST': 'localhost',
'PORT': ssh_tunnel.local_bind_port,
'NAME': REMOTE_DB_DB_NAME,
'USER': REMOTE_DB_USERNAME,
'PASSWORD': REMOTE_DB_PASSWORD,
},
}
就是这样。现在可以使用命令进行到远程数据库的迁移,例如$ python manage.py migrate --database=shhtunnel_db
或者通过类似于Models.objects.all().using('shhtunnel_db')
的代码在Python中调用数据库。
额外信息: 在我的情况下,远程数据库是由别人创建的,我只想读取它。为了避免编写模型并停用模型管理器,我使用以下Django命令从数据库中获取模型[src]:
python manage.py inspectdb
pip install sshtunnel
来安装它。 - SuB