Поиск по сайту:

Как установить HTTP Git-сервер с Nginx в Debian 11


На этой странице

  1. Предпосылки
  2. Установка Nginx и других зависимостей
  3. Создание репозитория Git
  4. Настройка Nginx для обслуживания репозитория Git
  5. Подключение к репозиторию Git из клиента
  6. Заключение

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

HTTP Git Server — это проект с открытым исходным кодом, который использует веб-сервер Nginx для обслуживания репозиториев Git через вашу локальную сеть (LAN). Это очень просто и легко настроить. Любой может управлять им из интерфейса командной строки.

В этом руководстве я объясню, как настроить сервер репозитория HTTP Git с Nginx в Debian 11.

Предпосылки

  • Сервер под управлением Debian 11.
  • Действительное доменное имя, указанное с IP-адресом вашего сервера.
  • На вашем сервере настроен пароль root.

Установите Nginx и другие зависимости

Во-первых, вам нужно будет установить веб-сервер Nginx и другие необходимые пакеты для настройки HTTP-сервера Git. Вы можете установить их все, используя следующую команду:

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

После установки всех пакетов можно переходить к следующему шагу.

Создайте репозиторий Git

Далее вам нужно будет создать каталог для хранения репозитория Git. Давайте создадим каталог с именем myrepo внутри корневого веб-каталога Nginx:

mkdir /var/www/html/myrepo

Затем измените каталог на myrepo и создайте еще один каталог для пользователей:

cd /var/www/html/myrepo
mkdir user1.git

Затем перейдите в пользовательский каталог и инициализируйте репозиторий Git с помощью следующей команды:

cd user1.git
git --bare init

Вы получите следующий вывод:

Initialized empty Git repository in /var/www/html/myrepo/user1.git/

Затем обновите информацию о сервере Git с помощью следующей команды:

git update-server-info

Затем измените владельца myrepo и установите соответствующие разрешения с помощью следующей команды:

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

Затем создайте пользователя с именем user1 и установите пароль:

htpasswd -c /var/www/html/myrepo/htpasswd user1

Вы можете установить пароль, как показано ниже:

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

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

cat /var/www/html/myrepo/htpasswd

Пример вывода:

user1:$apr1$LoyCEkzA$Fjq5nBbLhBRdaxCQBBUQd1

Настройте Nginx для обслуживания репозитория Git

Затем вам нужно будет создать файл конфигурации виртуального хоста Nginx для обслуживания репозитория Git.

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

Добавьте следующие строки:

server {
        listen 80;

        root /var/www/html/myrepo;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name git.yourdomain.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/myrepo/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/myrepo;
    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

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

systemctl status nginx

Вы получите следующий вывод:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-12-11 08:00:04 UTC; 2s ago
       Docs: man:nginx(8)
    Process: 144985 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 144986 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 144987 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 2.5M
        CPU: 42ms
     CGroup: /system.slice/nginx.service
             ??144987 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??144988 nginx: worker process

Dec 11 08:00:04 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server...
Dec 11 08:00:04 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Dec 11 08:00:04 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.

Подключиться к репозиторию Git из клиента

На данный момент HTTP-сервер Git настроен с помощью Nginx. Теперь пришло время подключить его с клиентской машины и протестировать.

Сначала установите пакет Git на клиентский компьютер с помощью следующей команды:

apt-get install git -y

Затем создайте каталог для вашего проекта с помощью следующей команды:

mkdir project

Затем перейдите в каталог вашего проекта и инициализируйте Git с помощью команды ниже:

cd project
git init

Затем настройте Git, используя свой адрес электронной почты и имя пользователя:

git config --global user.email ""
git config --global user.name "user1"

Затем добавьте свой HTTP-сервер Git с помощью следующей команды:

git remote add origin http:///user1.git

Затем создайте каталог с именем dev01 и добавьте в него файл:

mkdir dev01
echo "This is my first application" > dev01/file1

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

git add .

Затем зафиксируйте изменения с помощью следующей команды:

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

Вы получите следующий вывод:

[master (root-commit) 0299d83] Add files and directories
 1 file changed, 1 insertion(+)
 create mode 100644 dev01/file1

Затем загрузите свой файл и каталог на сервер HTTP Git, используя следующую команду:

git push origin master

Вам будет предложено ввести пароль для доступа к серверу Git:

Password for 'http://': 

После подключения вы получите следующий вывод:

Counting objects: 4, done.
Writing objects: 100% (4/4), 281 bytes | 281.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To http://git.yourdomain.com/user1.git
 * [new branch]      master -> master

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

git clone http:///user1.git

Вы получите следующий вывод:

Cloning into 'user1'...
Password for 'http://': 
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.

Заключение

В приведенном выше руководстве вы узнали, как настроить сервер HTTP Git с Nginx в Debian 11. Теперь вы можете реализовать эту настройку в своей локальной среде разработки, а также управлять своим проектом и отслеживать его с помощью командной строки.