10 KiB
Настройка прокси для 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, ответ вернётся обратно.