diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 000000000..d5f298d40 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,58 @@ +# 🚀 Deploy PicoClaw for Free + +## Quick Deploy + +### Railway.app (Recommended) + +[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template) + +1. Click "Deploy on Railway" +2. Set environment variables: + - `TELEGRAM_BOT_TOKEN` - Your bot token from @BotFather + - `ZHIPU_API_KEY` - Your GLM API key from Z.AI + +### Render.com + +[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy) + +1. Click "Deploy to Render" +2. Connect GitHub repo +3. Set environment variables +4. Deploy + +### Fly.io + +```bash +# Install CLI +brew install flyctl + +# Login +fly auth login + +# Deploy +fly launch +fly deploy +``` + +## Environment Variables + +| Variable | Required | Description | +|----------|----------|-------------| +| `TELEGRAM_BOT_TOKEN` | ✅ | Bot token from @BotFather | +| `ZHIPU_API_KEY` | ✅ | GLM API key from Z.AI | +| `WEB_SEARCH_ENABLED` | ❌ | Enable web search (default: true) | +| `WEB_SEARCH_PROVIDER` | ❌ | duckduckgo or brave | + +## Files Created + +- `railway.toml` - Railway config +- `fly.toml` - Fly.io config +- `render.yaml` - Render blueprint +- `deploy.sh` - Quick deploy script + +## Run Deploy Script + +```bash +cd /Users/adisusilayasa/picoclaw +./deploy.sh +``` diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 000000000..2905d58a3 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +echo "🦞 PicoClaw Deployment Helper" +echo "==============================" +echo "" +echo "Choose deployment platform:" +echo "" +echo "1) Railway.app (Recommended - $5/month free credit)" +echo "2) Render.com (Free - 750 hours/month)" +echo "3) Fly.io (Free - 3 VMs)" +echo "4) Show instructions only" +echo "" +read -p "Enter choice [1-4]: " choice + +case $choice in + 1) + echo "" + echo "📦 Deploying to Railway..." + echo "" + + # Check if Railway CLI is installed + if ! command -v railway &> /dev/null; then + echo "Installing Railway CLI..." + npm install -g @railway/cli + fi + + # Login if needed + railway login + + # Initialize project + echo "" + echo "Run these commands:" + echo " railway init" + echo " railway variables set TELEGRAM_BOT_TOKEN=YOUR_TOKEN" + echo " railway variables set ZHIPU_API_KEY=YOUR_KEY" + echo " railway up" + ;; + 2) + echo "" + echo "📦 Deploying to Render..." + echo "" + echo "Steps:" + echo "1. Go to https://render.com" + echo "2. Create account" + echo "3. New → Web Service" + echo "4. Connect GitHub repo" + echo "5. Select Docker environment" + echo "6. Add environment variables" + echo "7. Deploy" + ;; + 3) + echo "" + echo "📦 Deploying to Fly.io..." + echo "" + + # Check if Fly CLI is installed + if ! command -v fly &> /dev/null; then + echo "Installing Fly CLI..." + brew install flyctl + fi + + echo "Run these commands:" + echo " fly auth login" + echo " fly secrets set TELEGRAM_BOT_TOKEN=YOUR_TOKEN" + echo " fly secrets set ZHIPU_API_KEY=YOUR_KEY" + echo " fly launch" + echo " fly deploy" + ;; + 4) + echo "" + echo "📖 See ~/.picoclaw/workspace/DEPLOYMENT.md for detailed instructions" + ;; + *) + echo "Invalid choice" + ;; +esac diff --git a/fly.toml b/fly.toml new file mode 100644 index 000000000..e5ef4bc48 --- /dev/null +++ b/fly.toml @@ -0,0 +1,28 @@ +app = "picoclaw-claw" +primary_region = "sin" + +[build] + dockerfile = "Dockerfile" + +[env] + PORT = "8080" + +[[services]] + internal_port = 8080 + protocol = "tcp" + auto_stop_machines = false + auto_start_machines = false + min_machines_running = 1 + + [[services.ports]] + handlers = ["http"] + port = 80 + + [[services.ports]] + handlers = ["tls", "http"] + port = 443 + +[[vm]] + cpu_kind = "shared" + cpus = 1 + memory_mb = 256 diff --git a/railway.toml b/railway.toml new file mode 100644 index 000000000..253c0ed41 --- /dev/null +++ b/railway.toml @@ -0,0 +1,8 @@ +[build] +builder = "DOCKERFILE" +dockerfilePath = "Dockerfile" + +[deploy] +startCommand = "./build/picoclaw gateway" +restartPolicyType = "ON_FAILURE" +restartPolicyMaxRetries = 10 diff --git a/render.yaml b/render.yaml new file mode 100644 index 000000000..bc0672eea --- /dev/null +++ b/render.yaml @@ -0,0 +1,20 @@ +services: + - type: web + name: picoclaw + runtime: docker + dockerContext: . + dockerfilePath: ./Dockerfile + plan: free + envVars: + - key: TELEGRAM_BOT_TOKEN + sync: false + - key: ZHIPU_API_KEY + sync: false + - key: WEB_SEARCH_ENABLED + value: true + - key: WEB_SEARCH_PROVIDER + value: duckduckgo + disk: + name: picoclaw-data + mountPath: /root/.picoclaw + sizeGB: 1