flnxi-Wu/scripts/tools/fix-database-url.sh
WuYongJie 542c7bcc49 feat: 优化自定义上传模板系统
- 修复内置模板验证问题(builtin-video-material等)
- 添加模板验证工具 lib/template-validator.ts
- 创建模板系统优化需求文档(30个详细需求)
- 优化上传API的模板验证逻辑
- 改进错误提示信息的清晰度
- 添加字段池和分类管理相关需求
- 完善自定义字段的创建、验证、存储逻辑
- 清理过期的 .specstory 和 .trae 文件
2025-12-13 14:26:43 +08:00

119 lines
4.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================
# FLNXI素材库 - 修复 DATABASE_URL 脚本
# 用于修复数据库连接字符串问题
# ============================================
set -e
echo "========================================"
echo " 修复 DATABASE_URL 配置"
echo "========================================"
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 检查 .env.production 文件是否存在
if [ ! -f .env.production ]; then
echo -e "${RED}错误: 未找到 .env.production 文件${NC}"
echo "请先运行 install.sh 进行安装"
exit 1
fi
# 加载环境变量
source .env.production
# 检查是否已有 DATABASE_URL
if [ -n "$DATABASE_URL" ]; then
echo -e "${GREEN}✓ 检测到 DATABASE_URL 已存在${NC}"
echo "当前 DATABASE_URL: ${DATABASE_URL:0:50}..."
# 检查是否需要更新(如果密码未编码)
if echo "$DATABASE_URL" | grep -q "=="; then
echo -e "${YELLOW}警告: DATABASE_URL 中的密码可能未正确编码${NC}"
echo "正在重新生成..."
NEED_UPDATE=1
else
echo -e "${GREEN}✓ DATABASE_URL 格式正确${NC}"
NEED_UPDATE=0
fi
else
echo -e "${YELLOW}未找到 DATABASE_URL,正在生成...${NC}"
NEED_UPDATE=1
fi
# 如果需要更新,生成新的 DATABASE_URL
if [ "$NEED_UPDATE" = "1" ]; then
if [ -z "$POSTGRES_PASSWORD" ]; then
echo -e "${RED}错误: 未找到 POSTGRES_PASSWORD${NC}"
exit 1
fi
echo "正在对密码进行 URL 编码..."
# URL 编码密码
if command -v python3 &> /dev/null; then
POSTGRES_PASSWORD_ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$POSTGRES_PASSWORD', safe=''))")
elif command -v python &> /dev/null; then
POSTGRES_PASSWORD_ENCODED=$(python -c "import urllib.parse; print(urllib.parse.quote('$POSTGRES_PASSWORD', safe=''))")
elif command -v perl &> /dev/null; then
POSTGRES_PASSWORD_ENCODED=$(perl -MURI::Escape -e "print uri_escape('$POSTGRES_PASSWORD');")
else
# 如果没有 Python 或 Perl,使用 sed 简单替换常见特殊字符
POSTGRES_PASSWORD_ENCODED=$(echo "$POSTGRES_PASSWORD" | sed 's/+/%2B/g; s/\//%2F/g; s/=/%3D/g; s/@/%40/g; s/:/%3A/g')
fi
POSTGRES_USER=${POSTGRES_USER:-postgres}
POSTGRES_DB=${POSTGRES_DB:-flnxi}
NEW_DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD_ENCODED}@postgres:5432/${POSTGRES_DB}"
echo -e "${GREEN}✓ 已生成新的 DATABASE_URL${NC}"
echo "新 DATABASE_URL: postgresql://${POSTGRES_USER}:***@postgres:5432/${POSTGRES_DB}"
# 更新 .env.production 文件
if grep -q "^DATABASE_URL=" .env.production; then
# 如果已存在,替换
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS
sed -i '' "s|^DATABASE_URL=.*|DATABASE_URL=$NEW_DATABASE_URL|" .env.production
else
# Linux
sed -i "s|^DATABASE_URL=.*|DATABASE_URL=$NEW_DATABASE_URL|" .env.production
fi
echo -e "${GREEN}✓ 已更新 .env.production 中的 DATABASE_URL${NC}"
else
# 如果不存在,追加
echo "" >> .env.production
echo "# 完整的数据库连接URL(密码已URL编码,自动生成)" >> .env.production
echo "DATABASE_URL=$NEW_DATABASE_URL" >> .env.production
echo -e "${GREEN}✓ 已添加 DATABASE_URL 到 .env.production${NC}"
fi
# 更新 .env 文件
cp .env.production .env
echo -e "${GREEN}✓ 已同步到 .env 文件${NC}"
fi
echo ""
echo "========================================"
echo -e "${GREEN} 修复完成!${NC}"
echo "========================================"
echo ""
echo "下一步操作:"
echo " 1. 重启应用容器以应用新配置:"
echo " sudo docker compose -f docker-compose.prod.yml restart app"
echo ""
echo " 2. 等待容器启动后,执行数据库初始化:"
echo " sudo docker compose -f docker-compose.prod.yml exec app npx prisma db push"
echo ""
echo " 3. 如果仍有问题,检查容器内的环境变量:"
echo " sudo docker compose -f docker-compose.prod.yml exec app env | grep DATABASE_URL"
echo ""