-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstart.sh
More file actions
193 lines (158 loc) · 5.6 KB
/
Copy pathstart.sh
File metadata and controls
193 lines (158 loc) · 5.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#!/bin/bash
# GraphNote 完整启动脚本
# 用途: 一键启动前端、后端、数据库
set -e
echo "╔════════════════════════════════════════════════════════════════════════════╗"
echo "║ GraphNote 应用启动脚本 ║"
echo "╚════════════════════════════════════════════════════════════════════════════╝"
echo ""
# 色彩定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m' # No Color
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$PROJECT_ROOT/backend"
FRONTEND_DIR="$PROJECT_ROOT/graphnote-web"
# 检查依赖
check_dependencies() {
echo -e "${BLUE}📋 检查依赖...${NC}"
if ! command -v node &> /dev/null; then
echo -e "${RED}❌ Node.js 未安装${NC}"
exit 1
fi
if ! command -v npm &> /dev/null; then
echo -e "${RED}❌ npm 未安装${NC}"
exit 1
fi
echo -e "${GREEN}✓ Node.js 已安装${NC}"
echo -e "${GREEN}✓ npm 已安装${NC}"
echo ""
}
# 检查数据库
check_database() {
echo -e "${BLUE}🗄️ 检查数据库...${NC}"
# 检查PostgreSQL是否运行
if ! nc -z localhost 5432 2>/dev/null; then
echo -e "${YELLOW}⚠️ PostgreSQL 未运行${NC}"
echo -e "${BLUE} 建议: brew services start postgresql${NC}"
read -p "继续运行吗? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
else
echo -e "${GREEN}✓ PostgreSQL 已运行${NC}"
fi
echo ""
}
# 启动后端
start_backend() {
echo -e "${BLUE}🔧 启动后端服务...${NC}"
cd "$BACKEND_DIR"
# 检查node_modules
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}📦 安装后端依赖...${NC}"
npm install
fi
# 生成Prisma
echo -e "${YELLOW}🔧 生成Prisma客户端...${NC}"
npm run prisma:generate
# 检查是否需要迁移
if [ ! -d "prisma/migrations" ] || [ -z "$(ls -A prisma/migrations)" ]; then
echo -e "${YELLOW}🗄️ 初始化数据库...${NC}"
npm run prisma:migrate
fi
echo -e "${GREEN}✓ 后端准备完成${NC}"
echo ""
# 在后台启动
npm run dev > /tmp/graphnote-backend.log 2>&1 &
BACKEND_PID=$!
echo -e "${GREEN}✓ 后端已启动 (PID: $BACKEND_PID)${NC}"
# 等待后端启动
sleep 2
# 检查后端是否成功启动
if ! kill -0 $BACKEND_PID 2>/dev/null; then
echo -e "${RED}❌ 后端启动失败${NC}"
cat /tmp/graphnote-backend.log
exit 1
fi
# 检查health端点
if curl -s http://localhost:3000/health > /dev/null 2>&1; then
echo -e "${GREEN}✓ 后端健康检查通过${NC}"
else
echo -e "${YELLOW}⚠️ 后端可能未完全启动,稍候重试...${NC}"
sleep 2
fi
echo ""
}
# 启动前端
start_frontend() {
echo -e "${BLUE}🎨 启动前端服务...${NC}"
cd "$FRONTEND_DIR"
# 检查node_modules
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}📦 安装前端依赖...${NC}"
npm install
fi
echo -e "${GREEN}✓ 前端准备完成${NC}"
echo ""
# 在后台启动
npm run dev > /tmp/graphnote-frontend.log 2>&1 &
FRONTEND_PID=$!
echo -e "${GREEN}✓ 前端已启动 (PID: $FRONTEND_PID)${NC}"
# 等待前端启动
sleep 3
echo ""
}
# 显示启动摘要
show_summary() {
echo -e "${BLUE}════════════════════════════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}🎉 GraphNote 启动完成!${NC}"
echo ""
echo -e "${YELLOW}📌 应用地址:${NC}"
echo -e " 🌐 前端: ${BLUE}http://localhost:5173${NC}"
echo -e " 🔌 后端: ${BLUE}http://localhost:3000${NC}"
echo -e " 🏥 健康检查: ${BLUE}http://localhost:3000/health${NC}"
echo ""
echo -e "${YELLOW}📝 登录信息:${NC}"
echo -e " 邮箱: test@example.com"
echo -e " 密码: password123"
echo -e " 或在 ${BLUE}/register${NC} 页面创建新账户"
echo ""
echo -e "${YELLOW}📂 日志文件:${NC}"
echo -e " 后端: /tmp/graphnote-backend.log"
echo -e " 前端: /tmp/graphnote-frontend.log"
echo ""
echo -e "${YELLOW}🛑 停止服务:${NC}"
echo -e " kill $BACKEND_PID (停止后端)"
echo -e " kill $FRONTEND_PID (停止前端)"
echo ""
echo -e "${BLUE}════════════════════════════════════════════════════════════════════════════${NC}"
}
# 主程序
main() {
check_dependencies
check_database
start_backend
start_frontend
show_summary
echo ""
echo -e "${GREEN}所有服务已启动,按 Ctrl+C 停止${NC}"
echo ""
# 保持脚本运行
wait
}
# 清理函数
cleanup() {
echo ""
echo -e "${YELLOW}⏹️ 停止所有服务...${NC}"
kill $BACKEND_PID 2>/dev/null || true
kill $FRONTEND_PID 2>/dev/null || true
echo -e "${GREEN}✓ 服务已停止${NC}"
}
# 捕获Ctrl+C
trap cleanup SIGINT SIGTERM
# 运行主程序
main