xiaso-flnxi-website/deploy-database.sh
Your Name b1eab32c75 初始提交: FLNXI电商素材系统官方网站
- Next.js 项目框架
- 完整的认证系统集成
- 数据库配置和部署脚本
- 产品价格体系和文档
- Docker 部署配置
2025-12-13 21:38:32 +08:00

272 lines
7.8 KiB
Bash
Executable File
Raw Permalink 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
# PostgreSQL 数据库部署脚本
# 使用方法:bash deploy-database.sh
set -e # 遇到错误立即退出
echo "🚀 开始部署 PostgreSQL 数据库..."
echo ""
# 服务器信息
SERVER="root@45.249.208.118"
SERVER_PASSWORD="lxvhNYFZ4160" # 从聊天记录中获取
REMOTE_DIR="/opt/flnxi-website"
DB_NAME="flnxi_db"
DB_USER="flnxi_user"
DB_PASSWORD="Flnxi@2025!SecurePassword" # 生成的强密码
# 颜色定义
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# 检查是否安装 sshpass
if ! command -v sshpass &> /dev/null; then
echo -e "${YELLOW}⚠️ sshpass 未安装,正在安装...${NC}"
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS
brew install hudochenkov/sshpass/sshpass 2>/dev/null || {
echo -e "${RED}❌ 请先安装 Homebrew,然后运行:${NC}"
echo "brew install hudochenkov/sshpass/sshpass"
exit 1
}
else
# Linux
sudo apt-get install -y sshpass || sudo yum install -y sshpass
fi
echo -e "${GREEN}✅ sshpass 已安装${NC}"
fi
# SSH 执行函数
ssh_exec() {
sshpass -p "$SERVER_PASSWORD" ssh -o StrictHostKeyChecking=no $SERVER "$1"
}
# 步骤1:检查系统类型
echo -e "${BLUE}步骤 1/10: 检查服务器系统...${NC}"
OS_INFO=$(ssh_exec "cat /etc/os-release 2>/dev/null || cat /etc/redhat-release 2>/dev/null || echo 'Unknown'")
echo "$OS_INFO" | head -3
echo ""
# 步骤2:安装 Docker Compose PostgreSQL 方案(推荐)
echo -e "${BLUE}步骤 2/10: 使用 Docker 部署 PostgreSQL...${NC}"
ssh_exec "cd $REMOTE_DIR && cat > docker-compose-db.yml << 'EOFDB'
version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: flnxi-postgres
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_INITDB_ARGS: '--encoding=UTF-8 --lc-collate=C --lc-ctype=C'
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- '127.0.0.1:5432:5432'
restart: unless-stopped
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${DB_USER}']
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres_data:
driver: local
EOFDB
"
echo -e "${GREEN}✅ Docker Compose 配置已创建${NC}"
echo ""
# 步骤3:启动 PostgreSQL
echo -e "${BLUE}步骤 3/10: 启动 PostgreSQL 数据库...${NC}"
ssh_exec "cd $REMOTE_DIR && docker-compose -f docker-compose-db.yml up -d"
echo -e "${GREEN}✅ PostgreSQL 已启动${NC}"
echo ""
# 等待数据库启动
echo -e "${BLUE}等待数据库启动... (10秒)${NC}"
sleep 10
# 步骤4:验证数据库连接
echo -e "${BLUE}步骤 4/10: 验证数据库连接...${NC}"
ssh_exec "docker exec flnxi-postgres psql -U $DB_USER -d $DB_NAME -c 'SELECT version();'" || {
echo -e "${RED}❌ 数据库连接失败${NC}"
exit 1
}
echo -e "${GREEN}✅ 数据库连接成功${NC}"
echo ""
# 步骤5:更新环境变量
echo -e "${BLUE}步骤 5/10: 配置数据库连接字符串...${NC}"
DATABASE_URL="postgresql://${DB_USER}:${DB_PASSWORD}@localhost:5432/${DB_NAME}?schema=public"
ssh_exec "cd $REMOTE_DIR && cat >> .env.local << EOFENV
# PostgreSQL 数据库配置
DATABASE_URL=\"${DATABASE_URL}\"
EOFENV
"
echo -e "${GREEN}✅ 环境变量已配置${NC}"
echo ""
# 步骤6:创建用户表 SQL
echo -e "${BLUE}步骤 6/10: 创建用户表...${NC}"
ssh_exec "docker exec -i flnxi-postgres psql -U $DB_USER -d $DB_NAME << 'EOFSQL'
-- 创建用户表
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
email_verified BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 创建索引
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
CREATE INDEX IF NOT EXISTS idx_users_created_at ON users(created_at);
-- 查看表结构
\d users
-- 显示成功消息
SELECT '✅ 用户表创建成功' as message;
EOFSQL
"
echo -e "${GREEN}✅ 用户表已创建${NC}"
echo ""
# 步骤7:显示数据库信息
echo -e "${BLUE}步骤 7/10: 数据库信息汇总...${NC}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}📊 数据库连接信息${NC}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
echo "容器名称: flnxi-postgres"
echo "数据库名: $DB_NAME"
echo "用户名: $DB_USER"
echo "密码: $DB_PASSWORD"
echo "端口: 5432 (仅本地访问)"
echo "连接字符串: $DATABASE_URL"
echo ""
echo -e "${YELLOW}⚠️ 请妥善保管数据库密码!${NC}"
echo ""
# 步骤8:保存数据库信息到文件
echo -e "${BLUE}步骤 8/10: 保存配置信息...${NC}"
cat > DATABASE_CONFIG.md << EOFCONFIG
# PostgreSQL 数据库配置信息
## 连接信息
- **容器名称**: \`flnxi-postgres\`
- **数据库名**: \`$DB_NAME\`
- **用户名**: \`$DB_USER\`
- **密码**: \`$DB_PASSWORD\`
- **端口**: \`5432\` (仅本地访问)
- **连接字符串**:
\`\`\`
$DATABASE_URL
\`\`\`
## 管理命令
### 连接数据库
\`\`\`bash
# 在服务器上执行
docker exec -it flnxi-postgres psql -U $DB_USER -d $DB_NAME
\`\`\`
### 查看表
\`\`\`sql
\dt
\`\`\`
### 查看用户数据
\`\`\`sql
SELECT id, name, email, email_verified, created_at FROM users;
\`\`\`
### 备份数据库
\`\`\`bash
docker exec flnxi-postgres pg_dump -U $DB_USER $DB_NAME > backup_\$(date +%Y%m%d).sql
\`\`\`
### 恢复数据库
\`\`\`bash
docker exec -i flnxi-postgres psql -U $DB_USER $DB_NAME < backup_20250101.sql
\`\`\`
## 表结构
### users 表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | SERIAL | 主键 |
| name | VARCHAR(255) | 用户名 |
| email | VARCHAR(255) | 邮箱(唯一) |
| password | VARCHAR(255) | 密码(bcrypt加密) |
| email_verified | BOOLEAN | 邮箱是否验证 |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
## 安全建议
1. ✅ 数据库仅监听 localhost,外部无法访问
2. ✅ 使用强密码
3. ⚠️ 定期备份数据
4. ⚠️ 定期更新密码
5. ⚠️ 监控数据库日志
## 下一步
1. 安装 Prisma ORM
2. 更新注册 API 使用数据库
3. 更新登录 API 使用数据库
4. 添加密码加密(bcrypt)
---
生成时间: $(date)
EOFCONFIG
echo -e "${GREEN}✅ 配置已保存到 DATABASE_CONFIG.md${NC}"
echo ""
# 步骤9:测试数据库
echo -e "${BLUE}步骤 9/10: 测试数据库功能...${NC}"
ssh_exec "docker exec -i flnxi-postgres psql -U $DB_USER -d $DB_NAME << 'EOFSQL'
-- 插入测试数据
INSERT INTO users (name, email, password, email_verified)
VALUES ('测试管理员', 'admin@flnxi.com', 'temp_password_will_be_hashed', true)
ON CONFLICT (email) DO NOTHING;
-- 查询测试
SELECT id, name, email, email_verified, created_at FROM users;
EOFSQL
"
echo -e "${GREEN}✅ 数据库功能正常${NC}"
echo ""
# 步骤10:完成
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}🎉 PostgreSQL 数据库部署完成!${NC}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
echo -e "${YELLOW}📝 下一步操作:${NC}"
echo "1. 查看数据库配置:cat DATABASE_CONFIG.md"
echo "2. 安装依赖:bash deploy-prisma-setup.sh"
echo "3. 更新代码使用数据库"
echo "4. 重新部署应用"
echo ""
echo -e "${YELLOW}🔍 快速测试:${NC}"
echo "ssh $SERVER 'docker exec flnxi-postgres psql -U $DB_USER -d $DB_NAME -c \"SELECT * FROM users;\"'"
echo ""