Права доступа к Git репозиторию для деплоя бота
🎯 Минимальные права для деплоя
Для деплоя бота из приватного репозитория клиенту нужно дать
только права на чтение (Read) .
GitHub
Минимальные права:
✅ Read (чтение кода) - достаточно для клонирования
Как дать доступ:
#### Вариант 1: Personal Access Token (рекомендуется)
Клиент создает Personal Access Token:
- Settings → Developer settings → Personal access tokens → Tokens (classic)
- Scopes: только
repo (для приватных репозиториев)
- Или
public_repo (для публичных)
В Bothost при добавлении репозитория:
- Тип: HTTPS
- Username:
x-access-token (автоматически)
- Token: вставляется токен клиента
Права токена:
Copy ✅ repo (для приватных репозиториев)
- repo:status
- repo_deployment
- public_repo
- repo:invite
- security_events
#### Вариант 2: Deploy Key (для одного репозитория)
На manager ноде сгенерировать SSH ключ:
``
bash
ssh-keygen -t ed25519 -C "bothost-deploy" -f ~/.ssh/bothost_deploy_key
Copy 2. Добавить публичный ключ в репозиторий:
- Settings → Deploy keys → Add deploy key
- Title: Bothost Deploy
- Key: содержимое ~/.ssh/bothost_deploy_key.pub
- ✅ Allow write access: НЕ включать (только чтение)
Права Deploy Key:
✅ Read-only доступ к репозиторию
❌ Не может изменять код
❌ Не может создавать issues/pull requests
#### Вариант 3: GitHub App (для организации)
Для организаций можно создать GitHub App с минимальными правами:
✅ Contents: Read (чтение кода)
✅ Metadata: Read (метаданные)
### GitLab
Минимальные права:
✅ Guest или Reporter роль
Как дать доступ:
#### Вариант 1: Personal Access Token
Клиент создает Personal Access Token:
- User Settings → Access Tokens
- Scopes: только read_repository
- Тип: HTTPS
- Username: oauth2
- Token: токен клиента
Права токена:
read_repository - чтение репозитория
`
#### Вариант 2: Deploy Token
- Settings → Repository → Deploy tokens
- Name: Bothost Deploy
- Scopes: только read_repository
- Expires: по желанию
- Username: из GitLab
- Token: из GitLab
Bitbucket
Минимальные права:
Как дать доступ:
#### Personal Access Token
Клиент создает App Password:
- Personal settings → App passwords
- Permissions: только Repositories: Read
- Тип: HTTPS
- Username: username клиента
- Token: app password
🔒 Безопасность
✅ Что безопасно:
Deploy Key (SSH) - самый безопасный вариант
- Привязан к одному репозиторию
- Не может изменять код
- Можно отозвать в любой момент
Personal Access Token с минимальными правами
- Только чтение
- Можно ограничить по времени
- Можно отозвать
- Только для деплоя
- Ограничен по времени
- Минимальные права
❌ Что НЕ безопасно:
- Никогда не просите пароль от аккаунта
- Не используйте токены с правами на запись
Токены с правами на изменение кода
- Не нужны для деплоя
- Риск компрометации
📝 Инструкция для клиента
GitHub
Перейти в Settings → Developer settings → Personal access tokens → Tokens (classic)
Нажать "Generate new token (classic)"
Название: Bothost Deploy
Expiration: выбрать срок (рекомендуется 1 год)
Scopes: выбрать только repo
(для приватных) или public_repo
(для публичных)
Нажать "Generate token"
Скопировать токен (показывается только один раз!)
В Bothost при добавлении репозитория:
- Вставить URL репозитория
- Выбрать "Приватный репозиторий"
- Вставить токен в поле "Token"
GitLab
Перейти в User Settings → Access Tokens
Token name: Bothost Deploy
Expiration date: выбрать срок
Scopes: выбрать только read_repository
Нажать "Create personal access token"
Скопировать токен
В Bothost:
- URL репозитория
- Выбрать "Приватный репозиторий"
- Вставить токен
🔄 Обновление токенов
Если токен истек или был скомпрометирован:
Клиент создает новый токен
В Bothost обновляет репозиторий:
- Перейти в настройки репозитория
- Обновить токен
- Сохранить
Старый токен можно отозвать в настройках GitHub/GitLab
✅ Рекомендации
Для клиента:
Использовать отдельный токен для Bothost
- Не использовать основной токен аккаунта
- Легче отозвать при необходимости
- Не создавать токены без срока
- Рекомендуется 1 год
- Только чтение кода
- Не давать права на запись
Для Bothost:
Хранить токены в зашифрованном виде
- Использовать base64 кодирование (как сейчас)
- Не логировать токены
Использовать HTTPS вместо SSH
- Проще для клиентов
- Не нужны SSH ключи на сервере
Проверять доступность репозитория
- Валидировать токен перед сохранением
- Показывать ошибки если токен неверный
🆘 Решение проблем
Ошибка: "Repository not found" или "Authentication failed"
Причины:
Токен неверный или истек
Токен не имеет прав на репозиторий
Репозиторий удален или переименован
Решение:
Проверить токен в настройках GitHub/GitLab
Создать новый токен с правильными правами
Обновить токен в Bothost
Ошибка: "Permission denied"
Причины:
Токен не имеет прав на чтение
Репозиторий приватный, но токен для публичных
Решение:
repo
(для приватных)
Проверить что репозиторий доступен с этим токеном
📋 Чеклист для клиента
[ ] Создан Personal Access Token
[ ] Токен имеет только права на чтение ( repo
или read_repository`)
[ ] Установлен срок действия токена
[ ] Токен скопирован и вставлен в Bothost
[ ] Репозиторий успешно добавлен в Bothost
[ ] Тестовый деплой прошел успешно