diff --git a/README.md b/README.md index 9a75591..23c0db5 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,36 @@ docker run -d --name kadr-photo-editor -p 3000:3000 ^ 3. После регистрации нажмите «Run workflow» — образ соберётся Buildx'ом и уедет в registry. +## Развёртывание в Portainer (workflow deploy-portainer) + +Workflow `.gitea/workflows/deploy.yml` разворачивает сервис на +[Portainer](https://ptr.byte-mate.ru): создаёт или обновляет стек +`photo-editor` из `deploy/docker-compose.yml` через API Portainer. +Запуск: **Actions → Run workflow** (workflow **deploy-portainer**). + +Требования: + +1. **Секрет `PORTAINER_API_KEY`** (Settings → Actions → Secrets) — API-ключ + Portainer: **Account → API keys → Add key**. Внимание: Portainer 2.39 + принимает ключ только через заголовок `X-API-Key` (не Bearer) — workflow + это уже учитывает. +2. **Переменная `PORTAINER_ENDPOINT_ID`** (Settings → Actions → Variables) — + id окружения Docker в Portainer. Если не задана, берётся первый из + `/api/endpoints`. Сейчас endpoint — `server1`, id **3**. +3. **Registry в Portainer** (Registries → Add registry): URL + `git.byte-mate.ru`, username `Coder`, пароль — Personal Access Token. + Без этого хост не сможет стянуть образ (registry приватный, анонимный + pull возвращает 401). +4. На хосте Portainer должен существовать каталог `/root/.codex` с + аутентификацией Codex (auth.json + config.toml) — он монтируется в + контейнер. Альтернатива — переменная `OPENAI_API_KEY` в + `deploy/docker-compose.yml`. + +Поведение: если стека нет — создаёт; если есть — обновляет с +`RepullImageAndRedeploy=true` (всегда перетягивает свежий образ). Контейнер +`kadr-photo-editor` слушает порт **3000** на хосте Portainer; история версий +хранится в именованном томе `kadr-history` и переживает обновления. + ## Тест скорости моделей Codex (ветка testing) Сервер умеет переопределять модель и уровень рассуждений через переменные