Краткое руководство по быстрому развёртыванию собственного 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/ и мы должны будем увидеть список созданных проектов:
Здесь он пока один.
Кликнув на проект можно увидеть историю его коммитов