#!/usr/bin/env bash # ============================================================================= # FranklinWH Toolbox - 数据库从零初始化脚本 # ============================================================================= # 作用:在一台全新的 Ubuntu 服务器上,完成本项目依赖的本地数据库初始化: # 1. PostgreSQL:创建角色 / 数据库 / schema / alarm_snapshot 表 # 2. MongoDB :无需建表(集合首次写入自动创建),此处仅做连通性检查 # 3. Redis :仅做连通性检查 # 4. MinIO :创建业务 bucket(需要 mc 客户端) # # 前置条件:相关服务已安装并运行(见 docs/DEPLOYMENT.md 第 3 章)。 # 本脚本只做“建库建表建桶”,不负责安装数据库软件。 # # 用法: # ./init_databases.sh # 使用默认值 # PG_FWH_PASSWORD='强密码' ./init_databases.sh # # 可用环境变量(均有默认值): # PG_FWH_PASSWORD PostgreSQL 业务角色 fwh_toolbox 的密码 (默认 fwh_toolbox) # MINIO_ALIAS mc 的 alias 名 (默认 fwhlocal) # MINIO_ENDPOINT MinIO S3 API 地址 (默认 http://localhost:9198) # MINIO_ROOT_USER MinIO 管理员用户 (默认 minioadmin) # MINIO_ROOT_PASSWORD MinIO 管理员密码 (默认 minioadmin) # MINIO_BUCKET 业务 bucket 名 (默认 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" # TODO: [必填] PostgreSQL 业务角色 fwh_toolbox 的密码——请传入强口令,勿用默认 fwh_toolbox # (必须与 config.env 里 POSTGRES_DSN 的 password 一致) PG_FWH_PASSWORD="${PG_FWH_PASSWORD:-fwh_toolbox}" MINIO_ALIAS="${MINIO_ALIAS:-fwhlocal}" # TODO: [确认] MinIO S3 API 地址 MINIO_ENDPOINT="${MINIO_ENDPOINT:-http://localhost:9198}" # TODO: [必填] MinIO 管理员账户(建桶用)——传入真实强口令,勿用默认 minioadmin MINIO_ROOT_USER="${MINIO_ROOT_USER:-minioadmin}" MINIO_ROOT_PASSWORD="${MINIO_ROOT_PASSWORD:-minioadmin}" # TODO: [确认] 业务 bucket 名(须与 config.env 的 MINIO_BUCKET_NAME 一致) MINIO_BUCKET="${MINIO_BUCKET:-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 bucket # --------------------------------------------------------------------------- init_minio() { info "初始化 MinIO bucket ..." if ! command -v mc >/dev/null 2>&1; then warn "未找到 mc(MinIO Client),跳过 bucket 创建。" warn "可在 MinIO 控制台(默认 :9199)手动创建 bucket:${MINIO_BUCKET}" return 0 fi mc alias set "${MINIO_ALIAS}" "${MINIO_ENDPOINT}" "${MINIO_ROOT_USER}" "${MINIO_ROOT_PASSWORD}" >/dev/null if mc ls "${MINIO_ALIAS}/${MINIO_BUCKET}" >/dev/null 2>&1; then ok "MinIO bucket 已存在:${MINIO_BUCKET}" else mc mb "${MINIO_ALIAS}/${MINIO_BUCKET}" ok "MinIO bucket 已创建:${MINIO_BUCKET}" fi } main() { echo "===== FranklinWH Toolbox 数据库初始化 =====" init_postgres check_mongo check_redis init_minio echo "===== 全部完成 =====" } main "$@"