mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-27 21:33:41 +02:00
* feat(agent): add kiro cli acp runtime * fix(agent): align kiro acp prompt and notifications * chore(agent): clarify kiro acp args compatibility
230 lines
8.1 KiB
Markdown
230 lines
8.1 KiB
Markdown
# Self-Hosting Guide
|
|
|
|
Deploy Multica on your own infrastructure in minutes.
|
|
|
|
## Architecture
|
|
|
|
| Component | Description | Technology |
|
|
|-----------|-------------|------------|
|
|
| **Backend** | REST API + WebSocket server | Go (single binary) |
|
|
| **Frontend** | Web application | Next.js 16 |
|
|
| **Database** | Primary data store | PostgreSQL 17 with pgvector |
|
|
|
|
Each user who runs AI agents locally also installs the **`multica` CLI** and runs the **agent daemon** on their own machine.
|
|
|
|
## Quick Install (Recommended)
|
|
|
|
Two commands to set up everything — server, CLI, and configuration:
|
|
|
|
```bash
|
|
# 1. Install CLI + provision the self-host server
|
|
curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash -s -- --with-server
|
|
|
|
# 2. Configure CLI, authenticate, and start the daemon
|
|
multica setup self-host
|
|
```
|
|
|
|
This installs the `multica` CLI, checks out the latest self-host assets, pulls the official Multica images from GHCR, and configures everything for localhost.
|
|
|
|
Open http://localhost:3000. To log in, configure `RESEND_API_KEY` in `.env` for email-based codes (recommended), or leave Resend unset and copy the generated code from the backend logs. See [Step 2 — Log In](#step-2--log-in) for details.
|
|
|
|
> **Prerequisites:** Docker and Docker Compose must be installed. The script checks for this and provides install links if missing.
|
|
>
|
|
> **CLI only?** If the self-host server is already running and you only need the CLI on a macOS/Linux machine, install it with Homebrew:
|
|
>
|
|
> ```bash
|
|
> brew install multica-ai/tap/multica
|
|
> ```
|
|
|
|
---
|
|
|
|
## Step-by-Step Setup (Alternative)
|
|
|
|
If you prefer to run each step manually:
|
|
|
|
### Step 1 — Start the Server
|
|
|
|
**Prerequisites:** Docker and Docker Compose.
|
|
|
|
```bash
|
|
git clone https://github.com/multica-ai/multica.git
|
|
cd multica
|
|
make selfhost
|
|
```
|
|
|
|
`make selfhost` automatically creates `.env` from the example, generates a random `JWT_SECRET`, and starts all services via Docker Compose.
|
|
|
|
By default it pulls the latest stable release images from GHCR. To build the backend/web from your current checkout instead, run `make selfhost-build`.
|
|
If the selected GHCR tag has not been published yet, `make selfhost` now tells you to fall back to `make selfhost-build`.
|
|
`make selfhost-build` uses local `multica-backend:dev` / `multica-web:dev` tags, so it does not overwrite the pulled `:latest` images.
|
|
|
|
Once ready:
|
|
|
|
- **Frontend:** http://localhost:3000
|
|
- **Backend API:** http://localhost:8080
|
|
|
|
> **Note:** If you prefer to run the Docker Compose steps manually, see [Manual Docker Compose Setup](#manual-docker-compose-setup) below.
|
|
|
|
### Step 2 — Log In
|
|
|
|
Open http://localhost:3000 in your browser. The Docker self-host stack defaults to `APP_ENV=production` (set in `docker-compose.selfhost.yml`), and there is no fixed verification code by default. Pick one of the following to log in:
|
|
|
|
- **Recommended (production):** configure `RESEND_API_KEY` in `.env`, then restart the backend. Real verification codes will be sent to the email address you enter. See [Advanced Configuration → Email](SELF_HOSTING_ADVANCED.md#email-required-for-authentication).
|
|
- **Without email configured:** the verification code is generated server-side and printed to the backend container logs (look for `[DEV] Verification code for ...:`). Useful for one-off testing on a single machine.
|
|
- **Deterministic local/private testing:** set `APP_ENV=development` and `MULTICA_DEV_VERIFICATION_CODE=888888` in `.env`, then restart the backend. This fixed code is ignored when `APP_ENV=production`.
|
|
|
|
Changes to `ALLOW_SIGNUP` and `GOOGLE_CLIENT_ID` also take effect after restarting the backend / compose stack. The web UI reads both from `/api/config` at runtime, so no web rebuild is needed.
|
|
|
|
> **Warning:** do **not** set `MULTICA_DEV_VERIFICATION_CODE` on a publicly reachable instance — anyone who knows an email address can then log in with that fixed code.
|
|
|
|
### Step 3 — Install CLI & Start Daemon
|
|
|
|
The daemon runs on your local machine (not inside Docker). It detects installed AI agent CLIs, registers them with the server, and executes tasks when agents are assigned work.
|
|
|
|
Each team member who wants to run AI agents locally needs to:
|
|
|
|
### a) Install the CLI and an AI agent
|
|
|
|
```bash
|
|
brew install multica-ai/tap/multica
|
|
```
|
|
|
|
You also need at least one AI agent CLI installed:
|
|
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (`claude` on PATH)
|
|
- [Codex](https://github.com/openai/codex) (`codex` on PATH)
|
|
- [OpenClaw](https://github.com/openclaw/openclaw) (`openclaw` on PATH)
|
|
- [OpenCode](https://github.com/anomalyco/opencode) (`opencode` on PATH)
|
|
- [Hermes](https://github.com/NousResearch/hermes) (`hermes` on PATH)
|
|
- Gemini (`gemini` on PATH)
|
|
- [Pi](https://pi.dev/) (`pi` on PATH)
|
|
- [Cursor Agent](https://cursor.com/) (`cursor-agent` on PATH)
|
|
- Kimi (`kimi` on PATH)
|
|
- Kiro CLI (`kiro-cli` on PATH)
|
|
|
|
### b) One-command setup
|
|
|
|
```bash
|
|
multica setup self-host
|
|
```
|
|
|
|
This automatically:
|
|
1. Configures the CLI to connect to `localhost` (ports 8080/3000)
|
|
2. Opens your browser for authentication
|
|
3. Discovers your workspaces
|
|
4. Starts the daemon in the background
|
|
|
|
For on-premise deployments with custom domains:
|
|
|
|
```bash
|
|
multica setup self-host --server-url https://api.example.com --app-url https://app.example.com
|
|
```
|
|
|
|
To verify the daemon is running:
|
|
|
|
```bash
|
|
multica daemon status
|
|
```
|
|
|
|
> **Alternative:** If you prefer manual steps, see [Manual CLI Configuration](#manual-cli-configuration) below.
|
|
|
|
### Step 4 — Verify & Start Using
|
|
|
|
1. Open your workspace in the web app at http://localhost:3000
|
|
2. Navigate to **Settings → Runtimes** — you should see your machine listed
|
|
3. Go to **Settings → Agents** and create a new agent
|
|
4. Create an issue and assign it to your agent — it will pick up the task automatically
|
|
|
|
## Stopping Services
|
|
|
|
If you installed via the install script:
|
|
|
|
```bash
|
|
curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash -s -- --stop
|
|
```
|
|
|
|
If you cloned the repo manually:
|
|
|
|
```bash
|
|
# Stop the Docker Compose services (backend, frontend, database)
|
|
make selfhost-stop
|
|
|
|
# Stop the local daemon
|
|
multica daemon stop
|
|
```
|
|
|
|
## Switching to Multica Cloud
|
|
|
|
If you've been self-hosting and want to switch your CLI to [Multica Cloud](https://multica.ai):
|
|
|
|
```bash
|
|
multica setup
|
|
```
|
|
|
|
This reconfigures the CLI for multica.ai, re-authenticates, and restarts the daemon. You will be prompted before overwriting the existing configuration.
|
|
|
|
> Your local Docker services are unaffected. Stop them separately if you no longer need them.
|
|
|
|
## Upgrading
|
|
|
|
```bash
|
|
docker compose -f docker-compose.selfhost.yml pull
|
|
docker compose -f docker-compose.selfhost.yml up -d
|
|
```
|
|
|
|
Pin `MULTICA_IMAGE_TAG` in `.env` to an exact version like `v0.2.4` if you want to stay on a specific release. Migrations run automatically on backend startup.
|
|
If the selected GHCR tag has not been published yet, fall back to `make selfhost-build` or `docker compose -f docker-compose.selfhost.yml -f docker-compose.selfhost.build.yml up -d --build`.
|
|
|
|
---
|
|
|
|
## Manual Docker Compose Setup
|
|
|
|
If you prefer running Docker Compose steps manually instead of `make selfhost`:
|
|
|
|
```bash
|
|
git clone https://github.com/multica-ai/multica.git
|
|
cd multica
|
|
cp .env.example .env
|
|
```
|
|
|
|
Edit `.env` — at minimum, change `JWT_SECRET`:
|
|
|
|
```bash
|
|
JWT_SECRET=$(openssl rand -hex 32)
|
|
```
|
|
|
|
Then start everything:
|
|
|
|
```bash
|
|
docker compose -f docker-compose.selfhost.yml pull
|
|
docker compose -f docker-compose.selfhost.yml up -d
|
|
```
|
|
|
|
## Manual CLI Configuration
|
|
|
|
If you prefer configuring the CLI step by step instead of `multica setup`:
|
|
|
|
```bash
|
|
# Point CLI to your local server
|
|
multica config set server_url http://localhost:8080
|
|
multica config set app_url http://localhost:3000
|
|
|
|
# Login (opens browser)
|
|
multica login
|
|
|
|
# Start the daemon
|
|
multica daemon start
|
|
```
|
|
|
|
For production deployments with TLS:
|
|
|
|
```bash
|
|
multica config set app_url https://app.example.com
|
|
multica config set server_url https://api.example.com
|
|
multica login
|
|
multica daemon start
|
|
```
|
|
|
|
## Advanced Configuration
|
|
|
|
For environment variables, manual setup (without Docker), reverse proxy configuration, database setup, and more, see the [Advanced Configuration Guide](SELF_HOSTING_ADVANCED.md).
|