this post was submitted on 26 Jun 2023
9 points (90.9% liked)

Selfhosted

39976 readers
375 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 1 year ago
MODERATORS
 

I'm trying to get Lemmy up and running on an Ubuntu 22.04 host. I've followed this guide supplemented by googling.

I can actually get to the front end, but it gives me "There was an error on the server." When I dig into the logs, I see this:

"thread 'main' panicked at 'Error connecting to postgres://lemmy:<my pg password>@postgres:5432/lemmy: FATAL:  password authentication failed for user \"lemmy\"\n","stream":"stderr","time":"2023-06-26T03:14:17.47460915Z"}

The only thing I can find about this error related to Lemmy is this thread, which indicates that the password was not defined in the docker-compose.yml file prior to starting the containers. I have since redone the configuration three times, each time deleting the volumes folder and double-checking that my postgre password is correct both in docker-compose.yml and lemmy.hjson.

Any ideas what might be the problem? Thank you kindly for any help you can provide!

top 19 comments
sorted by: hot top controversial new old
[–] [email protected] 5 points 1 year ago (1 children)

First of all, make sure the PostgreSQL username matches as well.

Does your password contain any special characters such as quotes, dollar signs or backslashes? They can have special meanings in yaml, resulting in the password being different from what you'd expect.

[–] [email protected] 1 points 1 year ago (1 children)

Username definitely matches!

And yes, I have several special characters, but the password is surrounded by single quotes in docker-compose.yml, so that should not matter, right?

[–] [email protected] 1 points 1 year ago (1 children)
[–] [email protected] 1 points 1 year ago* (last edited 1 year ago)

This makes sense, and I do have a dollar sign in my password...

However, I have confirmed that postgres does in fact parse the password correctly, as I can log in with the defined username/password combo directly using psql

So I think that disproves this theory, doesn't it?

edit: I tried getting rid of the dollar sign just in case... unfortunately I'm still getting the same error

[–] [email protected] 3 points 1 year ago (1 children)

Just a small point, it is never called "postgre". The original database was called "Postgres", and became "PostgreSQL" when it switched to the SQL query language. Today it is referred to either by its full name or as Postgres, always with an "s". I was initially quite confused by the title.

[–] [email protected] 1 points 1 year ago

Thank you! I did figure that out as I got further along into this... so much new stuff to learn!!

[–] [email protected] 2 points 1 year ago* (last edited 1 year ago) (2 children)

You can try setting a different password, maybe it's got a character in it that messes with things. Or try URL-encoding the password in lemmy.hjson.

You can also use a PostgreSQL client like the psql command line tool or a full fat DB client like DBeaver and try connecting to it and see if it accepts your password or not.

Example with just Docker and the PostgreSQL container you're already running:

max-p@lemmy-host ~/lemmy % docker exec -it lemmy-postgres-1 /bin/bash
postgres:/# psql -h 172.16.32.5 -U lemmy -W
Password: 
psql (15.3)
Type "help" for help.

lemmy=# \dt
                  List of relations
 Schema |            Name            | Type  | Owner 
--------+----------------------------+-------+-------
 public | __diesel_schema_migrations | table | lemmy
[... more tables ...]

It'll at least give you pointers as to where the issue lies: on the database side or lemmy's side.

[–] [email protected] 1 points 1 year ago

I learned something interesting in doing some more testing...

Using the -W option does indeed prompt for a password, but it accepts any value entered at the password prompt. In order to actually authenticate with a password when using psql, you must modify the pg_hba.conf file to use scram-sha-256 as the method for type local.

When I do this, I am unable to authenticate (both while using my actual password, and also while using a password of "test".

And then I figured out the problem.

In my docker-compose.yml, I had put single quotes around my postgres password, thinking this would be safe per my understanding of this question. However, just to check, I tried logging in to psql using the password 'test'. Sure enough, it worked.

I found another stack exchange with some different advice on strings in yaml: https://stackoverflow.com/questions/53082932/yaml-docker-compose-spaces-quotes

So, I tried my password again, without the single quotes... and it worked.

Perhaps this will help somebody beating their head against the wall in the future.

[–] [email protected] 1 points 1 year ago* (last edited 1 year ago) (1 children)

Thank you for enlightening me on the -W option in psql. I have successfully logged in using the expected password for lemmy. This points to something with the connection string. According to the error log, the connection string being used is:

postgres://lemmy:<my percent-encoded password>@postgres:5432/lemmy

As far as I can tell, the percent encoding is correct. Any ideas how to troubleshoot this further?

edit: it just occurred to me that my container name is lemmy_postgres_1, not postgres as was entered in my lemmy.hjson file. Let's see if changing that will work...

edit2: no, that had no effect. I'm getting the authentication error for user lemmy on both the lemmy container and the postgres container. :(

[–] [email protected] 2 points 1 year ago (1 children)

Yeah the name you want for the database host is postgres, or whatever the container is named in the docker-compose.yml. The full name of what the container ends up being named on the host (usually, lemmy-postgres-1 or something) doesn't matter, it's its internal name that's important.

That you get a password error specifically also suggests it is communicating with it properly otherwise the error would be connection refused or connection timeout or something similar.

Maybe try a very simple password temporarily like test, rebuild the postgres container/delete the volumes and see if it works. If it still doesn't work you have more troubleshooting to do, if it works then you know the password is tripping something somewhere.

[–] [email protected] 1 points 1 year ago (1 children)

Yeah the name you want for the database host is postgres, or whatever the container is named in the docker-compose.yml.

I was curious about this, and it turns out both work. I tested by pinging both postgres and lemmy_postgres_1, and both responded with the same IP address. Good to know, but I did go ahead and change it back to postgres

Maybe try a very simple password temporarily like test, rebuild the postgres container/delete the volumes and see if it works.

I did this, and I'm still getting the same error, so obviously something is wrong.

[–] [email protected] 1 points 1 year ago (1 children)

At this point it makes me wonder if your changes are making it to the containers. If you change the username for the db both for postgres and lemmy, do you get a different error about the new username? Maybe lemmy's just using the default config and not reading your hjson file, that's a good way to test that.

Otherwise I'm at a loss, it should be pretty simple.

[–] [email protected] 1 points 1 year ago* (last edited 1 year ago)

If you change the username for the db both for postgres and lemmy, do you get a different error about the new username?

I tried this... updated the user to lemmy1. The error message does indeed change to reflect the new user.

Super frustrating!

[–] [email protected] 2 points 1 year ago (2 children)

Do you get the same error by running psql on terminal?

[–] [email protected] 2 points 1 year ago

I don't know how to do this yet, but this will be the first thing I try this morning.

[–] [email protected] 2 points 1 year ago* (last edited 1 year ago) (1 children)

Frustratingly, when you use psql on the terminal, it does not prompt you for a password. So I'm still not sure if the password works or not :(

Ahh, ok... if you add the -W option when logging in to psql (psql -U lemmy -W), it will prompt for the password.

The password works! So, apparently it's something with the connection string.

[–] [email protected] 1 points 1 year ago

Turns out, unless you update pg_hba.conf to force password use, using the -W option prompts for a password, but authenticates with any value entered.

[–] MarsAgainstVenus 2 points 1 year ago

Are you sure you don’t have a return character in the user name after “lemmy” accidentally? I haven’t set up an instance but it looks like that could be your issue.

[–] [email protected] 1 points 1 year ago

Maybe double check and make sure you're also wiping the relevant containers completely so you're certain that you're making them fresh.

load more comments
view more: next ›