繁体   English   中英

django db 与 ssh 隧道

[英]django db with ssh tunnel

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

它非常无缝。

要求: sshtunnel package https://github.com/pahaz/sshtunnel

  1. 在 django 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()
  1. 然后在settings.py中添加数据库信息块。 在这里,我添加了一个默认本地数据库和我们使用 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 代码中调用数据库Models.objects.all().using('shhtunnel_db')

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

python manage.py inspectdb

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM