From a6e279e746b92a1fce5d6b39f60cdc5c1de3dc13 Mon Sep 17 00:00:00 2001 From: fedos Date: Fri, 20 Mar 2026 20:05:48 +0300 Subject: [PATCH] Documetnation of proxy --- PROXY_SETUP.md | 287 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 PROXY_SETUP.md diff --git a/PROXY_SETUP.md b/PROXY_SETUP.md new file mode 100644 index 0000000..3935f77 --- /dev/null +++ b/PROXY_SETUP.md @@ -0,0 +1,287 @@ +# Настройка прокси для Ollama + +--- + +## Зачем нужен прокси + +Без прокси Ollama приходится открывать в сеть напрямую (`OLLAMA_HOST=0.0.0.0`). Это значит, что любой человек в сети может отправлять запросы в Ollama без ограничений — нет ни логирования, ни контроля доступа. + +Прокси встаёт между клиентами и Ollama: +- Ollama остаётся на `localhost` — снаружи к ней не достучаться +- Все запросы идут через прокси — видно кто, что и когда запросил +- В будущем можно добавить авторизацию по API-ключам и rate limiting + +--- + +## Архитектура + +``` +Codex (ноутбук) + ↓ HTTP-запрос +http://:8080/v1 + ↓ +Go Proxy (сервер, порт 8080) ← единственная точка входа снаружи + ↓ пересылает запрос как есть +Ollama (сервер, localhost:11434) ← недоступна снаружи +``` + +--- + +## Настройка сервера + +### 1. Установить Go + +Go нужен для сборки прокси из исходного кода. После сборки Go можно удалить — прокси работает как самостоятельный бинарник. + +```bash +# Скачиваем архив с Go +wget https://go.dev/dl/go1.24.4.linux-amd64.tar.gz + +# Распаковываем в /usr/local (стандартное место для Go) +sudo tar -C /usr/local -xzf go1.24.4.linux-amd64.tar.gz + +# Добавляем Go в PATH, чтобы команда go была доступна +echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc + +# Применяем изменения в текущей сессии (без перезахода в терминал) +source ~/.bashrc + +# Проверяем что Go установлен +go version +``` + +--- + +### 2. Скопировать проект и собрать + +```bash +# Переходим в папку проекта (если копировали через scp или git clone) +cd ~/Proxy_for_codex + +# Скачиваем зависимости проекта (внешние библиотеки) +go mod download + +# Собираем бинарник — файл "service", который можно запускать без Go +go build -o service ./src +``` + +После этого в папке появится файл `service` — это и есть наш прокси. + +--- + +### 3. Настроить Ollama + +Если раньше у Ollama стояло `OLLAMA_HOST=0.0.0.0` (чтобы она была доступна по сети), то теперь это нужно **убрать**. Прокси сам принимает внешние подключения и пересылает их в Ollama. + +```bash +# Открываем override-конфиг Ollama +sudo systemctl edit ollama +``` + +Вставляем между комментариями: + +```ini +[Service] +Environment="OLLAMA_KEEP_ALIVE=30m" +Environment="OLLAMA_NUM_PARALLEL=2" +``` + +- `OLLAMA_KEEP_ALIVE=30m` — модель остаётся в памяти 30 минут после последнего запроса. Без этого Ollama выгружает модель сразу, и каждый новый запрос ждёт повторной загрузки (15-30 секунд). +- `OLLAMA_NUM_PARALLEL=2` — Ollama обрабатывает до 2 запросов одновременно. Если работают 2 человека — оба получают ответ параллельно, не ждут друг друга. + +> **Важно:** строки `OLLAMA_HOST=0.0.0.0` здесь быть **НЕ должно**. Если она есть — удалите. Ollama будет слушать только localhost, а наружу смотрит прокси. + +Применяем изменения: + +```bash +# Перечитываем конфигурацию systemd (без этого изменения не подхватятся) +sudo systemctl daemon-reload + +# Перезапускаем Ollama с новыми настройками +sudo systemctl restart ollama +``` + +--- + +### 4. Создать systemd-сервис для прокси + +systemd — это менеджер служб в Linux. Если создать сервис, то: +- прокси запустится автоматически при включении сервера +- если прокси упадёт — systemd перезапустит его сам +- не нужно держать открытый терминал + +```bash +# Создаём файл сервиса +sudo nano /etc/systemd/system/ollama-proxy.service +``` + +Вставляем: + +```ini +[Unit] +Description=Ollama Proxy +# After — запускать прокси только ПОСЛЕ того, как Ollama стартовала +After=ollama.service +# Wants — при старте прокси systemd попытается запустить Ollama, если она не запущена +Wants=ollama.service + +[Service] +# Путь к собранному бинарнику +ExecStart=/home//Proxy_for_codex/service + +# LISTEN_ADDR=:8080 — прокси слушает порт 8080 на всех интерфейсах (доступен из сети) +Environment=LISTEN_ADDR=:8080 + +# OLLAMA_BACKEND — куда прокси пересылает запросы (локальная Ollama) +Environment=OLLAMA_BACKEND=http://localhost:11434 + +# Рабочая директория — нужна чтобы прокси мог найти .env файл (если есть) +WorkingDirectory=/home//Proxy_for_codex + +# Запускать от имени обычного пользователя, не от root (безопаснее) +User= + +# Если прокси упадёт — перезапустить автоматически +Restart=always + +# Ждать 5 секунд перед перезапуском (чтобы не спамить перезапусками при проблеме) +RestartSec=5 + +[Install] +# Запускать прокси при каждом включении сервера +WantedBy=multi-user.target +``` + +> **Замените ``** на имя пользователя на сервере (то, что показывает команда `whoami`). + +--- + +### 5. Запустить прокси + +```bash +# Перечитываем конфигурацию systemd (чтобы он узнал о новом сервисе) +sudo systemctl daemon-reload + +# Включаем автозапуск при включении сервера +sudo systemctl enable ollama-proxy + +# Запускаем прокси прямо сейчас +sudo systemctl start ollama-proxy +``` + +--- + +### 6. Проверить что всё работает + +```bash +# Проверяем статус — должно быть "active (running)" +sudo systemctl status ollama-proxy + +# Проверяем что прокси отвечает — должен вернуть список моделей +curl http://localhost:8080/api/tags +``` + +Если `curl` вернул JSON со списком моделей — прокси работает и Ollama доступна через него. + +--- + +### 7. Файрвол (если включен) + +Файрвол — это защита, которая блокирует входящие подключения к серверу. На Ubuntu он называется `ufw`. Если он включен и порт 8080 не открыт — ноутбуки не смогут достучаться до прокси. + +Проверяем: + +```bash +sudo ufw status +``` + +- Если в ответе `Status: inactive` — файрвол выключен, **ничего делать не нужно**, все порты и так открыты. +- Если `Status: active` — нужно открыть порт: + +```bash +# Разрешаем входящие подключения на порт 8080 +sudo ufw allow 8080/tcp +``` + +--- + +### 8. Логирование + +Прокси логирует каждый запрос. При запуске: + +``` +INFO Прокси запущен addr=:8080 backend=http://localhost:11434 +``` + +При каждом запросе от клиента: + +``` +INFO запрос method=POST path=/v1/chat/completions status=200 duration=1.234s +INFO запрос method=GET path=/v1/models status=200 duration=12ms +``` + +Смотреть логи в реальном времени: + +```bash +# -u ollama-proxy — показать логи только нашего сервиса +# -f — следить за новыми записями (как tail -f) +sudo journalctl -u ollama-proxy -f +``` + +Посмотреть последние 50 строк: + +```bash +sudo journalctl -u ollama-proxy -n 50 +``` + +--- + +## Настройка клиента (ноутбук) + +На ноутбуке не нужно ничего устанавливать и запускать — только изменить конфиг Codex, чтобы он отправлял запросы на прокси вместо локальной Ollama. + +Открываем конфиг Codex: + +**Linux:** + +```bash +nano ~/.codex/config.toml +``` + +**Windows:** файл находится в: + +``` +C:\Users\\.codex\config.toml +``` + +Пишем: + +```toml +# Модель по умолчанию — будет использоваться при запуске codex без параметров +model = "qwen3:0.6b" + +# Имя провайдера — ссылка на секцию [model_providers.ollama_proxy] ниже +model_provider = "ollama_proxy" + +[model_providers.ollama_proxy] +name = "Ollama (через прокси)" + +# Адрес прокси на сервере. /v1 на конце обязателен — +# Codex использует OpenAI-совместимый формат API, где все пути начинаются с /v1 +base_url = "http://:8080/v1" + +# Формат общения с API +wire_api = "responses" +``` + +> **Замените ``** на реальный IP сервера (например `10.111.111.40`). + +--- + +## Запуск + +```bash +codex +``` + +Готово. Codex отправит запросы на прокси, прокси перешлёт в Ollama, ответ вернётся обратно.