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

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

• 5 min read • DevOps • Обновлено 18 Nov 2025
HTTP Git‑сервер с Nginx на Ubuntu 18.04
HTTP Git‑сервер с Nginx на Ubuntu 18.04

Логотип Git и сервер Nginx на фоне командной строки

Что это и зачем

Git — распределённая система контроля версий для отслеживания изменений в коде. HTTP Git‑сервер позволяет предоставлять доступ к bare‑репозиториям через протокол HTTP(S), а Nginx используется как внешний веб‑сервер и reverse‑proxy, который перенаправляет запросы в git‑http‑backend через FastCGI.

Короткое определение: git‑http‑backend — CGI‑исполняемый файл из пакета Git, который обрабатывает HTTP(S) запросы к репозиториям.

Требования

  • Свежая установка Ubuntu 18.04 LTS.
  • Пользователь с sudo‑правами.
  • Статический IP на сервере (в примерах используется 192.168.1.100).
  • Доступ к сети из клиентской машины.

Важно: в продакшене используйте HTTPS (в инструкции приведён пример по HTTP для простоты). Для публичных репозиториев или передачи чувствительных данных обязательно настройте TLS.

1 Обновление системы

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

sudo apt-get update -y
sudo apt-get upgrade -y

Перезагрузите систему при необходимости и войдите под sudo‑пользователем.

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

Установите nginx, git, редактор и вспомогательные пакеты:

sudo apt-get install nginx git nano fcgiwrap apache2-utils -y

Создайте директорию для репозиториев и назначьте владельца веб‑пользователю:

sudo mkdir -p /var/www/html/git
sudo chown -R www-data:www-data /var/www/html/git

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

3 Конфигурация Nginx

Откройте конфигурацию по умолчанию:

sudo nano /etc/nginx/sites-available/default

Замените содержимое на следующий блок (вставьте или измените существующий server):

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;


        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 _;

        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; # Git pushes can be massive, just to make sure nginx doesn't suddenly cut the connection add this.
    auth_basic "Git Login"; # Whatever text will do.
    auth_basic_user_file "/var/www/html/git/htpasswd";
    include /etc/nginx/fastcgi_params; # Include the default fastcgi configs
    fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; # Tells fastcgi to pass the request to the git http backend executable
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param GIT_PROJECT_ROOT /var/www/html/git; # /var/www/git is the location of all of your git repositories.
    fastcgi_param REMOTE_USER $remote_user;
    fastcgi_param PATH_INFO $1; # Takes the capture group from our location directive and gives git that.
    fastcgi_pass  unix:/var/run/fcgiwrap.socket; # Pass the request to fastcgi
}

}

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

sudo nginx -t

Если ошибок нет, перезапустите nginx:

sudo systemctl restart nginx
sudo systemctl status nginx

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

Статус Nginx: успешно

Создайте пользователя для доступа к репозиториям. Для примера используем имя hitesh:

sudo htpasswd -c /var/www/html/git/htpasswd hitesh

Эта команда создаст файл /var/www/html/git/htpasswd и запросит пароль.

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

Перейдите в директорию репозиториев и создайте bare‑репозиторий:

cd /var/www/html/git
sudo mkdir hitesh.git
cd hitesh.git
sudo git --bare init
sudo git update-server-info
sudo chown -R www-data:www-data .
sudo chmod -R 755 .

Важно: для HTTP доступа к bare‑репозиторию необходимы корректные права и обновлённый server‑info.

5 Настройка брандмауэра UFW

Если вы используете UFW, включите его и разрешите HTTP и SSH трафик:

sudo ufw enable
sudo ufw allow http
sudo ufw allow ssh
sudo ufw status

SSH не обязателен для Git по HTTP, но полезен для управления сервером.

6 Тестирование с клиентской машины

Установите git на клиенте:

sudo apt-get install git -y

Создайте локальный тестовый проект и свяжите его с удалённым репозиторием по HTTP:

mkdir ~/testproject
cd ~/testproject
git init
git remote add origin http://[email protected]/hitesh.git

Добавьте файлы и сделайте первый коммит:

