mirror of
https://github.com/laoxong/nofx.git
synced 2026-06-07 03:07:56 +08:00
chore: load db credentials from .env in helper scripts
This commit is contained in:
@@ -1,52 +1,87 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
# 将beta_codes.txt刷到PostgreSQL数据库
|
||||
echo "🎟️ 导入beta_codes.txt到数据库"
|
||||
echo "🎟️ 导入 beta_codes.txt 到 PostgreSQL"
|
||||
|
||||
# 检查文件
|
||||
if [ ! -f "beta_codes.txt" ]; then
|
||||
echo "❌ 找不到beta_codes.txt文件"
|
||||
echo "❌ 找不到 beta_codes.txt 文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检测docker命令
|
||||
if command -v "docker-compose" &> /dev/null; then
|
||||
DOCKER_CMD="docker-compose"
|
||||
else
|
||||
elif command -v "docker" &> /dev/null && docker compose version &> /dev/null; then
|
||||
DOCKER_CMD="docker compose"
|
||||
else
|
||||
echo "❌ 错误:找不到 docker-compose 或 docker compose 命令"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 统计数量
|
||||
TOTAL=$(cat beta_codes.txt | wc -l)
|
||||
echo "📊 文件中共有 $TOTAL 个内测码"
|
||||
ENV_FILE=".env"
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
echo "📁 加载 .env 配置..."
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$ENV_FILE"
|
||||
set +a
|
||||
else
|
||||
echo "⚠️ 未找到 .env 文件,使用默认数据库配置"
|
||||
fi
|
||||
|
||||
# 生成SQL
|
||||
cat > import.sql << EOF
|
||||
INSERT INTO beta_codes (code) VALUES
|
||||
EOF
|
||||
POSTGRES_HOST=${POSTGRES_HOST:-postgres}
|
||||
POSTGRES_PORT=${POSTGRES_PORT:-5432}
|
||||
POSTGRES_DB=${POSTGRES_DB:-nofx}
|
||||
POSTGRES_USER=${POSTGRES_USER:-nofx}
|
||||
POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-}
|
||||
POSTGRES_SERVICE=${POSTGRES_SERVICE:-postgres}
|
||||
POSTGRES_CONTAINER_NAME=${POSTGRES_CONTAINER_NAME:-nofx-postgres}
|
||||
|
||||
# 读取每行并生成INSERT语句
|
||||
cat beta_codes.txt | while read line; do
|
||||
if [ -n "$line" ]; then
|
||||
echo "('$line')," >> import.sql
|
||||
fi
|
||||
done
|
||||
POSTGRES_CONTAINER=$($DOCKER_CMD ps -q "$POSTGRES_SERVICE" 2>/dev/null || true)
|
||||
if [ -z "$POSTGRES_CONTAINER" ]; then
|
||||
POSTGRES_CONTAINER=$(docker ps -q --filter "name=$POSTGRES_CONTAINER_NAME" | head -n 1)
|
||||
fi
|
||||
|
||||
# 移除最后的逗号并添加冲突处理
|
||||
sed -i '$ s/,$//' import.sql
|
||||
echo "ON CONFLICT (code) DO NOTHING;" >> import.sql
|
||||
if [ -z "$POSTGRES_CONTAINER" ]; then
|
||||
echo "❌ 找不到 PostgreSQL 容器 (${POSTGRES_SERVICE}/${POSTGRES_CONTAINER_NAME})"
|
||||
echo "💡 请确认数据库服务已启动"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PG_ENV_ARGS=()
|
||||
if [ -n "$POSTGRES_PASSWORD" ]; then
|
||||
PG_ENV_ARGS=(--env "PGPASSWORD=$POSTGRES_PASSWORD")
|
||||
fi
|
||||
|
||||
SQL_PAYLOAD=$(python3 - <<'PY'
|
||||
from pathlib import Path
|
||||
|
||||
codes = []
|
||||
for line in Path('beta_codes.txt').read_text(encoding='utf-8').splitlines():
|
||||
code = line.strip()
|
||||
if code and not code.startswith('#'):
|
||||
codes.append(f"('{code}')")
|
||||
|
||||
if codes:
|
||||
values = ",\n".join(codes)
|
||||
print(f"INSERT INTO beta_codes (code) VALUES\n{values}\nON CONFLICT (code) DO NOTHING;")
|
||||
PY
|
||||
)
|
||||
|
||||
if [ -z "$SQL_PAYLOAD" ]; then
|
||||
echo "⚠️ beta_codes.txt 中没有有效的内测码,已跳过导入"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
TOTAL_CODES=$(grep -vc '^\s*$' beta_codes.txt || true)
|
||||
echo "📊 检测到 $TOTAL_CODES 条内测码记录"
|
||||
|
||||
# 执行导入
|
||||
echo "🔄 导入到数据库..."
|
||||
$DOCKER_CMD exec -T postgres psql -U nofx -d nofx < import.sql
|
||||
printf '%s\n' "$SQL_PAYLOAD" | docker exec -i "${PG_ENV_ARGS[@]}" "$POSTGRES_CONTAINER" \
|
||||
psql -v ON_ERROR_STOP=1 --pset pager=off -U "$POSTGRES_USER" -d "$POSTGRES_DB"
|
||||
|
||||
echo "✅ 导入完成(重复的已跳过)"
|
||||
|
||||
# 清理
|
||||
rm import.sql
|
||||
|
||||
+53
-38
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
set -euo pipefail
|
||||
|
||||
# 保证从仓库根目录运行
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
@@ -22,51 +22,66 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 加载数据库配置
|
||||
ENV_FILE=".env"
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
echo "📁 加载 .env 配置..."
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$ENV_FILE"
|
||||
set +a
|
||||
else
|
||||
echo "⚠️ 未找到 .env 文件,使用默认数据库配置"
|
||||
fi
|
||||
|
||||
POSTGRES_HOST=${POSTGRES_HOST:-postgres}
|
||||
POSTGRES_PORT=${POSTGRES_PORT:-5432}
|
||||
POSTGRES_DB=${POSTGRES_DB:-nofx}
|
||||
POSTGRES_USER=${POSTGRES_USER:-nofx}
|
||||
POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-}
|
||||
POSTGRES_SERVICE=${POSTGRES_SERVICE:-postgres}
|
||||
POSTGRES_CONTAINER_NAME=${POSTGRES_CONTAINER_NAME:-nofx-postgres}
|
||||
|
||||
# 获取 PostgreSQL 容器 ID
|
||||
POSTGRES_CONTAINER=$($DOCKER_COMPOSE_CMD ps -q "$POSTGRES_SERVICE" 2>/dev/null || true)
|
||||
if [ -z "$POSTGRES_CONTAINER" ]; then
|
||||
POSTGRES_CONTAINER=$(docker ps -q --filter "name=$POSTGRES_CONTAINER_NAME" | head -n 1)
|
||||
fi
|
||||
|
||||
if [ -z "$POSTGRES_CONTAINER" ]; then
|
||||
echo "❌ 找不到 PostgreSQL 容器 (${POSTGRES_SERVICE}/${POSTGRES_CONTAINER_NAME})"
|
||||
echo "💡 请确认数据库服务已启动"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PG_ENV_ARGS=()
|
||||
if [ -n "$POSTGRES_PASSWORD" ]; then
|
||||
PG_ENV_ARGS=(--env "PGPASSWORD=$POSTGRES_PASSWORD")
|
||||
fi
|
||||
|
||||
run_psql() {
|
||||
local sql="$1"
|
||||
docker exec -i "${PG_ENV_ARGS[@]}" "$POSTGRES_CONTAINER" \
|
||||
psql -v ON_ERROR_STOP=1 --pset pager=off -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "$sql"
|
||||
}
|
||||
|
||||
echo "📋 数据库容器: $POSTGRES_CONTAINER"
|
||||
echo "📋 连接参数: $POSTGRES_HOST:${POSTGRES_PORT}/$POSTGRES_DB (user: $POSTGRES_USER)"
|
||||
|
||||
echo "📊 数据库概览:"
|
||||
$DOCKER_COMPOSE_CMD exec postgres psql -U nofx -d nofx --pset pager=off -c "
|
||||
SELECT relname as \"表名\", n_live_tup as \"记录数\"
|
||||
FROM pg_stat_user_tables
|
||||
WHERE n_live_tup > 0
|
||||
ORDER BY relname;
|
||||
"
|
||||
run_psql "SELECT relname AS \"表名\", n_live_tup AS \"记录数\" FROM pg_stat_user_tables WHERE n_live_tup > 0 ORDER BY relname;"
|
||||
|
||||
echo -e "\n🤖 AI模型配置:"
|
||||
$DOCKER_COMPOSE_CMD exec postgres psql -U nofx -d nofx --pset pager=off -c "
|
||||
SELECT id, name, provider, enabled,
|
||||
CASE WHEN api_key != '' THEN '已配置' ELSE '未配置' END as api_key_status
|
||||
FROM ai_models ORDER BY id;
|
||||
"
|
||||
run_psql "SELECT id, name, provider, enabled, CASE WHEN api_key != '' THEN '已配置' ELSE '未配置' END AS api_key_status FROM ai_models ORDER BY id;"
|
||||
|
||||
echo -e "\n🏢 交易所配置:"
|
||||
$DOCKER_COMPOSE_CMD exec postgres psql -U nofx -d nofx --pset pager=off -c "
|
||||
SELECT id, name, type, enabled,
|
||||
CASE WHEN api_key != '' THEN '已配置' ELSE '未配置' END as api_key_status
|
||||
FROM exchanges ORDER BY id;
|
||||
"
|
||||
run_psql "SELECT id, name, type, enabled, CASE WHEN api_key != '' THEN '已配置' ELSE '未配置' END AS api_key_status FROM exchanges ORDER BY id;"
|
||||
|
||||
echo -e "\n⚙️ 关键系统配置:"
|
||||
$DOCKER_COMPOSE_CMD exec postgres psql -U nofx -d nofx --pset pager=off -c "
|
||||
SELECT key,
|
||||
CASE
|
||||
WHEN LENGTH(value) > 50 THEN LEFT(value, 50) || '...'
|
||||
ELSE value
|
||||
END as value
|
||||
FROM system_config
|
||||
WHERE key IN ('beta_mode', 'api_server_port', 'default_coins', 'jwt_secret')
|
||||
ORDER BY key;
|
||||
"
|
||||
run_psql "SELECT key, CASE WHEN LENGTH(value) > 50 THEN LEFT(value, 50) || '...' ELSE value END AS value FROM system_config WHERE key IN ('beta_mode', 'api_server_port', 'default_coins', 'jwt_secret') ORDER BY key;"
|
||||
|
||||
echo -e "\n🎟️ 内测码统计:"
|
||||
$DOCKER_COMPOSE_CMD exec postgres psql -U nofx -d nofx --pset pager=off -c "
|
||||
SELECT
|
||||
CASE WHEN used THEN '已使用' ELSE '未使用' END as status,
|
||||
COUNT(*) as count
|
||||
FROM beta_codes
|
||||
GROUP BY used
|
||||
ORDER BY used;
|
||||
"
|
||||
run_psql "SELECT CASE WHEN used THEN '已使用' ELSE '未使用' END AS status, COUNT(*) AS count FROM beta_codes GROUP BY used ORDER BY used;"
|
||||
|
||||
echo -e "\n👥 用户信息:"
|
||||
$DOCKER_COMPOSE_CMD exec postgres psql -U nofx -d nofx --pset pager=off -c "
|
||||
SELECT id, email, otp_verified, created_at FROM users ORDER BY created_at;
|
||||
"
|
||||
run_psql "SELECT id, email, otp_verified, created_at FROM users ORDER BY created_at;"
|
||||
|
||||
Reference in New Issue
Block a user