gpt4 book ai didi

python - 带有 ssh 隧道的 django db

转载 作者:行者123 更新时间:2023-12-05 00:43:11 29 4
gpt4 key购买 nike

是否有 python 本地方式通过 ssh 隧道将 django 连接到数据库?我见过有人在主机中使用 ssh 端口转发,但我更喜欢可以轻松容器化的解决方案。

最佳答案

它非常无缝。

要求:sshtunnelhttps://github.com/pahaz/sshtunnel

  1. 在 django settings.py 中,在 django DB 设置 block 之前创建一个 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()
  1. 然后在 settings.py 中添加 DB 信息 block 。在这里,我添加了一个默认的本地数据库和我们使用 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 之类的行从 python 代码中调用数据库.all().using('shhtunnel_db')

额外:就我而言,远程数据库是由其他人创建的,我只想阅读它。为了避免编写模型和停用模型管理器,我使用以下 django 命令从数据库中获取模型 [ src ]:

python manage.py inspectdb

关于python - 带有 ssh 隧道的 django db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70743246/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com