转 聊天服务器
|-转 初始化 RocketChat 配置文件.
#!/usr/bin/env bash
# libs/setup_rocketchat.sh
#==========================================
# 安装/配置 RocketChat
#==========================================
setup_rocketchat_files() {
log "[SETUP] 初始化 RocketChat 配置文件..."
# 1. 必要变量检查
if [[ -z "$RC_DIR" || -z "$RC_DOMAIN" || -z "$RC_HOST_HTTP_PORT" ]]; then
error "RC_DIR / RC_DOMAIN / RC_HOST_HTTP_PORT 未设置"
return 1
fi
# 2. 创建目录
mkdir -p "$RC_DIR" "$RC_DIR/data/mongo"
# 3. 生成 docker-compose.yml(替换下载,使用内建模板)
local compose_file="$RC_DIR/docker-compose.yml"
cat > "$compose_file" << 'EOF'
version: '3.8'
services:
rocketchat:
image: rocketchat/rocket.chat:latest
container_name: rocketchat
restart: unless-stopped
environment:
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- ROOT_URL=https://${RC_DOMAIN}
- PORT=${RC_INTERNAL_PORT:-3000}
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
ports:
- '${RC_HOST_HTTP_PORT}:${RC_INTERNAL_PORT:-3000}'
depends_on:
- mongo
mem_limit: ${ROCKETCHAT_MEM_LIMIT:-2g}
cpus: ${ROCKETCHAT_CPU_LIMIT:-1.0}
networks:
- rocketchat-net
mongo:
image: mongo:6.0
container_name: rocketchat-mongo
restart: unless-stopped
command: --replSet rs0 --bind_ip_all
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
volumes:
- ./data/mongo:/data/db
- ./mongo-init.js:/mongo-init.js
entrypoint: |
bash -c '
mongo mongo:27017/admin --username "$$MONGO_INITDB_ROOT_USERNAME" --password "$$MONGO_INITDB_ROOT_PASSWORD" --eval "rs.initiate()" || \
mongo mongo:27017/admin --username "$$MONGO_INITDB_ROOT_USERNAME" --password "$$MONGO_INITDB_ROOT_PASSWORD" --eval "rs.status()"
exec docker-entrypoint.sh "$$@"
'
mem_limit: ${MONGO_MEM_LIMIT:-1g}
cpus: ${MONGO_CPU_LIMIT:-0.5}
networks:
- rocketchat-net
networks:
rocketchat-net:
driver: bridge
EOF
log "[OK] docker-compose.yml 生成完成: $compose_file"
# 4. 生成 .env(如果不存在)
local env_file="$RC_DIR/.env"
if [[ ! -f "$env_file" ]]; then
log "[GENERATE] 生成 RocketChat .env 文件..."
ensure_single_cred # 确保 MONGO 用户名密码已生成
cat > "$env_file" << EOF
# RocketChat 配置 - 通过脚本自动生成
# 生成时间: $(TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M:%S')
RC_DOMAIN=$RC_DOMAIN
RC_INTERNAL_PORT=${RC_INTERNAL_PORT:-3000}
RC_HOST_HTTP_PORT=$RC_HOST_HTTP_PORT
RC_HOST_HTTPS_PORT=${RC_HOST_HTTPS_PORT:-443}
# 资源限制
ROCKETCHAT_MEM_LIMIT=${ROCKETCHAT_MEM_LIMIT:-2g}
ROCKETCHAT_CPU_LIMIT=${ROCKETCHAT_CPU_LIMIT:-1.0}
MONGO_MEM_LIMIT=${MONGO_MEM_LIMIT:-1g}
MONGO_CPU_LIMIT=${MONGO_CPU_LIMIT:-0.5}
EOF
log "[OK] .env 文件生成完成: $env_file"
fi
# 5. 生成 MongoDB 初始化脚本(如果不存在)
local init_js="$RC_DIR/mongo-init.js"
if [[ ! -f "$init_js" ]]; then
cat > "$init_js" << 'EOF'
// rs.initiate() 由 entrypoint 执行,无需写在这里
EOF
log "[CREATE] MongoDB 初始化脚本占位: $init_js"
fi
log "[✅] RocketChat 配置就绪: $RC_DIR"
}
20250928 1839
good is below:
#!/usr/bin/env bash
# libs/setup_rocketchat.sh
#==========================================
# 安装/配置 RocketChat
#==========================================
setup_rocketchat_files() {
log "[SETUP] 初始化 RocketChat 配置文件..."
# 1. 必要变量检查
if [[ -z "$RC_DIR" || -z "$RC_DOMAIN" || -z "$RC_HOST_HTTP_PORT" ]]; then
error "RC_DIR / RC_DOMAIN / RC_HOST_HTTP_PORT 未设置"
return 1
fi
# 2. 创建目录
mkdir -p "$RC_DIR" "$RC_DIR/data/mongo"
# 3. 生成 docker-compose.yml(添加 env_file: .mongo_cred)
local compose_file="$RC_DIR/docker-compose.yml"
cat > "$compose_file" << 'EOF'
version: '3.8'
services:
rocketchat:
image: rocketchat/rocket.chat:latest
container_name: rocketchat
restart: unless-stopped
environment:
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- ROOT_URL=https://${RC_DOMAIN}
- PORT=${RC_INTERNAL_PORT:-3000}
# 注意:MONGO_INITDB_ROOT_* 由 .mongo_cred 提供,也可被 .env 覆盖
ports:
- '${RC_HOST_HTTP_PORT}:${RC_INTERNAL_PORT:-3000}'
depends_on:
- mongo
mem_limit: ${ROCKETCHAT_MEM_LIMIT:-2g}
cpus: ${ROCKETCHAT_CPU_LIMIT:-1.0}
networks:
- rocketchat-net
mongo:
image: mongo:6.0
container_name: rocketchat-mongo
restart: unless-stopped
command: --replSet rs0 --bind_ip_all
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
volumes:
- ./data/mongo:/data/db
- ./mongo-init.js:/mongo-init.js
env_file:
- .mongo_cred # ← 显式加载凭据文件
entrypoint: |
bash -c '
mongo mongo:27017/admin --username "$$MONGO_INITDB_ROOT_USERNAME" --password "$$MONGO_INITDB_ROOT_PASSWORD" --eval "rs.initiate()" || \
mongo mongo:27017/admin --username "$$MONGO_INITDB_ROOT_USERNAME" --password "$$MONGO_INITDB_ROOT_PASSWORD" --eval "rs.status()"
exec docker-entrypoint.sh "$$@"
'
mem_limit: ${MONGO_MEM_LIMIT:-1g}
cpus: ${MONGO_CPU_LIMIT:-0.5}
networks:
- rocketchat-net
networks:
rocketchat-net:
driver: bridge
EOF
log "[OK] docker-compose.yml 生成完成: $compose_file"
# 4. 生成 .env(非敏感配置)
local env_file="$RC_DIR/.env"
if [[ ! -f "$env_file" ]]; then
log "[GENERATE] 生成 RocketChat .env 文件..."
ensure_single_cred # 确保 MONGO 用户名密码已生成(来自你的函数)
cat > "$env_file" << EOF
# RocketChat 配置 - 通过脚本自动生成
# 生成时间: $(TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M:%S')
RC_DOMAIN=$RC_DOMAIN
RC_INTERNAL_PORT=${RC_INTERNAL_PORT:-3000}
RC_HOST_HTTP_PORT=$RC_HOST_HTTP_PORT
RC_HOST_HTTPS_PORT=${RC_HOST_HTTPS_PORT:-443}
# 资源限制
ROCKETCHAT_MEM_LIMIT=${ROCKETCHAT_MEM_LIMIT:-2g}
ROCKETCHAT_CPU_LIMIT=${ROCKETCHAT_CPU_LIMIT:-1.0}
MONGO_MEM_LIMIT=${MONGO_MEM_LIMIT:-1g}
MONGO_CPU_LIMIT=${MONGO_CPU_LIMIT:-0.5}
EOF
log "[OK] .env 文件生成完成: $env_file"
fi
# 5. 生成 .mongo_cred(敏感信息,权限 600)
local cred_file="$RC_DIR/.mongo_cred"
if [[ ! -f "$cred_file" ]]; then
log "[GENERATE] 生成 MongoDB 凭据文件: $cred_file"
ensure_single_cred # 确保 MONGO_INITDB_ROOT_USERNAME/PASSWORD 已定义
cat > "$cred_file" << EOF
# MongoDB root 用户凭据 - 仅用于初始化
# 生成时间: $(TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M:%S')
MONGO_INITDB_ROOT_USERNAME=$MONGO_INITDB_ROOT_USERNAME
MONGO_INITDB_ROOT_PASSWORD=$MONGO_INITDB_ROOT_PASSWORD
EOF
chmod 600 "$cred_file" # ? 严格权限
log "[OK] .mongo_cred 生成完成 (权限 600)"
else
log "[SKIP] .mongo_cred 已存在,跳过生成"
fi
# 6. 生成 MongoDB 初始化脚本(如果不存在)
local init_js="$RC_DIR/mongo-init.js"
if [[ ! -f "$init_js" ]]; then
cat > "$init_js" << 'EOF'
// rs.initiate() 由 entrypoint 执行,无需写在这里
EOF
log "[CREATE] MongoDB 初始化脚本占位: $init_js"
fi
log "[✅] RocketChat 配置就绪: $RC_DIR"
log ""
log "? 启动服务请运行:"
log " cd $RC_DIR && docker compose up -d"
log ""
}
20250928 1850 ...
浏览更多内容请先登录。
立即注册
更新于:2025-09-28 18:50:45
相关内容
推荐内容