Добавлены новые документы и инструкции по настройке, использованию и тестированию SSL сертификатов Let's Encrypt с использованием API reg.ru. Обновлены зависимости в requirements.txt для поддержки новых функций. Включены подробные шаги по автоматизации, созданию и продлению сертификатов, а также интеграции с Nginx Proxy Manager.
This commit is contained in:
425
docs/ru/GITEA_SYNC.md
Normal file
425
docs/ru/GITEA_SYNC.md
Normal file
@@ -0,0 +1,425 @@
|
||||
# 🔄 Синхронизация Gitea → GitHub
|
||||
|
||||
Автоматическая синхронизация репозитория из Gitea в GitHub после каждого push.
|
||||
|
||||
---
|
||||
|
||||
## 📋 Доступные методы
|
||||
|
||||
| Метод | Сложность | Скорость | Надежность | Рекомендация |
|
||||
|-------|-----------|----------|------------|--------------|
|
||||
| **1. Git Hooks** | ⭐⭐ | ⚡ Мгновенно | ✅ Высокая | Рекомендуется |
|
||||
| **2. GitHub Actions** | ⭐⭐⭐ | ⏱️ 1-5 мин | ✅ Высокая | Для сложных сценариев |
|
||||
| **3. Gitea Mirror** | ⭐ | ⏱️ По расписанию | ⭐⭐ Средняя | Самый простой |
|
||||
| **4. Двойной Remote** | ⭐ | ⚡ Мгновенно | ⭐⭐ Средняя | Локальная работа |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Метод 1: Git Hooks (Рекомендуется)
|
||||
|
||||
### Установка
|
||||
|
||||
**1. На сервере Gitea найдите путь к репозиторию:**
|
||||
```bash
|
||||
# Обычно это:
|
||||
/var/lib/gitea/data/gitea-repositories/username/configure_nginx_manager.git
|
||||
# Или
|
||||
/home/git/gitea-repositories/username/configure_nginx_manager.git
|
||||
```
|
||||
|
||||
**2. Создайте post-receive hook:**
|
||||
```bash
|
||||
cd /path/to/gitea/repos/username/configure_nginx_manager.git/hooks/
|
||||
nano post-receive
|
||||
```
|
||||
|
||||
**3. Вставьте содержимое** из файла `gitea-hooks/post-receive` (в этом репозитории)
|
||||
|
||||
**4. Настройте параметры:**
|
||||
```bash
|
||||
# В файле post-receive измените:
|
||||
GITHUB_REPO="git@github.com:YOUR_USERNAME/configure_nginx_manager.git"
|
||||
# Или для HTTPS с токеном:
|
||||
GITHUB_REPO="https://YOUR_TOKEN@github.com/YOUR_USERNAME/configure_nginx_manager.git"
|
||||
```
|
||||
|
||||
**5. Сделайте скрипт исполняемым:**
|
||||
```bash
|
||||
chmod +x post-receive
|
||||
```
|
||||
|
||||
**6. Создайте директорию для логов:**
|
||||
```bash
|
||||
mkdir -p /var/log/gitea
|
||||
chown git:git /var/log/gitea
|
||||
```
|
||||
|
||||
### Настройка SSH ключей (для git@github.com)
|
||||
|
||||
**На сервере Gitea:**
|
||||
|
||||
**Шаг 1: Определите пользователя Gitea**
|
||||
```bash
|
||||
# Проверьте под каким пользователем запущен Gitea
|
||||
ps aux | grep gitea | grep -v grep
|
||||
|
||||
# Обычно это один из:
|
||||
# - git (стандартная установка)
|
||||
# - gitea (установка через Docker/LXC)
|
||||
```
|
||||
|
||||
**Шаг 2: Переключитесь на этого пользователя**
|
||||
```bash
|
||||
# Попробуйте git:
|
||||
sudo su - git
|
||||
|
||||
# Если не работает, попробуйте gitea:
|
||||
sudo su - gitea
|
||||
|
||||
# Проверьте текущего пользователя
|
||||
whoami # Должно быть: git или gitea
|
||||
```
|
||||
|
||||
**Шаг 3: Создайте SSH ключ**
|
||||
```bash
|
||||
# Создайте SSH ключ (если его ещё нет)
|
||||
ssh-keygen -t ed25519 -C "gitea-to-github-sync" -f ~/.ssh/id_ed25519 -N ""
|
||||
|
||||
# Скопируйте публичный ключ
|
||||
cat ~/.ssh/id_ed25519.pub
|
||||
```
|
||||
|
||||
**На GitHub:**
|
||||
1. Settings → SSH and GPG keys
|
||||
2. New SSH key
|
||||
3. Вставьте публичный ключ
|
||||
4. Save
|
||||
|
||||
**⚠️ ВАЖНО: Добавьте GitHub в known_hosts:**
|
||||
```bash
|
||||
# От того же пользователя (git или gitea)
|
||||
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
|
||||
|
||||
# Проверьте что ключ добавлен
|
||||
cat ~/.ssh/known_hosts | grep github.com
|
||||
```
|
||||
|
||||
**Проверка подключения:**
|
||||
```bash
|
||||
ssh -T git@github.com
|
||||
# Должно вывести: Hi username! You've successfully authenticated...
|
||||
```
|
||||
|
||||
### Настройка токена (для HTTPS)
|
||||
|
||||
**На GitHub:**
|
||||
1. Settings → Developer settings → Personal access tokens → Tokens (classic)
|
||||
2. Generate new token
|
||||
3. Выберите scope: `repo` (полный доступ к репозиториям)
|
||||
4. Скопируйте токен
|
||||
|
||||
**В hook файле:**
|
||||
```bash
|
||||
GITHUB_REPO="https://ghp_YOUR_TOKEN_HERE@github.com/username/configure_nginx_manager.git"
|
||||
```
|
||||
|
||||
### Тестирование
|
||||
|
||||
```bash
|
||||
# Сделайте тестовый commit в Gitea
|
||||
cd /tmp
|
||||
git clone http://gitea.example.com/username/configure_nginx_manager.git
|
||||
cd configure_nginx_manager
|
||||
echo "test" >> README.md
|
||||
git add README.md
|
||||
git commit -m "Test sync to GitHub"
|
||||
git push
|
||||
|
||||
# Проверьте лог
|
||||
tail -f /var/log/gitea/github-sync.log
|
||||
|
||||
# Проверьте GitHub - изменения должны появиться
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Метод 2: GitHub Actions
|
||||
|
||||
### Установка
|
||||
|
||||
**1. Создайте workflow в GitHub репозитории:**
|
||||
|
||||
Файл уже создан: `.github/workflows/sync-from-gitea.yml`
|
||||
|
||||
**2. Настройте секреты в GitHub:**
|
||||
|
||||
GitHub Repository → Settings → Secrets and variables → Actions → New repository secret
|
||||
|
||||
Добавьте:
|
||||
- **Name**: `GITEA_URL`
|
||||
- **Value**: `https://gitea.example.com/username/configure_nginx_manager.git`
|
||||
|
||||
- **Name**: `GITEA_TOKEN`
|
||||
- **Value**: Токен доступа Gitea
|
||||
|
||||
### Получение токена Gitea
|
||||
|
||||
**В Gitea:**
|
||||
1. Settings → Applications → Generate New Token
|
||||
2. Token Name: "GitHub Sync"
|
||||
3. Select permissions: `read:repository`
|
||||
4. Generate Token
|
||||
5. Скопируйте токен
|
||||
|
||||
### Запуск синхронизации
|
||||
|
||||
**Автоматически (по расписанию):**
|
||||
- Каждый час проверяет изменения
|
||||
|
||||
**Вручную:**
|
||||
1. GitHub → Actions
|
||||
2. Выберите workflow "Sync from Gitea"
|
||||
3. Run workflow
|
||||
|
||||
**Через webhook от Gitea:**
|
||||
|
||||
В Gitea репозитории:
|
||||
1. Settings → Webhooks → Add Webhook → Gitea
|
||||
2. Target URL: `https://api.github.com/repos/USERNAME/configure_nginx_manager/dispatches`
|
||||
3. HTTP Method: `POST`
|
||||
4. POST Content Type: `application/json`
|
||||
5. Secret: оставьте пустым или используйте
|
||||
6. Trigger On: `Push events`
|
||||
7. Body:
|
||||
```json
|
||||
{
|
||||
"event_type": "gitea-push"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🪞 Метод 3: Gitea Mirror (Встроенная функция)
|
||||
|
||||
### Настройка
|
||||
|
||||
**В Gitea репозитории:**
|
||||
1. Settings → Repository
|
||||
2. Прокрутите до "Mirror Settings"
|
||||
3. Нажмите "Add Push Mirror"
|
||||
4. Заполните:
|
||||
- **Git Remote Repository URL**: `https://github.com/username/configure_nginx_manager.git`
|
||||
- **Username**: ваш GitHub username
|
||||
- **Password**: GitHub Personal Access Token
|
||||
- **Sync Interval**: `8h` (каждые 8 часов) или `0` (только вручную)
|
||||
5. Save
|
||||
|
||||
### Ручная синхронизация
|
||||
|
||||
Settings → Repository → Mirror Settings → Sync Now
|
||||
|
||||
### Преимущества
|
||||
- ✅ Встроенная функция
|
||||
- ✅ Не требует скриптов
|
||||
- ✅ Управление через веб-интерфейс
|
||||
|
||||
### Недостатки
|
||||
- ⚠️ Работает по расписанию (не мгновенно)
|
||||
- ⚠️ Доступно не во всех версиях Gitea
|
||||
|
||||
---
|
||||
|
||||
## 🔀 Метод 4: Двойной Remote
|
||||
|
||||
### Для локальной работы
|
||||
|
||||
**Настройка:**
|
||||
```bash
|
||||
# В вашем локальном репозитории
|
||||
cd configure_nginx_manager
|
||||
|
||||
# Добавьте GitHub как второй remote
|
||||
git remote add github git@github.com:username/configure_nginx_manager.git
|
||||
|
||||
# Или настройте push в оба репозитория одновременно
|
||||
git remote set-url --add --push origin git@github.com:username/configure_nginx_manager.git
|
||||
|
||||
# Проверьте
|
||||
git remote -v
|
||||
```
|
||||
|
||||
**Использование:**
|
||||
```bash
|
||||
# Обычный push (только в Gitea)
|
||||
git push origin main
|
||||
|
||||
# Push в GitHub
|
||||
git push github main
|
||||
|
||||
# Push в оба репозитория
|
||||
git push origin main
|
||||
git push github main
|
||||
|
||||
# Или создайте alias
|
||||
git config alias.pushall '!git push origin main && git push github main'
|
||||
git pushall
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Проверка синхронизации
|
||||
|
||||
### Проверка через Git
|
||||
|
||||
```bash
|
||||
# Сравнить коммиты
|
||||
git ls-remote git@gitea.example.com:username/configure_nginx_manager.git
|
||||
git ls-remote git@github.com:username/configure_nginx_manager.git
|
||||
|
||||
# Должны быть одинаковые SHA
|
||||
```
|
||||
|
||||
### Проверка логов (Метод 1 - Hooks)
|
||||
|
||||
```bash
|
||||
# На сервере Gitea
|
||||
tail -f /var/log/gitea/github-sync.log
|
||||
```
|
||||
|
||||
### Проверка GitHub Actions (Метод 2)
|
||||
|
||||
1. GitHub Repository → Actions
|
||||
2. Смотрите последние запуски
|
||||
3. Проверьте логи выполнения
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Рекомендованная конфигурация
|
||||
|
||||
Для максимальной надежности используйте **комбинацию методов**:
|
||||
|
||||
1. **Git Hook** (основной) - мгновенная синхронизация
|
||||
2. **GitHub Actions** (резервный) - проверка каждый час на случай сбоя hook
|
||||
|
||||
### Установка обоих методов
|
||||
|
||||
```bash
|
||||
# 1. Установите Git Hook на сервере Gitea
|
||||
# (см. Метод 1)
|
||||
|
||||
# 2. Настройте GitHub Actions
|
||||
# (см. Метод 2)
|
||||
|
||||
# 3. GitHub Actions будет подхватывать пропущенные изменения
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Устранение проблем
|
||||
|
||||
### Проблема: Hook не срабатывает
|
||||
|
||||
**Проверка:**
|
||||
```bash
|
||||
# На сервере Gitea
|
||||
ls -la /path/to/repo.git/hooks/post-receive
|
||||
# Должно быть -rwxr-xr-x
|
||||
|
||||
# Проверьте права
|
||||
chmod +x /path/to/repo.git/hooks/post-receive
|
||||
chown git:git /path/to/repo.git/hooks/post-receive
|
||||
|
||||
# Проверьте лог ошибок Gitea
|
||||
tail -f /var/log/gitea/gitea.log
|
||||
```
|
||||
|
||||
### Проблема: Permission denied (SSH)
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Убедитесь что SSH ключ добавлен в GitHub
|
||||
ssh -T git@github.com
|
||||
|
||||
# Проверьте права на .ssh
|
||||
chmod 700 ~/.ssh
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
```
|
||||
|
||||
### Проблема: Authentication failed (HTTPS)
|
||||
|
||||
**Решение:**
|
||||
- Проверьте токен GitHub (должен иметь scope `repo`)
|
||||
- Токен не истёк
|
||||
- Правильный формат URL: `https://TOKEN@github.com/user/repo.git`
|
||||
|
||||
### Проблема: GitHub Actions не запускается
|
||||
|
||||
**Решение:**
|
||||
1. Проверьте секреты в Settings → Secrets
|
||||
2. Проверьте формат webhook от Gitea
|
||||
3. Запустите вручную для теста
|
||||
|
||||
---
|
||||
|
||||
## 📊 Сравнение методов
|
||||
|
||||
### Скорость синхронизации
|
||||
- **Git Hooks**: ⚡ < 1 секунды
|
||||
- **GitHub Actions (webhook)**: ⏱️ 10-30 секунд
|
||||
- **GitHub Actions (schedule)**: ⏱️ до 1 часа
|
||||
- **Gitea Mirror**: ⏱️ по расписанию
|
||||
|
||||
### Надежность
|
||||
- **Git Hooks**: ⭐⭐⭐⭐⭐ (при правильной настройке)
|
||||
- **GitHub Actions**: ⭐⭐⭐⭐⭐ (очень надежно)
|
||||
- **Gitea Mirror**: ⭐⭐⭐ (зависит от версии Gitea)
|
||||
- **Двойной Remote**: ⭐⭐ (требует ручного действия)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Итоговая рекомендация
|
||||
|
||||
Для проекта `configure_nginx_manager`:
|
||||
|
||||
**1. Основной метод: Git Hook**
|
||||
- Быстро
|
||||
- Надежно
|
||||
- Автоматически
|
||||
|
||||
**2. Резервный метод: GitHub Actions**
|
||||
- Проверка каждый час
|
||||
- Подхватит пропущенные изменения
|
||||
- Можно запустить вручную
|
||||
|
||||
**3. Мониторинг:**
|
||||
```bash
|
||||
# Еженедельная проверка
|
||||
git ls-remote origin | head -1
|
||||
git ls-remote github | head -1
|
||||
# SHA должны совпадать
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Быстрая установка
|
||||
|
||||
```bash
|
||||
# На сервере Gitea
|
||||
sudo su - git
|
||||
cd /path/to/gitea-repositories/username/configure_nginx_manager.git/hooks/
|
||||
|
||||
# Скачайте hook
|
||||
wget https://raw.githubusercontent.com/username/configure_nginx_manager/main/gitea-hooks/post-receive
|
||||
|
||||
# Настройте
|
||||
nano post-receive
|
||||
# Измените GITHUB_REPO
|
||||
|
||||
# Права
|
||||
chmod +x post-receive
|
||||
|
||||
# Тест
|
||||
echo "test" | ./post-receive
|
||||
```
|
||||
|
||||
Готово! 🎉
|
||||
Reference in New Issue
Block a user