Gitea: установка собственного Git-сервера на VPS
Gitea — самостоятельно размещаемый Git-сервис с веб-интерфейсом, похожим на GitHub. Работает на 150-200 МБ RAM, запускается через Docker за несколько минут и даёт полный контроль над кодом: приватные репозитории, pull requests, issues, CI/CD через Gitea Actions. Данные хранятся на вашем сервере, а не у стороннего провайдера.
Gitea vs GitHub vs GitLab
| Gitea | GitHub | GitLab (self-hosted) | |
|---|---|---|---|
| Размещение | Ваш сервер | Облако | Ваш сервер |
| RAM | ~150 МБ | — | 2+ ГБ |
| Приватные репозитории | Неограниченно | Неограниченно | Неограниченно |
| CI/CD | Gitea Actions | GitHub Actions | GitLab CI |
| Стоимость | Бесплатно | Бесплатно / платно | Бесплатно / платно |
| Контроль данных | Полный | Нет | Полный |
Главное преимущество Gitea перед GitLab — потребление ресурсов. GitLab требует минимум 2 ГБ RAM и 4 ядра CPU для нормальной работы, Gitea запускается на VPS с 1 ГБ RAM. Если нужен GitHub-подобный опыт на собственном сервере без тяжёлой инфраструктуры — Gitea.
Требования для установки Gitea
- VPS с Ubuntu 20.04 / 22.04 / 24.04
- Docker и Docker Compose
- 512 МБ RAM минимум (1 ГБ рекомендуется)
- Домен (опционально, но для SSL нужен)
Установка Docker
Если Docker ещё не установлен:
sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl enable --now docker
Установка Gitea через Docker Compose
Создайте директорию и файл конфигурации:
mkdir ~/gitea && cd ~/gitea
nano docker-compose.yml
Вставьте содержимое:
version: "3"
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
restart: always
volumes:
- ./gitea-data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "127.0.0.1:3000:3000"
- "2222:22"
Запустите:
docker compose up -d
Проверьте что контейнер поднялся:
docker ps
Критичная деталь: SSH-порт
Обратите внимание на строку "2222:22" в конфигурации. Это намеренно.
Если указать "22:22", Docker попытается занять порт 22 на хосте — но там уже работает SSH-демон сервера. Один из них не запустится. Порт 2222 — стандартное решение: Gitea слушает SSH на порту 2222 снаружи, внутри контейнера всё равно порт 22.
При клонировании репозитория по SSH нужно указывать порт явно:
git clone ssh://git@gitea.example.com:2222/username/repo.git
Чтобы не указывать порт каждый раз, добавьте в ~/.ssh/config на клиентской машине:
Host gitea.example.com
Port 2222
User git
После этого клонирование работает в стандартном виде:
git clone git@gitea.example.com:username/repo.git
Настройка Nginx
Gitea слушает порт 3000 только на 127.0.0.1 (мы так указали в compose). Для доступа через домен настройте Nginx:
sudo nano /etc/nginx/sites-available/gitea
server {
listen 80;
server_name gitea.example.com;
client_max_body_size 50m;
location / {
proxy_pass http://127.0.0.1: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;
proxy_read_timeout 300s;
}
}
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Добавьте SSL через Certbot:
sudo certbot --nginx -d gitea.example.com
Директива client_max_body_size 50m важна для больших репозиториев и файлов Git LFS — без неё Nginx будет отклонять большие push-операции с ошибкой 413. proxy_read_timeout 300s нужен чтобы Nginx не разрывал длительные git push операции.
Первоначальная настройка Gitea
Откройте браузер: https://gitea.example.com
Вы увидите мастер первоначальной настройки. Основные параметры:
- Тип базы данных: SQLite3 — достаточно для небольших команд (до 100 пользователей), не требует отдельного сервиса. MySQL или PostgreSQL — для больших организаций.
- URL сервера: укажите ваш домен
https://gitea.example.com - SSH-домен:
gitea.example.com - SSH-порт:
2222
Важно: первый зарегистрированный пользователь автоматически становится администратором. Зарегистрируйтесь сразу после завершения установки до того как это сделает кто-то другой.
Если хотите создать администратора через командную строку, минуя веб-регистрацию:
docker exec -it gitea gitea admin user create \
--username admin \
--password надёжный-пароль \
--email admin@example.com \
--admin
Gitea Actions: встроенный CI/CD
Начиная с версии 1.19, Gitea включает встроенный CI/CD — Gitea Actions. Синтаксис рабочих процессов полностью совместим с GitHub Actions, поэтому существующие workflows можно переносить без изменений.
Для работы Actions нужен раннер — отдельный процесс который выполняет задачи. Запустите его рядом с Gitea:
docker run -d \
--name gitea-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ./runner-data:/data \
--restart always \
gitea/act_runner:latest
После регистрации раннера в интерфейсе Gitea (Settings → Actions → Runners) CI/CD становится доступным для всех репозиториев.
Резервное копирование
Gitea хранит все данные в папке gitea-data которую создали при установке. Простейший бэкап:
tar -czf gitea-backup-$(date +%F).tar.gz ~/gitea/gitea-data/
Для полного дампа включая базу данных — встроенная команда:
docker exec -it gitea gitea dump -c /data/gitea/conf/app.ini
Создаст ZIP-архив с репозиториями, базой данных и конфигом внутри контейнера. Архив появится в /data/ контейнера, то есть в ~/gitea/gitea-data/.
Обновление
cd ~/gitea
docker compose pull
docker compose up -d
Docker скачает новый образ и перезапустит контейнер с сохранением всех данных в volume.
Часто задаваемые вопросы
В чём преимущество Gitea перед GitHub для личных проектов?
Полный контроль над данными — код хранится на вашем сервере, а не у стороннего провайдера. Неограниченные приватные репозитории без подписки. Возможность работать во внутренней сети без выхода в интернет. При этом веб-интерфейс и функциональность сопоставимы с GitHub.
Почему нельзя использовать порт 22 для Gitea SSH на VPS?
Порт 22 на хосте уже занят SSH-демоном сервера. Если пробросить тот же порт в Docker-контейнер Gitea, возникнет конфликт. Стандартное решение — использовать порт 2222 для Gitea SSH, настроив проброс "2222:22" в docker-compose.yml.
Какую базу данных выбрать для Gitea?
SQLite3 встроен в Gitea и не требует отдельного сервиса — подходит для команд до 100 человек и небольших нагрузок. MySQL или PostgreSQL рекомендуются для организаций с большим числом пользователей, высокими нагрузками или если нужны расширенные возможности резервного копирования базы.
Совместим ли Gitea Actions с GitHub Actions?
Да, синтаксис workflow-файлов идентичен. Большинство GitHub Actions можно запускать в Gitea без изменений. Исключение — actions которые зависят от специфической инфраструктуры GitHub (например, hosted runners с определёнными ОС).
Как перенести репозитории с GitHub на Gitea?
В интерфейсе Gitea: «Создать» → «Перенос репозитория» → «GitHub». Укажите токен GitHub API и выберите репозитории для переноса. Gitea скопирует код, issues, pull requests, wiki и releases. Для больших репозиториев процесс занимает несколько минут.
Gitea работает комфортно даже на минимальном VPS. На UFO.Hosting сервер с 1 ГБ RAM и 20 ГБ NVMe подходит для небольшой команды разработчиков — Gitea с несколькими десятками репозиториев потребует меньше половины ресурсов.
Официальная документация: docs.gitea.com
Похожее
Все статьи
Iptables: базовый файрвол на Ubuntu без риска потерять доступ
Iptables — стандартный инструмент управления файрволом в Linux, который фильтрует трафик по правилам в цепочках INPUT, OUTPUT и FORWARD. Главная опасность при настройке на удалённом VPS — заблокировать собственный SSH-доступ неправильным порядком правил. Эта статья построена так, чтобы этого не…
Как на самом деле работает процессор и почему архитектура решает все
Процессор редко оказывается на виду, но именно он определяет, как быстро система реагирует на команды, справляется с вычислениями и выдерживает нагрузку. За небольшой железкой размером со спичечный коробок стоит сложная вычислительная архитектура, где важны не только частота и количество ядер,…