Понадобился репозиторий для хранения конфигов серверов и активного сетевого оборудования. Почитав про системы контроля версий и немного поразмыслив выбрал git.
У меня уже имелся готовый веб хостинг на nginx под FreeBSD - решил использовать его. Итак смотрим что есть в составе порта git:
морда интерфейс и собственно сам git. Видим, что в составе порта есть GITWEB, как говорит wikipedia "gitweb - написан на Perl (Kay Sievers). Большинство приведённых ниже крупных публичных git-репозиториев его и применяет."
Настраиваем по вкусу и ставим:
Теперь настройки nginx:
P.S. Памятка работы с git репозиторием:
Если вы веб-разрабочик и вам нужно довольно часто показывать текущий результат работы — очень полезно будет положить файл post-receive в папку .git/hooks какого-либо проекта с таким содержимым:
UPD: 21.06.2014
Если после настройки появляется ошибка:
Ссылки по теме:
1. Wikipedia - Git
2. HOWTO: GIT hosting = nginx + cgit + gitosis + ssh
3. Устанавливаем и настраиваем cGit на Ubuntu
4. Собственный сервер Git на базе Ubuntu или Debian/GNU Linux
5. Tip по использованию Git под Windows
6. Installing Git and Gitweb on FreeBSD
7. Simple CGI support for Nginx (fcgiwrap)
8. 4.1 Git на сервере - Протоколы
9. Configuring GitWeb - 404 - No projects found
У меня уже имелся готовый веб хостинг на nginx под FreeBSD - решил использовать его. Итак смотрим что есть в составе порта git:
FreeBSD# cd /usr/ports/devel/git/ FreeBSD# make config [*] CONTRIB Install contributed scripts [*] CURL Data transfer via cURL [*] CVS Enable CVS support [ ] ETCSHELLS Modify /etc/shells [*] GITWEB Install gitweb [ ] GUI GUI (Graphical User Interface) [ ] HTMLDOCS Install additional documentation [*] ICONV Encoding conversion via iconv [*] NLS Native Language Support [*] P4 Enable Perforce support [*] PERL Perl scripting language [ ] SVN Subversion supportМеня интересовали 2 вещи, какая-нибудь простенькая веб
Настраиваем по вкусу и ставим:
FreeBSD# make config-recursive FreeBSD# make install cleanЗатем идем в /etc/rc.conf и приводим блок с веб сервером примерно к такому виду:
#----------------------------- nginx --------------------------------------# nginx_enable="YES" # (bool) Set to "NO" by default. Set it to "YES" to enable nginx nginx_profiles="" # (str) Set to "" by default. Define your profiles here. nginxlimits_enable="NO" # (bool) Set to "NO" by default. Set it to yes to run `limits $limits_args` just before nginx starts. nginx_flags="" # (str) Set to "" by default. Extra flags passed to start command. nginxlimits_args="-e -U www" # (str) Default to "-e -U www" Arguments of pre-start limits run. php_fpm_enable="YES" # fcgiwrap_enable="YES" # fcgiwrap_user="www" # (str) run fcgiwrap as user #fcgiwrap_socket="unix:/var/run/fcgiwrap/fcgiwrap.sock" #this could also be: tcp:[ipv4_addr]:port (for ipv4) | tcp6:[ipv6_addr]:port (for ipv6) #fcgiwrap_flags="-c 4" fcgiwrap_profiles="gitweb" fcgiwrap_gitweb_socket="unix:/var/run/fcgiwrap/gitweb.socket" #--------------------------------------------------------------------------#Я специально запускаю отдельный экземпляр fcgiwrap для каждого "сайта". Если не дай бог упадет, то упадет только один сайт, а не все сразу. :)
Теперь настройки nginx:
server { #-------------------------- Options --------------------------# listen 192.168.4.27:443; server_name git.local git; open_file_cache max=100000 inactive=40s; open_file_cache_valid 60s; open_file_cache_min_uses 2; open_file_cache_errors on; #ssl # ssl on; # ssl_certificate ssl/git/git.local.crt; # ssl_certificate_key ssl/git/git.local.key; #logs access_log /var/log/nginx/git.local_https_access.log; error_log /var/log/nginx/git.local_https_error.log; #-------------------------- Configs --------------------------# # Default config include confs/main.conf; gzip off; #-------------------------- Locations ------------------------# # Main location location / { root /usr/local/www/gitweb; index gitweb.cgi; location ~ ^/(.*\.cgi)$ { include fastcgi_params; fastcgi_pass unix:/var/run/fcgiwrap/gitweb.socket; fastcgi_index gitweb.cgi; fastcgi_param SCRIPT_FILENAME /usr/local/www/gitweb/gitweb.cgi; fastcgi_param DOCUMENT_ROOT /usr/local/www/gitweb; } } }Теперь самое интересное, после установки порта devel/git в каталоге веб сервера /usr/local/www ничего не появилось, хотя опция GITWEB была отмечена, беглый анализ логов установки и поиск по винту навел на папочку:
FreeBSD# find /usr -name gitweb /usr/local/share/examples/git/gitweb FreeBSD# # ls /usr/local/share/examples/git/gitweb gitweb.cgi staticВот оно! Копируем всю найденную папку gitweb в каталог веб сервера:
FreeBSD# cp /usr/local/share/examples/git/gitweb /usr/local/wwwЗапускаем сервисы:
FreeBSD# service nginx reload Performing sanity check on nginx configuration: nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful FreeBSD# service fcgiwrap start ===> fcgiwrap profile: gitweb Starting fcgiwrap.Переходим по ссылке http://git.local - все работает, ура! :)
P.S. Памятка работы с git репозиторием:
- Создаю на сервере новую папку (например /git/www/test).
$ mkdir -p /git/www/test
- Делаю в ней инициализацию пустого репозитория git init:
$ cd /git/www/test $ git init
- На локальной машине скачиваю созданный репозиторий:
$ git clone projects@example.ru:/git/www/test/.git
Это создаст локальную копию удалённого репозитория (пока пустого). - Накидываю кучу файлов в локальную папку, которую мы создали на предыдущем шаге. Делаю, так сказать, каркас проекта. Если нужно — добавляю исключения в файл (.gitignore).
- Выполняю:
$ cd /git/www/test $ git add . $ git commit $ git push
Обязательно ввожу комментарий к своим изменениям - желательно писать всегда что-то адекватное, чтобы потом можно было понять что именно было изменено.
$ git add . - добавляет новые файлы в репозиторий от текущего каталога.
$ git commit - Фиксирует новую ревизию кода - тут-то и спросит ввести комментарий.
$ git push - Отправляет изменения на сервер. - Всё. Локальный и удалённый репозиарии обновлены и синхронизированы.
- Работаю над проектом. После каких-либо осмысленных изменений делаю вновь шаг 5. Не забывайте предварительно зайти в ту папку, с которой работали.
Если вы веб-разрабочик и вам нужно довольно часто показывать текущий результат работы — очень полезно будет положить файл post-receive в папку .git/hooks какого-либо проекта с таким содержимым:
#!/bin/sh cd .. env -i git checkout -f echo "Удалённый репозиторий успешно обновлён!"И дайте ему права на исполнение. Теперь после каждого обновления (шаг 5) будет также обновляться рабочее дерево проекта и реальные файлы всегда будут последней, актуальной версии (а этого почти все и ожидают, когда обновили удалённый репозиторий, но так по умолчанию не происходит).
UPD: 21.06.2014
Если после настройки появляется ошибка:
404 - No projects found.Возможно причина в правах на репазитории, необходимо, чтобы владельцем файлов в репазиториях был тот же пользователь, что и у fcgiwrap. Если репазитории храятся в /git-repos, то решением будет:
cd /git-repos chown -R www:www .
Ссылки по теме:
1. Wikipedia - Git
2. HOWTO: GIT hosting = nginx + cgit + gitosis + ssh
3. Устанавливаем и настраиваем cGit на Ubuntu
4. Собственный сервер Git на базе Ubuntu или Debian/GNU Linux
5. Tip по использованию Git под Windows
6. Installing Git and Gitweb on FreeBSD
7. Simple CGI support for Nginx (fcgiwrap)
8. 4.1 Git на сервере - Протоколы
9. Configuring GitWeb - 404 - No projects found
Комментариев нет:
Отправить комментарий