One-command deployment for Moltbot on GCP Compute Engine: - Automated VM creation, Docker setup, and gateway configuration - Optional Tailscale integration for HTTPS (no SSH tunnel needed) - Optional Telegram allowlist for auto-approved users - Auto-generates secure tokens (gateway token, keyring password) - Container stability checks with auto-restart - Uninstall script included
577 lines
18 KiB
Markdown
577 lines
18 KiB
Markdown
# Deploy Moltbot to Google Compute Engine
|
|
|
|
This script automates the deployment of Moltbot to Google Compute Engine, following the official documentation at [`docs/platforms/gcp.md`](../../../../docs/platforms/gcp.md).
|
|
|
|
---
|
|
|
|
## For Beginners: What is all this?
|
|
|
|
### Architecture Overview
|
|
|
|
```mermaid
|
|
graph TB
|
|
subgraph You["👤 YOU (user)"]
|
|
Laptop["💻 Laptop<br/>(browser)"]
|
|
Phone["📱 Phone<br/>(Telegram)"]
|
|
Tablet["📱 Tablet<br/>(browser)"]
|
|
end
|
|
|
|
subgraph GCP["☁️ GOOGLE CLOUD PLATFORM"]
|
|
subgraph VM["🖥️ VM (Compute Engine)<br/>Debian 12, 4GB RAM"]
|
|
subgraph Docker["🐳 DOCKER"]
|
|
Gateway["🤖 MOLTBOT GATEWAY<br/>(port 18789)<br/>─────────────<br/>• Receives Telegram messages<br/>• Processes with Claude AI<br/>• Responds automatically<br/>• Web UI for config"]
|
|
end
|
|
subgraph Volumes["📁 Mounted Volumes"]
|
|
Config["~/.clawdbot/<br/>(config, tokens)"]
|
|
Workspace["~/clawd/<br/>(agent workspace)"]
|
|
end
|
|
end
|
|
end
|
|
|
|
Laptop -->|"HTTPS<br/>(Tailscale)"| Gateway
|
|
Phone -->|"Telegram API"| Gateway
|
|
Tablet -->|"HTTPS<br/>(Tailscale)"| Gateway
|
|
Gateway --> Config
|
|
Gateway --> Workspace
|
|
```
|
|
|
|
### What does each technology do?
|
|
|
|
| Technology | What it is | Simple explanation |
|
|
|------------|-----------|---------------------|
|
|
| **Google Cloud Platform (GCP)** | Cloud computing | "Renting a computer in the cloud" - you pay ~$25/mo to have a server running 24/7 |
|
|
| **Compute Engine (VM)** | Virtual machine | A virtual computer inside GCP with Debian Linux, 4GB RAM, 20GB disk |
|
|
| **Docker** | Container runtime | "Isolated box for applications" - ensures Moltbot works the same everywhere |
|
|
| **Tailscale** | Personal VPN | Connects your devices securely, provides free HTTPS, only you can access |
|
|
| **Gateway Token** | Authentication | "Moltbot password" - even with the URL, you need the token to enter |
|
|
| **Anthropic API (Claude)** | AI service | "The bot's brain" - the AI that generates responses, pay per usage |
|
|
|
|
### Message flow in Telegram
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant You as 👤 You
|
|
participant TG as 📱 Telegram
|
|
participant GW as 🤖 Moltbot Gateway
|
|
participant AI as 🧠 Anthropic API
|
|
|
|
You->>TG: 1. "Hello, Claude"
|
|
TG->>GW: 2. Forward message
|
|
GW->>AI: 3. Send to Claude
|
|
AI->>GW: 4. Generate response
|
|
GW->>TG: 5. Send reply
|
|
TG->>You: 6. "Hello! How can I help?"
|
|
```
|
|
|
|
### Why use Tailscale?
|
|
|
|
```mermaid
|
|
graph LR
|
|
subgraph Without["❌ WITHOUT TAILSCALE"]
|
|
B1["🌐 Browser"] -->|"HTTP"| IP1["http://35.192.x.x:18789"]
|
|
IP1 -->|"❌ BLOCKED"| Error["Insecure connection<br/>WebSocket requires HTTPS"]
|
|
end
|
|
```
|
|
|
|
```mermaid
|
|
graph LR
|
|
subgraph With["✅ WITH TAILSCALE"]
|
|
B2["🌐 Browser"] -->|"HTTPS"| TS["🔐 Tailscale<br/>Private VPN"]
|
|
TS -->|"Encrypted"| VM2["🖥️ VM on GCP"]
|
|
VM2 --> OK["✅ Works!<br/>Auto SSL + Private access"]
|
|
end
|
|
```
|
|
|
|
### Access Modes Compared
|
|
|
|
| Mode | Security | Convenience | How it works |
|
|
|------|----------|-------------|--------------|
|
|
| **SSH Tunnel** (default) | ⭐⭐⭐⭐⭐ | ⭐⭐ | Run SSH command every time, access via `localhost:18789` |
|
|
| **Tailscale** (recommended) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Install once, automatic HTTPS, only your devices can access |
|
|
| **Public IP** (not recommended) | ⭐⭐ | ⭐⭐⭐⭐ | Anyone can try to access, UI doesn't work (needs HTTPS) |
|
|
|
|
### What the script does automatically
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
Start["🚀 run.sh --project X --tailscale --telegram-user-id Y"] --> Step1
|
|
|
|
subgraph Step1["Step 1: Verification"]
|
|
V1["✓ gcloud CLI installed?"]
|
|
V2["✓ Authenticated on GCP?"]
|
|
V3["✓ Project has billing?"]
|
|
end
|
|
|
|
Step1 --> Step2
|
|
|
|
subgraph Step2["Step 2: Create VM"]
|
|
VM1["Create e2-medium (4GB RAM)"]
|
|
VM2["Install Docker"]
|
|
VM3["Configure firewall"]
|
|
end
|
|
|
|
Step2 --> Step3
|
|
|
|
subgraph Step3["Step 3: Configure Moltbot"]
|
|
C1["Clone repository"]
|
|
C2["Create .env with keys"]
|
|
C3["Auto-generate tokens"]
|
|
end
|
|
|
|
Step3 --> Step4
|
|
|
|
subgraph Step4["Step 4: Build & Start"]
|
|
B1["docker compose build"]
|
|
B2["docker compose up -d"]
|
|
B3["Verify stability (3 checks)"]
|
|
end
|
|
|
|
Step4 --> Step5
|
|
|
|
subgraph Step5["Step 5: Tailscale (if --tailscale)"]
|
|
T1["Install Tailscale on VM host"]
|
|
T2["Authenticate (link in terminal)"]
|
|
T3["Run 'tailscale serve' on host"]
|
|
T4["Automatic HTTPS → localhost:18789"]
|
|
end
|
|
|
|
Step5 --> Step6
|
|
|
|
subgraph Step6["Step 6: Telegram (if --telegram-user-id)"]
|
|
TG1["Set dmPolicy = allowlist"]
|
|
TG2["Add your user ID to allowlist"]
|
|
end
|
|
|
|
Step6 --> Result["✅ DONE!<br/>URL: https://moltbot-gateway.tailnet-xxx.ts.net<br/>Telegram: Message @YourBot!"]
|
|
```
|
|
|
|
### Estimated Costs
|
|
|
|
| Service | Cost | Notes |
|
|
|---------|------|-------|
|
|
| **GCP VM** (e2-medium) | ~$25/mo | 4GB RAM, runs 24/7 |
|
|
| **GCP Disk** (20GB) | ~$2/mo | Persistent storage |
|
|
| **GCP Network** | ~$1-5/mo | Depends on usage |
|
|
| **Anthropic API** | ~$5-20/mo | Claude 3.5 Sonnet: $3/1M input, $15/1M output |
|
|
| **Tailscale** | FREE | Up to 100 devices |
|
|
| **Telegram** | FREE | |
|
|
| **TOTAL** | **~$33-52/mo** | |
|
|
|
|
---
|
|
|
|
## What the Script Does (follows docs/platforms/gcp.md)
|
|
|
|
The script automates the deployment steps from the official documentation:
|
|
|
|
1. **Checks prerequisites** - gcloud CLI, authentication, billing
|
|
2. **Enables APIs** - Compute Engine API
|
|
3. **Creates VM** - e2-medium, Debian 12, 20GB (configurable)
|
|
4. **Installs Docker** - Via startup script
|
|
5. **Clones repository** - `git clone` on the VM
|
|
6. **Creates persistent directories** - `~/.clawdbot` and `~/clawd`
|
|
7. **Configures .env** - All required variables including `GOG_KEYRING_PASSWORD`
|
|
8. **Creates docker-compose.yml** - With volume mounts for persistence
|
|
9. **Creates Dockerfile.gcp** - Optimized for GCP deployment
|
|
10. **Builds and launches** - `docker compose build && docker compose up -d`
|
|
11. **Verifies gateway** - Shows startup logs
|
|
|
|
## Prerequisites
|
|
|
|
- [Google Cloud CLI](https://cloud.google.com/sdk/docs/install) installed and authenticated
|
|
- A Google Cloud project with billing enabled
|
|
- An Anthropic API key ([get one here](https://console.anthropic.com/))
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Recommended: Full setup with Tailscale HTTPS + Telegram auto-approval
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT_ID \
|
|
--anthropic-key sk-ant-xxx \
|
|
--tailscale \
|
|
--telegram-user-id YOUR_TELEGRAM_USER_ID
|
|
|
|
# Production deployment (e2-medium, SSH tunnel access - most secure)
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT_ID \
|
|
--anthropic-key sk-ant-xxx
|
|
|
|
# Restrict access to your IP only (recommended - auto-detects and confirms)
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT_ID \
|
|
--anthropic-key sk-ant-xxx \
|
|
--my-ip
|
|
|
|
# Free tier deployment (e2-micro, may OOM under load)
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT_ID \
|
|
--machine-type e2-micro \
|
|
--anthropic-key sk-ant-xxx
|
|
|
|
# With .env file
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT_ID \
|
|
--env-file .env
|
|
|
|
# With HTTPS via Tailscale (recommended for direct browser access)
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT_ID \
|
|
--anthropic-key sk-ant-xxx \
|
|
--tailscale
|
|
```
|
|
|
|
To find your Telegram user ID, message [@userinfobot](https://t.me/userinfobot) on Telegram.
|
|
|
|
To find your IP address:
|
|
|
|
```bash
|
|
curl -4 ifconfig.me
|
|
```
|
|
|
|
## Options
|
|
|
|
| Option | Default | Description |
|
|
|--------|---------|-------------|
|
|
| `--project PROJECT_ID` | (required) | Google Cloud project ID |
|
|
| `--zone ZONE` | `us-central1-a` | Compute Engine zone |
|
|
| `--instance NAME` | `moltbot-gateway` | Instance name |
|
|
| `--machine-type TYPE` | `e2-medium` | Machine type (4GB RAM, needed for builds) |
|
|
| `--disk-size SIZE` | `20GB` | Boot disk size |
|
|
| `--env-file FILE` | - | Load environment variables from file |
|
|
| `--anthropic-key KEY` | - | Anthropic API key |
|
|
| `--gateway-token TOKEN` | auto-generated | Gateway authentication token |
|
|
| `--my-ip` | - | Auto-detect your IP and restrict firewall (API only, UI needs HTTPS) |
|
|
| `--allowed-ip IP` | - | Restrict firewall to specific IP (API only, UI needs HTTPS) |
|
|
| `--tailscale` | - | Install Tailscale for HTTPS access (recommended for UI) |
|
|
| `--telegram-user-id ID` | - | Telegram user ID to auto-approve (no pairing needed) |
|
|
|
|
## Access Modes
|
|
|
|
### SSH Tunnel (default, most secure)
|
|
|
|
By default, the gateway binds to loopback only (`127.0.0.1:18789`). Access via SSH tunnel:
|
|
|
|
```bash
|
|
# Create tunnel from your laptop
|
|
gcloud compute ssh moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT -- -L 18789:127.0.0.1:18789
|
|
|
|
# Open in browser
|
|
http://127.0.0.1:18789/
|
|
```
|
|
|
|
**Pros:** Most secure, no ports exposed to internet
|
|
**Cons:** Requires SSH tunnel every time you access the UI
|
|
|
|
### Tailscale (recommended for direct browser access)
|
|
|
|
With `--tailscale` flag, the script:
|
|
1. Installs Tailscale on the VM host (before Docker build)
|
|
2. Authenticates Tailscale (you click the link in terminal)
|
|
3. Runs `sudo tailscale serve --bg --yes 18789` on the host
|
|
4. Docker container binds to `0.0.0.0:18789` for Tailscale to proxy
|
|
|
|
```bash
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT \
|
|
--anthropic-key sk-ant-xxx \
|
|
--tailscale
|
|
|
|
# Follow the authentication link that appears in the terminal
|
|
# Then access via: https://moltbot-gateway.your-tailnet.ts.net/
|
|
```
|
|
|
|
After deployment, you can access the Gateway UI directly via the Tailscale URL - no port number needed (Tailscale Serve handles HTTPS on port 443).
|
|
|
|
**Pros:** HTTPS works, direct browser access, secure, no SSH tunnel needed
|
|
**Cons:** Requires Tailscale account (free)
|
|
|
|
### IP Restricted Access (API only - UI requires HTTPS)
|
|
|
|
With `--my-ip` flag, the script auto-detects your IP and asks for confirmation.
|
|
|
|
**Note:** Due to browser security (secure context), the UI only works via localhost or HTTPS. Use SSH tunnel or Tailscale for UI access.
|
|
|
|
```bash
|
|
# Deploy with auto-detected IP restriction (recommended)
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT \
|
|
--anthropic-key sk-ant-xxx \
|
|
--my-ip
|
|
|
|
# The script will:
|
|
# 1. Detect your IP (e.g., 186.220.38.207)
|
|
# 2. Ask: "Restrict access to IP 186.220.38.207? [Y/n]"
|
|
# 3. If yes, proceed with deployment restricted to your IP
|
|
|
|
# Or specify IP manually:
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT \
|
|
--anthropic-key sk-ant-xxx \
|
|
--allowed-ip 186.220.38.207
|
|
|
|
# Access directly (no tunnel needed)
|
|
http://INSTANCE_IP:18789/?token=YOUR_GATEWAY_TOKEN
|
|
```
|
|
|
|
**Pros:** Direct access to UI without SSH tunnel, secure (only your IP can connect)
|
|
**Cons:** If your IP changes, you need to update the firewall rule:
|
|
|
|
```bash
|
|
# Update allowed IP
|
|
gcloud compute firewall-rules update moltbot-gateway \
|
|
--project=YOUR_PROJECT \
|
|
--source-ranges="NEW_IP/32"
|
|
```
|
|
|
|
### Public Access (not recommended)
|
|
|
|
With `--public` flag, the gateway is exposed to all IPs:
|
|
|
|
```bash
|
|
# Deploy with public access (open to everyone)
|
|
./scripts/deploy/google/compute-engine/run.sh --project YOUR_PROJECT --anthropic-key sk-ant-xxx --public
|
|
|
|
# Access directly
|
|
http://INSTANCE_IP:18789/?token=YOUR_GATEWAY_TOKEN
|
|
```
|
|
|
|
**Warning:** Anyone with the token can access your gateway. Only use this if you understand the security implications.
|
|
|
|
### How to Find Your IP Address
|
|
|
|
```bash
|
|
# Use curl
|
|
curl -4 ifconfig.me
|
|
```
|
|
|
|
This will return something like `186.220.38.207`.
|
|
|
|
**Tip:** Use `--my-ip` flag during deployment to auto-detect and confirm your IP automatically.
|
|
|
|
### Managing Allowed IPs
|
|
|
|
#### Add or change your IP
|
|
|
|
If your IP changes, update the firewall rule:
|
|
|
|
```bash
|
|
# Update to new single IP
|
|
gcloud compute firewall-rules update moltbot-gateway \
|
|
--project=YOUR_PROJECT \
|
|
--source-ranges="NEW_IP/32"
|
|
```
|
|
|
|
#### Allow multiple IPs
|
|
|
|
To allow multiple IPs (e.g., home and office):
|
|
|
|
```bash
|
|
# Allow multiple IPs (comma-separated)
|
|
gcloud compute firewall-rules update moltbot-gateway \
|
|
--project=YOUR_PROJECT \
|
|
--source-ranges="186.220.38.207/32,200.100.50.25/32"
|
|
```
|
|
|
|
#### Allow an IP range
|
|
|
|
To allow a range of IPs:
|
|
|
|
```bash
|
|
# Allow a /24 subnet (e.g., 186.220.38.0 - 186.220.38.255)
|
|
gcloud compute firewall-rules update moltbot-gateway \
|
|
--project=YOUR_PROJECT \
|
|
--source-ranges="186.220.38.0/24"
|
|
```
|
|
|
|
#### Check current allowed IPs
|
|
|
|
```bash
|
|
gcloud compute firewall-rules describe moltbot-gateway \
|
|
--project=YOUR_PROJECT \
|
|
--format="value(sourceRanges)"
|
|
```
|
|
|
|
## What Persists Where
|
|
|
|
| Component | Location | Persistence | Notes |
|
|
|-----------|----------|-------------|-------|
|
|
| Gateway config | `~/.clawdbot/` | Host volume | `moltbot.json`, tokens |
|
|
| OAuth tokens | `~/.clawdbot/` | Host volume | Model auth profiles |
|
|
| WhatsApp session | `~/.clawdbot/` | Host volume | Preserves QR login |
|
|
| Gmail keyring | `~/.clawdbot/` | Host volume | Requires `GOG_KEYRING_PASSWORD` |
|
|
| Agent workspace | `~/clawd/` | Host volume | Code and artifacts |
|
|
| Application | Docker image | Rebuilt on update | Node.js app and dependencies |
|
|
|
|
## Machine Types
|
|
|
|
| Type | vCPU | Memory | Monthly Cost | Notes |
|
|
|------|------|--------|--------------|-------|
|
|
| e2-micro | 0.25 | 1 GB | Free tier | ❌ OOM during build and runtime |
|
|
| e2-small | 0.5 | 2 GB | ~$12/mo | ❌ OOM during Docker build |
|
|
| e2-medium | 1 | 4 GB | ~$25/mo | ✅ **Default** - works for build and runtime |
|
|
|
|
### Why e2-medium?
|
|
|
|
The Docker build process (`pnpm install`) requires ~3GB of RAM. Smaller machines will be killed by the OS (OOM - Out of Memory) during the build phase.
|
|
|
|
- **e2-micro (1GB)**: Will OOM during build and often during runtime
|
|
- **e2-small (2GB)**: Will OOM during Docker build (`pnpm install`)
|
|
- **e2-medium (4GB)**: Works for build and runtime ✅
|
|
|
|
After the initial build, runtime memory usage is lower (~1-2GB). If cost is a concern, you can:
|
|
1. Build with `e2-medium`
|
|
2. After successful deployment, downgrade to `e2-small` for runtime
|
|
|
|
## Post-Deployment Commands
|
|
|
|
### SSH to instance
|
|
|
|
```bash
|
|
gcloud compute ssh moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT
|
|
```
|
|
|
|
### View logs
|
|
|
|
```bash
|
|
gcloud compute ssh moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT \
|
|
--command='cd ~/moltbot && docker compose logs -f'
|
|
```
|
|
|
|
### Restart gateway
|
|
|
|
```bash
|
|
gcloud compute ssh moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT \
|
|
--command='cd ~/moltbot && docker compose restart'
|
|
```
|
|
|
|
### Update Moltbot
|
|
|
|
```bash
|
|
gcloud compute ssh moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT \
|
|
--command='cd ~/moltbot && git pull && docker compose build && docker compose up -d'
|
|
```
|
|
|
|
## Telegram Auto-Approval
|
|
|
|
By default, Moltbot requires users to "pair" before using the bot via Telegram. With `--telegram-user-id`, you can pre-approve your Telegram account:
|
|
|
|
```bash
|
|
./scripts/deploy/google/compute-engine/run.sh \
|
|
--project YOUR_PROJECT \
|
|
--anthropic-key sk-ant-xxx \
|
|
--telegram-user-id 123456789
|
|
```
|
|
|
|
This sets:
|
|
- `channels.telegram.dmPolicy: "allowlist"` - Only allowlisted users can message the bot
|
|
- `channels.telegram.allowFrom: ["123456789"]` - Your user ID is pre-approved
|
|
|
|
**How to find your Telegram user ID:**
|
|
1. Message [@userinfobot](https://t.me/userinfobot) on Telegram
|
|
2. It will reply with your user ID (a number like `123456789`)
|
|
|
|
## Uninstall
|
|
|
|
```bash
|
|
# Delete instance and firewall rule
|
|
./scripts/deploy/google/compute-engine/uninstall.sh --project YOUR_PROJECT
|
|
|
|
# Keep firewall for future deployments
|
|
./scripts/deploy/google/compute-engine/uninstall.sh --project YOUR_PROJECT --keep-firewall
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### SSH connection refused
|
|
|
|
SSH key propagation can take 1-2 minutes after VM creation. Wait and retry.
|
|
|
|
### Instance not starting
|
|
|
|
Check the serial console output:
|
|
|
|
```bash
|
|
gcloud compute instances get-serial-port-output moltbot-gateway \
|
|
--zone=us-central1-a --project=YOUR_PROJECT
|
|
```
|
|
|
|
### Out of memory (OOM)
|
|
|
|
If you see `exit code: 137` or `Killed` during Docker build, the VM ran out of memory.
|
|
|
|
**Solution:** Upgrade to `e2-medium` (4GB RAM):
|
|
|
|
```bash
|
|
# Stop the VM
|
|
gcloud compute instances stop moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT
|
|
|
|
# Change machine type to e2-medium (4GB RAM)
|
|
gcloud compute instances set-machine-type moltbot-gateway \
|
|
--zone=us-central1-a --project=YOUR_PROJECT \
|
|
--machine-type=e2-medium
|
|
|
|
# Start the VM
|
|
gcloud compute instances start moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT
|
|
|
|
# Re-run the build
|
|
gcloud compute ssh moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT \
|
|
--command='cd ~/moltbot && docker compose build && docker compose up -d'
|
|
```
|
|
|
|
**Note:** The default is now `e2-medium` to avoid this issue. See [Machine Types](#machine-types) for details.
|
|
|
|
### Docker build fails
|
|
|
|
SSH into the instance and check disk space:
|
|
|
|
```bash
|
|
gcloud compute ssh moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT
|
|
df -h
|
|
docker system prune -a # Clean up old images
|
|
```
|
|
|
|
## Security Recommendations
|
|
|
|
1. **Use `--tailscale`** (recommended) - Automatic HTTPS, private access via your tailnet
|
|
2. **Use SSH tunnel** - Most secure, but requires tunnel for each access
|
|
3. **Use `--allowed-ip`** - Restricts to your IP only (API only, UI needs HTTPS)
|
|
4. **Avoid `--public`** - Open to all IPs, only use if you understand the risks
|
|
5. **Rotate tokens** - Change `CLAWDBOT_GATEWAY_TOKEN` periodically
|
|
6. **Use `--telegram-user-id`** - Pre-approve only your Telegram account (no open pairing)
|
|
|
|
## Tailscale HTTPS Details
|
|
|
|
When using `--tailscale`, the script sets up automatic HTTPS via Tailscale Serve:
|
|
|
|
1. **VM Host**: Tailscale daemon runs on the VM, authenticated to your tailnet
|
|
2. **Tailscale Serve**: The script runs `sudo tailscale serve --bg --yes 18789` on the HOST
|
|
3. **Docker Container**: Binds to `0.0.0.0:18789` so Tailscale can proxy to it
|
|
|
|
The architecture is:
|
|
```
|
|
Internet → Tailscale (HTTPS:443) → localhost:18789 → Docker (gateway)
|
|
```
|
|
|
|
Tailscale Serve runs on the HOST (not in the container) because it requires root permissions.
|
|
|
|
### Manual Tailscale Setup (if not using `--tailscale`)
|
|
|
|
If you deployed without `--tailscale` and want to add it later:
|
|
|
|
```bash
|
|
# SSH to instance
|
|
gcloud compute ssh moltbot-gateway --zone=us-central1-a --project=YOUR_PROJECT
|
|
|
|
# Install Tailscale on the VM host
|
|
curl -fsSL https://tailscale.com/install.sh | sh
|
|
sudo tailscale up --hostname=moltbot-gateway
|
|
|
|
# Configure Tailscale Serve to proxy HTTPS to the gateway port
|
|
sudo tailscale serve --bg --yes 18789
|
|
|
|
# Verify it's working
|
|
tailscale serve status
|
|
```
|
|
|
|
This gives you a secure URL like `https://moltbot-gateway.your-tailnet.ts.net`.
|