# Настройка прокси для 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 git clone https://git.halfakop.ru/fedor_sukharev/Proxy_for_codex.git ~/Proxy_for_codex # Переходим в папку проекта (если копировали через 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, ответ вернётся обратно.