Захотелось
мне сделать сервер с репозиториями Git,
и чтобы работать с ними через HTTP/HTTPS.
Как сказал бы Бендер -
Well, I gonna go build my own Git server with blackjack and
hookers.
Пацан сказал — пацан
сделал. Даю отчет о создании HTTP(S)
Git сервера on Debian Wheezy.
Сначала надо поднять сервер Git (Gitolite)
это довольно просто
Все инструкции подробно
расписаны, вот только вместо утягивания
гитолайт с гитхаба я поставил его из
пакетов. Кому лень читать инструкции,
вот лог действий:
на клиенте от имени
valik
ssh-keygen
ssh-copy-id '-p 22 -i ~/.ssh/id_rsa valik@scmserv'
ssh -p 22 -i ~/.ssh/id_rsa valik@scmserv
cp ~/.ssh/authorized_keys /tmp/valik.pub
exit
sudo aptitude install git
на сервере от рута
useradd -d /home/git/ -m git passwd git aptitude install gitolite chmod a+r /tmp/valik.pub su -l git gl-setup -q /tmp/valik.pub
обратно на клиенте
git clone ssh://git@scmserv/gitolite-admin cd gitolite-admin/ nano conf/gitolite.conf # добавил репозиторий test_td git add . git commit -m "new repo" git commit --amend --author='valik <vasnake@gmail.com>' git push ssh git@scmserv info
В итоге на сервере
scmserv есть
репозиторий test_td с
которым уже можно работать через сеть,
по каналу ssh.
Теперь клиент для винды
Тоже ничего сложного
Если вышеупомянутый
при установке сервера ключ ssh
зацепить за сессию ssh в
PuTTY, проблем не будет.
А для этого надо сконвертировать ключ
SSH в ключ PuTTY
при помощи тулзы puttygen.exe, скормив ей файл
id_rsa
Еще я споткнулся об
формирование урла к репозиторию.
Правильный URL, на текущий момент, выглядит
так
ssh://git@scmserv/test_td
хотя и есть соблазн написать
ssh://valik@scmserv/test_td.git
но его надо побороть,
ибо имя пользователя гитолайт возьмет
из ключа, который возьмется из сессии
путти, а добавка .git тут
в принципе не нужна.
В ЧерепахнутомГите
(tortoisegit) все операции
выполняются по правой кнопе мыши.
Наигравшись, можно приступать к следующему
шагу, благодяря которому можно и не
заморачиваться с ключами для PuTTY,
ибо далее мы получим доступ к хранилищу
(можно я так буду называть repository?)
через HTTP(S).
Git repository which can be pushed into and pulled from over HTTP
Оказывается, все что
нужно, это обеспечить доступ к папке с
хранилищем через WebDAV.
По сцылкам приведены
инструкции, которыми я пользовался. Как
всегда, жизнь потребовала корректив.
Вот ниже и зафиксирована моя персональная
версия инструкции по созданию HTTP(s)
канала к Git repository.
Apache web server, SSL
Понятно, первым делом
aptitude install apache2 openssl
Потом надо озаботится
ключом и сертификатом для SSL
root@scmserv:~# mkdir /etc/ssl/localcerts root@scmserv:~# openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/localcerts/apache.pem -keyout /etc/ssl/localcerts/apache.key Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:Moscow Locality Name (eg, city) []:Moscow Organization Name (eg, company) [Internet Widgits Pty Ltd]:ALGIS LLC Organizational Unit Name (eg, section) []:IT dept Common Name (e.g. server FQDN or YOUR name) []:scmserv.algis.com Email Address []:valik@algis.com root@scmserv:~# l /etc/ssl/localcerts/apache* -rw------- 1 root root 916 Jun 5 17:22 /etc/ssl/localcerts/apache.key -rw------- 1 root root 1086 Jun 5 17:22 /etc/ssl/localcerts/apache.pem
Получили самоподписанный сертификат.
chmod 600 /etc/ssl/localcerts/apache* chown www-data /etc/ssl/localcerts/apache* a2enmod ssl
Конфиги сайта
nano /etc/apache2/sites-available/default
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
nano /etc/apache2/sites-available/default-ssl
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined SSLEngine on SSLCertificateFile /etc/ssl/localcerts/apache.pem SSLCertificateKeyFile /etc/ssl/localcerts/apache.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> |
nano /etc/apache2/ports.conf
NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule> |
a2ensite default a2ensite default-ssl service apache2 stop service apache2 start
Получили рабочий HTTP(S) сервер.
Web Git repository
Теперь я хочу видеть
по урл
http://scmserv.algis.com/test_td.git/
свое хранилище
/home/git/repositories/test_td.git
для чего я его залинковал
в подпапку вебсервера, ну и права доступа
к файлам и каталогам пришлось докручивать
root@scmserv:~# pushd /home/git/repositories/test_td.git chown -R www-data.git . chmod -R ug+rw . chmod -R a+r /home/git chmod a+x /home/git find /home/git -type d -exec chmod a+x {} \; ln -s /home/git/repositories/test_td.git /var/www/test_td.git
Теперь в браузере я могу видеть содержимое
хранилища.
DAV
Последние штрихи,
прикручивание DAV к
апачевскому конфигу
a2enmod dav* nano /etc/apache2/conf.d/git.conf
<Location /test_td.git> DAV on Allow from all Order allow,deny Require valid-user AuthType Basic AuthName "Git test_td repo" AuthUserFile /etc/apache2/git.passwd AuthGroupFile /etc/apache2/git.groups </Location> |
htpasswd -c /etc/apache2/git.passwd valik nano /etc/apache2/git.groups writers: valik git readers: guest service apache2 restart
Теперь вебсервер обслуживает хранилище
Git через протокол
DAV. В общем,
готово.
Правда,
пришлось еще кое-что подкрутить
git@scmserv:/home/git/repositories/test_td.git$ git update-server-info mv hooks/post-update.sample hooks/post-update chmod +x hooks/post-update
Думаю, из этих трех команд две последние
— лишние. Но не мешают и ладно.
На клиенте
На клиентской стороне
полезно и даже, может, необходимо
отконфигурять пару параметров.
Командой
$ git config remote.httptestrepo.url http://valik@scmserv.algis.com/test_td.git
В локальный реп гита вносится такая
настройка (в файле .git\config)
[remote "httptestrepo"] url = http://valik@scmserv.algis.com/test_td.git
После чего можно ссылаться на сетевое
хранилище вот так
$ git push httptestrepo master
Если же хочется
задействовать https, то помимо задания
секурного урл
$ git config remote.httptestrepo.url https://valik@scmserv.algis.com/test_td.git
придется еще отключить проверку
сертификатов (у нас самоподписанный,
чоужтам)
$ git config http.sslVerify false
Что дает в файле конфига такое
[http] sslVerify = false
Вот теперь можно пушить
и пуллить из сетевого репозитория Git,
по HTTP(S)
каналу.
Комментариев нет:
Отправить комментарий