Как разместить Gitea в Homelab: полное руководство
Пошаговое руководство по установке и настройке Gitea в homelab: самохостинговый Git-сервис для контроля версий и совместной разработки.
Введение и подготовка
Gitea — это легковесный сервис для самостоятельного размещения, который включает в себя хостинг Git, систему код-ревью, инструменты коллаборации, реестр пакетов и CI/CD. Написанный на Go, Gitea отличается минимальными системными требованиями и простотой установки.
Проверка системных требований
Минимальные требования: CPU: 1 ядро, RAM: 512 МБ, Диск: 1 ГБ (без учета данных репозиториев), ОС: Linux, macOS, Windows. Рекомендуемые конфигурации: CPU: 2+ ядра, RAM: 2 ГБ, Диск: 50+ ГБ SSD, ОС: Ubuntu 20.04+ / CentOS 8+ / Debian 10+.
# Проверьте системные требования
uname -a
free -h
df -hУстановка Gitea
Выберите один из трех способов установки: через бинарные файлы, Docker или как системная служба.
# Способ 1: Через бинарные файлы
wget -O gitea https://dl.gitea.io/gitea/1.19.0/gitea-1.19.0-linux-amd64
chmod +x gitea
sudo mv gitea /usr/local/bin/
# Способ 2: Через Docker
sudo mkdir -p /var/lib/gitea
sudo chown 1000:1000 /var/lib/gitea
docker run -d --name=gitea \
-p 3000:3000 -p 222:22 \
-v /var/lib/gitea:/data \
--restart=always \
gitea/gitea:latest
# Способ 3: Как системная служба (после установки бинарного файла)
sudo nano /etc/systemd/system/gitea.service
# Добавьте содержимое из статьи
sudo systemctl daemon-reload
sudo systemctl enable gitea
sudo systemctl start giteaКонфигурация Gitea
Настройте файл конфигурации Gitea для базовых параметров, подключения к базе данных и других настроек.
# Создайте файл конфигурации
sudo mkdir -p /etc/gitea
sudo touch /etc/gitea/app.ini
sudo chown git:git /etc/gitea/app.ini
# Базовая конфигурация
sudo nano /etc/gitea/app.ini
# Добавьте содержимое:
[server]
APP_DATA_PATH = /var/lib/gitea
DOMAIN = git.example.com
HTTP_PORT = 3000
ROOT_URL = https://git.example.com/
[database]
DB_TYPE = sqlite3
HOST =
NAME = /var/lib/gitea/data/gitea.db
USER =
PASSWD =
[repository]
ROOT = /var/lib/gitea/repositories
[security]
INSTALL_LOCK = trueНастройка веб-сервера и SSL
Настройте веб-сервер (например, Nginx) для проксирования запросов к Gitea и настройте SSL-сертификат.
# Создайте конфигурационный файл Nginx
sudo nano /etc/nginx/sites-available/gitea
# Добавьте конфигурацию:
server {
listen 80;
server_name git.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ ^/.*\.git/objects/([0-9a-f]+/[0-9a-f]+)$ {
root /var/lib/gitea/repositories;
}
location ~ ^/.*\.git/(HEAD|info/refs|objects/info/alternates|objects/info/http-alternates|objects/info/packs|refs)$ {
root /var/lib/gitea/repositories;
}
}
# Активируйте конфигурацию
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# Настройте SSL
sudo apt update
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d git.example.comПервоначальная настройка и использование
Зарегистрируйте первого пользователя, создайте репозиторий и настройте базовые параметры.
# Зайдите в веб-интерфейс по адресу https://git.example.com
# Зарегистрируйте первого пользователя
# Создайте первый репозиторий через веб-интерфейс:
# 1. Перейдите в раздел "Repositories"
# 2. Нажмите "New Repository"
# 3. Укажите имя и описание
# 4. Выберите видимость (приватный/публичный)
# 5. Настройте опции (README, .gitignore, лицензия)
# 6. Нажмите "Create Repository"
# Или создайте через командную строку:
git clone https://git.example.com/username/repo.gitРасширенные функции
Используйте систему запросов на слияние (Pull Requests), систему отслеживания задач (Issues), встроенную систему CI/CD и регистрацию пакетов.
# Настройка CI/CD
# Создайте файл .gitea/workflows/main.yml:
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.19
- name: Build
run: go build -v
- name: Test
run: go test -v
# Регистрация Docker пакета
docker login git.example.com
docker tag my-image git.example.com/username/my-image:latest
docker push git.example.com/username/my-image:latestИнтеграция с другими инструментами
Настройте интеграцию с Git-клиентами, IDE и веб-крючками для автоматизации процессов.
# Интеграция с Git-клиентами
git clone https://git.example.com/username/repo.git
git remote add origin https://git.example.com/username/repo.git
# Настройка веб-крючков
# В веб-интерфейсе перейдите в репозиторий → Settings → Webhooks
# Нажмите "Add Webhook"
# Укажите URL для отправки уведомлений
# Выберите события (push, pull_request, issues)
# Настройте секретный ключ для безопасностиОбновление и резервное копирование
Регулярно обновляйте Gitea и создавайте резервные копии данных для обеспечения безопасности.
# Обновление Gitea
sudo systemctl stop gitea
wget -O /tmp/gitea https://dl.gitea.io/gitea/1.20.0/gitea-1.20.0-linux-amd64
sudo mv /tmp/gitea /usr/local/bin/gitea
sudo chmod +x /usr/local/bin/gitea
sudo systemctl start gitea
# Создание резервной копии
sudo tar -czf gitea-backup.tar.gz /var/lib/gitea /etc/gitea
# Восстановление
sudo tar -xzf gitea-backup.tar.gz -C /
sudo systemctl restart giteaНастройка безопасности
Усиление безопасности с помощью сложных паролей, двухфакторной аутентификации, настройки брандмауэра и регулярного обновления.
# Настройка требований к паролям
sudo nano /etc/gitea/app.ini
# Добавьте или измените:
[security]
PASSWORD_COMPLEXITY = true
PASSWORD_LENGTH_MIN = 12
# Настройка брандмауэра
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
# Ограничение доступа к Git-порту
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3000 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3000 -j DROP
# Регулярное обновление системы
sudo apt update && sudo apt upgrade -yКак самостоятельно разместить Gitea: Git-сервис с чашкой чая!
1. Введение
Что такое Gitea
Gitea — это легковесный сервис для самостоятельного размещения, который включает в себя хостинг Git, систему код-ревью, инструменты коллаборации, реестр пакетов и CI/CD. Написанный на Go, Gitea отличается минимальными системными требованиями и простотой установки.
Преимущества самостоятельного размещения Gitea
- Полный контроль над данными
- Отсутствие зависимости от внешних сервисов
- Возможность интеграции с корпоративными системами
- Низкие требования к ресурсам
- Открытый исходный код с активным сообществом
Сравнение с альтернативами
| Характеристика | Gitea | GitLab | GitHub | Gogs |
|---|---|---|---|---|
| Требования к ресурсам | Очень низкие | Высокие | Очень высокие | Низкие |
| Установка | Простой | Средний | Сложный | Простой |
| CI/CD | Встроенный | Встроенный | Встроенный | Нет |
| Пакетный реестр | Встроенный | Встроенный | Встроенный | Нет |
| Поддержка Docker | Да | Да | Нет | Да |
2. Требования системы
Минимальные требования
- CPU: 1 ядро
- RAM: 512 МБ
- Диск: 1 ГБ (без учета данных репозиториев)
- ОС: Linux, macOS, Windows
Рекомендуемые конфигурации
- CPU: 2+ ядра
- RAM: 2 ГБ
- Диск: 50+ ГБ SSD
- ОС: Ubuntu 20.04+ / CentOS 8+ / Debian 10+
Поддерживаемые операционные системы
- Linux (x86, ARM, PowerPC)
- macOS (x86, ARM)
- Windows
- FreeBSD
- OpenBSD
3. Установка Gitea
Способ 1: Установка через бинарные файлы
- Скачайте бинарный файл с официального сайта:
wget -O gitea https://dl.gitea.io/gitea/1.19.0/gitea-1.19.0-linux-amd64
- Сделайте файл исполняемым:
chmod +x gitea
- Переместите бинарный файл в системный путь:
sudo mv gitea /usr/local/bin/
- Создайте пользователя для Gitea:
sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --home /var/lib/gitea git
Способ 2: Установка через Docker
- Установите Docker:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
- Создайте директорию для данных:
sudo mkdir -p /var/lib/gitea
sudo chown 1000:1000 /var/lib/gitea
- Запустите контейнер:
docker run -d --name=gitea \
-p 3000:3000 -p 222:22 \
-v /var/lib/gitea:/data \
--restart=always \
gitea/gitea:latest
Способ 3: Установка как системная служба
- Создайте файл сервиса:
sudo nano /etc/systemd/system/gitea.service
- Добавьте содержимое:
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
[Service]
# Run as user git
User=git
Group=git
# Start the service
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
# Setup working directory
WorkingDirectory=/var/lib/gitea
Restart=always
# Security settings
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
NoNewPrivileges=true
# Setup environment
Environment=USER=git
Environment=HOME=/var/lib/gitea
[Install]
WantedBy=multi-user.target
- Запустите сервис:
sudo systemctl daemon-reload
sudo systemctl enable gitea
sudo systemctl start gitea
4. Конфигурация Gitea
Файл конфигурации
- Создайте файл конфигурации:
sudo mkdir -p /etc/gitea
sudo touch /etc/gitea/app.ini
sudo chown git:git /etc/gitea/app.ini
- Базовая конфигурация:
[server]
APP_DATA_PATH = /var/lib/gitea
DOMAIN = git.example.com
HTTP_PORT = 3000
ROOT_URL = https://git.example.com/
[database]
DB_TYPE = sqlite3
HOST =
NAME = /var/lib/gitea/data/gitea.db
USER =
PASSWD =
[repository]
ROOT = /var/lib/gitea/repositories
[security]
INSTALL_LOCK = true
Настройка базы данных
Для PostgreSQL:
[database]
DB_TYPE = postgres
HOST = localhost:5432
NAME = gitea
USER = gitea
PASSWD = your_password
Для MySQL:
[database]
DB_TYPE = mysql
HOST = localhost:3306
NAME = gitea
USER = gitea
PASSWD = your_password
Настройка веб-сервера (Nginx)
- Создайте конфигурационный файл Nginx:
sudo nano /etc/nginx/sites-available/gitea
- Добавьте конфигурацию:
server {
listen 80;
server_name git.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ ^/.*\.git/objects/([0-9a-f]+/[0-9a-f]+)$ {
root /var/lib/gitea/repositories;
}
location ~ ^/.*\.git/(HEAD|info/refs|objects/info/alternates|objects/info/http-alternates|objects/info/packs|refs)$ {
root /var/lib/gitea/repositories;
}
}
- Активируйте конфигурацию:
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Настройка SSL
- Установите Certbot:
sudo apt update
sudo apt install certbot python3-certbot-nginx
- Получите SSL-сертификат:
sudo certbot --nginx -d git.example.com
5. Использование Gitea
Создание первого репозитория
- Зарегистрируйтесь или войдите в систему через веб-интерфейс
- Перейдите в раздел "Repositories"
- Нажмите "New Repository"
- Укажите имя и описание
- Выберите видимость (приватный/публичный)
- Настройте опции (README, .gitignore, лицензия)
- Нажмите "Create Repository"
Настройка пользователей и организаций
-
Для создания организации:
- Перейдите в "Your Organizations"
- Нажмите "New Organization"
- Укажите имя и описание
- Настройте видимость и доступ
-
Для управления пользователями:
- Зайдите в "Administration" → "Users"
- Для добавления пользователя нажмите "New Account"
- Заполните форму и назначьте права
Настройка прав доступа
-
Для репозитория:
- Перейдите в настройки репозитория
- Выберите "Collaborators and teams"
- Добавьте пользователей или команды
- Назначьте права (Read, Write, Admin)
-
Для организации:
- Зайдите в настройки организации
- Перейдите в "Teams"
- Создайте команду и назначьте права
- Добавьте пользователей в команды
Интерфейс Gitea: обзор
- Dashboard: Главная страница с активностью
- Repositories: Список репозиториев
- Organizations: Управление организациями
- Explore: Публичные репозитории и пользователей
- Create: Создание репозиториев, организаций, проблем
- Help: Документация и поддержка
6. Расширенные функции
Система запросов на слияние (Pull Requests)
- В репозитории перейдите в "Pull Requests"
- Нажмите "New Pull Request"
- Выберите исходную и целевую ветки
- Добавьте заголовок и описание
- Укажите проверочные задания
- Нажмите "Create Pull Request"
Система отслеживания задач (Issues)
- В репозитории перейдите в "Issues"
- Нажмите "New Issue"
- Укажите заголовок и описание
- Добавьте метки, назначьте ответственного
- Создайте задачу или запрос функции
Встроенная система CI/CD
- Создайте файл
.gitea/workflows/main.yml:
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.19
- name: Build
run: go build -v
- name: Test
run: go test -v
Регистрация пакетов
- Для Docker:
docker login git.example.com
docker tag my-image git.example.com/username/my-image:latest
docker push git.example.com/username/my-image:latest
- Для npm:
npm login --registry=https://git.example.com/api/packages/username/npm/
npm publish --registry=https://git.example.com/api/packages/username/npm/
7. Интеграция с другими инструментами
Интеграция с Git-клиентами
git clone https://git.example.com/username/repo.git
git remote add origin https://git.example.com/username/repo.git
Интеграция с IDE
-
VS Code:
- Установите расширение "Git Graph"
- Настройте Git:
git config --global user.name "Your Name" - Клонируйте репозиторий через VS Code
-
IntelliJ IDEA:
- Установите плагин "Git Integration"
- Настройте учетные данные в настройках
- Импортируйте репозиторий через VCS → Get from Version Control
Веб-крючки (Webhooks)
- В настройках репозитория перейдите в "Webhooks"
- Нажмите "Add Webhook"
- Укажите URL для отправки уведомлений
- Выберите события (push, pull_request, issues)
- Настройте секретный ключ для безопасности
8. Обновление Gitea
Процесс обновления
- Сделайте резервную копию данных
- Остановите сервис:
sudo systemctl stop gitea
- Скачайте новую версию:
wget -O /tmp/gitea https://dl.gitea.io/gitea/1.20.0/gitea-1.20.0-linux-amd64
- Замените бинарный файл:
sudo mv /tmp/gitea /usr/local/bin/gitea
sudo chmod +x /usr/local/bin/gitea
- Запустите сервис:
sudo systemctl start gitea
Резервное копирование и восстановление
- Создайте резервную копию:
sudo tar -czf gitea-backup.tar.gz /var/lib/gitea /etc/gitea
- Восстановление:
sudo tar -xzf gitea-backup.tar.gz -C /
sudo systemctl restart gitea
9. Безопасность
Настройка пользователей и паролей
- Используйте сложные пароли (минимум 12 символов)
- Включите требования к сложности в конфигурации:
[security]
PASSWORD_COMPLEXITY = true
PASSWORD_LENGTH_MIN = 12
Настройка двухфакторной аутентификации
- В профилю пользователя перейдите в "Account Settings"
- Выберите "Security"
- Нажмите "Enable Two-Factor Authentication"
- Отсканируйте QR-код в приложении аутентификации
- Введите код подтверждения
Защита от атак
- Настройте брандмауэр:
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
- Ограничите доступ к Git-порту:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3000 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3000 -j DROP
- Регулярно обновляйте систему:
sudo apt update && sudo apt upgrade -y
10. Заключение
Итоги
Gitea предоставляет полнофункциональную платформу для разработки с минимальными требованиями к ресурсам. Простота установки и настройки делает ее отличным выбором для небольших и средних команд.
Полезные ресурсы
Сообщество Gitea
- Форум: discourse.gitea.io
- Чат: Matrix
#gitea:matrix.org - Telegram: t.me/gitea_ru
Эта инструкция предоставляется как есть. Всегда создавайте резервные копии перед внесением изменений в систему.