pro-4gain-fcc) на fireflyregistry.4gain.pro/forgain/applications/free-claude-code:latestsm2c-cloud-llm (tasks/install-fcc.yml)forgain/applications/free-claude-code (форк https://github.com/Alishahryar1/free-claude-code)/mnt/compose/pro-4gain-fcc/{.env,workspace}/v1/messages, /v1/chat/completions, /v1/models) на порту 8082.claude-opus-4-…, claude-sonnet-4-…, claude-haiku-4-… → llamacpp/qwen3-8b.http://10.19.1.150:8089/v1) — qwen3-8b на RTX 3060.ANTHROPIC_AUTH_TOKEN), любая случайная строка, должна совпадать у клиента и сервера.Claude Code CLI:
export ANTHROPIC_BASE_URL="https://fcc.vpn.4gain.pro"
export ANTHROPIC_AUTH_TOKEN="<token-из-/mnt/compose/pro-4gain-fcc/.env>"
# Подключиться к VPN (DNS fcc.vpn.4gain.pro → 10.9.0.191 — RFC1918, без mesh не резолвится)
claude # запускается как обычно, но идёт в локальный qwen3-8b
Через /model в CLI можно выбрать claude-opus-4-… / …sonnet… / …haiku… — все идут на ту же qwen3-8b (mapping в .env: MODEL_OPUS / MODEL_SONNET / MODEL_HAIKU).
Claude Code CLI (laptop)
│
│ HTTPS, ANTHROPIC_BASE_URL, Bearer-token
▼
AmneziaWG VPN mesh (10.9.0.0/21)
│
▼
fcc.vpn.4gain.pro (DNS A → 10.9.0.191 = firefly mesh-IP)
│
▼
traefik (vpn-only middleware) → http://10.19.1.150:8082
│
▼
pro-4gain-fcc container (FastAPI + uvicorn, port 8082)
│
│ POST {LLAMACPP_BASE_URL}/v1/chat/completions
▼
http://10.19.1.150:8089/v1 → llama-swap → llama-server → qwen3-8b на RTX 3060
/mnt/compose/pro-4gain-fcc/.env)Полный шаблон см. в ansible/roles/sm2c-cloud-llm/templates/fcc.env.j2. Ключевые параметры:
LLAMACPP_BASE_URL="http://10.19.1.150:8089/v1" # llama-swap локально
MODEL="llamacpp/qwen3-8b"
MODEL_OPUS="llamacpp/qwen3-8b"
MODEL_SONNET="llamacpp/qwen3-8b"
MODEL_HAIKU="llamacpp/qwen3-8b"
ANTHROPIC_AUTH_TOKEN="<random>"
MESSAGING_PLATFORM="none" # ⚠ pydantic-settings не принимает "" — только telegram/discord/none
ENABLE_MODEL_THINKING=true
HTTP_READ_TIMEOUT=600
⚠ Прочие провайдеры (NVIDIA NIM, OpenRouter, DeepSeek, LM Studio, Ollama) выключены пустыми ключами/URL.
cd ansible/playbooks
FCC_AUTH_TOKEN=$(openssl rand -hex 24) \
ansible-playbook -c ssh service-llm-bootstrap.yml \
--tags llm.fcc.install \
-e sm2c_cloud_llm_install_ollama=false \
-e sm2c_cloud_llm_install_llama_swap=false
Что роль делает:
/mnt/compose/pro-4gain-fcc/{.env,workspace} + compose-папку..env из шаблона fcc.env.j2 (с ANTHROPIC_AUTH_TOKEN из env-var).docker compose up -d./mnt/swarm/traefik_data/custom/pro-4gain-fcc.yml (vpn-only middleware, *.vpn cert)./.DNS-запись fcc.vpn.4gain.pro → 10.9.0.191 создана через DO API (запись 1817635793).
.gitlab-ci.yml — стандартный паттерн forGain (см. GitLab CI/CD pattern). Билдит docker:27.5.1 → registry.4gain.pro/forgain/applications/free-claude-code:latest.
После CI-обновления — на firefly:
docker compose -f /home/compose/pro-4gain-fcc/docker/docker-compose.yml pull
docker compose -f /home/compose/pro-4gain-fcc/docker/docker-compose.yml up -d
MESSAGING_PLATFORM="" валит pydantic-settings ("must be 'telegram', 'discord', or 'none', got ''"). Использовать "none".vpn-only middleware в traefik не блокирует Host-spoof в Swarm ingress (overlay IP видится). DNS-protection через RFC1918 спасает обычных клиентов.qwen3-8b @ -ngl 99 (~50 t/s). Для больших промптов (Claude Code шлёт огромный context, см. wiki/services/llama-swap) latency высокая.Changelog