Гид по технологиям

HTTP Git‑сервер с Nginx на Ubuntu 22.04

• 5 min read • DevOps • Обновлено 26 Nov 2025
HTTP Git‑сервер на Nginx (Ubuntu 22.04)
HTTP Git‑сервер на Nginx (Ubuntu 22.04)

Диаграмма: схема Git‑сервера, обслуживаемого Nginx на Ubuntu

Git — это система контроля версий с открытым исходным кодом, которая отслеживает изменения на уровне исходников. Её используют тысячи разработчиков для управления изменениями кода, отката к предыдущим версиям и создания параллельных веток файлов и директорий.

HTTP Git Server — открытый проект, который позволяет шарить Git‑репозитории по локальной сети (LAN) через HTTP/HTTPS. Это простой в развертывании вариант для небольших команд или тестовой инфраструктуры, управляемый из командной строки.

В этой инструкции показано, как настроить HTTP Git‑сервер на базе Nginx в Ubuntu 22.04 и защитить его сертификатом Let’s Encrypt.

Что вы получите из этого руководства

  • Минимальная рабочая конфигурация Nginx + fcgiwrap для обслуживания Git по HTTP/HTTPS.
  • Примеры команд на сервере и клиенте, необходимые права и проверки.
  • Простая схема аутентификации через htpasswd и автоматическая выдача SSL через Certbot.

Предварительные требования

  • Сервер с Ubuntu 22.04.
  • Домен, указывающий на IP сервера (например, git.example.com).
  • Доступ root или эквивалентные права sudo.

Важно: в примерах используются имена и пути, которые вы можете заменить под свою среду.

Установка Nginx и необходимых пакетов

Установите Nginx, Git и вспомогательные утилиты:

apt-get install nginx git fcgiwrap apache2-utils unzip -y

После установки можно переходить к созданию репозитория.

Создание Git‑репозитория

Создайте каталог внутри веб‑корня Nginx для хранения репозиториев:

mkdir /var/www/html/gitrepo

Перейдите в каталог и создайте «голый» (bare) репозиторий для пользователя:

cd /var/www/html/gitrepo
mkdir hitesh.git

Инициализируйте bare‑репозиторий:

cd hitesh.git
git --bare init

Вы увидите:

Initialized empty Git repository in /var/www/html/gitrepo/hitesh.git/

Обновите серверную информацию для поддержки HTTP доступа:

git update-server-info

Установите владельца и права доступа, чтобы Nginx/FCGI могли читать репозиторий:

chown -R www-data:www-data /var/www/html/gitrepo
chmod -R 755 /var/www/html/gitrepo

Создайте файл паролей и добавьте пользователя hitesh (утилита htpasswd из пакета apache2-utils):

htpasswd -c /var/www/html/gitrepo/htpasswd hitesh

Пример интерактивного ввода пароля:

New password:
Re-type new password:
Adding password for user hitesh

Проверить содержимое файла паролей:

cat /var/www/html/gitrepo/htpasswd

Пример вывода (хеш будет отличаться):

hitesh:$vcr2$AdyCEkaA$Fsq5nDbLhBDdafCQGBUsr2

Конфигурация Nginx для обслуживания Git репозитория

Создайте конфигурацию виртуального хоста Nginx:

nano /etc/nginx/conf.d/gitrepo.conf

Добавьте следующую конфигурацию (адаптируйте server_name под ваш домен):

server {
        listen 80;

        root /var/www/html/gitrepo;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name git.example.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

location ~ (/.*) {
    client_max_body_size 0; 
    auth_basic "Git Login"; 
    auth_basic_user_file "/var/www/html/gitrepo/htpasswd";
    include /etc/nginx/fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; 
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param GIT_PROJECT_ROOT /var/www/html/gitrepo;
    fastcgi_param REMOTE_USER $remote_user;
    fastcgi_param PATH_INFO $1; 
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;
}

}

Сохраните файл и проверьте синтаксис конфигурации Nginx:

nginx -t

Ожидаемый вывод:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите Nginx, чтобы применить изменения:

systemctl restart nginx

Проверить статус службы:

systemctl status nginx

Пример вывода статуса службы (вывод сокращён):

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-11-05 08:00:04 UTC; 2s ago
       Docs: man:nginx(8)
    Process: 144985 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 144987 (nginx)

Важно: если при старте Nginx возникают ошибки, проверьте пути к fcgiwrap.socket и права доступа к /var/www/html/gitrepo.

Защита Git HTTP сервера сертификатом Let’s Encrypt

Установите Certbot и плагин для Nginx:

