Установка HTTP‑Git‑сервера на Ubuntu 16.04 с Nginx
Кратко: шаг за шагом настраиваем 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 и сообщать об ошибках администратору.
Мини‑методология развертывания (быстрая)
- Подготовить чистую VM/сервер и настроить сеть.
- Установить необходимые пакеты и создать каталог /var/www/html/git.
- Настроить Nginx и fcgiwrap, проверить nginx -t.
- Создать htpasswd пользователя и bare‑репозиторий.
- Тестировать с клиентской машины, настроить мониторинг и бэкапы.
Критерии приёмки
- 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).
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента