Top.Mail.Ru

Gitea: установка собственного Git-сервера на VPS

14
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: базовый файрвол на Ubuntu без риска потерять доступ

Iptables — стандартный инструмент управления файрволом в Linux, который фильтрует трафик по правилам в цепочках INPUT, OUTPUT и FORWARD. Главная опасность при настройке на удалённом VPS — заблокировать собственный SSH-доступ неправильным порядком правил. Эта статья построена так, чтобы этого не…

36672

Как на самом деле работает процессор и почему архитектура решает все

Процессор редко оказывается на виду, но именно он определяет, как быстро система реагирует на команды, справляется с вычислениями и выдерживает нагрузку. За небольшой железкой размером со спичечный коробок стоит сложная вычислительная архитектура, где важны не только частота и количество ядер,…