Gitea — веб-платформа для работы с Git-репозиториями. Она позволяет хранить исходный код, управлять пользователями и правами доступа, создавать issues и выполнять code review.
По интерфейсу Gitea во многом напоминает GitHub и GitLab. При этом система рассчитана на самостоятельное размещение и не требует большой инфраструктуры.
Для небольшой команды это особенно удобно. Один VDS может одновременно выполнять роль Git-сервера, сервера задач и точки запуска CI/CD.
Плюсы Gitea на VDS
Содержание
Создадим пользователя git без возможности входа через обычную оболочку:
adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
Проверим созданного пользователя:
id git
В результате должна отображаться информация о пользователе и его группе.
Gitea поддерживает несколько баз данных. Для рабочей установки удобно использовать PostgreSQL, особенно если сервер планируется использовать длительное время.
Установим PostgreSQL:
apt install postgresql postgresql-contrib -y
Проверим службу:
systemctl status postgresql
Если всё в порядке, увидите:
Active: active (running)
Теперь создадим отдельную базу данных и пользователя:
sudo -u postgres psql
В консоли PostgreSQL выполните:
CREATE USER gitea WITH PASSWORD 'STRONG_PASSWORD';
CREATE DATABASE gitea OWNER gitea;
После этого выйдите:
\q
Пароль должен быть уникальным и достаточно сложным. Он используется только для подключения Gitea к PostgreSQL и не должен совпадать с паролями других сервисов.
Перед скачиванием проверьте актуальную версию Gitea на официальном сайте.
Создадим каталог для Gitea:
mkdir -p /var/lib/gitea/{custom,data,log}
mkdir -p /etc/gitea
Назначим владельца:
chown -R git:git /var/lib/gitea
chown -R git:git /etc/gitea
Теперь скачайте актуальный бинарный файл Gitea с официального источника и установите его:
https://docs.gitea.com/installation/install-from-binary/
wget -O /usr/local/bin/gitea https://dl.gitea.com/gitea/1.27.3/gitea-1.27.3-linux-amd64
chmod +x /usr/local/bin/gitea
gitea --version

Команда должна вернуть установленную версию Gitea.
Чтобы Gitea автоматически запускалась после перезагрузки VDS, создадим службу systemd:
nano /etc/systemd/system/gitea.service
Добавьте:
[Unit]
Description=Gitea
After=network.target
After=postgresql.service
[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target
Включим автозапуск сервиса, сам сервис и проверим статус:
systemctl daemon-reload
systemctl enable gitea
systemctl start gitea
systemctl status gitea
Если всё настроено правильно, служба будет иметь статус:
Active: active (running)

Если служба сразу завершается, посмотрите журнал:
journalctl -u gitea -n 50 --no-pager
По умолчанию Gitea слушает порт 3000.
Проверить это можно:
ss -tlnp | grep 3000
Временно открыть интерфейс можно по адресу:
http://194.48.141.32:3000
Но для постоянного использования такой вариант не подходит. Лучше поставить перед Gitea Nginx и работать через обычный HTTPS-домен.
Например:
https://git.example.com
Это также позволит нормально использовать Git по HTTPS и получить TLS-сертификат.
Установим Nginx:
apt install nginx -y
Создадим конфигурацию:
nano /etc/nginx/sites-available/gitea
Добавьте:
server {
listen 80;
server_name git.example.com;
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;
}
}
Замените git.example.com на свой домен.
Активируем конфигурацию:
ln -s /etc/nginx/sites-available/gitea \
/etc/nginx/sites-enabled/gitea
Проверим Nginx:
nginx -t
Если конфигурация корректна:
syntax is ok
test is successful
После этого перезагрузим Nginx:
systemctl reload nginx
Для Git-сервера HTTPS нужен практически всегда. Через него передаются учётные данные, токены и исходный код.
Установим Certbot:
apt install certbot python3-certbot-nginx -y
Получим сертификат:
certbot --nginx -d git.example.com
Certbot настроит HTTPS и предложит перенаправлять HTTP-запросы на защищённое соединение.
После этого откройте:
https://git.example.com
Должна появиться страница первоначальной настройки Gitea.
Проверить автоматическое обновление сертификата можно:
systemctl status certbot.timer
А тестовое продление:
certbot renew --dry-run
Если команда завершилась без ошибок, механизм обновления сертификата работает.
На странице установки Gitea укажите параметры базы данных PostgreSQL:
Тип базы данных: PostgreSQL
Хост: 127.0.0.1:5432
Имя пользователя: gitea
Пароль: STRONG_PASSWORD
Имя базы: gitea

Также проверьте URL сайта:
https://git.example.com/
Gitea использует базовый URL при формировании ссылок на репозитории, issues и другие объекты.
Путь к репозиториям оставьте в каталоге пользователя git. Если вы использовали структуру из предыдущих шагов, не меняйте её без необходимости.
После сохранения настроек Gitea создаст таблицы в PostgreSQL и завершит установку.
После установки создайте первую учётную запись администратора.
Используйте отдельный пароль, который нигде больше не применяется.
После входа откройте настройки администратора и проверьте состояние системы. Там можно увидеть предупреждения о конфигурации, обновлениях и безопасности.

Создадим новый репозиторий через веб-интерфейс Gitea.
Нажмите на плюс справа вверху
Например:
my-project
После создания Gitea покажет URL для подключения.

Через HTTPS он будет выглядеть примерно так:
git clone http://194.48.141.32:3000/admin/my-project.git
Введите логин и пароль пользователя
Перейдите в каталог проекта:
cd my-project
Добавьте файл:
echo "# My project" > README.md
Создайте первый коммит:
git config --global user.name "admin"
git config --global user.email "admin@example.com"
git add README.md
git commit -m "Initial commit"
Отправьте изменения:
git push origin main
После этого обновите страницу репозитория. Файл README.md должен появиться в веб-интерфейсе.

Gitea позволяет превратить обычный VDS в собственный сервер для разработки.
Он подходит чтобы хранить исходный код, работать с pull request, управлять доступом и запускать автоматические тесты и т.д.