# Community Edition: установка

> Как поставить бесплатное издание Buff на свою машину: требования, установка одной командой, первый вход, лицензия, обновление, резервная копия, диагностика.

Community Edition — бесплатное издание для внутреннего использования одной организацией: одна организация, три пользователя, до 15 одновременных разработок, одна модель на установку. Чем оно отличается от SaaS и Enterprise — на странице [Издания](/docs/self-hosted). Репозиторий установки — [github.com/buffsystems/buff-community](https://github.com/buffsystems/buff-community).

## Что нужно

| | Требование |
|---|---|
| Linux | **Ubuntu 22.04 или 24.04**, amd64, ядро не ниже 5.7, пользователь с `sudo`. Раннеры инструментов разработки работают в [Sysbox](https://github.com/nestybox/sysbox) — без привилегированных контейнеров и без сокета хоста |
| macOS, Windows | [Docker Desktop](https://docs.docker.com/desktop/); на Windows скрипт запускается из Git Bash. Sysbox здесь нет, поэтому **контейнер Buff работает привилегированным** — для личной машины, не для сервера |
| Ресурсы | минимум 4 CPU и 8 ГБ памяти (одна разработка за раз); рекомендуется 8 CPU и 16 ГБ для трёх одновременных — каждая разработка занимает до 1,5 ГБ памяти. На диске около 20 ГБ под образы плюс место под ваши репозитории: данные лежат в томах Docker, не в образе |
| Доступ | исходящий интернет: образы с ghcr.io (в том числе наш) и Docker Hub, суточная проверка лицензии на buff.systems, ваш эндпоинт модели |
| Модель | ключ к OpenAI-совместимому эндпоинту: [OpenRouter](https://openrouter.ai), свой LiteLLM, vLLM, Ollama и т. п. |

<Callout type="warn">
На Linux убедитесь, что весь диск отдан корневому разделу или смонтирован под `/var/lib/docker` — образ установки с корнем в 8 ГБ не подойдёт. На Apple Silicon образ (amd64) идёт через эмуляцию и работает заметно медленнее.
</Callout>

## Установка

```sh
git clone https://github.com/buffsystems/buff-community.git
cd buff-community
./install.sh
```

Скрипт сам определяет режим. На Linux он ставит Docker и Sysbox; с Docker Desktop — использует его и добавляет `docker-compose.desktop.yml` (привилегированный режим, `COMPOSE_FILE` в `.env`). Дальше в обоих случаях: создаёт `.env` со случайными паролями, скачивает образ издания с GitHub (`BUFF_IMAGE` в `.env`, пакет `ghcr.io/buffsystems/buff-community`), поднимает `docker compose` и показывает ход первого старта прямо в терминале — шаг за шагом до строки «готово» (несколько минут: базы, учётные записи, выкладка пайплайна). Для закрытого контура положите файл образа и его `.sha256` в `images/` — скрипт загрузит его вместо скачивания. Запускайте обычным пользователем — root не нужен.

До первого входа откройте `.env` и впишите своё:

| Переменная | Что это |
|---|---|
| `ORG` | имя вашей организации латиницей, например `acme` |
| `ADMIN_USER`, `ADMIN_EMAIL`, `ADMIN_PASSWORD` | первый пользователь приложения, он же администратор; пароль сгенерирован, его можно заменить |
| `LLM_BASE_URL`, `LLM_API_KEY`, `LLM_MODEL` | эндпоинт, ключ и модель, например `https://openrouter.ai/api/v1`, `sk-or-…`, `openai/gpt-4.1` |
| `APP_URL` | адрес, по которому люди откроют приложение; по умолчанию — IP машины и порт 8138 |
| `RUNNERS` | сколько воркеров разработки запустить — столько разработок пойдут одновременно, по умолчанию 3. Выше предела лицензии значение не действует: предел подписан в лицензии и показан в админке → «Лицензия» (Community — 15) |

Изменили `.env` — примените: `docker compose up -d`.

## Первый вход

**Приложение** — `APP_URL` (`http://<машина>:8138/app/`): логин из `ADMIN_USER`, пароль из `.env`. Вы попадаете в свою организацию: подключите репозиторий, создайте пространство знаний или поставьте [Buff Code](/docs/buff-code).

**Админка** — `http://<машина>:8150`, пользователь `admin`, тот же пароль. В ней:

- **Пользователи** — новых заводит администратор (самостоятельной регистрации нет); всем участникам видно всё в организации.
- **Конфигурация** — модель установки (`llm_model`) и ключ эндпоинта (`llm_api_key`), если вы не вписали их в `.env`.
- **Воркеры** — состояние раннеров.
- **Лицензия** — см. ниже.

## Лицензия

Установка работает по лицензии Community: бессрочной, с [условиями](/docs/self-hosted/license) внутреннего использования. Чтобы получить её:

1. В админке откройте «Лицензия», укажите название организации и почту администратора, подтвердите согласие на обработку этих данных и нажмите «Зарегистрировать».
2. В течение часа установка сама обратится к buff.systems и получит лицензию; статус сменится на «действует».

Пределы лицензии — пользователей, одновременных разработок, организаций — показаны на той же странице; они подписаны в лицензии, и настройки установки (`RUNNERS`, число пользователей) выше них не действуют. Пока лицензии нет, а также если она отозвана, **новые задачи, прогоны, исследования и вопросы не стартуют**; вход и чтение работают. Отсутствие связи с buff.systems лицензию не прекращает.

Раз в сутки установка проверяет лицензию и передаёт четыре поля: идентификатор установки, версию, число пользователей и число раннеров. Больше ничего; на стороне buff.systems фиксируется адрес, с которого пришла проверка — подробнее в [условиях лицензии](/docs/self-hosted/license).

## Центральный коннектор

В Community коннектор один и он встроен в установку: **«Центральный коннектор»** запускается внутри контейнера и сам сопрягается с вашей организацией при первом старте — в списке «Коннекторы» он появляется через минуту-две, добавлять другие нельзя. Его настройки — файл `connector/connector.yaml` рядом с `docker-compose.yml`: там перечисляются git-провайдеры (GitLab, GitHub, Gitea, Bitbucket, в том числе self-hosted) и токены к ним; токены остаются в этом файле на вашей машине. Изменили файл — перезапустите коннектор:

```sh
docker compose exec buff supervisorctl restart services:connector
```

Коннектор видит сеть так же, как контейнер: до внутреннего git-сервера ему нужен сетевой доступ с этой машины. Прокси для внешних моделей настраивается не здесь, а в вашем LiteLLM.

## Обновление

```sh
git pull
./install.sh
```

Впишите в `.env` новый `BUFF_IMAGE` из обновлённого `.env.example` — скрипт скачает образ и перезапустит контейнеры. Миграции базы применяются при старте. Версия установки видна в админке.

## Резервная копия

Все данные — в томах Docker: `pgdata` (базы), `gitea-data` (репозитории), `buff-data` (секреты, ключи, рабочие каталоги), `buff-docker` (слои внутреннего docker). Копия: остановите стек (`docker compose stop`), скопируйте тома любым привычным способом, запустите снова. Файл `.env` храните вместе с копией — в нём пароли.

## Диагностика

- `docker compose ps` — состояние контейнеров; `docker compose logs buff` — наш контейнер.
- `docker compose exec buff supervisorctl status` — сервисы внутри контейнера; `supervisorctl restart services:auth-worker` перезапускает один.
- Повторить первый старт безопасно: `docker compose exec buff buff-bootstrap` — все шаги идемпотентны.
- Раннеры не стартуют — проверьте, что образ песочниц есть во внутреннем docker: `docker compose exec buff /opt/docker-real/docker images`.
- Вопросы и ошибки — в [issues репозитория](https://github.com/buffsystems/buff-community/issues); как оформлять и как участвовать — в `CONTRIBUTING.md`. Техническая поддержка Community Edition не предоставляется.

## Что внутри

`docker compose` поднимает стоковые образы PostgreSQL, Gitea (внутреннее git-хранилище, пользователю не видно), NATS, Windmill (сервер) и Apache Tika рядом с одним нашим образом, где под супервизором живут все сервисы Buff и воркеры Windmill. На Linux наш образ — системный контейнер Sysbox со своим docker внутри: в нём работают раннеры и песочницы агентов, без `privileged` и без сокета хоста; в Docker Desktop тот же контейнер работает привилегированным. Windmill загружается с ghcr.io на условиях его авторов и в наш образ не входит; остальные сторонние компоненты — в `THIRD-PARTY.md` репозитория.
