我在启动节点时总是会收到这个错误。请回复我哪里出了问题。
错误:创建应用程序:初始化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
的语法
要连接到数据库,您需要一个专门创建的带有PASSWORD
的USER
,然后通过启动chainlink节点来锁定此数据库。默认的postgres
用户将无法工作,因为它用于管理目的。然后将这些凭据添加到环境变量中,语法如下:DATABASE_URL=postgresql://$USERNAME:$PASSWORD@$SERVER:5432/$DATABASE
因为你已经设置了";localhost";对于环境中的postgresql server IP
,我假设您的postgres与Chainlink节点在同一主机上运行。有两种不同的连接方式:
1(您在docker容器中同时拥有Chainlink节点和postgresql服务器:
您需要指向postgresql服务器的container ID
或container 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
目录中找到配置文件。
- 将postgresql.conf编辑为
listen_addresses = '*'
- 将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 .zprofile
或source .bash_profile
。
这将确保您的chainlink节点在启动节点时知道在哪里可以找到环境变量:chainlink node start