0.7.0.1
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 部署配置
|
||||
SERVER_IP="115.190.235.230"
|
||||
SERVER_IP="180.76.240.104"
|
||||
SSH_PORT="22" # SSH连接端口
|
||||
SERVER_USER="root" # 根据实际情况修改用户名
|
||||
REMOTE_DIR="/var/www/chinese-family-tree" # 服务器上的部署目录
|
||||
APP_PORT="8006" # Next.js 应用端口(对外访问端口)
|
||||
|
||||
SSH_HOST="180.76.240.104-root"
|
||||
|
||||
# 数据库配置
|
||||
DB_NAME="family_tree"
|
||||
DB_USER="family_tree_user"
|
||||
@@ -47,13 +49,7 @@ echo -e "${GREEN}✓ 部署前检查通过${NC}"
|
||||
|
||||
# 1. 检查并创建SSH密钥
|
||||
echo -e "\n${YELLOW}[1/9] 检查SSH密钥...${NC}"
|
||||
if [ ! -f ~/.ssh/id_rsa ]; then
|
||||
echo -e "${YELLOW}未找到SSH密钥,正在创建...${NC}"
|
||||
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "deploy@chinese-family-tree"
|
||||
echo -e "${GREEN}✓ SSH密钥创建成功${NC}"
|
||||
else
|
||||
echo -e "${GREEN}✓ SSH密钥已存在${NC}"
|
||||
fi
|
||||
echo -e "${GREEN}✓ 使用已配置的SSH免密登录(~/.ssh/config: ${SSH_HOST})${NC}"
|
||||
|
||||
# 2. 测试服务器连接
|
||||
echo -e "\n${YELLOW}[2/9] 测试服务器连接...${NC}"
|
||||
@@ -79,23 +75,14 @@ echo -e "${GREEN}✓ SSH端口 ${SSH_PORT} 可访问${NC}"
|
||||
echo -e "\n${YELLOW}[3/9] 配置免密登录...${NC}"
|
||||
|
||||
# 检查是否已经配置免密登录
|
||||
ssh -p $SSH_PORT -o BatchMode=yes -o ConnectTimeout=5 $SERVER_USER@$SERVER_IP "echo '已配置免密登录'" 2>/dev/null
|
||||
ssh -o BatchMode=yes -o ConnectTimeout=5 $SSH_HOST "echo '已配置免密登录'" 2>/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ 免密登录已配置${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}请输入服务器密码以配置免密登录:${NC}"
|
||||
ssh-copy-id -p $SSH_PORT $SERVER_USER@$SERVER_IP
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ 免密登录配置成功${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ 免密登录配置失败${NC}"
|
||||
echo -e "${YELLOW}请检查:${NC}"
|
||||
echo -e " 1. 服务器用户名是否正确: ${SERVER_USER}"
|
||||
echo -e " 2. 服务器密码是否正确"
|
||||
echo -e " 3. 服务器是否允许密码登录"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${RED}✗ 免密登录未配置或无法使用${NC}"
|
||||
echo -e "${YELLOW}请先在本机配置好免密登录后再重试:${NC}"
|
||||
echo -e " ssh ${SSH_HOST}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 4. 本地构建
|
||||
@@ -118,7 +105,7 @@ fi
|
||||
|
||||
# 5. 在服务器上创建目录和安装依赖
|
||||
echo -e "\n${YELLOW}[5/9] 配置服务器环境...${NC}"
|
||||
ssh -p $SSH_PORT $SERVER_USER@$SERVER_IP << 'ENDSSH'
|
||||
ssh $SSH_HOST << 'ENDSSH'
|
||||
# 安装Node.js (如果未安装)
|
||||
if ! command -v node &> /dev/null; then
|
||||
echo "安装Node.js..."
|
||||
@@ -146,7 +133,7 @@ echo -e "${GREEN}✓ 服务器环境配置完成${NC}"
|
||||
|
||||
# 6. 配置数据库
|
||||
echo -e "\n${YELLOW}[6/9] 配置PostgreSQL数据库...${NC}"
|
||||
ssh -p $SSH_PORT $SERVER_USER@$SERVER_IP bash << ENDSSH
|
||||
ssh $SSH_HOST bash << ENDSSH
|
||||
# 检查PostgreSQL是否安装
|
||||
if ! command -v psql &> /dev/null; then
|
||||
echo "PostgreSQL未安装,正在安装..."
|
||||
@@ -169,10 +156,11 @@ CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';
|
||||
ALTER DATABASE $DB_NAME OWNER TO $DB_USER;
|
||||
\\c $DB_NAME
|
||||
GRANT ALL ON SCHEMA public TO $DB_USER;
|
||||
GRANT USAGE, CREATE ON SCHEMA public TO $DB_USER;
|
||||
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO $DB_USER;
|
||||
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO $DB_USER;
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO $DB_USER;
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO $DB_USER;
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO $DB_USER;
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO $DB_USER;
|
||||
EOF
|
||||
echo "✓ 数据库创建成功"
|
||||
fi
|
||||
@@ -203,9 +191,8 @@ rsync -avz --progress --delete \
|
||||
--exclude 'deploy-manual.sh' \
|
||||
--exclude 'setup-ssh-key.sh' \
|
||||
--exclude '*.tar.gz' \
|
||||
--exclude 'public/uploads/*' \
|
||||
-e "ssh -p $SSH_PORT" \
|
||||
./ $SERVER_USER@$SERVER_IP:$REMOTE_DIR/
|
||||
-e "ssh" \
|
||||
./ $SSH_HOST:$REMOTE_DIR/
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ 文件上传成功${NC}"
|
||||
@@ -214,9 +201,24 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 同步上传文件目录(如果存在)
|
||||
if [ -d "public/uploads" ] && [ "$(ls -A public/uploads 2>/dev/null)" ]; then
|
||||
echo -e "${YELLOW}同步上传文件目录...${NC}"
|
||||
rsync -avz --progress \
|
||||
-e "ssh" \
|
||||
./public/uploads/ $SSH_HOST:$REMOTE_DIR/public/uploads/
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ 上传文件同步成功${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 上传文件同步失败(非致命错误)${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 本地无上传文件需要同步${NC}"
|
||||
fi
|
||||
|
||||
# 8. 配置环境变量
|
||||
echo -e "\n${YELLOW}[8/9] 配置环境变量...${NC}"
|
||||
ssh -p $SSH_PORT $SERVER_USER@$SERVER_IP bash << ENDSSH
|
||||
ssh $SSH_HOST bash << ENDSSH
|
||||
cd $REMOTE_DIR
|
||||
|
||||
# 检查.env文件是否存在
|
||||
@@ -270,7 +272,7 @@ fi
|
||||
|
||||
# 9. 在服务器上安装依赖和启动应用
|
||||
echo -e "\n${YELLOW}[9/9] 安装依赖并启动应用...${NC}"
|
||||
ssh -p $SSH_PORT $SERVER_USER@$SERVER_IP bash << ENDSSH
|
||||
ssh $SSH_HOST bash << ENDSSH
|
||||
cd $REMOTE_DIR
|
||||
|
||||
# 配置pnpm使用国内镜像(如果还没配置)
|
||||
@@ -295,6 +297,17 @@ npx prisma generate || pnpm exec prisma generate
|
||||
echo "运行数据库迁移..."
|
||||
npx prisma migrate deploy || pnpm exec prisma migrate deploy
|
||||
|
||||
# 确保数据库用户有正确的权限
|
||||
echo "检查数据库权限..."
|
||||
sudo -u postgres psql -d $DB_NAME << 'SQLEOF'
|
||||
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO $DB_USER;
|
||||
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO $DB_USER;
|
||||
GRANT USAGE, CREATE ON SCHEMA public TO $DB_USER;
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO $DB_USER;
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO $DB_USER;
|
||||
SQLEOF
|
||||
echo "✓ 数据库权限已确认"
|
||||
|
||||
# 使用PM2启动应用(监听指定端口)
|
||||
echo "启动应用..."
|
||||
pm2 delete chinese-family-tree 2>/dev/null || true
|
||||
@@ -317,9 +330,9 @@ if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN}应用访问地址: http://${SERVER_IP}:${APP_PORT}${NC}"
|
||||
echo -e "${YELLOW}提示:${NC}"
|
||||
echo -e " - 查看应用日志: ssh -p ${SSH_PORT} ${SERVER_USER}@${SERVER_IP} 'pm2 logs chinese-family-tree'"
|
||||
echo -e " - 重启应用: ssh -p ${SSH_PORT} ${SERVER_USER}@${SERVER_IP} 'pm2 restart chinese-family-tree'"
|
||||
echo -e " - 停止应用: ssh -p ${SSH_PORT} ${SERVER_USER}@${SERVER_IP} 'pm2 stop chinese-family-tree'"
|
||||
echo -e " - 查看应用日志: ssh ${SSH_HOST} 'pm2 logs chinese-family-tree'"
|
||||
echo -e " - 重启应用: ssh ${SSH_HOST} 'pm2 restart chinese-family-tree'"
|
||||
echo -e " - 停止应用: ssh ${SSH_HOST} 'pm2 stop chinese-family-tree'"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ 部署失败${NC}"
|
||||
|
||||
Reference in New Issue
Block a user