mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-27 07:16:19 +09:00
docs: update
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# config.toml Reference
|
||||
|
||||
Memoh uses a TOML configuration file. By default it looks for `config.toml` in the current directory. With Docker, you can mount a custom config via `MEMOH_CONFIG` (see [Docker installation](./docker#custom-configuration)).
|
||||
|
||||
## Full Example
|
||||
|
||||
```toml
|
||||
[log]
|
||||
level = "info"
|
||||
format = "text"
|
||||
|
||||
[server]
|
||||
addr = ":8080"
|
||||
|
||||
[admin]
|
||||
username = "admin"
|
||||
password = "change-your-password"
|
||||
email = "admin@example.com"
|
||||
|
||||
[auth]
|
||||
jwt_secret = "your-secret-from-openssl-rand-base64-32"
|
||||
jwt_expires_in = "168h"
|
||||
|
||||
[containerd]
|
||||
socket_path = "/run/containerd/containerd.sock"
|
||||
namespace = "default"
|
||||
|
||||
[mcp]
|
||||
image = "docker.io/library/memoh-mcp:latest"
|
||||
snapshotter = "overlayfs"
|
||||
data_root = "data"
|
||||
data_mount = "/data"
|
||||
|
||||
[postgres]
|
||||
host = "127.0.0.1"
|
||||
port = 5432
|
||||
user = "postgres"
|
||||
password = "your-password"
|
||||
database = "memoh"
|
||||
sslmode = "disable"
|
||||
|
||||
[qdrant]
|
||||
base_url = "http://127.0.0.1:6334"
|
||||
api_key = ""
|
||||
collection = "memory"
|
||||
timeout_seconds = 10
|
||||
|
||||
[agent_gateway]
|
||||
host = "127.0.0.1"
|
||||
port = 8081
|
||||
|
||||
[web]
|
||||
host = "127.0.0.1"
|
||||
port = 8082
|
||||
|
||||
[brave]
|
||||
api_key = ""
|
||||
base_url = "https://api.search.brave.com/res/v1/"
|
||||
```
|
||||
|
||||
## Section Reference
|
||||
|
||||
### `[log]`
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|---------|--------|---------|--------------------------------------------------|
|
||||
| `level` | string | `"info"` | Log level: `debug`, `info`, `warn`, `error` |
|
||||
| `format`| string | `"text"` | Log format: `text` or `json` |
|
||||
|
||||
### `[server]`
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|--------|--------|---------|--------------------------------------------------|
|
||||
| `addr` | string | `":8080"` | HTTP listen address. Use `:8080` for all interfaces, or `host:port` (e.g. `server:8080` in Docker). |
|
||||
|
||||
### `[admin]`
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|------------|--------|---------|--------------------------------------|
|
||||
| `username` | string | `"admin"` | Admin login username |
|
||||
| `password` | string | — | Admin login password. **Change in production.** |
|
||||
| `email` | string | — | Admin email (for display) |
|
||||
|
||||
### `[auth]`
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|----------------|--------|---------|--------------------------------------------------|
|
||||
| `jwt_secret` | string | — | Secret for signing JWT tokens. **Required.** Generate with `openssl rand -base64 32`. |
|
||||
| `jwt_expires_in` | string | `"24h"` | JWT expiration, e.g. `"24h"`, `"168h"` (7 days) |
|
||||
|
||||
### `[containerd]`
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|---------------|--------|---------|--------------------------------------------------|
|
||||
| `socket_path` | string | `"/run/containerd/containerd.sock"` | Path to containerd socket |
|
||||
| `namespace` | string | `"default"` | Containerd namespace for bot containers |
|
||||
|
||||
### `[mcp]`
|
||||
|
||||
MCP (Model Context Protocol) container configuration. Each bot runs in a container built from this image.
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|---------------|--------|---------|--------------------------------------------------|
|
||||
| `image` | string | `"docker.io/library/memoh-mcp:latest"` | MCP container image |
|
||||
| `snapshotter` | string | `"overlayfs"` | Containerd snapshotter |
|
||||
| `data_root` | string | `"data"` | Host path for bot data (Docker: `/opt/memoh/data`) |
|
||||
| `data_mount` | string | `"/data"` | Path inside container where data is mounted |
|
||||
|
||||
### `[postgres]`
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|-----------|--------|---------|--------------------------------------------------|
|
||||
| `host` | string | `"127.0.0.1"` | PostgreSQL host |
|
||||
| `port` | int | `5432` | PostgreSQL port |
|
||||
| `user` | string | `"postgres"` | Database user |
|
||||
| `password`| string | — | Database password |
|
||||
| `database`| string | `"memoh"` | Database name |
|
||||
| `sslmode` | string | `"disable"` | SSL mode: `disable`, `require`, `verify-ca`, `verify-full` |
|
||||
|
||||
### `[qdrant]`
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|------------------|--------|---------|--------------------------------------------------|
|
||||
| `base_url` | string | `"http://127.0.0.1:6334"` | Qdrant HTTP API URL |
|
||||
| `api_key` | string | `""` | Optional API key for Qdrant Cloud |
|
||||
| `collection` | string | `"memory"` | Vector collection name for memories |
|
||||
| `timeout_seconds`| int | `10` | Request timeout in seconds |
|
||||
|
||||
### `[agent_gateway]`
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|--------|--------|---------|--------------------------------------------------|
|
||||
| `host` | string | `"127.0.0.1"` | Agent gateway bind host |
|
||||
| `port` | int | `8081` | Agent gateway port |
|
||||
|
||||
In Docker Compose, `host` is typically `"agent"` (service name). The agent reads `[server].addr` to call the main API.
|
||||
|
||||
### `[web]`
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|--------|--------|---------|--------------------------------------------------|
|
||||
| `host` | string | `"127.0.0.1"` | Web UI bind host |
|
||||
| `port` | int | `8082` | Web UI port |
|
||||
|
||||
### `[brave]`
|
||||
|
||||
Brave Search API for the web search tool. Leave `api_key` empty to disable web search.
|
||||
|
||||
| Field | Type | Default | Description |
|
||||
|-----------|--------|---------|--------------------------------------------------|
|
||||
| `api_key` | string | `""` | Brave Search API key. Get one at [brave.com/search/api](https://brave.com/search/api). |
|
||||
| `base_url`| string | `"https://api.search.brave.com/res/v1/"` | Brave Search API base URL |
|
||||
@@ -0,0 +1,121 @@
|
||||
# Docker Installation
|
||||
|
||||
Docker is the recommended way to run Memoh. The stack includes PostgreSQL, Qdrant, Containerd, the main server, agent gateway, and web UI — all orchestrated via Docker Compose. You do not need to install containerd, nerdctl, or buildkit on your host; everything runs inside containers.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- [Docker](https://docs.docker.com/get-docker/)
|
||||
- [Docker Compose v2](https://docs.docker.com/compose/install/)
|
||||
- Git
|
||||
|
||||
## One-Click Install
|
||||
|
||||
Run the official install script (requires Docker and Docker Compose):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/memohai/Memoh/main/scripts/install.sh | sh
|
||||
```
|
||||
|
||||
The script will:
|
||||
|
||||
1. Check for Docker and Docker Compose
|
||||
2. Prompt for configuration (workspace, data directory, admin credentials, JWT secret, Postgres password)
|
||||
3. Clone the repository
|
||||
4. Generate `config.toml` from the Docker template
|
||||
5. Start all services with `docker compose up -d --build`
|
||||
|
||||
**Silent install** (use all defaults, no prompts):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/memohai/Memoh/main/scripts/install.sh | sh -s -- -y
|
||||
```
|
||||
|
||||
Defaults when running silently:
|
||||
|
||||
- Workspace: `~/memoh`
|
||||
- Data directory: `~/memoh/data`
|
||||
- Admin: `admin` / `admin123`
|
||||
- JWT secret: auto-generated
|
||||
- Postgres password: `memoh123`
|
||||
|
||||
## Manual Install
|
||||
|
||||
Clone the repository and start with Docker Compose:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/memohai/Memoh.git
|
||||
cd Memoh
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
By default, Docker Compose uses `docker/config/config.docker.toml`. No config file in the project root is mounted — only this built-in config is used. See [config.toml reference](./config-toml) for all configuration fields.
|
||||
|
||||
## Access Points
|
||||
|
||||
After startup:
|
||||
|
||||
| Service | URL |
|
||||
|---------------|------------------------|
|
||||
| Web UI | http://localhost:8082 |
|
||||
| API | http://localhost:8080 |
|
||||
| Agent Gateway | http://localhost:8081 |
|
||||
|
||||
Default login: `admin` / `admin123`
|
||||
|
||||
First startup may take 1–2 minutes while images build and services initialize.
|
||||
|
||||
## Custom Configuration
|
||||
|
||||
To use your own config file:
|
||||
|
||||
1. Copy the Docker config template and edit it. See [config.toml reference](./config-toml) for field descriptions:
|
||||
|
||||
```bash
|
||||
cp docker/config/config.docker.toml config.toml
|
||||
nano config.toml
|
||||
```
|
||||
|
||||
2. Point `MEMOH_CONFIG` at your config when starting (path is on the host; run `docker compose` from the project root):
|
||||
|
||||
```bash
|
||||
MEMOH_CONFIG=./config.toml docker compose up -d
|
||||
```
|
||||
|
||||
**Recommended changes for production** (see [config.toml reference](./config-toml) for details):
|
||||
|
||||
- `admin.password` — Change the admin password
|
||||
- `auth.jwt_secret` — Generate with `openssl rand -base64 32`
|
||||
- `postgres.password` — Change the database password (and set `POSTGRES_PASSWORD` when running `docker compose`)
|
||||
|
||||
## Common Commands
|
||||
|
||||
```bash
|
||||
docker compose up -d # Start
|
||||
docker compose down # Stop
|
||||
docker compose logs -f # View logs
|
||||
docker compose ps # Status
|
||||
docker compose up -d --build # Rebuild and restart
|
||||
```
|
||||
|
||||
## Production Checklist
|
||||
|
||||
1. **HTTPS** — Configure SSL (e.g. via `docker-compose.override.yml` with certs)
|
||||
2. **Passwords** — Change all default passwords and secrets
|
||||
3. **Firewall** — Restrict access to necessary ports
|
||||
4. **Resource limits** — Set memory/CPU limits for containers
|
||||
5. **Backups** — Regular backups of Postgres and Qdrant data
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
```bash
|
||||
docker compose logs server # View main service logs
|
||||
docker compose logs containerd # View containerd logs
|
||||
docker compose config # Validate configuration
|
||||
docker compose build --no-cache && docker compose up -d # Full rebuild
|
||||
```
|
||||
|
||||
## Security Warnings
|
||||
|
||||
- The main service runs with privileged container access — only run in trusted environments
|
||||
- You must change all default passwords and secrets before production use
|
||||
- Use HTTPS in production
|
||||
Reference in New Issue
Block a user