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

Установка Git HTTP сервера с Nginx на Ubuntu 20.04

4 min read DevOps Обновлено 29 Oct 2025
Git HTTP с Nginx на Ubuntu 20.04 — руководство
Git HTTP с Nginx на Ubuntu 20.04 — руководство

Иллюстрация Git и серверного окружения

Основная цель

Это руководство показывает, как установить и настроить Git HTTP-сервер на Ubuntu 20.04 с использованием Nginx и fcgiwrap. В результате вы получите самоуправляемый хостинг репозиториев по HTTP(S) с базовой аутентификацией.

Важные замечания

  • HTTP по умолчанию незашифрован — используйте HTTPS (Let’s Encrypt) в продакшене.
  • Для приватного и корпоративного использования рассмотрите Gitea, GitLab или Gitolite — они предоставляют управление пользователями, веб-интерфейс и дополнительные функции.

Требования

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

Начало работы

Перед началом обновите пакеты:

apt-get update -y

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

Установка Nginx и Git

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

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

fcgiwrap обеспечивает запуск git-http-backend как FastCGI-приложения; apache2-utils содержит утилиту htpasswd для создания файла паролей.

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

Создайте каталог в корне веб-сервера и инициализируйте «bare» репозиторий:

mkdir /var/www/html/git
cd /var/www/html/git  
mkdir gituser.git
git --bare init

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

git update-server-info

Установите права и владельца:

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

Создайте пользователя для HTTP-аутентификации (htpasswd создаст файл с хешированным паролем):

htpasswd -c /var/www/html/git/htpasswd gituser

Вы будете приглашены ввести пароль:

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

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

cat /var/www/html/git/htpasswd

Ожидаемый формат подобен следующему (строка уникальна для вашего пароля и не копируется):

gituser:$apr1$iPKZDbFB$ziRRbGXzVMMHaPYOtL05m/

Настройка Nginx для Git

Создайте виртуальный хост для сервера Git:

nano /etc/nginx/conf.d/git.conf

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

server {
        listen 80;

        root /var/www/html/git;

        # 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/git/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/git;
    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

Пример корректного статуса будет содержать строку Active: active (running).

Тестирование HTTP Git сервера

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

apt-get install git -y
mkdir myapp
cd myapp  
git init

Добавьте удалённый репозиторий (замените адрес на ваш домен):

git remote add origin http://[email protected]/gituser.git

Создайте каталоги и файлы:

mkdir app1 app2  
echo "This is my first application" > app1/app1  
echo "This is my first application" > app2/app2

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

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

И отправьте на сервер:

git push origin master

При первом пуше вас попросят ввести пароль пользователя gituser (тот, что вы задали с помощью htpasswd).

Если всё прошло успешно, вы увидите вывод с информацией о подсчёте и отправке объектов, а ветка master будет создана на удалённом сервере.

Чтобы клонировать репозиторий на другую машину:

git clone http://[email protected]/gituser.git

Безопасность и корректная эксплуатация

Важно усилить защиту перед использованием в реальной сети:

  • Включите HTTPS: используйте certbot и LetsEncrypt для выдачи бесплатного сертификата и автоматического обновления.
  • Ограничьте доступ по IP, если сервер предполагается использовать только внутри LAN.
  • Храните резервные копии bare-репозиториев и периодически проверяйте целостность git fsck.
  • Используйте более сложные решения (Gitea/GitLab/Gitolite) для управления пользователями, правами и аудитом.

Пример базового перенаправления HTTP->HTTPS и добавления certbot остаётся за рамками этого шага, но рекомендуется на этапе продакшн.

Технические нюансы и отладка

  • 403 Forbidden: проверьте права на каталог и файл htpasswd, а также конфигурацию auth_basic_user_file.
  • 502 Bad Gateway: убедитесь, что fcgiwrap запущен и сокет /var/run/fcgiwrap.socket доступен; проверьте журналы systemd и /var/log/nginx/error.log.
  • Пустые push/clone: выполните git update-server-info в папке bare-репозитория и проверьте fastcgi_param GIT_PROJECT_ROOT.

Альтернативные подходы

  • SSH (git@server:path): безопаснее и часто проще для аутентификации ключами. Хорош для командных сред.
  • Gitea/GitLab: добавляют веб-интерфейс, CI, управление пользователями и внешние интеграции.
  • Gitolite: тонкая настройка прав доступа к репозиториям по SSH.

Мини-методология развёртывания (5 шагов)

  1. Подготовка сервера и домена.
  2. Установка Nginx, fcgiwrap, Git и утилит.
  3. Создание bare-репозиториев и настройка htpasswd.
  4. Конфигурация Nginx и перезапуск сервисов.
  5. Тестирование push/clone и настройка HTTPS.

Ролевая контрольная таблица

  • Администратор сервера
    • Настроить DNS, установить пакеты, настроить Nginx, управлять сертификатами.
  • Разработчик
    • Инициализация локальных репозиториев, добавление remote, push/clone, проверка прав.
  • Оператор
    • Мониторинг состояния служб, резервное копирование, контроль доступа и логов.

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

  • Репозиторий доступен по указанному домену/URL.
  • Успешный git push и git clone с использованием учётных данных.
  • Nginx функционирует без ошибок (nginx -t успешен).
  • Логи не показывают критических ошибок при обычных операциях.

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

  • Когда требуется централизованное управление пользователями, веб-интерфейс или CI — лучше Gitea/GitLab.
  • Когда необходимо минимизировать сетевые риски без HTTPS и журналирования.

Короткий глоссарий (по строкам)

  • bare-репозиторий: репозиторий без рабочей копии, подходящий для удалённого хранения.
  • fcgiwrap: демон, запускающий CGI-скрипты через FastCGI-сокет, нужен для git-http-backend.
  • htpasswd: утилита для создания файла с хешированными паролями Apache/Nginx.
  • git-http-backend: CGI-программа, обрабатывающая HTTP(S)-запросы к Git-репозиторию.

Диаграма принятия решения (Mermaid)

flowchart TD
  A[Нужен Git-сервер?] --> B{Требуется веб-интерфейс и CI?}
  B -- Да --> C[Gitea / GitLab]
  B -- Нет --> D{Доступ только внутри LAN?}
  D -- Да --> E[Простой Nginx + fcgiwrap 'это руководство']
  D -- Нет --> F{Нужна простота и безопасность?}
  F -- Да --> G[SSH + Gitolite]
  F -- Нет --> E

Итог

Поздравляем — вы развернули простой Git HTTP сервер на Ubuntu 20.04 с Nginx. Для безопасной эксплуатации в публичных сетях обязательно включите HTTPS и рассмотрите более полнофункциональные решения при росте команды.

Ключевые действия: установить пакеты, создать bare-репозиторий, настроить htpasswd, прописать конфигурацию Nginx для git-http-backend, протестировать push/clone.

В следующих шагах рекомендуем: подключить Let’s Encrypt для HTTPS, автоматизировать резервное копирование и при необходимости мигрировать к Gitea/GitLab для управления доступом и интеграций.

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

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

Herodotus — Android‑троян и защита
Кибербезопасность

Herodotus — Android‑троян и защита

Как включить новый Пуск в Windows 11
Windows

Как включить новый Пуск в Windows 11

Панель полей сводной таблицы в Excel — быстрый разбор
Excel

Панель полей сводной таблицы в Excel — быстрый разбор

Включение нового меню Пуск в Windows 11
Windows

Включение нового меню Пуск в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

Как посмотреть историю просмотров Reels в Instagram
Социальные сети

Как посмотреть историю просмотров Reels в Instagram