Как установить HTTP Git-сервер с Nginx в Debian 11
На этой странице
- Предпосылки
- Установка Nginx и других зависимостей
- Создание репозитория Git
- Настройка Nginx для обслуживания репозитория Git
- Подключение к репозиторию Git из клиента
- Заключение
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. Теперь вы можете реализовать эту настройку в своей локальной среде разработки, а также управлять своим проектом и отслеживать его с помощью командной строки.