- Добавлено подробное руководство по тестированию SSL-сертификатов с использованием самоподписанных сертификатов. - Добавлены инструкции по созданию тестовых сертификатов с помощью Makefile, Python и Bash-скриптов. - Добавлены сравнение методов и подробные инструкции по настройке, проверке и использованию в Nginx. - Задокументированы этапы перехода от тестовых сертификатов к рабочим. - Создано руководство по получению сертификатов Let's Encrypt с DNS-запросом для провайдера reg.ru. - Разработано подробное руководство по настройке использования глобального SSL-сертификата в Nginx Proxy Manager. - Предоставлены инструкции по созданию и обновлению wildcard-сертификатов в Nginx Proxy Manager. - Добавлены скрипты автоматизации для создания и обновления SSL-сертификатов с помощью API reg.ru. - Реализованы Git-хуки для Gitea для синхронизации изменений с GitHub после отправки. - Улучшено логирование и обработка ошибок в Git-хуках для улучшения мониторинга и устранения неполадок.
11 KiB
🔄 Синхронизация Gitea → GitHub
Автоматическая синхронизация репозитория из Gitea в GitHub после каждого push.
📋 Доступные методы
| Метод | Сложность | Скорость | Надежность | Рекомендация |
|---|---|---|---|---|
| 1. Git Hooks | ⭐⭐ | ⚡ Мгновенно | ✅ Высокая | Рекомендуется |
| 2. GitHub Actions | ⭐⭐⭐ | ⏱️ 1-5 мин | ✅ Высокая | Для сложных сценариев |
| 3. Gitea Mirror | ⭐ | ⏱️ По расписанию | ⭐⭐ Средняя | Самый простой |
| 4. Двойной Remote | ⭐ | ⚡ Мгновенно | ⭐⭐ Средняя | Локальная работа |
🚀 Метод 1: Git Hooks (Рекомендуется)
Установка
1. На сервере Gitea найдите путь к репозиторию:
# Обычно это:
/var/lib/gitea/data/gitea-repositories/username/configure_nginx_manager.git
# Или
/home/git/gitea-repositories/username/configure_nginx_manager.git
2. Создайте post-receive hook:
cd /path/to/gitea/repos/username/configure_nginx_manager.git/hooks/
nano post-receive
3. Вставьте содержимое из файла gitea-hooks/post-receive (в этом репозитории)
4. Настройте параметры:
# В файле 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. Сделайте скрипт исполняемым:
chmod +x post-receive
6. Создайте директорию для логов:
mkdir -p /var/log/gitea
chown git:git /var/log/gitea
Настройка SSH ключей (для git@github.com)
На сервере Gitea:
# Переключитесь на пользователя git
sudo su - git
# Создайте SSH ключ
ssh-keygen -t ed25519 -C "gitea-to-github-sync"
# Скопируйте публичный ключ
cat ~/.ssh/id_ed25519.pub
На GitHub:
- Settings → SSH and GPG keys
- New SSH key
- Вставьте публичный ключ
- Save
Проверка:
ssh -T git@github.com
# Должно вывести: Hi username! You've successfully authenticated...
Настройка токена (для HTTPS)
На GitHub:
- Settings → Developer settings → Personal access tokens → Tokens (classic)
- Generate new token
- Выберите scope:
repo(полный доступ к репозиториям) - Скопируйте токен
В hook файле:
GITHUB_REPO="https://ghp_YOUR_TOKEN_HERE@github.com/username/configure_nginx_manager.git"
Тестирование
# Сделайте тестовый 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
- Value:
-
Name:
GITEA_TOKEN- Value: Токен доступа Gitea
Получение токена Gitea
В Gitea:
- Settings → Applications → Generate New Token
- Token Name: "GitHub Sync"
- Select permissions:
read:repository - Generate Token
- Скопируйте токен
Запуск синхронизации
Автоматически (по расписанию):
- Каждый час проверяет изменения
Вручную:
- GitHub → Actions
- Выберите workflow "Sync from Gitea"
- Run workflow
Через webhook от Gitea:
В Gitea репозитории:
- Settings → Webhooks → Add Webhook → Gitea
- Target URL:
https://api.github.com/repos/USERNAME/configure_nginx_manager/dispatches - HTTP Method:
POST - POST Content Type:
application/json - Secret: оставьте пустым или используйте
- Trigger On:
Push events - Body:
{
"event_type": "gitea-push"
}
🪞 Метод 3: Gitea Mirror (Встроенная функция)
Настройка
В Gitea репозитории:
- Settings → Repository
- Прокрутите до "Mirror Settings"
- Нажмите "Add Push Mirror"
- Заполните:
- 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(только вручную)
- Git Remote Repository URL:
- Save
Ручная синхронизация
Settings → Repository → Mirror Settings → Sync Now
Преимущества
- ✅ Встроенная функция
- ✅ Не требует скриптов
- ✅ Управление через веб-интерфейс
Недостатки
- ⚠️ Работает по расписанию (не мгновенно)
- ⚠️ Доступно не во всех версиях Gitea
🔀 Метод 4: Двойной Remote
Для локальной работы
Настройка:
# В вашем локальном репозитории
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
Использование:
# Обычный 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
# Сравнить коммиты
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)
# На сервере Gitea
tail -f /var/log/gitea/github-sync.log
Проверка GitHub Actions (Метод 2)
- GitHub Repository → Actions
- Смотрите последние запуски
- Проверьте логи выполнения
⚙️ Рекомендованная конфигурация
Для максимальной надежности используйте комбинацию методов:
- Git Hook (основной) - мгновенная синхронизация
- GitHub Actions (резервный) - проверка каждый час на случай сбоя hook
Установка обоих методов
# 1. Установите Git Hook на сервере Gitea
# (см. Метод 1)
# 2. Настройте GitHub Actions
# (см. Метод 2)
# 3. GitHub Actions будет подхватывать пропущенные изменения
🐛 Устранение проблем
Проблема: Hook не срабатывает
Проверка:
# На сервере 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)
Решение:
# Убедитесь что 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 не запускается
Решение:
- Проверьте секреты в Settings → Secrets
- Проверьте формат webhook от Gitea
- Запустите вручную для теста
📊 Сравнение методов
Скорость синхронизации
- 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. Мониторинг:
# Еженедельная проверка
git ls-remote origin | head -1
git ls-remote github | head -1
# SHA должны совпадать
📝 Быстрая установка
# На сервере 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
Готово! 🎉