Создаём свой git репозитарий с веб интерфейсом
Довольно давно, я, да и наверное многие люди хранят свои конфиги на github. Оно и понятно, ибо это крайне удобно. Для хранения конфигов он подходит на ура, да и для проектов тоже, но вот бесплатный аккаунт, имеет некоторые ограничения, которые меня весьма сильно смущали. Главным из них, была невозможность бесплатно создать приватный репо. Конечно, сумма там незначительная, но платить мне ой как не хотелось, да и зачем, когда есть парочка личных серверов под рукой? Поэтому, сев писать с другом небольшой проект, решили «поднять» репо, на одном из «личных» серверов.
Я уже ни раз упоминал, и думаю будет не лишним сделать это ещё раз, что на серверах я использую Debian. Нам понадобятся: git, perl (нужен для веб интерфейса) и всё это будет под управлением lighttpd.
sudo aptitude install git-core perl perl-base perl-modules lighttpd
Далее создадим собственно репо. Создадим пользователя, и инициализируем репо:
sudo adduser git
su git
cd ~
mkdir .ssh/
Теперь необходимо добавить публичные ключи в файл /home/git/.ssh/authorized_keys
. Предположим, что публичный ключ уже находится в директории /tmp
. Просто добавим содержимое ключа, в файл authorized_keys
:
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Теперь необходимо создать директорию для проектов, и инициализировать там репозиторий:
mkdir -p /opt/git/project.git
cd /opt/git/project.git
git --bare init
В папке /opt/git/
, находятся все проекты. Чтобы создать новый проект, нужно создать в этой директории ещё одну директорию, и инициализировать репозиторий командой git --bare init
.
Кстати, всё манипуляции что были выше, необходимо производить от пользователя git. Разве что заведомо создать директорию /opt/git
с правами записи для пользователя git, и группы www-data
(веб сервер).
Фактически, репозиторий уже работает. Проверим это:
mkdir project
cd project
git init
touch README
git add README
git commit -m 'First commit'
git remote add origin git@git.yourserver.com:/opt/git/project.git
git push origin master
Можно проверить просто сделав git clone git@yourcite.ru:/opt/git/project.git
.
Теперь осталось настроить gitweb, и lighttpd для работы с ним.
cd /tmp
git clone git://git.kernel.org/pub/scm/git/git.git
cd git/
make GITWEB_PROJECTROOT="/opt/git"
prefix=/usr gitweb/gitweb.cgi
sudo cp -Rf gitweb /var/www/www.yourcite.com/html
sudo chown -Rc git:www-data /var/www/www.yourcite.com/html
Этими действиями, мы скачаем последнюю версию gitweb (с той версией что в репозитарии, у меня как-то не сложилось), соберём, и скопируем полученное в папку с сайтом. У меня это git.the-bosha.ru (можете не пытаться открыть, он за натом :) ).
Осталось добавить gitweb.cgi в index.file_names
в /etc/lighttpd/lighttpd.conf
:
## files to check for if .../ is requested
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm",
"index.lighttpd.html", "gitweb.cgi" )
Я сделал именно так, потому что не хотел чтобы случайно, непонятно как попавшие скрипты на сервер выполнялись. Теперь перезапустим сервер:
sudo /etc/init.d/lighttpd force-reload
Вот в общем всё. Удачного коммита ;)