Five: Развертывание сервера Docker
В предыдущей серии статей мы рассказали, как использовать CLIProxyAPI на локальном компьютере. В этой статье мы пойдем дальше и объясним, как выполнить развертывание на сервере через Docker.
1. Подготовка окружения
Перед началом работы убедитесь, что у вас есть доступный VPS (Virtual Private Server). В этой статье в качестве примера для демонстрации будет использоваться система Debian 13.
Также убедитесь, что на вашем сервере уже установлены Git и Docker.
Если они еще не установлены, вы можете установить их с помощью следующих команд:
1. Установка Git
apt update && apt install git -y2. Установка Docker
Для установки вы можете использовать официальный скрипт автоматической установки:
bash <(curl -fsSL [https://get.docker.com](https://get.docker.com))2. Развертывание CLIProxyAPI
После завершения подготовки, пожалуйста, выполните следующие команды, чтобы клонировать проект и инициализировать конфигурацию.
git clone https://github.com/router-for-me/CLIProxyAPI.git
cd CLIProxyAPI
cp config.example.yaml config.yaml
Теперь вы можете открыть файл config.yaml для редактирования. В данном руководстве в качестве примера будет использоваться следующая минимальная конфигурация:
port: 8317
# Пожалуйста, укажите путь к папке в соответствии с вашим фактическим расположением
auth-dir: '~/.cli-proxy-api'
request-retry: 3
quota-exceeded:
switch-project: true
switch-preview-model: true
api-keys:
# Пожалуйста, установите Key самостоятельно, он используется для доступа клиента к прокси
- 'ABC-123456'Обратите внимание: При развертывании с помощью Docker рекомендуется оставить значение
auth-dirпо умолчанию без изменений. После редактирования файлаconfig.yamlвыполните следующую команду для запуска скрипта сборки Docker-контейнера.
bash docker-build.shСкрипт предложит два варианта:

- Вариант 1: Запуск напрямую с использованием предварительно собранного образа на Docker Hub (
docker compose up -d), что выполняется быстро. - Вариант 2: Компиляция образа локально на сервере с последующим запуском, что подходит для сценариев, требующих пользовательских изменений.
В данном руководстве мы выбираем Вариант 1 для быстрого запуска сервиса. Через некоторое время сервис будет успешно запущен.

3. Просмотр логов
Хотя скрипт предлагает использовать docker compose logs -f для просмотра логов, так как программа по умолчанию перенаправляет логи в файл, вам необходимо использовать следующую команду для просмотра логов в реальном времени:
tail -f ./logs/main.log4. Добавление OAuth-аутентификации
Теперь программа работает в обычном режиме. Если вам нужно добавить ключ ретрансляции (relay Key), вам достаточно отредактировать файл конфигурации, как описано в предыдущей статье. В этот раз мы сосредоточимся на том, как добавить файл авторизации и аутентификации через OAuth.
Шаг 1: Генерация ссылки для аутентификации на стороне сервера
В качестве примера добавим Codex, выполните следующую команду в корневом каталоге проекта:
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --codex-loginПрограмма сгенерирует команду для создания SSH-туннеля. Пожалуйста, скопируйте всю команду, начинающуюся с ssh, на которую указывает стрелка.

Шаг 2: Установка SSH-туннеля локально
В терминале или командной строке вашего собственного компьютера вставьте только что скопированную команду. 
Особое примечание: Вам необходимо заменить номер порта после параметра
-pв команде (22в примере) на фактический SSH-порт вашего VPS.
После нажатия Enter введите пароль для входа по SSH на сервер. После успешного подключения, пожалуйста, держите это окно терминала открытым, а затем вернитесь в терминал, в котором вы только что работали с сервером.

Шаг 3: Завершите авторизацию через браузер
Скопируйте ссылку, на которую указывает стрелка в терминале сервера

Откройте эту ссылку в браузере вашего локального компьютера, войдите в свой аккаунт ChatGPT и выполните авторизацию

После успешной авторизации вы увидите следующий экран: 
В то же время в терминале сервера также отобразится сообщение о том, что файл аутентификации был успешно сохранен.

На данный момент аутентификация Codex полностью завершена. Для других сервисов, требующих OAuth авторизации, таких как Gemini-CLI и Claude, процесс выполнения точно такой же.
5. Обзор принципа работы
В заключение давайте резюмируем принцип этого процесса удаленной OAuth аутентификации:
OAuth аутентификация Gemini-CLI, Claude и Codex требует процесса «Callback» для получения токена авторизации. Из-за ограничений безопасности адрес обратного вызова провайдера услуг обычно принудительно устанавливается на localhost. Когда вы выполняете команду авторизации в контейнере Docker, в контейнере отсутствует браузерная среда, и вы должны открыть веб-страницу авторизации на локальном компьютере. Но после успешной авторизации браузер попытается обратиться к localhost, что приведет к доступу только к вашему собственному компьютеру и не позволит передать токен программе на удаленном сервере.
Роль SSH Tunnel заключается в создании моста: он перенаправляет все сетевые запросы с определенного порта вашего локального компьютера (например, 1455) на тот же порт сервера через зашифрованное SSH-соединение. Таким образом, когда браузер обращается к локальному http://localhost:1455, запрос фактически перенаправляется программе CLIProxyAPI, которая прослушивает порт 1455 на сервере, что позволяет изящно завершить удаленную аутентификацию. В качестве альтернативы SSH Tunnel вы также можете вручную заменить localhost на IP или доменное имя вашего сервера, когда браузер переходит по callback-ссылке localhost. Однако, пожалуйста, обратите внимание, что этот метод требует от вас правильной настройки файрвола сервера или reverse proxy, чтобы гарантировать корректное получение callback-запроса, иначе аутентификация может завершиться ошибкой.
6. Использование клиента
После завершения вышеуказанной конфигурации при использовании клиента вам нужно лишь указать адрес эндпоинта запроса на IP:port вашего сервера (например, http://YOUR_SERVER_IP:8317), а остальные операции будут точно такими же, как при локальном использовании.
На данный момент вы освоили полный процесс развертывания CLIProxyAPI на сервере через Docker. Наслаждайтесь удобством, которое дает AI!