# Memoh Deployment Guide

## One-Click Install

```bash
curl -fsSL https://memoh.sh | sudo sh
```

The script prompts for configuration, generates `config.toml`, and starts all services.

## Manual Install

```bash
git clone https://github.com/memohai/Memoh.git
cd Memoh
cp conf/app.docker.toml config.toml
nano config.toml   # Change passwords and JWT secret
```

> On macOS or if your user is in the `docker` group, `sudo` is not required.

> **Important**: You must create `config.toml` before starting. `docker-compose.yml` mounts `./config.toml` into the containers — running without it will fail.

### Standard startup (with Qdrant + Browser)

```bash
sudo docker compose --profile qdrant --profile browser up -d
```

### Minimal startup (core only)

```bash
sudo docker compose up -d
```

Access:
- Web UI: http://localhost:8082
- API: http://localhost:8080
- Agent: http://localhost:8081

Default credentials: `admin` / `admin123` (change in `config.toml`)

## Docker Compose Profiles

The base `docker-compose.yml` contains all services. Core services (postgres, server, agent, web) always start. Optional services are gated by profiles and only start when explicitly enabled:

| Profile | Service | Description |
|---------|---------|-------------|
| `qdrant` | Qdrant | Vector database for memory semantic search |
| `browser` | Browser | Browser automation gateway (Playwright) |
| `openviking` | OpenViking | Self-hosted OpenViking memory provider |

### Supported combinations

```bash
# Core + Qdrant + Browser (recommended default)
docker compose --profile qdrant --profile browser up -d

# Core + Qdrant + OpenViking (self-hosted)
docker compose --profile qdrant --profile openviking up -d
```

### SaaS / external providers

For Mem0 or OpenViking SaaS, no profile is needed. Configure the provider directly in the Memoh admin UI with the external `base_url` and API key.

### China Mainland Mirror

Uncomment `registry = "memoh.cn"` in `config.toml` under `[workspace]`, then add the CN overlay:

```bash
sudo docker compose -f docker-compose.yml -f docker/docker-compose.cn.yml \
  --profile qdrant --profile browser up -d
```

## Prerequisites

- Docker (with Docker Compose v2)
- Git

## Configuration

`config.toml` is generated from `conf/app.docker.toml` and should live in the project root. It is mounted into all containers at startup and is **not** tracked by git.

Recommended changes for production:
- `admin.password` — Admin password
- `auth.jwt_secret` — JWT secret (generate with `openssl rand -base64 32`)
- `postgres.password` — Database password (also set `POSTGRES_PASSWORD` env var)

## Common Commands

> Prefix with `sudo` on Linux if your user is not in the `docker` group.

```bash
docker compose up -d          # Start
docker compose down           # Stop
docker compose logs -f        # View logs
docker compose ps             # Status
docker compose pull && docker compose up -d  # Update images
```

## Production

1. Change all default passwords and secrets
2. Configure HTTPS (reverse proxy or `docker-compose.override.yml` with SSL)
3. Configure firewall
4. Set resource limits
5. Regular backups

## Troubleshooting

```bash
docker compose logs server    # View service logs
docker compose config         # Check configuration
docker compose build --no-cache && docker compose up -d  # Full rebuild
```

## Security Warnings

- Main service has privileged container access — only run in trusted environments
- Must change all default passwords and secrets
- Use HTTPS in production
