Запуск git сервера на CentOS Stream 8

Краткое руководство по быстрому развёртыванию собственного git сервера с веб-интерфейсом в связке git + Apache HTTP Server + gitweb на ОС CentOS Stream 8.

Перед тем, как начинать разворачивать сервер, необходимо убедиться в наличии полных имён хостов в файле /etc/hosts

# vi /etc/hosts

После строки

127.0.0.1 localhost

дописать такую:

127.0.1.1 cvm35.homenet.local cvm35

Также отключим SELinux. Открываем файл /etc/selinux/config

# vi /etc/selinux/config

и изменим значение SELINUX на

SELINUX=disabled

Теперь установим пакеты git, httpd и httpd-tools

# yum install git httpd httpd-tools

В файрволле откроем сервис http

# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --reload

Запустим службу httpd и включим её в автозагрузку

# systemctl start httpd
# systemctl enable httpd

Теперь отключим страницу по умолчанию в Apache. Для этого в директории /etc/httpd/conf.d/ переименуем файл welcome.conf в welcome.conf.bak

# cd /etc/httpd/conf.d/
# mv welcome.conf welcome.conf.bak

Затем создадим каталог /var/lib/git/, в котором будут храниться проекты

# mkdir /var/lib/git/

Далее создадим каталог /etc/httpd/gitusers/ для хранения логинов и паролей пользователей git

# mkdir /etc/httpd/gitusers/

После этого создадим файл конфигурации apache для git

# touch /etc/httpd/conf.d/git.conf

откроем его

# vi /etc/httpd/conf.d/git.conf

и внесём такие строки:

SetEnv GIT_PROJECT_ROOT /var/lib/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

<Location /git>
    Options ExecCGI
    AuthName "Login to Git"
    AuthType Basic
    AuthUserFile /etc/httpd/gitusers/.htpasswd
    Require valid-user
</Location>

Теперь создадим пользователя gituser

# htpasswd -c /etc/httpd/gitusers/.htpasswd gituser

и перезапустим apache

# systemctl restart httpd

Затем создадим репозиторий gitproject.git и инициализируем его

# mkdir /var/lib/git/gitproject.git/
# cd /var/lib/git/gitproject.git/
# git init --bare --shared

В консоли должно появиться такое сообщение:

подсказка: Using 'master' as the name for the initial branch. This default branch name
подсказка: is subject to change. To configure the initial branch name to use in all
подсказка: of your new repositories, which will suppress this warning, call:
подсказка:
подсказка:      git config --global init.defaultBranch <name>
подсказка:
подсказка: Names commonly chosen instead of 'master' are 'main', 'trunk' and
подсказка: 'development'. The just-created branch can be renamed via this command:
подсказка:
подсказка:      git branch -m <name>
Инициализирован пустой общий репозиторий Git в /var/lib/git/gitproject.git/

Далее дадим права группе apache для этого репозитория

# chgrp -R apache /var/lib/git/gitproject.git/

После этого создадим проект в директории /var/lib/git/gitproject.git/ и инициализируем его

# mkdir project/
# cd project/
# git init

В консоли должно появиться такое сообщение:

подсказка: Using 'master' as the name for the initial branch. This default branch name
подсказка: is subject to change. To configure the initial branch name to use in all
подсказка: of your new repositories, which will suppress this warning, call:
подсказка:
подсказка:      git config --global init.defaultBranch <name>
подсказка:
подсказка: Names commonly chosen instead of 'master' are 'main', 'trunk' and
подсказка: 'development'. The just-created branch can be renamed via this command:
подсказка:
подсказка:      git branch -m <name>
Инициализирован пустой репозиторий Git в /var/lib/git/gitproject.git/project/.git/

Теперь в директории /var/lib/git/gitproject.git/hooks/ скопируем (или переименуем) файл post-update.sample в post-update

