|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set -e |
|
|
|
|
|
|
|
|
RED='\033[0;31m' |
|
|
GREEN='\033[0;32m' |
|
|
YELLOW='\033[1;33m' |
|
|
BLUE='\033[0;34m' |
|
|
NC='\033[0m' |
|
|
|
|
|
|
|
|
TARBALL_NAME="codepilot-deployment.tar.gz" |
|
|
REMOTE_DIR="~/codepilot" |
|
|
BACKUP_DIR="~/codepilot_backup" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info() { |
|
|
echo -e "${BLUE}βΉοΈ $1${NC}" |
|
|
} |
|
|
|
|
|
log_success() { |
|
|
echo -e "${GREEN}β
$1${NC}" |
|
|
} |
|
|
|
|
|
log_warning() { |
|
|
echo -e "${YELLOW}β οΈ $1${NC}" |
|
|
} |
|
|
|
|
|
log_error() { |
|
|
echo -e "${RED}β $1${NC}" |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info "Loading environment configuration..." |
|
|
|
|
|
|
|
|
if [ -f .env ]; then |
|
|
source .env |
|
|
log_success "Loaded .env file" |
|
|
else |
|
|
log_warning ".env file not found - using environment variables only" |
|
|
fi |
|
|
|
|
|
|
|
|
if [ -z "$GCP_VM_IP" ]; then |
|
|
log_error "GCP_VM_IP not set" |
|
|
echo "Please set GCP_VM_IP in .env file or environment" |
|
|
echo "Example: export GCP_VM_IP=34.123.45.67" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
GCP_SSH_USER=${GCP_SSH_USER:-$(whoami)} |
|
|
GCP_SSH_KEY=${GCP_SSH_KEY:-~/.ssh/google_compute_engine} |
|
|
|
|
|
log_info "Deployment Configuration:" |
|
|
echo " β’ Target VM: $GCP_VM_IP" |
|
|
echo " β’ SSH User: $GCP_SSH_USER" |
|
|
echo " β’ SSH Key: $GCP_SSH_KEY" |
|
|
|
|
|
|
|
|
if [ ! -f "$GCP_SSH_KEY" ]; then |
|
|
log_error "SSH key not found: $GCP_SSH_KEY" |
|
|
echo "Generate one with: ssh-keygen -t rsa -f $GCP_SSH_KEY" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info "Running pre-deployment checks..." |
|
|
|
|
|
|
|
|
log_info "Testing SSH connection to $GCP_VM_IP..." |
|
|
if ssh -i "$GCP_SSH_KEY" -o ConnectTimeout=10 -o BatchMode=yes "$GCP_SSH_USER@$GCP_VM_IP" "echo 'SSH connection successful'" &>/dev/null; then |
|
|
log_success "SSH connection verified" |
|
|
else |
|
|
log_error "Cannot connect to $GCP_VM_IP" |
|
|
echo "Check that:" |
|
|
echo " 1. VM is running" |
|
|
echo " 2. Firewall allows SSH (port 22)" |
|
|
echo " 3. SSH key is added to VM" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info "Building deployment package..." |
|
|
|
|
|
|
|
|
rm -f "$TARBALL_NAME" |
|
|
|
|
|
|
|
|
tar -czf "$TARBALL_NAME" \ |
|
|
--exclude=venv \ |
|
|
--exclude=.git \ |
|
|
--exclude=__pycache__ \ |
|
|
--exclude='*.pyc' \ |
|
|
--exclude='*.pyo' \ |
|
|
--exclude='.pytest_cache' \ |
|
|
--exclude='*.egg-info' \ |
|
|
--exclude='.DS_Store' \ |
|
|
--exclude='node_modules' \ |
|
|
--exclude="$TARBALL_NAME" \ |
|
|
. |
|
|
|
|
|
TARBALL_SIZE=$(du -h "$TARBALL_NAME" | cut -f1) |
|
|
log_success "Created tarball: $TARBALL_NAME ($TARBALL_SIZE)" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info "Uploading to GCP VM..." |
|
|
|
|
|
scp -i "$GCP_SSH_KEY" \ |
|
|
-o StrictHostKeyChecking=no \ |
|
|
"$TARBALL_NAME" \ |
|
|
"$GCP_SSH_USER@$GCP_VM_IP:/tmp/" |
|
|
|
|
|
log_success "Upload complete" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info "Deploying on remote VM..." |
|
|
|
|
|
ssh -i "$GCP_SSH_KEY" \ |
|
|
-o StrictHostKeyChecking=no \ |
|
|
"$GCP_SSH_USER@$GCP_VM_IP" << 'REMOTE_SCRIPT' |
|
|
|
|
|
set -e |
|
|
|
|
|
|
|
|
RED='\033[0;31m' |
|
|
GREEN='\033[0;32m' |
|
|
YELLOW='\033[1;33m' |
|
|
BLUE='\033[0;34m' |
|
|
NC='\033[0m' |
|
|
|
|
|
log_info() { echo -e "${BLUE}βΉοΈ $1${NC}"; } |
|
|
log_success() { echo -e "${GREEN}β
$1${NC}"; } |
|
|
log_warning() { echo -e "${YELLOW}β οΈ $1${NC}"; } |
|
|
log_error() { echo -e "${RED}β $1${NC}"; } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ -d ~/codepilot ]; then |
|
|
log_info "Backing up existing deployment..." |
|
|
|
|
|
|
|
|
cd ~/codepilot |
|
|
if [ -f docker-compose.yml ]; then |
|
|
docker-compose down || log_warning "Failed to stop containers (may not be running)" |
|
|
fi |
|
|
|
|
|
|
|
|
BACKUP_NAME="codepilot_backup_$(date +%Y%m%d_%H%M%S)" |
|
|
mv ~/codepilot ~/"$BACKUP_NAME" |
|
|
log_success "Backup created: ~/$BACKUP_NAME" |
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info "Extracting deployment package..." |
|
|
mkdir -p ~/codepilot |
|
|
cd /tmp |
|
|
tar -xzf codepilot-deployment.tar.gz -C ~/codepilot |
|
|
log_success "Extracted to ~/codepilot" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cd ~/codepilot |
|
|
|
|
|
log_info "Starting Docker containers..." |
|
|
|
|
|
|
|
|
if [ ! -f docker-compose.yml ]; then |
|
|
log_error "docker-compose.yml not found in deployment package" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
docker-compose pull || log_warning "Failed to pull images (using cached)" |
|
|
docker-compose up -d |
|
|
|
|
|
log_success "Docker containers started" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info "Running health check..." |
|
|
sleep 5 |
|
|
|
|
|
|
|
|
RUNNING_CONTAINERS=$(docker-compose ps --services --filter "status=running" | wc -l) |
|
|
TOTAL_CONTAINERS=$(docker-compose ps --services | wc -l) |
|
|
|
|
|
if [ "$RUNNING_CONTAINERS" -eq "$TOTAL_CONTAINERS" ]; then |
|
|
log_success "All containers healthy ($RUNNING_CONTAINERS/$TOTAL_CONTAINERS running)" |
|
|
else |
|
|
log_warning "Some containers not running ($RUNNING_CONTAINERS/$TOTAL_CONTAINERS)" |
|
|
docker-compose ps |
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info "Cleaning up..." |
|
|
rm -f /tmp/codepilot-deployment.tar.gz |
|
|
log_success "Cleanup complete" |
|
|
|
|
|
echo "" |
|
|
log_success "π Deployment successful!" |
|
|
echo "Access CodePilot at: http://$(hostname -I | awk '{print $1}'):8000" |
|
|
|
|
|
REMOTE_SCRIPT |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log_info "Cleaning up local files..." |
|
|
rm -f "$TARBALL_NAME" |
|
|
log_success "Local cleanup complete" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
|
|
echo "β DEPLOYMENT SUCCESSFUL β" |
|
|
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
|
|
echo "" |
|
|
log_success "CodePilot deployed to $GCP_VM_IP" |
|
|
echo "" |
|
|
echo "Next steps:" |
|
|
echo " 1. Access UI: http://$GCP_VM_IP:8000" |
|
|
echo " 2. Check logs: ssh $GCP_SSH_USER@$GCP_VM_IP 'cd ~/codepilot && docker-compose logs -f'" |
|
|
echo " 3. Stop: ssh $GCP_SSH_USER@$GCP_VM_IP 'cd ~/codepilot && docker-compose down'" |
|
|
echo "" |
|
|
|
|
|
|