【问题标题】:How to change database to Postges in JupyterHub?如何在 JupyterHub 中将数据库更改为 Postgres?
【发布时间】:2020-12-29 09:21:50
【问题描述】:
我正在尝试使用我的配置运行 jupyterhub,并且我想更改数据库形式的 SQLite,它默认创建为 PostgreSQL,它已经存在并且有一些表(jupyterhub 和其他应用程序可以同时工作并共享数据库)。在网站上我只看到:
如果您不确定,我们建议您使用 PostgreSQL 进行生产...
但不知道如何更改此数据库。你以前做过这个并且可以描述它吗?比如我是自己创建一些表还是我只是传递一个链接,然后 jupyterhub 会做剩下的事情?
【问题讨论】:
标签:
postgresql
jupyterhub
【解决方案1】:
您需要在 postgres 中创建一个空数据库,然后在 jupyterhub 配置中设置 db_url 属性。例如,对于本地机器上的 postgres 数据库:
- 使用具有“创建数据库”属性的用户连接到您的 postgres 实例并运行:
CREATE DATABASE jupyterhub1;
- 在您的 jupyterhub_config.py 文件中设置此属性:
c.JupyterHub.db_url = 'postgresql://username:password@localhost:5432/jupyterhub1'
当您启动 jupyterhub 时,它会自动创建所需的表。另请注意,您不必将凭据硬编码到 db_url 属性中,您可以使用 os.environ["VAR_NAME"] 从环境变量中访问它们
谢谢
【解决方案2】:
好吧,我将分享对我有用的方法。我希望这个说明也能帮助其他面临同样困难的人。
-
对您的数据库进行完整备份,以防万一出现问题。 Source
-
如果您阅读了上面的源代码,您需要在config.yaml 中添加一些字段。
您必须将此部分添加到您的config.yaml:
hub:
db:
upgrade: true
-
继续关注上面提到的来源,你会明白的,因为有一些细节需要做。
-
这还不是全部!您需要创建数据库(使用 Mysql 或 Postgres)。完成数据库后,现在您应该拥有用户名、密码、数据库名称、主机和端口。
-
现在,看看这个info。这另一个page 突出了一个有趣的观点。 JupyterHub 文档说使用 Postgres 比 Mysql 更容易。您必须添加hub.db.type 和hub.db.url。查看文档以了解字符串连接。
postgresql+psycopg2://<db-username>:<db-password>@<db-hostname>:<db-port>/<db-name>
请注意,在本例中,我只是将用户名放在字符串中,而没有将任何内容作为密码。一旦可以添加hub.db.password,我就使用了这个选项。在我的示例中,我还将数据库的大小声明为 20Gi。
hub:
db:
upgrade: true
type: postgres
url: postgresql+psycopg2://postgres:@db_jupyterhub_xxxxx.amazonaws.com:5432/db_jupyterhub
password: ~
pvc:
accessModes:
- ReadWriteMany
storage: 20Gi
- 此时您意识到我没有输入密码。在这种情况下,当我将部署 JupyterHub(或创建
helm upgrade ...)时,我需要传递 --set 参数。所以对于这个例子,我用这种方式来升级已经存在的舵图。
helm upgrade -f config.yaml jupyterhub . \
--set hub.db.password=TYPE-PASSWORD-OF-DATABASE
通过这些步骤,部署应该可以工作。我用这种方式,效果很好。我还有一点要强调,cookieSecret。在文档中,他们提到了在 pod 重新启动的情况下重新创建它的需求。请查看有关deafult behavior of jupyterhub_cookie_secret 和此link explaining about cookie generation and uses 的主题。
我希望这些步骤对你们中的一些人有所帮助。