https://github.com/qwental/gitea-high-availability-stand
GitOps Gitea High-Availability Stand
https://github.com/qwental/gitea-high-availability-stand
alertmanager ansible docker gitea grafana haproxy high-availability keepalived loki postgresql prometheus
Last synced: 5 days ago
JSON representation
GitOps Gitea High-Availability Stand
- Host: GitHub
- URL: https://github.com/qwental/gitea-high-availability-stand
- Owner: Qwental
- License: other
- Created: 2026-04-21T14:33:04.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-06-06T10:30:53.000Z (7 days ago)
- Last Synced: 2026-06-06T12:14:40.113Z (6 days ago)
- Topics: alertmanager, ansible, docker, gitea, grafana, haproxy, high-availability, keepalived, loki, postgresql, prometheus
- Language: Jinja
- Homepage:
- Size: 17.1 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# GitOps Gitea High-Availability Stand
Репозиторий для автоматического развертывания отказоустойчивого Gitea.
**[Демонстрация отказоустойчивости и Observability]()**
[Пример условия тестового задания]()
## 1. Архитектура системы

Система представляет собой многоуровневый кластер:
* **Proxy Layer:** HAProxy + Keepalived для балансировки HTTP/SSH
* **App Layer:** Несколько нод Gitea.
* **Database Layer:** PostgreSQL (Master-Replica) + repmgr + Keepalived.
* **Storage Layer:** NFS Ganesha + Keepalived для общих репозиториев.
* **Слой мониторинга:** Prometheus, Loki, Grafana, Alertmanager.
* **Слой бэкапов:** Restic Server + Agents.
## 2 Как запустить?
## 2.1 Подготовка инфраструктуры
настройте `.env` по примеру `.env.example`
```bash
cd infrastructure/docker
docker-compose up -d
```
## 2.2 Настройка переменных Ansible
Переменные окружения все находятся в `infrastructure/ansible/group_vars/`.
есть `vault.yml.example` в котором описано какие секреты должны быть помещены в `infrastructure/ansible/group_vars/vault.yml` , можно просто скопировать и вставить если не важны алерты на почту
### 2.3 Шифрование секретов(опционально)
Для работы необходимо создать файл с паролем для Vault (например, `.vault_pass`) и зашифровать конфиденциальные данные:
```bash
# Отредактируйте файлы и сохраните
ansible-vault encrypt infrastructure/ansible/group_vars/all/vault.yml
ansible-vault encrypt infrastructure/ansible/group_vars/backup/vault.yml
```
### 2.4 Основные переменные и настройки подключения
Настройки среды в инвентаре (`infrastructure/ansible/inventory.ini`)
В блоке `[all:vars]` задаются параметры доступа и архитектура хоста
`target_arch`: Укажите `arm64` или `amd64`
## 2.5. Развертывание через ansible
Желательно включить впнчик с иностранным сервером =)
Запуск полной цепочки установки всех ролей:
можно без впна:
```bash
ansible-playbook -i inventory.ini deploy.yml --vault-password-file .vault_pass --skip-tags monitoring
```
Обязательно с впном(зеркала яндекса почему-то не работают, поэтому только так)
```bash
ansible-playbook -i inventory.ini deploy.yml --vault-password-file .vault_pass --tags monitoring
```
```bash
cd infrastructure/ansible
ansible-playbook -i inventory.ini deploy.yml --vault-password-file .vault_pass
```
## 2.6. Проверка работоспособности
Топология доступа к web-интерфейсам зависит от хостовой ОС. Docker Desktop (macOS/Windows) не маршрутизирует внутренние IP-адреса контейнеров на хост, поэтому используется `localhost` с проброшенными портами. В Linux доступна прямая маршрутизация.
**Доступ для macOS / Windows (Port Mapping):**
* **Gitea:** `http://localhost:3000` (проксируется через `gitea-proxy-01`) или `http://localhost:3002` (через `gitea-proxy-02`).
* **Grafana:** `http://localhost:3001`.
* **Prometheus:** `http://localhost:9090`.
**Доступ для Linux (Native Bridge Routing):**
* **Gitea:** `http://172.20.0.20:3000` (обращение напрямую к VIP-адресу кластера балансировщиков).
* **Grafana:** `http://172.20.0.50:3000` (обращение напрямую к IP-адресу узла мониторинга).
* **Prometheus:** `http://172.20.0.50:9090`.
* **Статус кластера БД:**
```bash
docker exec -it db-node-01 su - postgres -c "repmgr cluster show"
```
---
**Автор:** Бугренков Владимир