mkdir test1 test2 test3
echo "This is my first repository" > test1/repo1
echo "This is my second repository" > test2/repo2
echo "This is my third repository" > test3/repo3

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

Отправьте изменения на сервер:

git push origin master

При запросе вас попросят ввести HTTP‑пароль для пользователя hitesh. После успешного push файлы окажутся в /var/www/html/git/hitesh.git.

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

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

И затем:

cd hitesh
tree

Вы увидите структуру каталогов и файлов, как в примере выше.

Факто‑бокс

  • Основные порты: 80 (HTTP), 22 (SSH если включён).
  • Путь к репозиториям в примере: /var/www/html/git.
  • Утилиты: git, nginx, fcgiwrap, apache2-utils.
  • Права: www‑data как владелец каталога репозиториев.

Меры безопасности и рекомендации

  • Используйте HTTPS в рабочей среде: настройте сертификат (Let’s Encrypt) и слушайте 443.
  • Ограничьте доступ по IP, если репозиторий предназначен для внутреннего использования.
  • Регулярно обновляйте пакеты и систему.
  • Для многопользовательской разработки рассмотрите использование системы контроля доступа с учётом ролей (например, GitLab, Gitea).
  • Не храните в репозиториях секреты (пароли, ключи). Если нужно — применяйте инструменты управления секретами.

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

  • Доступ по SSH (git+ssh) — проще в настройке для приватных репозиториев и безопаснее при отсутствии HTTPS.
  • Самостоятельные хосты Git‑платформ: GitLab, Gitea, Bitbucket Server — содержат UI, CI/CD и управление пользователями.
  • Облачные сервисы: GitHub/GitLab.com — минимум инфраструктуры, но не всегда подходят для приватных сетей.

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

  • Нужен продвинутый UI, управление правами и интеграция CI/CD — лучше использовать GitLab или Gitea.
  • Высокие требования к безопасности и аудиту — предпочтительнее корпоративные решения с SSO.
  • Большие бинарные файлы — рассмотрите Git LFS или альтернативные хранилища.

Чек‑лист для администратора

  • Обновить систему и установить пакеты.
  • Создать /var/www/html/git и настроить права.
  • Настроить nginx и fcgiwrap.
  • Создать htpasswd и пользователей.
  • Создать bare‑репозиторий и проверить git update-server-info.
  • Настроить UFW/брандмауэр.
  • Настроить HTTPS и резервное копирование.

Чек‑лист для разработчика

  • Установить git на клиенте.
  • Инициализировать локальный репозиторий и добавить remote.
  • Сделать commit и push, проверить ввод пароля.
  • Клонировать репозиторий на другую машину и проверить целостность.

Устранение неполадок

  • Ошибка 403/401 при push: проверьте htpasswd, права на директорию и auth_basic_user_file в конфигурации nginx.
  • 502 Bad Gateway: проверьте, что fcgiwrap запущен и существует unix‑сокет /var/run/fcgiwrap.socket. Перезапустите fcgiwrap и nginx.
  • Push прерывается на больших файлах: убедитесь, что client_max_body_size установлен в 0 или достаточно большой размер.
  • git update-server-info не выполнен: некоторые клиенты по HTTP требуют наличия server‑info, выполните git update-server-info в каталоге bare‑репо.

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

  • Сервер отвечает на HTTP‑запросы и возвращает 200 для GET на путь к репозиторию.
  • Пользователь может выполнить git push и git clone с корректной аутентификацией.
  • Права владельца и доступа к файлам настроены на www‑data.
  • Nginx успешно перезапускается без ошибок конфигурации.

Резюме

Вы развернули простой HTTP Git‑сервер на Ubuntu 18.04 с использованием Nginx и fcgiwrap. Этот способ подходит для внутренних сетей и небольших команд, но для публичных или критичных проектов рекомендуется переключиться на HTTPS и рассмотреть готовые решения (Gitea, GitLab).

Если нужны примеры конфигурации для HTTPS, автоматического развёртывания или интеграции с CI, напишите, и я подготовлю расширенное руководство.

Поделиться: 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 быстро