Closed tehbra1n closed 1 month ago
Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.
@tehbra1n I had also struggled with mongodb authentication when first setting up this container, mostly because I didn't read, understand and follow the instructions carefully enough (and I tried to use the js file with a root user). If you're setting up mongodb with a root user, then I'm missing the following in your compose:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
Also I needed to add the database name in the init script as in "${mongo_init_bin} unifi-db" <<EOF
Can you post the compose of your mongodb container?
For reference, this is my sh init script. I just ran it with version 8.3.32-ls55 on mondodb vs 7.0.12
#!/bin/bash
if which mongosh > /dev/null 2>&1; then
mongo_init_bin='mongosh'
else
mongo_init_bin='mongo'
fi
"${mongo_init_bin} unifi-db" <<EOF
use ${MONGO_AUTHSOURCE}
db.auth("${MONGO_INITDB_ROOT_USERNAME}", "${MONGO_INITDB_ROOT_PASSWORD}")
db.getSiblingDB("${MONGO_DBNAME}").createUser({
user: "${MONGO_USER}",
pwd: "${MONGO_PASS}",
roles: [
{ db: "${MONGO_DBNAME}", role: "dbOwner" },
{ db: "${MONGO_DBNAME}_stat", role: "dbOwner" }
]
})
db.getSiblingDB("${MONGO_DBNAME}_stat").createUser({
user: "${MONGO_USER}",
pwd: "${MONGO_PASS}",
roles: [
{ db: "${MONGO_DBNAME}_stat", role: "dbOwner" }
]
})
I was having a similar issue as OP, but eventually noticed that adding a space before the password seemed to get me beyond that issue but into another.
Timeouts, error creating bean, and tomcat not starting..
image: docker.io/mongo:7.0
ports:
- '27017:27017'
container_name: unifi-db
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=**********
- MONGO_USER=unifi
- MONGO_PASS=**********
- MONGO_DBNAME=unifi
- MONGO_AUTHSOURCE=admin
volumes:
- /opt/docker_volumes/mongodb/data:/data/db
- /opt/docker_volumes/mongodb/init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro
restart: unless-stopped
Here is my compose for mongodb. I feel like I overlooked something in the directions too but I'm just not seeing it.
@tehbra1n I had also struggled with mongodb authentication when first setting up this container, mostly because I didn't read, understand and follow the instructions carefully enough (and I tried to use the js file with a root user). If you're setting up mongodb with a root user, then I'm missing the following in your compose:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME} - MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
Also I needed to add the database name in the init script as in
"${mongo_init_bin} unifi-db" <<EOF
Can you post the compose of your mongodb container?For reference, this is my sh init script. I just ran it with version 8.3.32-ls55 on mondodb vs 7.0.12
#!/bin/bash if which mongosh > /dev/null 2>&1; then mongo_init_bin='mongosh' else mongo_init_bin='mongo' fi "${mongo_init_bin} unifi-db" <<EOF use ${MONGO_AUTHSOURCE} db.auth("${MONGO_INITDB_ROOT_USERNAME}", "${MONGO_INITDB_ROOT_PASSWORD}") db.getSiblingDB("${MONGO_DBNAME}").createUser({ user: "${MONGO_USER}", pwd: "${MONGO_PASS}", roles: [ { db: "${MONGO_DBNAME}", role: "dbOwner" }, { db: "${MONGO_DBNAME}_stat", role: "dbOwner" } ] }) db.getSiblingDB("${MONGO_DBNAME}_stat").createUser({ user: "${MONGO_USER}", pwd: "${MONGO_PASS}", roles: [ { db: "${MONGO_DBNAME}_stat", role: "dbOwner" } ] })
I tried your sh code for kicks and got two errors:
unifi-db | /docker-entrypoint-initdb.d/init-mongo.sh: line 25: warning: here-document at line 8 delimited by end-of-file (wanted `EOF') unifi-db | /docker-entrypoint-initdb.d/init-mongo.sh: line 8: mongosh unifi-db: command not found
I added the EOF at line 25 but the error at line 8 remains.
Try new version of init-mongo.sh script.
Try new version of init-mongo.sh script.
The latest version of the script worked. Thanks!
Try new version of init-mongo.sh script.
still having issues.
Caused by: java.lang.IllegalArgumentException: Empty key
at java.base/javax.crypto.spec.SecretKeySpec.<init>(SecretKeySpec.java:113)
at com.mongodb.internal.connection.ScramShaAuthenticator$ScramShaSaslClient.hi(ScramShaAuthenticator.java:274)
at com.mongodb.internal.connection.ScramShaAuthenticator$ScramShaSaslClient.getClientProof(ScramShaAuthenticator.java:250)
at com.mongodb.internal.connection.ScramShaAuthenticator$ScramShaSaslClient.computeClientFinalMessage(ScramShaAuthenticator.java:227)
at com.mongodb.internal.connection.ScramShaAuthenticator$ScramShaSaslClient.evaluateChallenge(ScramShaAuthenticator.java:166)
at com.mongodb.internal.connection.SaslAuthenticator.lambda$authenticate$0(SaslAuthenticator.java:67)
```
Empty key
It appears not to notice key or password. Verify indentations and that all required values are present. Also, try alphanumeric passwords of 8 length without any special characters. If it still does not want to start, then post your compose file. (Remember to nuke your mount directories between tests)
After struggling with the same issues for a long time, I want to post my solution here.
First step is to verify that the db unifi user credentials are working - I temporarily exposed unifi-db:27017 and used mongodb-compass to login with my defined credentials.
Here was my first mistake: By running rm -rf /mnt/db/*
(/data/db
dir in the container), the .mongo
directory was missed. This caused the init script not creating the user correctly, so new credentials were not applied.
After completely cleaning the db directory and restarting the container, I was able to login as unifi
.
Next issue was java.lang.IllegalArgumentException: Empty key
from the admin container.
This was solved by deleting all contents of the /config
mount dir.
Lesson learned: Clean ALL mounted directories before trying a different configuration.
Is there an existing issue for this?
Current Behavior
On starting unifi-network-application in a new install, I cannot log in to the controller using my credentials after importing my old controller config.
Expected Behavior
I should be able to log into the controller using my credentials from the old controller.
Steps To Reproduce
Install mongo and unifi-network-application following the readme. Start mongo and then unifi-network-application. I confirmed that the init script is run in the mongo container logs.
Environment
CPU architecture
x86-64
Docker creation
Container logs