Repository navigation
Native and Kubernetes Deployment RU
Пошаговое руководство по запуску chat-export-server как фонового сервиса на macOS, Linux, Windows, в Docker / Colima и Kubernetes (deploy/k8s) с сохранением локальной модели безопасности (127.0.0.1:8765).
Автоматизация браузера выполняется расширением Chat Export (WebSocket ceb_ в ваших залогиненных вкладках). Для обычной работы не нужны Chrome DevTools MCP, Playwright и отладчик IDE.
Установите Node.js 22+ через Homebrew и соберите сервер:
brew install node@22
git clone https://github.com/svergio/chat-export-server.git
cd chat-export-server
npm install && npm run buildСоздайте каталог данных и файл .env:
mkdir -p ~/.chat-export
chmod 700 ~/.chat-export
cat > ~/.chat-export/.env <<'EOF'
CHAT_EXPORT_HOME=/Users/YOUR_USER/.chat-export
CHAT_EXPORT_HOST=127.0.0.1
CHAT_EXPORT_PORT=8765
CHAT_EXPORT_DASHBOARD_ENABLED=true
CHAT_EXPORT_ADMIN_USER=admin
CHAT_EXPORT_ADMIN_PASS=change_this_password
CHAT_EXPORT_MCP_TOKEN=cem_YOUR_GENERATED_TOKEN
CHAT_EXPORT_ALLOW_DESTRUCTIVE=false
EOF
chmod 600 ~/.chat-export/.envСгенерировать отдельный ключ cem_ (с сохранением только хеша в ~/.chat-export/keys.json) можно командой node dist/cli.js key new.
Создайте plist для автозапуска при входе в систему и автоматического перезапуска при сбоях:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>io.github.svergio.chat-export-server</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/node</string>
<string>/ABS/PATH/TO/chat-export-server/dist/cli.js</string>
<string>start</string>
</array>
<key>WorkingDirectory</key>
<string>/ABS/PATH/TO/chat-export-server</string>
<key>EnvironmentVariables</key>
<dict>
<key>CHAT_EXPORT_HOME</key>
<string>/Users/YOUR_USER/.chat-export</string>
<key>CHAT_EXPORT_ENV_FILE</key>
<string>/Users/YOUR_USER/.chat-export/.env</string>
<key>PATH</key>
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/YOUR_USER/.chat-export/server.log</string>
<key>StandardErrorPath</key>
<string>/Users/YOUR_USER/.chat-export/server.log</string>
</dict>
</plist>Регистрация и перезапуск сервиса:
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/io.github.svergio.chat-export-server.plist
launchctl kickstart -k gui/$(id -u)/io.github.svergio.chat-export-server
tail -f ~/.chat-export/server.log
curl -sS http://127.0.0.1:8765/healthУстановите Node.js 22+ и соберите chat-export-server:
git clone https://github.com/svergio/chat-export-server.git ~/chat-export-server
cd ~/chat-export-server
npm install && npm run build
mkdir -p ~/.chat-export ~/.config/systemd/user
cp .env.example ~/.chat-export/.env
chmod 600 ~/.chat-export/.env[Unit]
Description=Chat Export MCP and Browser Bridge Server
After=network.target
[Service]
Type=simple
WorkingDirectory=%h/chat-export-server
Environment=CHAT_EXPORT_HOME=%h/.chat-export
EnvironmentFile=%h/.chat-export/.env
ExecStart=/usr/bin/env node %h/chat-export-server/dist/cli.js start
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.targetВключите автозапуск и lingering (чтобы юнит работал без активной GUI-сессии):
systemctl --user daemon-reload
systemctl --user enable --now chat-export-server
loginctl enable-linger "$USER"
journalctl --user -u chat-export-server -fУстановите Node.js 22+ через winget или nvm-windows:
winget install OpenJS.NodeJS.LTS
git clone https://github.com/svergio/chat-export-server.git "$env:USERPROFILE\chat-export-server"
Set-Location "$env:USERPROFILE\chat-export-server"
npm install
npm run build
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.chat-export" | Out-Null
Copy-Item .env.example "$env:USERPROFILE\.chat-export\.env"Задайте в $env:USERPROFILE\.chat-export\.env адрес CHAT_EXPORT_HOST=127.0.0.1, порт CHAT_EXPORT_PORT=8765 и CHAT_EXPORT_ADMIN_PASS.
Создание фоновой задачи при входе пользователя на 127.0.0.1:8765:
$NodePath = (Get-Command node).Source
$ServerDir = "$env:USERPROFILE\chat-export-server"
$EnvFile = "$env:USERPROFILE\.chat-export\.env"
$Action = New-ScheduledTaskAction `
-Execute $NodePath `
-Argument "`"$ServerDir\dist\cli.js`" start" `
-WorkingDirectory $ServerDir
$Trigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME
$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1)
[System.Environment]::SetEnvironmentVariable("CHAT_EXPORT_HOME", "$env:USERPROFILE\.chat-export", "User")
[System.Environment]::SetEnvironmentVariable("CHAT_EXPORT_ENV_FILE", $EnvFile, "User")
Register-ScheduledTask -TaskName "ChatExportServer" -Action $Action -Trigger $Trigger -Settings $Settings -Force
Start-ScheduledTask -TaskName "ChatExportServer"Альтернатива через schtasks:
schtasks /Create /TN "ChatExportServer" /TR "`"C:\Program Files\nodejs\node.exe`" `"$env:USERPROFILE\chat-export-server\dist\cli.js`" start" /SC ONLOGON /RL LIMITED /F
schtasks /Run /TN "ChatExportServer"Через NSSM:
nssm install ChatExportServer "C:\Program Files\nodejs\node.exe" "`"$env:USERPROFILE\chat-export-server\dist\cli.js`" start"
nssm set ChatExportServer AppDirectory "$env:USERPROFILE\chat-export-server"
nssm set ChatExportServer AppEnvironmentExtra "CHAT_EXPORT_HOME=$env:USERPROFILE\.chat-export" "CHAT_EXPORT_ENV_FILE=$env:USERPROFILE\.chat-export\.env"
nssm start ChatExportServerЧерез PM2:
npm install -g pm2
$env:CHAT_EXPORT_HOME="$env:USERPROFILE\.chat-export"
$env:CHAT_EXPORT_ENV_FILE="$env:USERPROFILE\.chat-export\.env"
pm2 start "$env:USERPROFILE\chat-export-server\dist\cli.js" --name chat-export-server -- start
pm2 saveНа macOS вместо Docker Desktop рекомендуется Colima:
colima start
docker context use colima
cd chat-export-server
cp .env.example .env # укажите CHAT_EXPORT_ADMIN_PASS и токены
docker compose build
docker compose up -d
curl -sS http://127.0.0.1:8765/healthКонтейнер публикует 127.0.0.1:8765:8765 и хранит данные в томе chat-export-data (/data).
Корневой docker-compose.yml запускает связку с chat-export-dashboard:
-
server(chat-export-server:local) работает внутри Docker-сети на порту8765с томомchat-export-data:/data. -
web(chat-export-dashboard:local, nginx) слушает127.0.0.1:8765:80, отдаёт статику дашборда и проксирует/mcp,/ws,/api,/healthнаSERVER_UPSTREAM=server:8765.
docker compose build
docker compose up -d
curl -sS http://127.0.0.1:8765/healthКаталог deploy/k8s содержит манифесты Kustomize (Deployment/StatefulSet, PVC, Secret и Service) для локальных и self-hosted кластеров (Colima K8s, k3s, kind, MicroK8s).
Создайте секрет с паролем админки и токенами (не храните реальные ключи в git):
kubectl create namespace chat-export --dry-run=client -o yaml | kubectl apply -f -
kubectl -n chat-export create secret generic chat-export-secrets \
--from-literal=CHAT_EXPORT_ADMIN_USER=admin \
--from-literal=CHAT_EXPORT_ADMIN_PASS='YOUR_STRONG_ADMIN_PASSWORD' \
--from-literal=CHAT_EXPORT_MCP_TOKEN='cem_YOUR_MCP_TOKEN' \
--from-literal=CHAT_EXPORT_BROWSER_TOKENS='b-main:ceb_YOUR_BROWSER_TOKEN:Chrome Main' \
--dry-run=client -o yaml | kubectl apply -f -kubectl apply -k deploy/k8s
kubectl -n chat-export rollout status deploy/chat-export-server
kubectl -n chat-export get pvc,pods,svcТом PVC монтируется в /data (CHAT_EXPORT_HOME=/data), сохраняя config.json, keys.json, SQLite-кеш, exports/ и audit.log между перезапусками пода.
Не публикуйте chat-export-server наружу через открытый Ingress. Пробросьте сервис на 127.0.0.1:8765 на рабочей машине с Chrome:
kubectl -n chat-export port-forward --address 127.0.0.1 svc/chat-export-server 8765:8765При активном kubectl port-forward на 127.0.0.1:8765:
- В попапе расширения Chrome откройте Дополнительно → укажите хост
127.0.0.1, порт8765и вставьте токенceb_…изchat-export-secrets(либо выпустите его черезhttp://127.0.0.1:8765/dashboard/). - Включите Server bridge — WebSocket
ws://127.0.0.1:8765/wsпрозрачно туннелируется в под Kubernetes. - Подключите любой MCP-клиент (Cursor, Claude Desktop, локальный LLM-агент и т.д.) к
http://127.0.0.1:8765/mcpс заголовкомAuthorization: Bearer cem_….