聊天服务器

初始化 RocketChat 配置文件.

PHPer 2025-09-28 3 0 0
#!/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
    您需要登录后才可以评论。 立即注册
    相关内容

    聊天服务器搭建-使用snap+Nginx快速安装RocketChat(2022年6月最新版)

    在OnpenVZ 上安装Rocket Chat 实测中

    推荐内容

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作

    【车险课堂】什么是无赔款优待系数ncd,你“造”吗?