# 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.