# cp /var/lib/git/gitproject.git/hooks/post-update.sample /var/lib/git/gitproject.git/hooks/post-update

Затем настраиваем пользователя gituser

# git config --global user.email "gituser@homenet.local"
# git config --global user.name "gituser"

После этого создадим новую запись для нового подключения к репозиторию

# git remote add origin http://gituser@cvm35.homenet.local/git/gitproject.git

Также создадим некоторые данные, например, директорию text с файлом example.txt

# mkdir text/
# touch text/example.txt
# vi text/example.txt

запишем какой-нибудь текст в этот файл:

Welcome to Git Server

Добавим содержимое рабочего каталога в индекс

# git add .

Сохраним изменения в рабочем каталоге

# git commit -a -m "Test Commit"

В консоли должен отобразиться такой текст:

[master (корневой коммит) 168c071] Test Commit
 1 file changed, 1 insertion(+)
 create mode 100644 text/example.txt

Выгружаем содержимое локального репозитория в удалённый

# git push origin master

появится запрос пароля, который необходимо будет ввести:

Password for 'http://gituser@cvm35.homenet.local':

В консоли должны отобразиться данные о выгрузке:

Перечисление объектов: 4, готово.
Подсчет объектов: 100% (4/4), готово.
Запись объектов: 100% (4/4), 276 байтов | 276.00 КиБ/с, готово.
Всего 4 (изменений 0), повторно использовано 0 (изменений 0), повторно использовано пакетов 0
To http://cvm35.homenet.local/git/gitproject.git
 * [new branch]      master -> master

Обновляем данные

# git update-server-info

Далее переходим к клиенту.

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

# git clone http://gituser@cvm35.homenet.local/git/gitproject.git

В консоли появится сообщение:

Cloning into 'gitproject'...
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), 256 bytes | 0 bytes/s, done.

Затем перейдём в каталог gitproject/

# cd gitproject/

откроем файл text/example.txt

# nano text/example.txt

и внесём в него какой-нибудь текст:

Thank you very much!

Также в директории text создадим файл newfile.txt и откроем его

# touch text/newfile.txt
# nano text/newfile.txt

и в нём тоже напишем что-нибудь:

Good job!

Теперь добавим содержимое в индекс

# git add .

сохраним изменения

# git commit -a -m "Commit from client"

консоль покажет нам такое сообщение:

 [master ec6ea0d] Commit from client
 2 files changed, 5 insertions(+)
 create mode 100644 text/newfile.txt

и отправим на сервер в удалённый репозиторий

# git push

в консоли отобразится такое сообщение:

Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (5/5), 380 bytes | 63.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
To http://cvm35.homenet.local/git/gitproject.git
   168c071..ec6ea0d  master -> master

Это значит, что наш git-сервер настроен и готов к использованию.

После этого установим веб-интерфейс gitweb

# yum install gitweb

Откроем файл конфигурации /etc/gitweb.conf

# vi /etc/gitweb.conf

после строки

# our $projectroot = "/var/lib/git";

пропишем

$projectroot = "/var/lib/git";

Проверим наличие конфигурационного файла apache /etc/httpd/conf.d/gitweb.conf

если нет, то создаём

# touch /etc/httpd/conf.d/gitweb.conf
# vi /etc/httpd/conf.d/gitweb.conf

и внесём в него такое содержимое:

Alias /gitweb /var/www/git

<Directory /var/www/git>
  Options +ExecCGI
  AddHandler cgi-script .cgi
  DirectoryIndex gitweb.cgi
</Directory>

Перезапускаем службу httpd

# systemctl restart httpd

Если ошибок нет, то веб-интерфейс настроен.

На другой машине в сети в строке браузера вводим адрес http://cvm35.homenet.local/gitweb/ и мы должны будем увидеть список созданных проектов:

Здесь он пока один.

Кликнув на проект можно увидеть историю его коммитов

Добавить комментарий

Ваш адрес email не будет опубликован.