Documetnation of proxy

This commit is contained in:
2026-03-20 20:05:48 +03:00
parent d7c90cd243
commit a6e279e746

287
PROXY_SETUP.md Normal file
View File

@@ -0,0 +1,287 @@
# Настройка прокси для 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, ответ вернётся обратно.