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)
尽管您可能遇到过一个常见的陷阱,但我无法重现该问题。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保存数据。
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |