- 新增PostgreSQL数据库支持,包含内置和外部数据库两种部署模式 - 实现机台管理功能,包括保护状态控制和VHD关键词设置 - 添加用户认证系统,支持会话管理和权限控制 - 更新Docker配置,支持数据库持久化和健康检查 - 扩展API接口,提供完整的RESTful API文档 - 更新客户端代码以支持机台ID和保护检查功能 - 添加数据库初始化脚本和配置指南
72 lines
2.1 KiB
Bash
72 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
# 内置PostgreSQL数据库初始化脚本
|
|
# 此脚本在Docker容器启动时运行,用于初始化内置PostgreSQL数据库
|
|
|
|
set -e
|
|
|
|
# 日志函数
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
|
|
}
|
|
|
|
# 数据库配置
|
|
DB_NAME="${DB_NAME:-vhd_select}"
|
|
DB_USER="${DB_USER:-postgres}"
|
|
DB_PASSWORD="${DB_PASSWORD:-vhd_select_password}"
|
|
PGDATA="${PGDATA:-/var/lib/postgresql/data}"
|
|
|
|
log "开始初始化内置PostgreSQL数据库..."
|
|
|
|
# 检查数据目录是否已初始化
|
|
if [ ! -s "$PGDATA/PG_VERSION" ]; then
|
|
log "初始化PostgreSQL数据目录..."
|
|
|
|
# 初始化数据库
|
|
su-exec postgres initdb -D "$PGDATA" --auth-local=trust --auth-host=md5
|
|
|
|
# 启动PostgreSQL服务
|
|
log "启动PostgreSQL服务..."
|
|
su-exec postgres pg_ctl -D "$PGDATA" -l "$PGDATA/postgresql.log" start
|
|
|
|
# 等待PostgreSQL启动
|
|
log "等待PostgreSQL服务启动..."
|
|
for i in {1..30}; do
|
|
if su-exec postgres pg_isready -q; then
|
|
log "PostgreSQL服务已启动"
|
|
break
|
|
fi
|
|
if [ $i -eq 30 ]; then
|
|
log "错误: PostgreSQL服务启动超时"
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
# 创建数据库和用户
|
|
log "创建数据库和用户..."
|
|
su-exec postgres psql -v ON_ERROR_STOP=1 <<-EOSQL
|
|
CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';
|
|
CREATE DATABASE $DB_NAME OWNER $DB_USER;
|
|
GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;
|
|
EOSQL
|
|
|
|
# 执行初始化SQL脚本
|
|
if [ -f "/app/init-db.sql" ]; then
|
|
log "执行数据库初始化脚本..."
|
|
su-exec postgres psql -v ON_ERROR_STOP=1 -d "$DB_NAME" -f "/app/init-db.sql"
|
|
log "数据库初始化脚本执行完成"
|
|
else
|
|
log "警告: 未找到数据库初始化脚本 /app/init-db.sql"
|
|
fi
|
|
|
|
# 停止PostgreSQL服务
|
|
log "停止PostgreSQL服务..."
|
|
su-exec postgres pg_ctl -D "$PGDATA" stop
|
|
|
|
log "内置PostgreSQL数据库初始化完成"
|
|
else
|
|
log "PostgreSQL数据目录已存在,跳过初始化"
|
|
fi
|
|
|
|
log "内置数据库初始化脚本执行完成" |