Files
vibn-frontend/setup-coolify-montreal.sh
mawkone 99deb546c8 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
2026-04-22 18:06:37 -07:00

371 lines
12 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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! 🇨🇦"