Установка git сервера и web-интерфейса к нему

Posted by

Задача: развернуть , как репозитарий для моих тестов. Модель ветвления репозитария на отдельные ветки для каждого из проектов при сохранении универсальной и стабильной версии. И приобщить доступ к репозитарию GIT через Webинтерфейс.

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

Имею систему .5 Server amd64 внутри Virtualbox на гостевой системе Ubuntu 12.04.5 Desktop amd64 на которой будет продемонстрирована установка GIT сервиса и для наглядности работы установлен Webинтерфейс.

Есть исходный сервер Ubuntu 12.04.5 Server am64

и доступ в интернет посредством которого буду доустанавливаться необходимые пакеты.

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

keiz@dv6:~$ VBoxManage snapshot userver list | grep Name:

Name: OriginalSystem (UUID: 1af0a374-b693-4a67-b2eb-afce06d9250a)

Name: Release Ubuntu 12.04.4 Server (UUID: 9e187d63-3dab-4d03-8025-ca6d7d7746d7)

Name: Nagios3 (UUID: 2603c784-e2ed-489c-a62e-0744e6231ba2)

Name: Cacti_default (UUID: b5ba1b6b-1454-4fa4-8fd5-1605d2b76e30)

Name: OriginalWlan0 (UUID: ccecb4a2-f174-46ad-bd7d-3a32fd74998b) *

Name: Cacti+snmp+localhost (UUID: b0e36d14-1602-4a62-8515-2f5009cf590e)

Откатываемся к снапшоту с именем: Release Ubuntu 12.04.5 Server

keiz@dv6:~$ VBoxManage snapshot userver restore "Release Ubuntu 12.04.4 Server"

Restoring snapshot 9e187d63-3dab-4d03-8025-ca6d7d7746d7

0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%

Запускаю виртуальную машину с хостовой системы:

keiz@dv6:~$ VBoxManage startvm userver

Waiting for VM «userver» to power on…

VM «userver» has been successfully started.

Подключаюсь к виртуальной машине с хостовой системы по SSH:

keiz@dv6:~$ ssh -l ekzorchik 192.168.1.40 -p 22

Устанавливаем утилиты git & через репозитарии:

ekzorchik@srv-mon:~$ sudo apt-get install git-core git-svn gitweb -y

Устанавливаем данные для репозитария, чтобы была видна принадлежность коммитов:

ekzorchik@srv-mon:~$ git config --global user.name "git"

ekzorchik@srv-mon:~$ git config --global user.email "git@srv-mon.polygon"

Отобразить настройки глобальной конфигурации:

ekzorchik@srv-mon:~$ git config -l

user.name=git

user.email=git@srv-mon.polygon

ekzorchik@srv-mon:~$ sudo nano /etc/apache2/apache2.conf

ServerName srv-mon

Активируем нужные модули применительно к apache:

ekzorchik@srv-mon:~$ sudo a2enmod dav

ekzorchik@srv-mon:~$ sudo a2enmod dav_fs

ekzorchik@srv-mon:~$ sudo a2enmod rewrite

ekzorchik@srv-mon:~$ sudo a2enmod env

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

ekzorchik@srv-mon:~$ sudo mkdir -p /git.srv-mon/main.git

На заметку: на созданную директорию где находятся все проекты настроим работу от пользователя git и работы с веб-сервером группы www-data

ekzorchik@srv-mon:~$ sudo adduser --system --shell /bin/bash --gecos 'git versions control' --group --disabled-password --home /home/git git

Adding system user `git’ (UID 106) …

Adding new group `git’ (GID 114) …

Adding new user `git’ (UID 106) with group `git’ …

