home / skills / aiagentskills / skills / enter-services

enter-services skill

/skills/enter-services/enter-services

npx playbooks add skill aiagentskills/skills --skill enter-services

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
5.2 KB
---
name: enter-services
description: "Deploy and manage enter.pollinations.ai text/image services on EC2 and Cloudflare Workers. Requires: SSH keys, sops, wrangler."
---

# Requirements

Before using this skill, ensure you have:
- **SSH keys**: Configured via GitHub secrets (see workflow)
- **sops**: `brew install sops` (for decrypting secrets)
- **Wrangler**: `npm install -g wrangler`
- **Node.js**: `brew install node`

Must run from the `pollinations` repo root.

---

# Architecture Overview

| Environment | Gateway (Cloudflare Worker) | Text/Image Services (EC2) |
|-------------|----------------------------|---------------------------|
| **Production** | `enter.pollinations.ai` | `3.80.56.235` (ports 16384/16385) |
| **Staging** | `staging.enter.pollinations.ai` | `44.222.254.250` (ports 16384/16385) |

---

# SSH Configuration

Add to `~/.ssh/config`:
```
# Production instance
Host enter-services
  HostName 3.80.56.235
  User ubuntu
  IdentityFile ~/.ssh/enter-services-shared-key

# Staging instance
Host enter-services-staging
  HostName 44.222.254.250
  User ubuntu
  IdentityFile ~/.ssh/enter-services-staging-key
```

---

# Quick Commands

## Production

```bash
# Service status
ssh enter-services "sudo systemctl status text-pollinations.service image-pollinations.service"

# View logs (real-time)
ssh enter-services "sudo journalctl -u text-pollinations.service -f"
ssh enter-services "sudo journalctl -u image-pollinations.service -f"

# Restart services
ssh enter-services "sudo systemctl restart text-pollinations.service image-pollinations.service"

# Recent errors
ssh enter-services "sudo journalctl -u text-pollinations.service -p err -n 20"
```

## Staging

```bash
# Service status
ssh enter-services-staging "sudo systemctl status text-pollinations.service image-pollinations.service"

# View logs
ssh enter-services-staging "sudo journalctl -u text-pollinations.service -f"

# Restart
ssh enter-services-staging "sudo systemctl restart text-pollinations.service image-pollinations.service"
```

---

# Deploy to Production

The GitHub workflow handles production deployments automatically on push to `production` branch.

**Manual deployment:**
```bash
# 1. SSH into production
ssh enter-services

# 2. Pull and restart
cd /home/ubuntu/pollinations
git pull origin production
cd text.pollinations.ai && npm install
cd ../image.pollinations.ai && npm install
sudo systemctl restart text-pollinations.service image-pollinations.service
```

---

# Deploy to Staging

## Full Setup (New Instance)

```bash
# 1. SSH into the new instance
ssh enter-services-staging

# 2. Install build tools (if needed)
sudo apt-get update && sudo apt-get install -y build-essential

# 3. Clone repo
git clone https://github.com/pollinations/pollinations.git
cd pollinations

# 4. Run setup script
bash enter.pollinations.ai/scripts/setup-services.sh /home/ubuntu/pollinations

# 5. From your LOCAL machine - decrypt and copy env files
cd /path/to/pollinations
sops --output-type dotenv -d text.pollinations.ai/secrets/env.json > /tmp/text.env
sops --output-type dotenv -d image.pollinations.ai/secrets/env.json > /tmp/image.env
scp /tmp/text.env enter-services-staging:/home/ubuntu/pollinations/text.pollinations.ai/.env
scp /tmp/image.env enter-services-staging:/home/ubuntu/pollinations/image.pollinations.ai/.env
rm /tmp/text.env /tmp/image.env

# 6. Restart services
ssh enter-services-staging "sudo systemctl restart text-pollinations.service image-pollinations.service"
```

## Update Staging

```bash
ssh enter-services-staging "cd /home/ubuntu/pollinations && git pull && cd text.pollinations.ai && npm install && cd ../image.pollinations.ai && npm install && sudo systemctl restart text-pollinations.service image-pollinations.service"
```

---

# Deploy Cloudflare Worker (enter.pollinations.ai)

```bash
cd enter.pollinations.ai

# Production
npm run deploy:production

# Staging
npm run deploy:staging
```

---

# Service Locations (on EC2)

- **Service definitions**: `/etc/systemd/system/`
- **Text service**: `/home/ubuntu/pollinations/text.pollinations.ai/`
- **Image service**: `/home/ubuntu/pollinations/image.pollinations.ai/`

---

# Wrangler Configuration

The `wrangler.toml` contains environment configs:

| Environment | Route | Service URLs |
|-------------|-------|--------------|
| `production` | `enter.pollinations.ai` | Production EC2 |
| `staging` | `staging.enter.pollinations.ai` | Staging EC2 |
| `local` | `localhost:3000` | Local dev |

---

# Troubleshooting

## Services won't start

```bash
# Check logs
ssh enter-services-staging "sudo journalctl -u text-pollinations.service -n 50"

# Check if .env exists
ssh enter-services-staging "ls -la /home/ubuntu/pollinations/text.pollinations.ai/.env"

# Check node/npm
ssh enter-services-staging "node -v && npm -v"
```

## Missing dependencies

```bash
ssh enter-services-staging "cd /home/ubuntu/pollinations/text.pollinations.ai && npm install"
```

## Need build tools

```bash
ssh enter-services-staging "sudo apt-get install -y build-essential"
```

---

# Notes

- **Production** deploys on push to `production` branch
- **Staging** deploys on push to `staging` branch
- Always test on staging before merging to production
- The Cloudflare Worker (enter.pollinations.ai) routes to EC2 services
- Text service: port 16385, Image service: port 16384