| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #!/usr/bin/env bash
- # =============================================================================
- # FranklinWH Toolbox - 数据库从零初始化脚本
- # =============================================================================
- # 作用:在一台全新的 Ubuntu 服务器上,完成本项目依赖的本地数据库初始化:
- # 1. PostgreSQL:创建角色 / 数据库 / schema / alarm_snapshot 表
- # 2. MongoDB :无需建表(集合首次写入自动创建),此处仅做连通性检查
- # 3. Redis :仅做连通性检查
- #
- # MinIO 不在本脚本范围内:建桶 + 业务账号 + 策略统一由 provision_minio.sh 负责。
- #
- # 前置条件:相关服务已安装并运行(见 docs/DEPLOYMENT.md 第 3 章)。
- # 本脚本只做“建库建表”,不负责安装数据库软件、不处理 MinIO。
- #
- # 用法:
- # ./init_databases.sh # 使用默认值
- # PG_FWH_PASSWORD='强密码' ./init_databases.sh
- #
- # 可用环境变量(均有默认值):
- # PG_FWH_PASSWORD PostgreSQL 业务角色 fwh_toolbox 的密码 (默认 fwh_toolbox)
- # MONGO_URI Mongo 连接串 (默认 mongodb://127.0.0.1:27017)
- # REDIS_HOST/PORT Redis 地址 (默认 127.0.0.1:6379)
- # =============================================================================
- set -euo pipefail
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
- SQL_FILE="${SCRIPT_DIR}/../sql/init_pgsql.sql"
- # [必填] PostgreSQL 业务角色 fwh_toolbox 的密码
- # (必须与 config.env 里 POSTGRES_DSN 的 password 一致)
- PG_FWH_PASSWORD="${PG_FWH_PASSWORD:-fwh_toolbox}"
- MONGO_URI="${MONGO_URI:-mongodb://127.0.0.1:27017}"
- REDIS_HOST="${REDIS_HOST:-127.0.0.1}"
- REDIS_PORT="${REDIS_PORT:-6379}"
- info() { echo -e "\033[1;34m[INFO]\033[0m $*"; }
- ok() { echo -e "\033[1;32m[ OK ]\033[0m $*"; }
- warn() { echo -e "\033[1;33m[WARN]\033[0m $*"; }
- err() { echo -e "\033[1;31m[FAIL]\033[0m $*" >&2; }
- # ---------------------------------------------------------------------------
- # 1. PostgreSQL
- # ---------------------------------------------------------------------------
- init_postgres() {
- info "初始化 PostgreSQL ..."
- if ! command -v psql >/dev/null 2>&1; then
- err "未找到 psql,请先安装 PostgreSQL。"
- return 1
- fi
- if [[ ! -f "${SQL_FILE}" ]]; then
- err "找不到 SQL 文件:${SQL_FILE}"
- return 1
- fi
- # 以 postgres 超级用户执行;密码作为 psql 变量传入(脚本内部用 %L 转义)
- sudo -u postgres psql -v ON_ERROR_STOP=1 \
- -v fwh_pwd="${PG_FWH_PASSWORD}" \
- -f "${SQL_FILE}"
- ok "PostgreSQL 初始化完成"
- }
- # ---------------------------------------------------------------------------
- # 2. MongoDB(连通性检查)
- # ---------------------------------------------------------------------------
- check_mongo() {
- info "检查 MongoDB 连通性 ..."
- if command -v mongosh >/dev/null 2>&1; then
- mongosh --quiet "${MONGO_URI}" --eval 'db.runCommand({ ping: 1 }).ok' >/dev/null \
- && ok "MongoDB 可连接(集合会在首次写入时自动创建)" \
- || warn "MongoDB 连接失败,请检查 mongod 是否运行"
- else
- warn "未找到 mongosh,跳过 MongoDB 连通性检查"
- fi
- }
- # ---------------------------------------------------------------------------
- # 3. Redis(连通性检查)
- # ---------------------------------------------------------------------------
- check_redis() {
- info "检查 Redis 连通性 ..."
- if command -v redis-cli >/dev/null 2>&1; then
- [[ "$(redis-cli -h "${REDIS_HOST}" -p "${REDIS_PORT}" ping 2>/dev/null)" == "PONG" ]] \
- && ok "Redis 可连接" \
- || warn "Redis 连接失败,请检查 redis-server 是否运行"
- else
- warn "未找到 redis-cli,跳过 Redis 连通性检查"
- fi
- }
- # ---------------------------------------------------------------------------
- # 4. MinIO
- # 建桶 + 业务账号 + 策略统一由 provision_minio.sh 负责,本脚本不再处理 MinIO。
- # ---------------------------------------------------------------------------
- main() {
- echo "===== FranklinWH Toolbox 数据库初始化 ====="
- init_postgres
- check_mongo
- check_redis
- echo "===== 全部完成 ====="
- echo "提示:MinIO 建桶 + 业务账号 + 策略请运行 provision_minio.sh"
- }
- main "$@"
|