forked from metatool-ai/metamcp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-entrypoint.sh
More file actions
102 lines (83 loc) · 2.54 KB
/
docker-entrypoint.sh
File metadata and controls
102 lines (83 loc) · 2.54 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
#!/bin/sh
set -e
echo "Starting MetaMCP services..."
# Function to wait for postgres
wait_for_postgres() {
echo "Waiting for PostgreSQL to be ready..."
until pg_isready -h "$POSTGRES_HOST" -p "$POSTGRES_PORT" -U "$POSTGRES_USER"; do
echo "PostgreSQL is not ready - sleeping 2 seconds"
sleep 2
done
echo "PostgreSQL is ready!"
}
# Function to run migrations
run_migrations() {
echo "Running database migrations..."
cd /app/apps/backend
# Check if migrations need to be run
if [ -d "drizzle" ] && [ "$(ls -A drizzle/*.sql 2>/dev/null)" ]; then
echo "Found migration files, running migrations..."
# Use local drizzle-kit since env vars are available at system level in Docker
if pnpm exec drizzle-kit migrate; then
echo "Migrations completed successfully!"
else
echo "❌ Migration failed! Exiting..."
exit 1
fi
else
echo "No migrations found or directory empty"
fi
cd /app
}
# Set default values for postgres connection if not provided
POSTGRES_HOST=${POSTGRES_HOST:-postgres}
POSTGRES_PORT=${POSTGRES_PORT:-5432}
POSTGRES_USER=${POSTGRES_USER:-postgres}
# Wait for PostgreSQL
wait_for_postgres
# Run migrations
run_migrations
# Start backend in the background
echo "Starting backend server..."
cd /app/apps/backend
PORT=12009 node dist/index.js &
BACKEND_PID=$!
# Wait a moment for backend to start
sleep 3
# Check if backend is still running
if ! kill -0 $BACKEND_PID 2>/dev/null; then
echo "❌ Backend server died! Exiting..."
exit 1
fi
echo "✅ Backend server started successfully (PID: $BACKEND_PID)"
# Start frontend
echo "Starting frontend server..."
cd /app/apps/frontend
PORT=12008 pnpm start &
FRONTEND_PID=$!
# Wait a moment for frontend to start
sleep 3
# Check if frontend is still running
if ! kill -0 $FRONTEND_PID 2>/dev/null; then
echo "❌ Frontend server died! Exiting..."
kill $BACKEND_PID 2>/dev/null
exit 1
fi
echo "✅ Frontend server started successfully (PID: $FRONTEND_PID)"
# Function to cleanup on exit
cleanup() {
echo "Shutting down services..."
kill $BACKEND_PID 2>/dev/null || true
kill $FRONTEND_PID 2>/dev/null || true
wait $BACKEND_PID 2>/dev/null || true
wait $FRONTEND_PID 2>/dev/null || true
echo "Services stopped"
}
# Trap signals for graceful shutdown
trap cleanup TERM INT
echo "Services started successfully!"
echo "Backend running on port 12009"
echo "Frontend running on port 12008"
# Wait for both processes
wait $BACKEND_PID
wait $FRONTEND_PID