100 lines
2.3 KiB
Bash
100 lines
2.3 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# Get script directory and project root
|
||
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||
|
|
PROJECT_ROOT="$( cd "$SCRIPT_DIR/.." && pwd )"
|
||
|
|
|
||
|
|
# Verify we're in the right directory
|
||
|
|
if [ ! -f "$PROJECT_ROOT/backend/go.mod" ] && [ ! -f "$PROJECT_ROOT/go.mod" ]; then
|
||
|
|
# Try current directory if script dir detection fails
|
||
|
|
if [ -f "backend/go.mod" ] || [ -f "go.mod" ]; then
|
||
|
|
PROJECT_ROOT="$(pwd)"
|
||
|
|
else
|
||
|
|
echo "Error: Could not find project root. Please run from explorer-monorepo directory."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
cd "$PROJECT_ROOT"
|
||
|
|
|
||
|
|
echo "Starting ChainID 138 Explorer Platform in development mode..."
|
||
|
|
echo "Project root: $PROJECT_ROOT"
|
||
|
|
|
||
|
|
# Check requirements first
|
||
|
|
echo "Checking requirements..."
|
||
|
|
if ! "$SCRIPT_DIR/check-requirements.sh"; then
|
||
|
|
echo "Please install missing requirements and try again."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Check if .env exists
|
||
|
|
if [ ! -f .env ]; then
|
||
|
|
echo "Warning: .env file not found. Creating from .env.example..."
|
||
|
|
if [ -f .env.example ]; then
|
||
|
|
cp .env.example .env
|
||
|
|
echo "Created .env from .env.example - please update with your configuration"
|
||
|
|
else
|
||
|
|
echo "Warning: .env.example not found. Using defaults."
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Start infrastructure
|
||
|
|
echo "Starting infrastructure services..."
|
||
|
|
docker-compose -f deployment/docker-compose.yml up -d postgres elasticsearch redis
|
||
|
|
|
||
|
|
# Wait for services
|
||
|
|
echo "Waiting for services to be ready..."
|
||
|
|
sleep 10
|
||
|
|
|
||
|
|
# Run migrations
|
||
|
|
echo "Running database migrations..."
|
||
|
|
cd backend
|
||
|
|
go run database/migrations/migrate.go || echo "Migration failed or already applied"
|
||
|
|
cd ..
|
||
|
|
|
||
|
|
# Start indexer in background
|
||
|
|
echo "Starting indexer..."
|
||
|
|
cd backend/indexer
|
||
|
|
go run main.go &
|
||
|
|
INDEXER_PID=$!
|
||
|
|
cd ../..
|
||
|
|
|
||
|
|
# Start API server in background
|
||
|
|
echo "Starting API server..."
|
||
|
|
cd backend/api/rest
|
||
|
|
go run main.go &
|
||
|
|
API_PID=$!
|
||
|
|
cd ../../..
|
||
|
|
|
||
|
|
# Start frontend
|
||
|
|
echo "Starting frontend..."
|
||
|
|
cd frontend
|
||
|
|
npm run dev &
|
||
|
|
FRONTEND_PID=$!
|
||
|
|
cd ..
|
||
|
|
|
||
|
|
echo "All services started!"
|
||
|
|
echo "Indexer PID: $INDEXER_PID"
|
||
|
|
echo "API PID: $API_PID"
|
||
|
|
echo "Frontend PID: $FRONTEND_PID"
|
||
|
|
echo ""
|
||
|
|
echo "Press Ctrl+C to stop all services"
|
||
|
|
|
||
|
|
# Wait for user interrupt
|
||
|
|
cleanup() {
|
||
|
|
echo ""
|
||
|
|
echo "Stopping services..."
|
||
|
|
kill $INDEXER_PID $API_PID $FRONTEND_PID 2>/dev/null || true
|
||
|
|
echo "Services stopped."
|
||
|
|
exit 0
|
||
|
|
}
|
||
|
|
|
||
|
|
trap cleanup INT TERM
|
||
|
|
|
||
|
|
# Wait for all background processes
|
||
|
|
wait
|
||
|
|
|