管理员用户在火箭聊天中失败



我一直在云实例上运行rocketchat。我使用了rocketchat中下面文档中指定的参数,通过yaml文件中的docker compose创建管理员用户。

https://docs.rocket.chat/guides/administrator-guides/create-the-first-admin

我无法创建管理员用户,因为我的变量被正确指定。

docker-compose.yaml

version: '3.8'
services:
rocketchat:
image: rocketchat/rocket.chat:latest
container_name: $ROCKETCHAT_CONTAINER_NAME
command: >
bash -c
"for i in `seq 1 30`; do
node main.js &&
s=$$? && break || s=$$?;
echo "Tried $$i times. Waiting 5 secs...";
sleep 5;
done; (exit $$s)"
restart: unless-stopped
volumes:
- ./uploads:/app/uploads
depends_on:
- mongo
environment:
- PORT=3000
- ROOT_URL=http://xxxxxxxxx:3000
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- MAIL_URL=smtp://smtp.email
- ADMIN_USERNAME=admin
- ADMIN_PASS=password
- ADMIN_EMAIL=beulah@xxxxxx.com
ports:
- 3000:$ROCKETCHAT_PORT
labels:
- "traefik.backend=rocketchat"
- "traefik.frontend.rule=Host: your.domain.tld"
networks:
- $ROCKETCHAT_NETWORK
mongo:
image: mongo:$MONGO_IMAGE_TAG
container_name: $MONGO_CONTAINER_NAME
restart: unless-stopped
volumes:
- ./data/db:/data/db
command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
env_file: .env
labels:
- "traefik.enable=false"
networks:
- $ROCKETCHAT_NETWORK
mongo-init-replica:
image: mongo:$MONGO_IMAGE_TAG
container_name: $MONGO_REPLICA_CONTAINER_NAME
command: >
bash -c
"for i in `seq 1 30`; do
mongo mongo/rocketchat --eval "
rs.initiate({
_id: 'rs0',
members: [ { _id: 0, host: 'localhost:27017' } ]})" &&
s=$$? && break || s=$$?;
echo "Tried $$i times. Waiting 5 secs...";
sleep 5;
done; (exit $$s)"
depends_on:
- mongo
env_file: .env
networks:
- $ROCKETCHAT_NETWORK
networks:
rocketchat:

我无法重现这个问题,尽管您可能遇到了一个常见的陷阱。Tl;dr:如果你在同一目录下的一台机器上运行这个程序好几次,很可能是mongo的存储。在第一次设置之后,它创建了./data目录,在其中保存用户帐户和其他所有内容。如果你创建了一次admin,它就不会再经历这种情况了。

通常,如果您在没有这些变量的情况下运行rocket.chat,它允许您通过web界面创建管理帐户。当您设置环境变量时,它可能会进入以下代码:programs/server/app/app.js:

...
if (process.env.ADMIN_PASS) {
if (_.isEmpty(getUsersInRole('admin').fetch())) {
...

但正如您所看到的,对于任何担任"管理员"角色的用户,都会进行第二次检查。换句话说,只有当角色中还没有人时,才会使用环境变量。

如果它确实使用了变量,你会在容器日志中看到这样的内容:

Inserting admin user:
Name: Administrator
Email: beulah@nonexistent.domain
Username: admin

如果没有,你会看到这样一行:

Users with admin role already exist; Ignoring environment variables ADMIN_PASS

发生这种情况的最明显原因是,您以前使用不同的凭据集运行撰写文件,或者通过web GUI注册帐户。在该管理员用户被保存到数据库中之后,数据库(在您的撰写文件中(将其数据保存在容器之外,因此它在重新启动之间是持久的。如果我所说的上一次发布对你来说是真的,并且你想从头开始——从你的撰写文件所在的./data目录中删除。mongo就在那里保存数据。

最新更新