Компьютерное

Установка http-сервера GIT с nginx на ubuntu 18.04

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

В этой статье я расскажу, как установить HTTP-сервер Git с Nginx на Ubuntu 18.04 LTS (Bionic Beaver).

Вводные данные

  • Чистый, свежий Ubuntu 18.04 server.
  • Пользователь sudo c правами root.
  • Статичный IP адрес настроенный на вашем сервере. В инструкции я укажу его как 192.168.1.100.

Перед установкой

Первое что нужно сделать — обновить систему.

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

Устанавливаем пакеты

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

После установки пакетов, создадим директорию где будут храниться репозитории git

sudo mkdir /var/www/html/git

Теперь сменим владельца этой директории, чтобы у http-сервера были права на неё

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

Настраиваем nginx

Во-первых, вам нужно настроить Nginx для передачи трафика Git в Git. Вы можете сделать это, отредактировав файл конфигурации Nginx по умолчанию (некоторые моменты прокомментированы):

# 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 / {
                # Сначала пробуем получить запрашиваемый URL как файл,
                # затем как директорию, при неудаче показываем 404.
                try_files $uri $uri/ =404;
        }

location ~ (/.*) {
    client_max_body_size 0; # Git push может быть массивным, просто чтобы убедиться, что nginx не разорвал соединение, добавьте это.
    auth_basic "Git Login"; # Текст отображаемый при запросе окна логина.
    auth_basic_user_file "/var/www/html/git/htpasswd"; #файл с паролями
    include /etc/nginx/fastcgi_params; # Подключаем конфиг fastcgi с параметрами по умолчанию
    fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; # Сообщает fastcgi передать запрос исполняемому файлу git http backend
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param GIT_PROJECT_ROOT /var/www/html/git; # /var/www/git это расположение всех ваших git репозиториев.
    fastcgi_param REMOTE_USER $remote_user;
    fastcgi_param PATH_INFO $1; # Передает перехваченую группу нашей локации в git.
    fastcgi_pass  unix:/var/run/fcgiwrap.socket; # Передает запрос в fastcgi
}

}

Сохраняем и закрываем. Проверяем конфиг на корректность

sudo nginx -t

Если всё нормально, то идём дальше. если нет — ищем где накосячили, пропустили скобку, точку с запятой, итд.

Теперь вам нужно будет создать учетную запись пользователя, которую вам нужно будет использовать для просмотра коммитов в репозитории. Вы можете создать пользователя с именем user1 с помощью утилиты htpasswd:

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

Теперь перезапускаем nginx

sudo systemctl restart nginx

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

Наконец, сконфигурировав всё правильно, создадим репозиторий git.

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

Для удобства добавления репозитория можно использовать скрипт bash

git-repo-create.sh :

#!/bin/bash
 
GIT_DIR="/var/www/html/git"
REPO_NAME=$1
 
sudo mkdir -p "${GIT_DIR}/${REPO_NAME}.git"
sudo cd "${GIT_DIR}/${REPO_NAME}.git"
 
sudo git --bare init 
sudo git update-server-info 
sudo chown -R www-data.www-data . 
sudo chmod -R 755 .

echo "Git repository '${REPO_NAME}' created in ${GIT_DIR}/${REPO_NAME}.git"

дайте права скрипту на выполнение:

sudo chmod +x git-repo-create.sh

Теперь репозиторий добавлять станет проще:

sudo git-repo-create user222

Тестируем Git на пользовательской машине

Устанавливаем Git

sudo apt-get install git -y

Создадим локальный репозиторий

sudo mkdir ~/testproject

Теперь перейдем в созданную директорию и инициализируем там удаленный репозиторий

cd ~/testproject
git init
git remote add origin http://user1@192.168.1.100/user1.git

Теперь создадим в нашем проекте что-нибудь

mkdir test1 test2 test3
echo "Это первый репозиторий" > test1/repo1
echo "Это второй репозиторий" > test2/repo2
echo "Это третий репозиторий" > test3/repo3

Теперь добавим все файлы и папки в репозиторий, и выполним коммит:

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

Примерный вывод:

[master 007fac9] Add files and directories
 3 files changed, 3 insertions(+)
 create mode 100644 repo1
 create mode 100644 repo2
 create mode 100644 repo3

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

git push origin master

Вывод показанный git будет типа такого:

Password for 'http://user1@192.168.1.100': 
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (5/5), 422 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To http://user1@192.168.1.100/user1.git
   68f1270..007fac9  master -> master

Всё. ваши файлы и директории отправленны на сервер.

Итак. процесс создания вашего репозитория завершен. Вы теперь в любой момент можете на любой машине клонировать ваш репозиторий

git clone user1@192.168.1.100:/var/www/html/git/user1.git

В ответе будет:

Cloning into 'user1'...
user1@192.168.1.100's password: 
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (3/3), done.
Receiving objects: 100% (8/8), 598 bytes | 0 bytes/s, done.
remote: Total 8 (delta 0), reused 0 (delta 0)
Checking connectivity... done.

Проверим склонированный репозиторий перейдя в директорию куда мы его склонировали:

cd user1
tree

Вы увидите подобный этому вывод:

.
|-- test1
|   `-- repo1
|-- test2
|   `-- repo2
`-- test3
    `-- repo3

3 directories, 3 files

Ну, а дальше — нет предела совершенству. Всё в ваших руках. настраивайте, дорабатывайте. Если поймете что ваше хозяйство слишком разрослось, возможно что вам тогда надо будет задуматься о переходе на более сложную систему управления git-репозиториями и пользователями. Например gitlab.

 

Mirivlad

Скромный труженик консоли и окошек.

Share
Published by
Mirivlad

Recent Posts

Реверс-инжиниринг электроники и ПО

Реверс инжиниринг электроники и программного обеспечения — увлекательная и важная дисциплина, играющая ключевую роль в…

3 месяца ago

Что лучше Apple iPhone 14 или iPhone 13: сравниваем модели

Рынок смартфонов не стоит на месте и каждый год пополняется новыми моделями. Компания Apple традиционно…

4 месяца ago

Как открыть интернет-магазин с нуля в 2024 году?

Запуск онлайн-бизнеса может показаться сложной задачей, но на самом деле этот процесс можно существенно упростить,…

6 месяцев ago

Как проверить текст на уникальность?

Если Вы хотите продвинуть свой сайт в поисковых системах, одним из самых важных аспектов является…

8 месяцев ago

ТОП лучших смартфонов Samsung 2024 года: рейтинг по цене и качеству

Корейская компания Samsung зарекомендовала себя на потребительском рынке как производитель флагманов, так и бюджетных смартфонов.…

12 месяцев ago

Как навсегда удалить профиль в Instagram?

В то время как множество пользователей регистрируются в Инстаграм, другие ищут способы как удалить аккаунт…

2 года ago