apt-get install certbot python3-certbot-nginx -y

Запустите Certbot для автоматического получения и установки сертификата для вашего домена:

certbot --nginx -d git.example.com

При интерактивной настройке вам предложат ввести e‑mail и принять условия. Затем Certbot выполнит http‑01 проверку и предложит, нужно ли перенаправлять весь трафик на HTTPS. Рекомендуется выбрать перенаправление (вариант 2).

Пример фрагментов вывода Certbot (сокращено):

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for git.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/git.conf

После успешной установки вы увидите поздравление и путь к файлам сертификата:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/git.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/git.example.com/privkey.pem
   Your cert will expire on 2023-02-06. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"

Совет: проверьте конфигурацию TLS через SSL Labs или похожий сервис.

Подключение к Git‑репозиторию с клиента

На клиенте установите Git:

apt-get install git -y

Создайте каталог проекта и инициализируйте репозиторий:

mkdir project
cd project
git init

Сконфигурируйте глобально имя и e‑mail:

git config --global user.email "[email protected]"
git config --global user.name "hitesh"

Добавьте удалённый origin, указывая URL вашего сервера:

git remote add origin https://git.example.com/hitesh.git

Создайте структуру проекта и добавьте файл:

mkdir data
echo "This is my first application" > data/app

Добавьте файлы в индекс и зафиксируйте изменения:

git add .
git commit -a -m "Add files and directories"

Выгрузите (push) в удалённый репозиторий:

git push origin master

При доступе по HTTPS вас попросят ввести пароль от пользователя hitesh (htpasswd).

Пример успешного пуша:

Counting objects: 4, done.
Writing objects: 100% (4/4), 281 bytes | 281.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://git.example.com/hitesh.git
 * [new branch]      master -> master

Клонирование репозитория выглядит так:

git clone https://git.example.com/hitesh.git

Частые ошибки и как их исправить

  • Nginx возвращает 502 или 499: проверьте, что fcgiwrap запущен и сокет /var/run/fcgiwrap.socket существует и доступен для www-data.
  • Ошибка доступа к репозиторию: убедитесь, что права и владелец /var/www/html/gitrepo настроены на www-data и что htpasswd корректен.
  • Проблемы с HTTPS: проверьте, что DNS для домена верно указывает на сервер и что правило перенаправления HTTP→HTTPS не блокирует проверку Certbot.

Когда этот способ не подходит

  • Большие команды с тонким разграничением прав: лучше рассмотреть GitLab, Gitea или другой Git‑хост с управлением пользователей и пулл‑реквестами.
  • Требуется интеграция CI/CD и issue‑трекер: полноценные платформы удобнее.

Альтернативы

  • Gitea — лёгкий self‑hosted Git с веб‑интерфейсом.
  • GitLab CE — полный набор функций DevOps, но более ресурсоёмкий.
  • SSH‑доступ к Git‑репозиториям (git over ssh) — проще с точки безопасности и прав, но требует управления ключами.

Критерии приёмки

  • Репозиторий клонируется по HTTPS без ошибок.
  • Push и Pull работают, аутентификация через htpasswd успешна.
  • Сертификат TLS установлен и валиден, сайт доступен по HTTPS.
  • Права на директории настроены, Nginx не выдаёт ошибок при старте.

Мини‑методология быстрой проверки (checklist)

  • DNS указывает на сервер
  • Nginx и fcgiwrap установлены
  • Bare‑репозиторий и htpasswd созданы
  • Nginx конфигурация проверена (nginx -t)
  • Certbot выполнился и сертификат активирован
  • Клонирование и push с клиента проходят успешно

Полезные команды и сниппет‑чек‑лист

  • Проверка доступа к порту 80/443: curl -I http://git.example.com
  • Проверка сокета fcgiwrap: ss -x | grep fcgiwrap
  • Обновление server info после изменений: git update-server-info

1‑строчный глоссарий

  • bare‑репозиторий — репозиторий без рабочей копии, используемый для удалённого хранения.
  • fcgiwrap — процесс, обеспечивающий запуск CGI‑скриптов (здесь: git‑http‑backend).
  • htpasswd — утилита для управления простым файлом аутентификации HTTP.

Итог

Это простая, воспроизводимая конфигурация HTTP Git‑сервера на базе Nginx и Ubuntu 22.04. Для небольших команд и локальных сред решение даёт быстрый доступ к репозиториям с минимальными затратами. Для более масштабных потребностей рассмотрите специализированные платформы (Gitea, GitLab).

Важно: следите за обновлением сертификатов (certbot renew) и регулярно проверяйте права доступа и логи Nginx.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро