Rip out Theia, bump submodules, retire platform/ scaffold, snapshot docs + design assets
Theia rip-out (parent):
- Remove theia submodule entry (the local fork, Gitea repo, Coolify app,
Cloud Run services, and Artifact Registry image are all gone)
- Drop README.md + INFRASTRUCTURE.md (obsolete "Project OS" snapshots
that also leaked API tokens) and setup.sh (Theia clone bootstrap)
- Delete UI-DESIGN-GUIDE.md, BACKEND_AGENTS_PLAN.md, VIBN_BUILD_PLAN.md,
VISUAL_EDITOR_PLAN.md, core-packages.md, ai-packages.md, tools-list.md
(all 100% Theia-specific or superseded)
- Surgical scrubs of remaining Theia mentions in
AGENT_EXECUTION_ARCHITECTURE.md and TURBOREPO_MIGRATION_PLAN.md
Submodule bumps:
- vibn-agent-runner: Theia rip-out + MCP refactor (api/wrapper/server
pattern across shell/file/git/memory/prd/search/agent/gitea/coolify)
- vibn-frontend: Theia rip-out + P5.1 attach E2E + Justine UI WIP
Retire platform/ scaffold:
- Remove platform/backend/ (control-plane, executors, mcp-adapter),
platform/client-ide/ (gcp-productos extension), platform/contracts/,
platform/infra/terraform/, platform/scripts/templates/turborepo/
(replaced by vibn-agent-runner + vibn-frontend + Coolify direct)
- Drop architecture.md, technical_spec.md, vision-ext.md,
"1.Generate Control Plane API scaffold.md" (same era)
Docs / planning snapshots (new):
- AI_CAPABILITIES.md, AI_CAPABILITIES_ROADMAP.md
- AGENT_TELEMETRY_STREAMING_PROJECT.md
- VIBN_PRD.md, product-idea-a.md
Design assets (new):
- branding/{coolify,gitea,ux-testing}/ static brand collateral
- justine/ HTML mockups for the new onboarding/build flows
- preview-assist-ui/ Vite scratch app
- master-ai.code-workspace
Infra helpers (new):
- setup-coolify-montreal.sh provisioner
- gitea-docker-compose.yml
- vibn-coolify-schema.sql for the Coolify Postgres extensions
- prd-agent-prompt.pdf, prompt, root.txt, remixed-9edec9e9.tsx scratch
- flatten.sh helper
.gitignore: ignore **/node_modules, **/.next, **/.turbo, **/coverage
Made-with: Cursor
This commit is contained in:
370
setup-coolify-montreal.sh
Executable file
370
setup-coolify-montreal.sh
Executable file
@@ -0,0 +1,370 @@
|
||||
#!/bin/bash
|
||||
# ============================================================================
|
||||
# Coolify Setup Script for Google Cloud Platform - Montreal Region
|
||||
# ============================================================================
|
||||
# CRITICAL: ALL resources will be created in northamerica-northeast1 (Montreal)
|
||||
#
|
||||
# This script will:
|
||||
# 1. Create a VM in Montreal with proper specifications
|
||||
# 2. Configure firewall rules
|
||||
# 3. Reserve a static IP
|
||||
# 4. Install Coolify
|
||||
# 5. Configure security
|
||||
#
|
||||
# Prerequisites:
|
||||
# - gcloud CLI installed (https://cloud.google.com/sdk/docs/install)
|
||||
# - Authenticated with GCP: gcloud auth login
|
||||
# - Project set: gcloud config set project master-ai-484822
|
||||
# ============================================================================
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
# ============================================================================
|
||||
# CONFIGURATION - MONTREAL REGION ONLY
|
||||
# ============================================================================
|
||||
PROJECT_ID="master-ai-484822"
|
||||
REGION="northamerica-northeast1" # MONTREAL - DO NOT CHANGE
|
||||
ZONE="northamerica-northeast1-a" # MONTREAL ZONE A
|
||||
VM_NAME="coolify-server-mtl"
|
||||
MACHINE_TYPE="n2-standard-2" # 2 vCPU, 8GB RAM (~$70/month)
|
||||
BOOT_DISK_SIZE="100GB"
|
||||
STATIC_IP_NAME="coolify-static-ip-mtl"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# ============================================================================
|
||||
# FUNCTIONS
|
||||
# ============================================================================
|
||||
|
||||
print_header() {
|
||||
echo -e "\n${BLUE}============================================${NC}"
|
||||
echo -e "${BLUE}$1${NC}"
|
||||
echo -e "${BLUE}============================================${NC}\n"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}✅ $1${NC}"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}❌ $1${NC}"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||
}
|
||||
|
||||
print_info() {
|
||||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# MAIN SETUP
|
||||
# ============================================================================
|
||||
|
||||
print_header "Coolify Setup - Montreal Region (northamerica-northeast1)"
|
||||
|
||||
echo "This script will create:"
|
||||
echo " - VM in Montreal (northamerica-northeast1-a)"
|
||||
echo " - Static IP address"
|
||||
echo " - Firewall rules"
|
||||
echo " - Install Coolify"
|
||||
echo ""
|
||||
echo "Estimated cost: ~\$70/month"
|
||||
echo "Estimated time: ~15-20 minutes"
|
||||
echo ""
|
||||
|
||||
read -p "Continue? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
print_error "Setup cancelled"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# STEP 1: Set Project and Verify Montreal Region
|
||||
# ============================================================================
|
||||
|
||||
print_header "Step 1: Configure GCP Project"
|
||||
|
||||
print_info "Setting project to: $PROJECT_ID"
|
||||
gcloud config set project $PROJECT_ID
|
||||
|
||||
print_info "Verifying Montreal region availability..."
|
||||
if gcloud compute regions describe $REGION &>/dev/null; then
|
||||
print_success "Montreal region ($REGION) is available!"
|
||||
else
|
||||
print_error "Montreal region not available in your project!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# STEP 2: Enable Required APIs
|
||||
# ============================================================================
|
||||
|
||||
print_header "Step 2: Enable Required APIs"
|
||||
|
||||
print_info "Enabling Compute Engine API..."
|
||||
gcloud services enable compute.googleapis.com
|
||||
|
||||
print_success "APIs enabled"
|
||||
|
||||
# ============================================================================
|
||||
# STEP 3: Reserve Static IP (in Montreal)
|
||||
# ============================================================================
|
||||
|
||||
print_header "Step 3: Reserve Static IP in Montreal"
|
||||
|
||||
# Check if IP already exists
|
||||
if gcloud compute addresses describe $STATIC_IP_NAME --region=$REGION &>/dev/null; then
|
||||
print_warning "Static IP already exists"
|
||||
STATIC_IP=$(gcloud compute addresses describe $STATIC_IP_NAME --region=$REGION --format="get(address)")
|
||||
else
|
||||
print_info "Creating static IP in Montreal region..."
|
||||
gcloud compute addresses create $STATIC_IP_NAME \
|
||||
--region=$REGION
|
||||
|
||||
STATIC_IP=$(gcloud compute addresses describe $STATIC_IP_NAME --region=$REGION --format="get(address)")
|
||||
print_success "Static IP created: $STATIC_IP"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
print_info "Your Coolify will be accessible at: $STATIC_IP"
|
||||
echo ""
|
||||
|
||||
# ============================================================================
|
||||
# STEP 4: Create Firewall Rules
|
||||
# ============================================================================
|
||||
|
||||
print_header "Step 4: Configure Firewall Rules"
|
||||
|
||||
# Coolify ports firewall rule
|
||||
if gcloud compute firewall-rules describe allow-coolify-ports &>/dev/null; then
|
||||
print_warning "Coolify firewall rule already exists"
|
||||
else
|
||||
print_info "Creating firewall rule for Coolify ports..."
|
||||
gcloud compute firewall-rules create allow-coolify-ports \
|
||||
--direction=INGRESS \
|
||||
--priority=1000 \
|
||||
--network=default \
|
||||
--action=ALLOW \
|
||||
--rules=tcp:8000,tcp:6001,tcp:6002 \
|
||||
--source-ranges=0.0.0.0/0 \
|
||||
--description="Allow Coolify dashboard and services"
|
||||
|
||||
print_success "Firewall rules created"
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# STEP 5: Create VM Instance in Montreal
|
||||
# ============================================================================
|
||||
|
||||
print_header "Step 5: Create VM Instance in Montreal"
|
||||
|
||||
# Check if VM already exists
|
||||
if gcloud compute instances describe $VM_NAME --zone=$ZONE &>/dev/null; then
|
||||
print_warning "VM already exists: $VM_NAME"
|
||||
print_info "Checking if it's running..."
|
||||
|
||||
VM_STATUS=$(gcloud compute instances describe $VM_NAME --zone=$ZONE --format="get(status)")
|
||||
if [ "$VM_STATUS" != "RUNNING" ]; then
|
||||
print_info "Starting VM..."
|
||||
gcloud compute instances start $VM_NAME --zone=$ZONE
|
||||
fi
|
||||
else
|
||||
print_info "Creating VM in Montreal (this takes ~30 seconds)..."
|
||||
|
||||
gcloud compute instances create $VM_NAME \
|
||||
--zone=$ZONE \
|
||||
--machine-type=$MACHINE_TYPE \
|
||||
--network-interface=address=$STATIC_IP,network-tier=PREMIUM \
|
||||
--metadata=startup-script='#!/bin/bash
|
||||
apt-get update
|
||||
' \
|
||||
--maintenance-policy=MIGRATE \
|
||||
--provisioning-model=STANDARD \
|
||||
--tags=http-server,https-server \
|
||||
--create-disk=auto-delete=yes,boot=yes,device-name=$VM_NAME,image=projects/ubuntu-os-cloud/global/images/ubuntu-2204-jammy-v20240319,mode=rw,size=$BOOT_DISK_SIZE,type=pd-balanced \
|
||||
--no-shielded-secure-boot \
|
||||
--shielded-vtpm \
|
||||
--shielded-integrity-monitoring \
|
||||
--labels=purpose=coolify,region=montreal \
|
||||
--reservation-affinity=any
|
||||
|
||||
print_success "VM created successfully!"
|
||||
fi
|
||||
|
||||
print_success "VM Details:"
|
||||
echo " Name: $VM_NAME"
|
||||
echo " Zone: $ZONE (Montreal)"
|
||||
echo " IP: $STATIC_IP"
|
||||
echo " Machine: $MACHINE_TYPE (2 vCPU, 8GB RAM)"
|
||||
echo ""
|
||||
|
||||
# ============================================================================
|
||||
# STEP 6: Wait for VM to be Ready
|
||||
# ============================================================================
|
||||
|
||||
print_header "Step 6: Waiting for VM to be Ready"
|
||||
|
||||
print_info "Waiting for SSH to be available (this may take 30-60 seconds)..."
|
||||
for i in {1..30}; do
|
||||
if gcloud compute ssh $VM_NAME --zone=$ZONE --command="echo 'SSH Ready'" &>/dev/null; then
|
||||
print_success "VM is ready!"
|
||||
break
|
||||
fi
|
||||
echo -n "."
|
||||
sleep 2
|
||||
done
|
||||
echo ""
|
||||
|
||||
# ============================================================================
|
||||
# STEP 7: Install Coolify
|
||||
# ============================================================================
|
||||
|
||||
print_header "Step 7: Install Coolify on Montreal Server"
|
||||
|
||||
print_info "Connecting to VM and installing Coolify..."
|
||||
print_warning "This will take 5-10 minutes. Please be patient..."
|
||||
|
||||
gcloud compute ssh $VM_NAME --zone=$ZONE --command='
|
||||
set -e
|
||||
|
||||
echo "📦 Updating system packages..."
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get upgrade -y -qq
|
||||
|
||||
echo "🐳 Installing Docker prerequisites..."
|
||||
sudo apt-get install -y -qq curl wget git
|
||||
|
||||
echo "🚀 Installing Coolify..."
|
||||
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
|
||||
|
||||
echo ""
|
||||
echo "✅ Coolify installation complete!"
|
||||
echo ""
|
||||
'
|
||||
|
||||
print_success "Coolify installed successfully!"
|
||||
|
||||
# ============================================================================
|
||||
# STEP 8: Verify Installation
|
||||
# ============================================================================
|
||||
|
||||
print_header "Step 8: Verify Coolify Installation"
|
||||
|
||||
print_info "Checking Coolify service status..."
|
||||
gcloud compute ssh $VM_NAME --zone=$ZONE --command='
|
||||
if systemctl is-active --quiet coolify; then
|
||||
echo "✅ Coolify service is running"
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}" | grep coolify
|
||||
else
|
||||
echo "❌ Coolify service is not running"
|
||||
exit 1
|
||||
fi
|
||||
'
|
||||
|
||||
print_success "Coolify is running!"
|
||||
|
||||
# ============================================================================
|
||||
# STEP 9: Display Access Information
|
||||
# ============================================================================
|
||||
|
||||
print_header "🎉 Setup Complete!"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${GREEN} COOLIFY SETUP SUCCESSFUL!${NC}"
|
||||
echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}📍 Server Location:${NC} Montreal, Canada (northamerica-northeast1)"
|
||||
echo -e "${BLUE}🌐 Access URL:${NC} http://$STATIC_IP:8000"
|
||||
echo ""
|
||||
echo -e "${YELLOW}🔐 Default Login Credentials:${NC}"
|
||||
echo " Email: root@localhost"
|
||||
echo " Password: password"
|
||||
echo ""
|
||||
echo -e "${RED}⚠️ CHANGE PASSWORD IMMEDIATELY after first login!${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}📝 Next Steps:${NC}"
|
||||
echo " 1. Open: http://$STATIC_IP:8000"
|
||||
echo " 2. Login with credentials above"
|
||||
echo " 3. Change password immediately"
|
||||
echo " 4. Configure your domain in Coolify settings"
|
||||
echo " 5. Generate API token for Vibn integration"
|
||||
echo ""
|
||||
echo -e "${BLUE}💾 To save your configuration:${NC}"
|
||||
echo " VM Name: $VM_NAME"
|
||||
echo " Zone: $ZONE"
|
||||
echo " IP Address: $STATIC_IP"
|
||||
echo " Region: $REGION (Montreal)"
|
||||
echo ""
|
||||
echo -e "${BLUE}🔗 SSH Access:${NC}"
|
||||
echo " gcloud compute ssh $VM_NAME --zone=$ZONE --project=$PROJECT_ID"
|
||||
echo ""
|
||||
echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
|
||||
|
||||
# ============================================================================
|
||||
# STEP 10: Save Configuration
|
||||
# ============================================================================
|
||||
|
||||
CONFIG_FILE="coolify-montreal-config.txt"
|
||||
|
||||
cat > $CONFIG_FILE << EOF
|
||||
# Coolify Configuration - Montreal Setup
|
||||
# Created: $(date)
|
||||
# ============================================
|
||||
|
||||
GCP Project: $PROJECT_ID
|
||||
Region: $REGION (Montreal, Canada)
|
||||
Zone: $ZONE
|
||||
VM Name: $VM_NAME
|
||||
Machine Type: $MACHINE_TYPE
|
||||
Static IP: $STATIC_IP
|
||||
|
||||
Access URL: http://$STATIC_IP:8000
|
||||
Default Email: root@localhost
|
||||
Default Password: password
|
||||
|
||||
SSH Command:
|
||||
gcloud compute ssh $VM_NAME --zone=$ZONE --project=$PROJECT_ID
|
||||
|
||||
VM Management:
|
||||
- Start: gcloud compute instances start $VM_NAME --zone=$ZONE
|
||||
- Stop: gcloud compute instances stop $VM_NAME --zone=$ZONE
|
||||
- Delete: gcloud compute instances delete $VM_NAME --zone=$ZONE
|
||||
|
||||
Next Steps:
|
||||
1. Access Coolify at http://$STATIC_IP:8000
|
||||
2. Change password immediately
|
||||
3. Configure domain for HTTPS
|
||||
4. Create API token for Vibn
|
||||
5. Deploy test application
|
||||
|
||||
Security Notes:
|
||||
- Change default password IMMEDIATELY
|
||||
- Configure SSL certificate after domain setup
|
||||
- Enable 2FA if available
|
||||
- Store API tokens securely
|
||||
EOF
|
||||
|
||||
print_success "Configuration saved to: $CONFIG_FILE"
|
||||
echo ""
|
||||
print_info "Opening Coolify URL in browser..."
|
||||
|
||||
# Try to open in browser (works on Mac/Linux with default browser)
|
||||
if command -v open &> /dev/null; then
|
||||
open "http://$STATIC_IP:8000"
|
||||
elif command -v xdg-open &> /dev/null; then
|
||||
xdg-open "http://$STATIC_IP:8000"
|
||||
else
|
||||
echo "Please manually open: http://$STATIC_IP:8000"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
print_success "Setup complete! Coolify is ready in Montreal! 🇨🇦"
|
||||
Reference in New Issue
Block a user