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

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

• 4 min read • DevOps • Обновлено 18 Nov 2025
Установка HTTP Git‑сервера на Ubuntu 16.04
Установка HTTP Git‑сервера на Ubuntu 16.04

Кратко: шаг за шагом настраиваем HTTP-доступ к bare‑репозиториям Git через Nginx и fcgiwrap на Ubuntu 16.04. Вы узнаете, какие пакеты установить, как настроить Nginx для git-http-backend, как создать репозиторий и протестировать push/pull с клиентской машины. Важное замечание: для продакшена используйте HTTPS и не давайте 777‑разрешений на репозитории.

  • Чистая система Ubuntu 16.04, установленная на сервере.
  • Пользователь с sudo-привилегиями.
  • Статический IP 192.168.15.189 сконфигурирован на сервере.

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

1. Подготовка системы

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

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

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

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

Установим Nginx, Git, редактор nano, fcgiwrap и утилиту для управления htpasswd:

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

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

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

Примечание: в продакшене старайтесь не использовать разрешения 777 (см. секцию Безопасность).

3. Настройка Nginx для передачи Git HTTP запросов

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

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

Замените содержимое или добавьте блок сервера, аналогичный приведённому ниже. Этот конфиг перенаправляет запросы в git‑http‑backend через fastcgi (fcgiwrap).

# 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: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Создайте базу пользователей для HTTP‑аутентификации (пример: пользователь hitesh):

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

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

sudo systemctl restart nginx

Проверить статус сервиса:

sudo systemctl status nginx

Если сервис не стартует, смотрите раздел “Устранение неполадок” ниже.

4. Создание Git‑репозитория на сервере

Перейдите в каталог репозиториев и создайте 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 770 .

Примечание: chmod 770 даёт владельцу и группе полный доступ, а остальным — нет. Это предпочтительнее, чем 777.

5. Firewall (UFW)

Если на сервере используется UFW, разрешите HTTP‑трафик:

sudo ufw enable
sudo ufw allow http
sudo ufw status

Проверьте, что правила корректны и порт 80 открыт.

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

Установите git на клиенте (если ещё не установлен):

sudo apt-get install git -y

Создайте локальный тестовый проект и добавьте удалённый origin, указывая пользователя и IP сервера:

sudo 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‑пользователя (тот, что вы создали через htpasswd).

Чтобы клонировать репозиторий в будущем, можно использовать:

git clone http://[email protected]/var/www/html/git/hitesh.git

Или через сокращённый URL с учётом того, как настроен ваш сервер.

Устранение неполадок — распространённые причины проблем

  • Неправильные права доступа: проверьте владельца и группу каталога репозитория (www-data:www-data).
  • fcgiwrap не запущен или сокет имеет другие права: проверьте systemd‑юнит fcgiwrap и путь /var/run/fcgiwrap.socket.
  • Nginx валидирует конфиг: всегда запускайте sudo nginx -t после правок.
  • Ошибки аутентификации: проверьте файл htpasswd и что auth_basic_user_file указывает на него.
  • Логи: /var/log/nginx/error.log и /var/log/syslog / journalctl — первые места для поиска причины.

Важно: если push зависает при больших объёмах — проверьте client_max_body_size и сетевые ограничения.

Безопасность и рекомендации для продакшена

  • Включите HTTPS. HTTP передаёт пароли в открытом виде; используйте Let’s Encrypt и /etc/letsencrypt для сертификатов.
  • Не используйте chmod 777 для репозиториев. Применяйте 750/770 и управляйте группами.
  • Ограничьте доступ по IP, если это возможно, или используйте VPN/SSH туннель.
  • Рассмотрите использование SSH‑доступа к Git (git+ssh) для разработки, если это приемлемо в вашей инфраструктуре.
  • Регулярно создавайте бэкапы репозиториев (rsync, snapshot FS или git‑mirror).

Роль‑ориентированные чеклисты

Серверный администратор:

  • Обновить пакеты и перезагрузить сервер.
  • Установить nginx, fcgiwrap, git, apache2-utils.
  • Настроить конфиг Nginx и перезапустить сервис.
  • Настроить TLS (Let’s Encrypt).
  • Настроить безопасные разрешения и бэкапы.

Разработчик:

  • Установить git на рабочей машине.
  • Добавить remote с правильным URL и учётными данными.
  • Тестировать push/pull и сообщать об ошибках администратору.

Мини‑методология развертывания (быстрая)

  1. Подготовить чистую VM/сервер и настроить сеть.
  2. Установить необходимые пакеты и создать каталог /var/www/html/git.
  3. Настроить Nginx и fcgiwrap, проверить nginx -t.
  4. Создать htpasswd пользователя и bare‑репозиторий.
  5. Тестировать с клиентской машины, настроить мониторинг и бэкапы.

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

  • Nginx запущен и конфигурация валидна (nginx -t).
  • Можно выполнить git push и git clone с клиентской машины (аутентификация проходит).
  • Репозитории доступны в /var/www/html/git и имеют корректные права.
  • TLS включён для продакшена.

Краткое резюме

Вы настроили HTTP‑доступ к bare‑репозиториям Git через Nginx и fcgiwrap на Ubuntu 16.04, создали пользователя для HTTP‑аутентификации и протестировали push/clone с клиентской машины. Для эксплуатации в продакшене обязательно включите HTTPS, исправьте права доступа и настройте бэкапы.

FAQ

Как клонировать репозиторий с этого сервера?

Используйте git clone с URL вида http://[email protected]/var/www/html/git/hitesh.git и введите пароль для HTTP‑пользователя.

Нужно ли настраивать HTTPS?

Да. HTTP передаёт учётные записи в открытом виде. Для публичных или корпоративных серверов используйте TLS (Let’s Encrypt или коммерческие сертификаты).

Push не проходит — что проверить в первую очередь?

Проверьте права на папку репозитория, запущен ли fcgiwrap и слушает ли сокет, и нет ли ошибок в /var/log/nginx/error.log.

Однострочник‑глоссарий

  • bare‑репозиторий: репозиторий Git без рабочей копии, предназначенный для обмена (push/pull).
Поделиться: 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 быстро