Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 28 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
2. [Возможности gpt2giga](#возможности-gpt2giga)
3. [Начало работы](#начало-работы)
1. [Запуск в Docker](#запуск-в-docker)
2. [Локальный запуск](#локальный-запуск)
2. [Запуск в Docker с Traefik](#запуск-в-docker-с-traefik)
3. [Локальный запуск](#локальный-запуск)
4. [Примеры](#примеры)
5. [Параметры](#изменение-параметров-gpt2giga)
1. [Аргументы командной строки](#аргументы-командной-строки)
Expand Down Expand Up @@ -92,7 +93,11 @@ sequenceDiagram
GIGACHAT_VERIFY_SSL_CERTS=True
```

3. (Опционально) Выберите образ с нужной версией Python (3.10–3.14) и обновите `image:` в `docker-compose.yaml`.
3. (Опционально) Используйте образ/сборку с нужной версией Python (3.10–3.14).

В `docker-compose.yaml` по умолчанию задан `image: ghcr.io/ai-forever/gpt2giga:latest` и `build.args.PYTHON_VERSION`. При необходимости:
- обновите `build.args.PYTHON_VERSION` (если собираете образ локально);
- или замените `image:` на нужный тег из реестра.

```sh
PYTHON_VERSION=3.10
Expand All @@ -113,6 +118,24 @@ sequenceDiagram
docker compose --profile DEV up -d
```

> В профиле `PROD` порт по умолчанию пробрасывается только на `127.0.0.1` (см. `docker-compose.yaml`). Для доступа извне используйте reverse proxy (nginx/Traefik/Caddy) или измените bind-адрес в `ports:`.

### Запуск в Docker с Traefik

В репозитории есть готовый стек `Traefik + несколько инстансов gpt2giga` в файле [`docker-compose.traefik.yaml`](./docker-compose.traefik.yaml):
- `gpt2giga` (модель по умолчанию `GigaChat`) → `http://localhost:8090`
- `gpt2giga-pro` (модель по умолчанию `GigaChat-Pro`) → `http://localhost:8091`
- `gpt2giga-max` (модель по умолчанию `GigaChat-Max`) → `http://localhost:8092`
- Traefik Dashboard → `http://localhost:8080/dashboard/`

1. Запустите стек:

```sh
docker compose -f docker-compose.traefik.yaml up -d
```

> Важно: роутинг в Traefik в этой конфигурации завязан на HTTP `Host` (см. `traefik/rules.yml`). Если вы обращаетесь по IP (например, `127.0.0.1`), задайте `HOST=127.0.0.1` или отправляйте корректный заголовок `Host:`.

### Локальный запуск

Для управления зависимостями и запуска проекта рекомендуется использовать [uv](https://github.com/astral-sh/uv).
Expand Down Expand Up @@ -323,6 +346,9 @@ GPT2GIGA_HTTPS_CERT_FILE="Path to cert.pem"
```
После этого укажите пути к сертификатам в переменных окружения или CLI-аргументах и включите HTTPS.

Альтернатива: разместите `gpt2giga` за reverse proxy с TLS-терминацией:
- пример стека с Traefik: [`docker-compose.traefik.yaml`](./docker-compose.traefik.yaml) и правила в `traefik/` (при необходимости добавьте ACME/сертификаты под свой домен).

## Использование API ключа
```dotenv
GPT2GIGA_ENABLE_API_KEY_AUTH=True
Expand Down
73 changes: 73 additions & 0 deletions docker-compose.traefik.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
x-gpt2giga-common: &gpt2giga-common
image: ghcr.io/ai-forever/gpt2giga:latest
restart: unless-stopped
env_file:
- .env
build:
context: .
dockerfile: Dockerfile

services:
gpt2giga:
<<: *gpt2giga-common
pull_policy: always
container_name: gpt2giga
environment:
GIGACHAT_MODEL: GigaChat
networks:
gpt2giga:
aliases:
- gpt2giga

gpt2giga-pro:
<<: *gpt2giga-common
pull_policy: always
container_name: gpt2giga_pro
environment:
GIGACHAT_MODEL: GigaChat-Pro
networks:
gpt2giga:
aliases:
- gpt2giga-pro

gpt2giga-max:
<<: *gpt2giga-common
pull_policy: always
container_name: gpt2giga_max
environment:
GIGACHAT_MODEL: GigaChat-Max
networks:
gpt2giga:
aliases:
- gpt2giga-max

traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports:
- 80:80
- 443:443
- 8080:8080
- 8090:8090
- 8091:8091
- 8092:8092
environment:
HOST: ${HOST:-localhost}
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/traefik.yml:/etc/traefik/traefik.yml:ro
- ./traefik/:/etc/traefik/rules/:ro
depends_on:
- gpt2giga
- gpt2giga-pro
- gpt2giga-max
networks:
gpt2giga:
aliases:
- traefik
networks:
gpt2giga:
41 changes: 41 additions & 0 deletions traefik/rules.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
http:
routers:
gpt2giga:
entryPoints:
- gpt2giga
service: gpt2giga
rule: Host(`{{ env "HOST" }}`)

gpt2giga-pro:
entryPoints:
- gpt2gigapro
service: gpt2giga-pro
rule: Host(`{{ env "HOST" }}`)

gpt2giga-max:
entryPoints:
- gpt2gigamax
service: gpt2giga-max
rule: Host(`{{ env "HOST" }}`)

dashboard:
entryPoints:
- dashboard
service: api@internal
rule: PathPrefix(`/api`) || PathPrefix(`/dashboard`)

services:
gpt2giga:
loadbalancer:
servers:
- url: http://gpt2giga:8090

gpt2giga-pro:
loadbalancer:
servers:
- url: http://gpt2giga_pro:8090

gpt2giga-max:
loadbalancer:
servers:
- url: http://gpt2giga_max:8090
24 changes: 24 additions & 0 deletions traefik/traefik.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
api:
dashboard: true

entryPoints:
dashboard:
address: :8080
http:
address: :80
https:
address: :443
gpt2giga:
address: :8090
gpt2gigapro:
address: :8091
gpt2gigamax:
address: :8092

providers:
docker:
exposedByDefault: false
network: gpt2giga
file:
directory: /etc/traefik/rules
watch: true