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

kle*_*lee 12 docker-compose rocket.chat

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

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:
Run Code Online (Sandbox Code Playgroud)

ane*_*yte 2

尽管您可能遇到过一个常见的陷阱,但我无法重现该问题。Tl;dr:如果您在一台机器上的同一目录中运行多次 - 它很可能是 mongo 的存储。首次设置后,它会创建./data保存用户帐户和其他所有内容的目录。如果您创建过一次管理员,则不会再经历此过程。

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

...
    if (process.env.ADMIN_PASS) {
      if (_.isEmpty(getUsersInRole('admin').fetch())) {
...
Run Code Online (Sandbox Code Playgroud)

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

如果它确实使用了变量,您将在容器日志中看到类似以下内容:

Inserting admin user:
Name: Administrator
Email: beulah@nonexistent.domain
Username: admin
Run Code Online (Sandbox Code Playgroud)

如果没有,您将看到如下行:

Users with admin role already exist; Ignoring environment variables ADMIN_PASS
Run Code Online (Sandbox Code Playgroud)

发生这种情况的最明显原因是您之前使用不同的凭据集运行了撰写文件或通过 Web GUI 注册了帐户。将管理员用户保存在数据库中后,数据库(在您的撰写文件中)将其数据保留在容器之外,因此它在重新启动之间是持久的。如果我关于之前发布的内容对您来说是正确的,并且您想从头开始 -./data从您的撰写文件所在的目录中删除目录。它在那里mongo保存数据。