Files
Proxy_for_codex/PROXY_SETUP.md
2026-03-20 20:12:46 +03:00

288 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Настройка прокси для 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 можно удалить — прокси работает как самостоятельный бинарник.
```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/<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. Запустить прокси
```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\<user>\.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://<IP_СЕРВЕРА>:8080/v1"
# Формат общения с API
wire_api = "responses"
```
> **Замените `<IP_СЕРВЕРА>`** на реальный IP сервера (например `10.111.111.40`).
---
## Запуск
```bash
codex
```
Готово. Codex отправит запросы на прокси, прокси перешлёт в Ollama, ответ вернётся обратно.