Files
Proxy_for_codex/PROXY_SETUP.md

10 KiB
Raw Blame History

Настройка прокси для Ollama


Зачем нужен прокси

Без прокси Ollama приходится открывать в сеть напрямую (OLLAMA_HOST=0.0.0.0). Это значит, что любой человек в сети может отправлять запросы в Ollama без ограничений — нет ни логирования, ни контроля доступа.

Прокси встаёт между клиентами и Ollama:

  • Ollama остаётся на localhost — снаружи к ней не достучаться
  • Все запросы идут через прокси — видно кто, что и когда запросил
  • В будущем можно добавить авторизацию по API-ключам и rate limiting

Архитектура

Codex (ноутбук)
    ↓  HTTP-запрос
http://<IP_СЕРВЕРА>:8080/v1
    ↓
Go Proxy (сервер, порт 8080)  ←  единственная точка входа снаружи
    ↓  пересылает запрос как есть
Ollama (сервер, localhost:11434)  ←  недоступна снаружи

Настройка сервера

1. Установить Go

Go нужен для сборки прокси из исходного кода. После сборки Go можно удалить — прокси работает как самостоятельный бинарник.

# Скачиваем архив с 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. Скопировать проект и собрать

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.

# Открываем override-конфиг Ollama
sudo systemctl edit ollama

Вставляем между комментариями:

[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, а наружу смотрит прокси.

Применяем изменения:

# Перечитываем конфигурацию systemd (без этого изменения не подхватятся)
sudo systemctl daemon-reload

# Перезапускаем Ollama с новыми настройками
sudo systemctl restart ollama

4. Создать systemd-сервис для прокси

systemd — это менеджер служб в Linux. Если создать сервис, то:

  • прокси запустится автоматически при включении сервера
  • если прокси упадёт — systemd перезапустит его сам
  • не нужно держать открытый терминал
# Создаём файл сервиса
sudo nano /etc/systemd/system/ollama-proxy.service

Вставляем:

[Unit]
Description=Ollama Proxy
# After — запускать прокси только ПОСЛЕ того, как Ollama стартовала
After=ollama.service
# Wants — при старте прокси systemd попытается запустить Ollama, если она не запущена
Wants=ollama.service

[Service]
# Путь к собранному бинарнику
ExecStart=/home/<user>/Proxy_for_codex/service

# LISTEN_ADDR=:8080 — прокси слушает порт 8080 на всех интерфейсах (доступен из сети)
Environment=LISTEN_ADDR=:8080

# OLLAMA_BACKEND — куда прокси пересылает запросы (локальная Ollama)
Environment=OLLAMA_BACKEND=http://localhost:11434

# Рабочая директория — нужна чтобы прокси мог найти .env файл (если есть)
WorkingDirectory=/home/<user>/Proxy_for_codex

# Запускать от имени обычного пользователя, не от root (безопаснее)
User=<user>

# Если прокси упадёт — перезапустить автоматически
Restart=always

# Ждать 5 секунд перед перезапуском (чтобы не спамить перезапусками при проблеме)
RestartSec=5

[Install]
# Запускать прокси при каждом включении сервера
WantedBy=multi-user.target

Замените <user> на имя пользователя на сервере (то, что показывает команда whoami).


5. Запустить прокси

# Перечитываем конфигурацию systemd (чтобы он узнал о новом сервисе)
sudo systemctl daemon-reload

# Включаем автозапуск при включении сервера
sudo systemctl enable ollama-proxy

# Запускаем прокси прямо сейчас
sudo systemctl start ollama-proxy

6. Проверить что всё работает

# Проверяем статус — должно быть "active (running)"
sudo systemctl status ollama-proxy

# Проверяем что прокси отвечает — должен вернуть список моделей
curl http://localhost:8080/api/tags

Если curl вернул JSON со списком моделей — прокси работает и Ollama доступна через него.


7. Файрвол (если включен)

Файрвол — это защита, которая блокирует входящие подключения к серверу. На Ubuntu он называется ufw. Если он включен и порт 8080 не открыт — ноутбуки не смогут достучаться до прокси.

Проверяем:

sudo ufw status
  • Если в ответе Status: inactive — файрвол выключен, ничего делать не нужно, все порты и так открыты.
  • Если Status: active — нужно открыть порт:
# Разрешаем входящие подключения на порт 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

Смотреть логи в реальном времени:

# -u ollama-proxy — показать логи только нашего сервиса
# -f — следить за новыми записями (как tail -f)
sudo journalctl -u ollama-proxy -f

Посмотреть последние 50 строк:

sudo journalctl -u ollama-proxy -n 50

Настройка клиента (ноутбук)

На ноутбуке не нужно ничего устанавливать и запускать — только изменить конфиг Codex, чтобы он отправлял запросы на прокси вместо локальной Ollama.

Открываем конфиг Codex:

Linux:

nano ~/.codex/config.toml

Windows: файл находится в:

C:\Users\<user>\.codex\config.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://<IP_СЕРВЕРА>:8080/v1"

# Формат общения с API
wire_api = "responses"

Замените <IP_СЕРВЕРА> на реальный IP сервера (например 10.111.111.40).


Запуск

codex

Готово. Codex отправит запросы на прокси, прокси перешлёт в Ollama, ответ вернётся обратно.