Creating home directory `/home/git’ …

ekzorchik@srv-mon:~$ sudo chown -R git:www-data /git.srv-mon/

ekzorchik@srv-mon:~$ sudo su git -c "chmod -R a+w /home/git/."

ekzorchik@srv-mon:~$ sudo su - git

git@srv-mon:~$ cd /git.srv-mon/

git@srv-mon:/git.srv-mon$ git init

Initialized empty Git repository in /git.srv-mon/.git/

На заметку: В папке /git.srv-mon находятся все проекты. Чтобы создать новый проект в этой директории нужно создать ещё одну директорию, и инициализировать репозитарий командой git init.

git@srv-mon:/git.srv-mon$ git update-server-info

git@srv-mon:/git.srv-mon$ exit

logout

Редактируем конфигурацию Apache:

ekzorchik@srv-mon:~$ sudo nano /etc/apache2/sites-available/git.conf

<VirtualHost *:80>

ServerAdmin admin@srv-mon

ServerName srv-mon

DocumentRoot /git.srv-mon

Alias /git «/git.srv-mon/main.git»

DAVMinTimeout 1000

<Location /git>

DAV on

AuthType Basic

AuthName «Git»

AuthUserFile /git.srv-mon/passwd.git

Require valid-user

</Location>

</virtualhost>

Активируем созданный сайт:

ekzorchik@srv-mon:~$ sudo a2ensite git.conf

Enabling site git.conf.

To activate the new configuration, you need to run:

service apache2 reload

Выключаем сайт по-умолчанию:

ekzorchik@srv-mon:~$ sudo a2dissite default

Site default disabled.

To activate the new configuration, you need to run:

service apache2 reload

Проверяем созданный конфиг на предмет каких либо ошибок:

ekzorchik@srv-mon:~$ sudo apache2ctl -S

VirtualHost configuration:

wildcard NameVirtualHosts and _default_ servers:

*:80 is a NameVirtualHost

default server srv-mon (/etc/apache2/sites-enabled/git.conf:1)

port 80 namevhost srv-mon (/etc/apache2/sites-enabled/git.conf:1)

Syntax OK

Закомментируем директиву NamevirtualHosts:

ekzorchik@srv-mon:~$ sudo nano /etc/apache2/ports.conf

#NameVirtualHost *:80

Создаем файл с паролями и добавим туда первого пользователя:

ekzorchik@srv-mon:~$ sudo htpasswd -c /git.srv-mon/passwd.git ekzorchik

New password: 712mbddr@

Re-type new password: 712mbddr@

Adding password for user ekzorchik

ekzorchik@srv-mon:~$ sudo chmod 640 /git.srv-mon/passwd.git

ekzorchik@srv-mon:~$ sudo chown -R git:www-data /git.srv-mon/

ekzorchik@srv-mon:~$ sudo chown www-data /git.srv-mon/passwd.git

Теперь нужно перезапустить сервис apache:

ekzorchik@srv-mon:~$ sudo service apache2 restart

Теперь пройдем на http://<username>@<servername>/git браузером, в ответ должен будет задан вопрос об указании пароля для авторизации под указанным пользователем:

http://ekzorchik@srv-mon/git

http://ekzorchik@192.168.1.40/git

Доступ к репозитарию Git через Web интерфейс

Успешным прохождения авторизации будут служить нижеследующий вид:

Успешная авторизация к /git

 

Вот так вот.

Идем дальше…

Настраиваем веб-интерфейс gitweb, редактируем конфигурационный файл: (приводим к виду)

ekzorchik@srv-mon:~$ sudo nano /etc/gitweb.conf

$projectroot = «/git.srv-mon/main.git/»;

$project_list = $projectroot;

Настраиваем URL (http://IP{DNS}/gitweb) доступа к Web ориентированному представлению:

ekzorchik@srv-mon:~$ sudo nano /etc/apache2/conf.d/gitweb

Alias /gitweb /usr/share/gitweb

<Directory /usr/share/gitweb>

Options FollowSymLinks +ExecCGI

AddHandler cgi-script .cgi

</Directory>

Далее в браузере открываем URL: http://srv-mon/gitweb страница пример нижеследующий вид:

Web доступ к проектам git

 

Сейчас текущих проектов нет.

Чтобы обезопасить доступ к Web-ориентированному представлению, git файл привести к виду:

ekzorchik@srv-mon:~$ sudo nano /etc/apache2/conf.d/gitweb

Alias /gitweb /usr/share/gitweb

<Directory /usr/share/gitweb>

Options FollowSymLinks +ExecCGI

AddHandler cgi-script .cgi

AllowOverride None

Order allow,deny

Allow from all

AuthType Basic

AuthName «Git Access»

Require valid-user

AuthUserFile /git.srv-mon/passwd.git

</Directory>

Еще раз поправить права доступа

Сохраняем внесенные изменения и перезапускаем apache2:

ekzorchik@srv-mon:~$ sudo service apache2 restart

Сейчас я покажу как добавить проект: (это команды вводим если не делали их выше для создания проекта)

ekzorchik@srv-mon:~$ sudo su - git

git@srv-mon:~$ cd /git.srv-mon/main.git/

git@srv-mon:/git.srv-mon/main.git$ git init

Initialized empty Git repository in /git.srv-mon/main.git/ .git

git@srv-mon:/git.srv-mon/main.git$ ls -lah .git/

total 40K

drwxrwxr-x 7 git git 4.0K Jun 4 23:46 .

drwxr-xr-x 3 git www-data 4.0K Jun 4 23:46 ..

drwxrwxr-x 2 git git 4.0K Jun 4 23:46 branches

-rw-rw-r— 1 git git 92 Jun 4 23:46 config

-rw-rw-r— 1 git git 73 Jun 4 23:46 description

-rw-rw-r— 1 git git 23 Jun 4 23:46 HEAD

drwxrwxr-x 2 git git 4.0K Jun 4 23:46 hooks

drwxrwxr-x 2 git git 4.0K Jun 4 23:46 info

drwxrwxr-x 4 git git 4.0K Jun 4 23:46 objects

drwxrwxr-x 4 git git 4.0K Jun 4 23:46 refs

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

git@srv-mon:/git.srv-mon/main.git$ touch example

git@srv-mon:/git.srv-mon/main.git$ git add example

git@srv-mon:/git.srv-mon/main.git$ git commit -m "Initial commit"

Для справки: если в процесс работы с git у вас в консоли будет сообщение:

fatal: This operation must be run in a work tree

данная ошибка означает, что я пытаюсь запустить команды git не из рабочей папки репозитария. Рабочая папка — это папка, в которой находится папка .git (точка git) непосредственно с репозитарием, то нужно отыскать каталог .git

ekzorchik@srv-serv:~$ sudo find / -name .git

[sudo] password for ekzorchik:

/etc/.git

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

Вносим комментарий в проект:

git@srv-mon:/git.srv-mon/main.git$ git commit -m "Initial commit"

*** Please tell me who you are.

Run

git config —global user.email «you@example.com»

git config —global user.name «Your Name»

to set your account’s default identity.

Omit —global to set the identity only in this repository.

fatal: empty ident <git@srv-mon.(none)> not allowed

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

git@srv-mon:/git.srv-mon/main.git$ git config —list

core.repositoryformatversion=0

core.filemode=true

core.bare=false

core.logallrefupdates=true

(но лучше для отдельно взятого репозитария использовать:

git config user.name «git»

git config user.email «git@srv-mon.polygon»

git@srv-mon:/git.srv-mon/main.git$ git config --global user.name "git"

git@srv-mon:/git.srv-mon/main.git$ git config --global user.email "git@srv-mon.polygon"

После этого снова пробуем внести комментарий — и все усваивается хорошо:

git@srv-mon:/git.srv-mon/main.git$ git commit -m "Initial commit"

[master (root-commit) f2c87ac] Initial commit

0 files changed

create mode 100644 example

Допустим понадобилось в уже существующий файл внести изменения:

git@srv-mon:/git.srv-mon/main.git$ cat /etc/passwd > example

git@srv-mon:/git.srv-mon/main.git$ git add example

# сделать коммит-подтверждение

git@srv-mon:/git.srv-mon/main.git$ git commit -m «cat /etc/passwd > example»

[master e9b4e67] cat /etc/passwd > example

1 file changed, 27 insertions(+)

Отобразить изменения с файлом:

git@srv-mon:/git.srv-mon/main.git$ git status

# On branch master

nothing to commit (working directory clean)

git@srv-mon:/git.srv-mon/main.git$ git log

commit e9b4e672d00626b4ced0527ce78a486cf0f75d73

Author: git <git@srv-mon.polygon>

Date: Thu Jun 5 00:01:58 2014 +0400

cat /etc/passwd > example

commit f2c87acaa6b0e229e7647c5e15e37498e452af56

Author: git <git@srv-mon.polygon>

Date: Wed Jun 4 23:59:10 2014 +0400

Initial commit

отлично.

А давайте посмотрим что можно увидеть если обратиться к Web ориентированному представлению:

http://192.168.1.40/gitweb

Project: .git

кликаем на ссылку shortlog и также наблюдаем более так сказать наглядно, так удобнее чем посредством консоли.

Наглядное отображение работы с проектом через gitweb оснастку

Если внимательно посмотреть на выше представленный скриншот, то можно увидеть надпись «Unnamed repository; edit this file ‘description’ to name the repository» означающую, что описание данного репозитарий выводиться из файла description находящегося в папке с репозитарием, поправим его для наглядности:

git@srv-mon:/git.srv-mon/main.git$ nano .git/description

вместо

Unnamed repository; edit this file ‘description’ to name the repository.

Указываем

Это мое первое знакомство с репозитарием

Сохраняем внесенные изменения и обновляем окно браузера с открытой страницей содержащей URL web-ориентированного содержимого репозитария.

Скриншот демонстрирующи изменения приводить не буду, т. к. это излишне в данном случае — все и так работает.

Вывод: Задача данной заметки выполнена, в итоге я получил простой визуальный доступ к своим репозитариям внесенных измнений с целью простого веб ориентированного доступа онлайн. Соглашусь с самим собой, что так намного удобнее видеть все те изменения которые я проводил со своими проектами, не через консоль а наглядно. Что либо добавить еще в данную законченную заметку пока не вижу, поэтому буду прощаться с Вами читатели моего блога www.ekzorchik.ruдо встречи, с уважением автор блога – ekzorchik.

One comment

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

пятнадцать − 7 =