Search code examples
postgresqlazurechainlink

Azure VM and Postgresql ChainlinkNode: unable to lock ORM


To summarize, I am trying to run a Chainlink node via Docker on an Azure VM. I also created an Azure Postgresql DB and verified the VM is able to connect via psql cli.

Steps I took to get the node running (following this link):

  1. Create Azure VM

  2. Install docker

  3. mkdir ~/.chainlink-rinkeby

  4. Created .env file

  5. Set ETH_URL via an External Provider

  6. Create Postgres SQL Database following this link

  7. Set Remote Database_Url config using sslmode=disable

  8. Start the node with:

    cd ~/.chainlink-rinkeby && docker run -p 6688:6688 -v ~/.chainlink-rinkeby:/chainlink -it --env-file=.env smartcontract/chainlink local n

My .env file:

"ROOT=/chainlink LOG_LEVEL=debug ETH_CHAIN_ID=4 MIN_OUTGOING_CONFIRMATIONS=2 LINK_CONTRACT_ADDRESS=0x01BE23585060835E02B77ef475b0Cc51aA1e0709 CHAINLINK_TLS_PORT=0 SECURE_COOKIES=false GAS_UPDATER_ENABLED=true ALLOW_ORIGINS=*"
"ETH_URL=wss://cl-rinkeby.fiews.io/v1/MY_API_KEY"
"DATABASE_URL=postgresql://MY_USER_NAME:MY_PASSWORD@MY_DATABASE_nAME.postgres.database.azure.com:5432/postgres?sslmode=disable"

Error:

[ERROR] unable to lock ORM: dial tcp 127.0.0.1:5432: connect: connection refused logger/default.go:139   stacktrace=github.com/smartcontractkit/chainlink/core/logger.Error

I've also tried giving a version of 0.10.8 in the chainlink startup command but the error I get for that is:

 [ERROR] failed to initialize database, got error failed to connect to `host=/tmp user=root database=`: dial error

Solution

  • You are trying to connect your Chainlink node to a remote PostgreSQL database. This database is managed by AZUR's cloud service and hosted and administered there internally. The issue with the connection is that the Chainlink node wants to establish a connection to 127.0.0.1 and is therefore convinced that the Postgres is located locally in your Chainlink docker container. A docker container is an own environment and represent an own host, so 127.0.0.1 will loopback into the container itself. I recommend you to have a look here on the official network documentation of docker: https://docs.docker.com/config/containers/container-networking/

    With the version 0.10.8 you established a connection. The issue here is now related to the USER and the DATABASE. Please ensure that you create a database and an own USER for it and not use the admin credentials (root) like the superuser.

    You can enter the postgres via the azur cli and type in the following lines:

    CREATE DATABASE <yourdbname>;

    CREATE USER <youruser> WITH ENCRYPTED PASSWORD '<yourpass>';

    In addition you can have a look at this post related to the connection to your postgres database: https://stackoverflow.com/a/67992586/15859805