在Openshift中连接数据库的正确方法是什么?
我正在运行一个nodejs应用程序以及一个PostgreSQL数据库。目前,我借助以下环境变量从nodejs连接到数据库:POSTGRESQL_HOST
,POSTGRESQL_USER
,POSTGRESQL_PASSWORD
和POSTGRESQL_PORT
。 POSTGRESQL_USER
和POSTGRESQL_PASSWORD
被映射到正确的“秘密”。端口是静态的,所以它永远不会改变。我的问题是与主机。目前,我手动输入了POSTGRESQL_HOST
中的PostgreSQL窗格的IP地址,但每次实例重新部署时都会更改。连接到数据库的正确方法是什么?在Openshift中连接数据库的正确方法是什么?
在部署配置的环境变量中设置POSTGRESQL_HOST
时,请将其设置为PostgreSQL数据库服务的名称,而不是IP。该服务的名称作为内部DNS服务器中的主机名添加,并映射到适当的IP。所以当服务名称用作主机名时,事情会自动解决。
FWIW,我会亲自避免使用自动添加的环境变量。无论如何,这些名称的前缀是服务的名称(大写),因此您已经将其绑定到服务名称的知识上。最好在部署配置中使用环境变量而不是硬连线到代码中。自动添加的环境变量的另一个问题是,如果数据库是在前端之后创建的,那么它们最初不会被设置。所以最好避免它们。他们是在Docker中连接容器的遗产,他们从来就不是一种很好的做事方式。
如果您从吊舱的终端检查您的环境,请拨打printenv
,您应该看到automatically added variables。因此,假设您的Postgres服务被称为POSTGRES
,则可以使用环境变量POSTGRES_SERVICE_HOST
来访问您的数据库。
在这种情况下,我需要在我的nodejs应用程序代码中拥有'POSTGRES_SERVICE_HOST',而不是原来的'POSTGRESQL_HOST'吧?你知道是否可以将一个环境变量的值设置为另一个?例如,'POSTGRESQL_HOST' ='$ POSTGRES_SERVICE_HOST'? – pranavashok
如果你想继续使用'POSTGRESQL_HOST',Graham的答案是正确的选择。 –