Как самостоятельно разместить Gitea: Полное руководство для вашего Homelab
Узнайте, как самостоятельно разместить Gitea - мощный Git-сервис для вашего homelab. Пошаговое руководство по установке, настройке и использованию самохостингового решения для контроля версий и совместной разработки.
Введение и подготовка
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