Good afternoon! Newbie here, I’ve tried to install Lemmy using Ansible (Debian stable) and I ended up having an issue with the Postgresql connectivity (localhost via socket).
The error message I have is:
thread 'main' panicked at 'Error connecting to postgresql:///lemmy?user=lemmy&host=/var/run/postgresql: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
I have updated my /etc/postgresql/15/main/pg_hba.conf from peer to trust to md5 with no success (rebooting Postresql each time).
My config.hjson is:
database: {
uri: "postgresql:///lemmy?user=lemmy&host=/var/run/postgresql"
password: "{{ postgres\_password }}"
}
Any idea / suggestion? Thanks!
PS: cross-posted on the Matrix.org install support chat
Considering you are getting
No such file or directory
error then- Is the path correct?
- Can lemmy access the file? For example if lemmy is running in docker the path/socket does not exist in the container unless specifically instructed…
- Does lemmy process have the required permissions to actually read/access the file?
The path is correct, my investigations directed me towards a docker access issue as suggested by your #2. Looking into it now, thanks!
If lemmy is actually running in docker then you should rather use network instead of socket file - while it should work I would be afraid of docker shenanigans when it comes to mounting a socket file as volume into the container (it should work, but …).
You should be able to access postgres over network on the host thru extra_hosts settings:
extra_hosts: - "host.docker.internal:host-gateway"
https://stackoverflow.com/a/43541732
postgres://host.docker.internal:5432
My investigations so far have led me to the conclusion that the Ansible install creates multiple docker containers, including one for Lemmy and one for Postgresql. I need now to figure out how inter-container communications work but the host itself is not used.
Ah right, I assumed you were trying to connect the
lemmy
container to postgres running outside of docker.One important thing to remember with all docker compose files - the service name (the first keys in the
services:
configuration) is also the hostname of that container so to ping lemmy (from some other container in that docker compose) you would doping lemmy
, same for postgresping postgres
- but if the postgres service was nameddb0
then it would beping db0
.
You also do not have to expose ports - all containers in that compose share one network (exposing is for outside access).
All together your postgres config for lemmy should like like this:database: { # name of the postgres database for lemmy database: "lemmy" # username to connect to postgres user: "postgres" # password to connect to postgres password: "xxxxxxx" # host where postgres is running host: "postgres" # port where postgres can be accessed port: 5432 # maximum number of active sql connections pool_size: 10 }
Ok, the good news is that it works. The bad news is that I don’t understand what changed. 🤨