转 聊天服务器
|-转 初始化 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
相关内容
推荐内容