Spaces:
Build error
Build error
File size: 5,964 Bytes
4b1daed | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | # AmaniQuery Render Deployment Guide
This guide details the steps to deploy the AmaniQuery monorepo components to [Render.com](https://render.com).
## Prerequisites
1. **GitHub Repository**: Ensure your code is pushed to a GitHub repository connected to Render.
2. **Docker**, **Node.js**, and **Go** knowledge.
3. **Render Account**: Created and ready.
## 1. Database & Infrastructure (Render Postgres & Redis)
Before deploying services, set up your managed data stores.
### PostgreSQL
- **Type**: PostgreSQL
- **Name**: `amaniquery-db`
- **Region**: Frankfurt (EU-Central) or nearest.
- **Environment**:
- `POSTGRES_USER`: `amaniquery`
- `POSTGRES_DB`: `amaniquery`
- **Internal Connection URL**: Copy this for use in service env vars.
### Redis
- **Type**: Redis
- **Name**: `amaniquery-redis`
- **Max Memory Policy**: `allkeys-lru`
- **Internal Connection URL**: Copy this (`redis://...`).
## 2. Backend Services (Docker Runtime)
Since AmaniQuery is a monorepo, using **Docker** as the Runtime is recommended for Go services to handle build context correctly (copying `go.mod` from root).
### Common Configuration for All Backend Services
- **Runtime**: Docker
- **Repository**: `your-repo/amaniquery`
- **Region**: Same as Database.
| Service Name | Dockerfile Path | Build Context Directory | Env Vars |
| :--- | :--- | :--- | :--- |
| `amaniquery-portal` | `services/portal/Dockerfile` | `.` (Root) | `SERVER_HTTP_PORT=8080`, `DB_HOST=...` |
| `amaniquery-ingestion`| `services/ingestion/Dockerfile`| `.` (Root) | `QDRANT_URL=...`, `RABBITMQ_URL=...` |
| `amaniquery-voice` | `services/voice/Dockerfile` | `.` (Root) | `OPENAI_API_KEY=...` |
| `amaniquery-files` | `services/files/Dockerfile` | `.` (Root) | `MINIO_ENDPOINT=...` |
| `amaniquery-notifications`| `services/notifications/Dockerfile.gateway` | `.` (Root) | `MAILTRAP_API_KEY=...` |
> [!TIP]
> **Root Directory Setting**: In Render, set "Root Directory" to `.` (default) so Docker builds have access to the full monorepo context.
## 3. Frontend Applications (Static Sites)
We will use the **Static Site** type for frontends, relying on the `Dockerfile` or Render's Native Node build.
*Recommendation*: Use **Static Site** with Node build command for faster deploys, or **Docker** if you need Nginx customization.
### Option A: Static Site (Native Node - Recommended)
- **Build Command**: `yarn && yarn turbo run build --filter=admin-portal`
- **Publish Directory**: `frontend/apps/admin/dist`
- **Root Directory**: `frontend`
### Option B: Docker (Using our new Turbo Dockerfiles)
- **Runtime**: Docker
- **Dockerfile Path**: `frontend/apps/admin/Dockerfile`
- **Context**: `frontend` (Important: context is `frontend` subfolder, not root, for these specific Dockerfiles)
| App Name | Build Command (Static) | Publish Dir | Context |
| :--- | :--- | :--- | :--- |
| `admin-portal` | `yarn build:admin` | `apps/admin/dist` | `frontend` |
| `developer-portal` | `yarn build:dev` | `apps/developer-portal/dist` | `frontend` |
| `web-app` | `yarn build:web` | `apps/web/dist` | `frontend` |
> *Note: You may need to add helper scripts in `frontend/package.json` like `"build:admin": "turbo run build --filter=admin-portal"` to keep commands simple.*
## 4. HuggingFace Spaces (Docker Deployment)
For users preferring HuggingFace Spaces (free tier: 2 vCPU, 16GB RAM, 50GB disk), follow these steps.
### Prerequisites
- HuggingFace Account
- External Databases (Managed Services):
- **PostgreSQL**: Neon.tech (Free Tier available)
- **Redis**: Upstash (Free Tier available)
- **Qdrant**: Qdrant Cloud (Free Tier available)
### Deployment Steps
1. **Create a New Space**:
- Go to [HuggingFace Spaces](https://huggingface.co/new-space)
- Enter a name (e.g., `amaniquery`)
- Select **Docker** as the Space SDK
- Choose "Blank" for the template
2. **Deploy via Script (Recommended)**:
- Set `HF_TOKEN` in your local `.env`.
- Run: `python scripts/deploy_hf.py agent`
- This deploys both the Go Agent and Rust Memory Service in a single container (Sidecar pattern) for maximum efficiency and localhost communication.
3. **Deploy Manually (Alternative)**:
- Clone your Space's repository locally.
- Copy `deployments/huggingface/Dockerfile.hf` to `Dockerfile` in the root.
- Copy `deployments/huggingface/README.md` to the root.
- Push to HuggingFace.
4. **Configure Secrets**:
- Go to **Settings** -> **Variables and Secrets** in your Space.
- Add the secrets listed in `deployments/huggingface/.env.hf.example`.
5. **Status**:
- The Space will build and start both `agent-server` and `memory-server`.
- The Go agent will automatically connect to the local memory service.
6. **Automated Deployment (Optional)**:
We provided a script `scripts/deploy_hf.py` to automate the deployment process.
**Prerequisites**:
- `HF_TOKEN` must be set in your `.env` file (Get it from [HF Settings](https://huggingface.co/settings/tokens)).
- The Spaces must be created first (e.g., `AmaniQuery/amaniquery-agent` and `AmaniQuery/amaniquery-memory`).
**Usage**:
```bash
# Deploy Agent
python scripts/deploy_hf.py agent
# Deploy Memory Service
python scripts/deploy_hf.py memory
# Deploy Both
python scripts/deploy_hf.py all
```
## 5. Environment Variables Checklist
Transfer these from your `env.example` files to Render's "Environment" tab for each service.
- [ ] **Portal**: `DB_HOST`, `DB_PORT`, `DB_USER`, `DB_PASSWORD`, `DB_NAME`, `REDIS_URL`, `JWT_SECRET`
- [ ] **Voice**: `OPENAI_API_KEY`, `ELEVENLABS_API_KEY`, `REDIS_URL`
- [ ] **Frontend**: `VITE_API_BASE_URL` (Set this to the `https://...onrender.com` URL of your Portal service).
## 6. Deployment Order
1. **Infrastructure** (Postgres/Redis) - Wait for healthy.
2. **Backend Services** (Portal, etc.) - Deploy & check logs.
3. **Frontend Apps** - Deploy & update `VITE_API_BASE_URL` with backend URL.
|