创建应用程序:初始化ORM失败



我在启动节点时总是会收到这个错误。请回复我哪里出了问题。

错误:创建应用程序:初始化ORM:initializeORM#NewORM:无法初始化DB:无法打开?application_name=gorm DB conn&{0 0xc0004a93e0 0{0}[]map[]0 0 0xc000 5e29c0 false map[]map[]00 0 0 0 0 00 0 0 00x59b0a0}:无法连接到主机=/var/run/postgresql用户=根数据库=:服务器错误(FATAL:无法识别的配置参数"?application_name"(SQLSTATE 42704((

配置:

LOG_LEVEL=debug
ETH_CHAIN_ID=42
MIN_OUTGOING_CONFIRMATIONS=2
LINK_CONTRACT_ADDRESS=0xa36085F69e2889c224210F603D836748e7dC0088
CHAINLINK_TLS_PORT=0
SECURE_COOKIES=false
FEATURE_EXTERNAL_INITIATORS=true
ALLOW_ORIGINS=*
ETH_URL=wss://kovan.infura.io/ws/v3/8e32345678ghjk456789cvbn4yu
DATABASE_URL=postgresql://localhost:5432/kovan_demo?sslmode=disable
DATABASE_TIMEOUT=0
FEATURE_FLUX_MONITOR=true
MINIMUM_CONTRACT_PAYMENT=100000000000000000
CHAINLINK_DEV=true

问题在于配置变量DATABASE_URL的语法

要连接到数据库,您需要一个专门创建的带有PASSWORDUSER,然后通过启动chainlink节点来锁定此数据库。默认的postgres用户将无法工作,因为它用于管理目的。然后将这些凭据添加到环境变量中,语法如下:DATABASE_URL=postgresql://$USERNAME:$PASSWORD@$SERVER:5432/$DATABASE

因为你已经设置了";localhost";对于环境中的postgresql server IP,我假设您的postgres与Chainlink节点在同一主机上运行。有两种不同的连接方式:

1(您在docker容器中同时拥有Chainlink节点和postgresql服务器:

您需要指向postgresql服务器的container IDcontainer name,并在同一网络中创建这两个容器。在这里你可以找到docker的官方文档:https://docs.docker.com/network/bridge/

这意味着您必须桥接容器,以便能够通过以下方式进行通信:docker network create $NAME

然后将网络标志添加到Chainlink节点容器和postgres服务器容器的run命令中:--network $NAME

重新初始化所有这些容器后,您可以指向容器名称而不是IP。环境中DATABASE_URL的语法现在如下所示:DATABASE_URL=postgresql://$USERNAME:$PASSWORD@$CONTAINER_NAME:$5432/$DATABASE

您也可以使用docker network connect $NETWORK_NAME $CONTAINER_NAME将正在运行的docker容器连接到网络/用户定义的网桥,而不是重新初始化容器

2(postgresql服务器是主机上的一个应用程序,也是docker容器内的链接节点:

为了实现这一点,您需要配置链接节点和数据库,以便进行通信。

postgresql服务器:您需要更改配置文件以允许特定Ip范围的通信(默认情况下,postgres Ip范围仅为localhost设置(。通常您可以在/etc/postgresql/<version>/main目录中找到配置文件。

  1. 将postgresql.conf编辑为listen_addresses = '*'
  2. 将pg_hba.conf编辑为host all all 172.17.0.1/16 md5这个地址范围属于Docker,包括您的链链接容器的指定IP

Chainlink节点:您需要将--add-host=host:127.0.0.1添加到运行命令中,以启用与主机上的数据库和服务的连接。

还请确保通过将?ssl=disbable添加到ETH_URL配置中来禁用ssl以进行测试,因为如果您的服务器上没有配置ssl,Chainlink节点将返回[ERROR]日志(您可以稍后在服务器上配置ssl,因为这是您必须在官方文档中阅读的主题(

在生产中,强烈建议使用SSL(也可以是"只"在内部加密您的流量(,因为它只会保护您的所有数据库通信,并确保此数据库中的信息安全。

根据运行的shell,确保这些环境变量也保存在.zprofile.bash_profile中。

您可以通过此命令检查主目录中是否存在这些文件:ls -al

如果没有这样的文件,您可以创建一个:touch ~/.zprofile

然后从.env文件中以export为前缀写入所有变量保存变量后,运行以下命令以使更改在当前终端会话中生效:如果您正在运行bash shell,则为source .zprofilesource .bash_profile

这将确保您的chainlink节点在启动节点时知道在哪里可以找到环境变量:chainlink node start

最新更新