Задача – создать общедоступный репозиторий, с доступом по HTTP.
Авторизация – через .htaccess
файл.
UPD: Вероятно – после такой установки не будет работать git push
с ошибкой “PROPFIND … 405“. Что бы избежать этого – NGINX надо собрать с поддержкой модулей http_dav_module и nginx-dav-ext-module. Подробнее – смотрите в посте Git: свой репозиторий под NGINX + WebDAV + uWSGI. Да и вообще схема доступа по HTTP себя не оправдала много сложностей с установкой организацией доступа – намного проще и удобнее сделать доступ по SSH. Тем не менее – публикую этот пост из старых черновиков.
Устанавливаем fcgiwrap
:
# yum install fcgi-devel autoconf automake # cd /usr/local/src/ # git clone git://github.com/gnosek/fcgiwrap.git # cd fcgiwrap-master/ # autoreconf -i # ./configure # make # make install
Проверяем наличие файла:
# file /usr/local/sbin/fcgiwrap /usr/local/sbin/fcgiwrap: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
Для управления процессами FastCGI – устанавливаем spawn-fcgi
:
# yum install spawn-fcgi # chkconfig spawn-fcgi on
Редактируем файл /etc/sysconfig/spawn-fcgi
:
FCGI_SOCKET=/var/run/fcgiwrap.socket FCGI_PROGRAM=/usr/local/sbin/fcgiwrap FCGI_USER=nginx FCGI_GROUP=nginx FCGI_EXTRA_OPTIONS="-M 0770" OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"
Запускаем:
# service spawn-fcgi start Starting spawn-fcgi: [ OK ]
Устанавливаем NGINX:
# yum install nginx
Редактируем файл /etc/nginx/nginx.conf
, и добавляем описание хоста:
server { listen 80; server_name zeus.domain.com; root /var/git; access_log /var/log/nginx/git_access; error_log /var/log/nginx/git_error; auth_basic "Password-protected Area"; auth_basic_user_file /var/gitrepo/.htpasswd; location /git/ { fastcgi_pass unix:/var/run/fcgiwrap.socket; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /var/gitrepo; fastcgi_param PATH_INFO $uri; fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend; include /etc/nginx/fastcgi_params; } }
Что бы ограничить доступ по HTTP – создаём файл авторизации:
# mkdir /var/gitrepo/ # cd /var/gitrepo/ # htpasswd -c .htpasswd user New password: Re-type new password: Adding password for user user
Проверяем конфиг:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Запускаем:
# service nginx start Stopping nginx: [ OK ] Starting nginx: [ OK ]
Создаём Git-репозиторий:
# mkdir -p /var/gitrepo/test.git # cd /var/gitrepo/test.git # git init --bare Initialized empty Git repository in /var/gitrepo/local.git/ # git update-server-info # chown -R nginx:nginx /var/gitrepo/
Проверяем работу:
$ git clone http://user:[email protected]/test.git Cloning into 'test'... warning: You appear to have cloned an empty repository. Checking connectivity... done.