설정 파일 참조
~/.mpop/config.json
실제 구조 (14노드 환경):
{
"language": "en",
"ollama_host": "g1",
"ollama_model": "qwen2.5:7b",
"llm_model": "gpt-4o-mini",
"connection": {
"vpn": "wire",
"ssh_method": "vssh"
},
"servers": {
"v1": {
"ip": "10.99.85.143",
"user": "root",
"role": "Primary relay",
"ssh_port": 51830,
"public_ip": "158.247.247.115",
"wire_ip": "10.99.85.143"
},
"g1": {
"ip": "10.99.74.111",
"user": "dragon",
"role": "GPU server, Ollama",
"wire_ip": "10.99.74.111"
},
"m1": {
"ip": "10.99.84.191",
"user": "dragon",
"role": "Local dev",
"local": true,
"wire_ip": "10.99.84.191"
}
},
"relays": ["v1", "v2", "v3", "v4"],
"vssh_secret": "030775d9287fde298da988f319b4c57c",
"chromadb_host": "10.99.74.111",
"chromadb_port": 8686,
"tailscale_prefix": "100.",
"node": "m1"
}
| 필드 | 설명 |
|---|---|
| servers | 노드별 IP, user, role, wire_ip |
| relays | 릴레이 노드 목록 |
| vssh_secret | vssh 인증용 (모든 노드 동일) |
| ollama_host | Ollama 실행 노드 (meshdb --smart, mpop ask 등) |
| node | 현재 로컬 노드 식별자 |
| lan_ip | LAN IP (같은 네트워크 시 우선 사용) |
| ssh_method | vssh 또는 ssh |
| ssh_port | SSH 포트 (기본 22) |
| public_ip | 공인 IP (relay 등) |
| tailscale_ip | Tailscale 사용 시 IP |
| local | true면 로컬 노드 (exec 생략 가능) |
connection.vpn 옵션
| 값 | 설명 |
|---|---|
wire |
Wire VPN (10.99.x.x) 사용. servers.ip에 wire_ip 사용 |
tailscale |
Tailscale (100.x.x.x) 사용. tailscale_prefix, tailscale_ip 사용 |
auto |
mpop config auto 시 자동 감지 |
vssh_secret 설정
모든 노드에 동일한 값이 있어야 합니다.
- config.json:
vssh_secret필드에 32자 hex 문자열 - 각 서버:
export VSSH_SECRET="동일한값"또는 systemd/서비스 환경에 설정 - 생성:
openssl rand -hex 16또는python3 -c "import secrets; print(secrets.token_hex(16))"
불일치 시 Connection refused 또는 vssh 연결 실패.
서버별 커스텀 설정
"s1": {
"ip": "10.99.146.69",
"user": "dragon1",
"role": "NAS",
"ssh_method": "ssh",
"ssh_port": 22
}
ssh_method: "ssh": vssh 대신 일반 SSH 사용 (NAS 등)ssh_port: 22가 아닌 경우 지정
v1:/var/lib/mpop/alert.json (알림 설정)
중앙 서버(v1)에 저장. mpop alert setup telegram으로 설정.
{
"telegram_token": "BOT_TOKEN",
"telegram_chat_id": "CHAT_ID"
}
| 필드 | 설명 |
|---|---|
| telegram_token | Telegram Bot API 토큰 |
| telegram_chat_id | 알림 수신 채팅방 ID |
알림 조건 (mpop watch --alert):
- DOWN: 노드 오프라인
- HIGH_LOAD: Load > 80%
- DISK_FULL: Disk > 90%
- ATTACK: Failed SSH > 50 (1h)
Agent 설정 (mpop-agent)
Agent는 mpop/mpop-agent 스크립트 내부에 SERVERS, SERVER_CONTEXT 하드코딩.
- 실행: g1 등 한 노드에서
mpop-agent daemon - 수집 주기: 30분 (COLLECT_INTERVAL = 1800)
- 데이터:
/var/lib/mpop/history.jsonl - 로그:
/var/log/mpop-agent.log
수정 가능 항목 (스크립트 편집):
COLLECT_INTERVAL = 1800 # 30분
MAX_HISTORY_DAYS = 7
SERVERS = { "v1": "10.99.85.143", ... }
SERVER_CONTEXT = { "g1": {"type": "gpu", "high_load_ok": True}, ... }
~/.wire/
Wire VPN 키: private.key, public.key, config.json
환경 변수
| 도구 | 변수 | 설명 | 예시/기본값 |
|---|---|---|---|
| vssh | VSSH_SECRET | vssh 인증 (모든 노드 동일) | config.json vssh_secret과 일치 |
| meshdb | MESHDB_DB | ChromaDB 저장 경로 | ~/.meshdb 또는 지정 경로 |
| meshdb | MESHDB_OLLAMA_URL | --smart 시맨틱 검색 | http://g1:11434 (ollama_host) |
| meshdb | MESHDB_LANG | 검색 언어 | ko, en |
| Agent | DASHBOARD_URL | 대시보드 URL | http://127.0.0.1:8800 |
| Agent | VSSH_SECRET | config와 동일 | mpop-agent가 vssh로 메트릭 수집 |
| radiomcp | RADIOMCP_BIN | radiomcp 실행 파일 경로 | ~/.mpop/radiomcp-env/bin/radiomcp |
| radiomcp | RADIOMCP_SOURCE | 설치 소스 (로컬/ PyPI) | ~/RadioCli 또는 radiomcp |