Git поддерживает 4 сетевых протокола для передачи данных: SSH, Local, Git и HTTP (S). Многие люди находятся за брандмауэром, который в большинстве случаев разрешает доступ только к HTTP (S). До недавнего времени Git HTTP (S) работал только для операций чтения (только клонирование, выборка, извлечение , …). Почти 2 года назад появился Smart HTTP Transport . Используя эти умные сценарии cgi, которые теперь являются частью стабильного Git, мы можем легко настроить сервер Git, который поддерживает чтение / запись через HTTP (S).
Шаги настройки
1) Установите все необходимые пакеты в Debian:
1
2
|
$> su - $> apt-get install git apache2 apache2-utils openssl |
2) Поскольку нам нужно много репозиториев Git, мы создаем базовый каталог, в который будут включены все репозитории.
1
|
$> mkdir -p /opt/allgit/repos |
3) Создайте пустой Git-репозиторий, где разработчики могут извлекать и загружать код.
1
2
3
4
|
$> cd /opt/allgit/repos $> mkdir repo1.git $> cd repo1.git $> git init --bare |
4) Мы будем использовать HTTP-сервер Apache 2 для поддержки HTTP (S) для Git. В Debian, когда вы устанавливаете пакет apache2 , пользователь создает www-данные и является пользователем Apache. Поскольку нам нужен Apache для выполнения действий Git, то у пользователя www-data должны быть права на чтение и запись для каждого репозитория Git.
1
|
$> chown -R www-data:www-data repo1.git/ |
5) Пользователь www-data используется только Apache, а не разработчиками, поэтому нам нужно определить наших пользователей Git где-нибудь еще. Мы можем использовать HTTP-аутентификацию, предоставляемую Apache. Мы можем использовать htpasswd , который является инструментом Apache, который создает зашифрованный пароль из простого текстового пароля для пользователя. Эти пользователи не имеют отношения к пользователям ОС Unix. Таким образом, используя эту стратегию, мы можем определить столько пользователей Git, сколько нам нужно, без создания пользователей Unix. Создайте специальный каталог и файл с ограниченными правами для пользователя www-data, чтобы сохранить пользователей git и пароли.
1
2
3
4
|
$> mkdir /etc/gitdata $> cd /etc/gitdata $> htpasswd -c gitusers. passwd gituser1 $> htpasswd gitusers. passwd gituser2 |
6) Я решил использовать безопасный HTTP для связи с Git. Итак, я создал самозаверяющий сертификат SSL с использованием openssl . В этом же каталоге создайте сертификат и пару секретных ключей. Заполните все поля, которые вам нравятся, что требует следующая команда.
1
|
$> openssl req -x509 -nodes -days 999 -newkey rsa:2048 -keyout mygit_ssl.key -out mygit_ssl.crt |
7) Кроме того, нам нужно включить несколько модулей на Apache, поэтому убедитесь, что включены mod_ssl , mod_cgi , mod_alias и mod_env . Это легко сделать в Debian с помощью команды a2enmod , где он создает символические ссылки в следующем каталоге.
1
2
|
$> a2enmod <apache_module> $> ls /etc/apache2/mods-enabled/ |
8) Теперь вам нужно только настроить сайт Apache, и вы готовы. Предположим, у вас уже есть доменное имя ( например, mygitdomain.com ), чтобы использовать его для вашего сервера. Быстрый способ настройки вашего сайта Apache (и немедленного тестирования) — скопировать существующую конфигурацию Apache и внести необходимые изменения в конфигурацию.
1
2
|
$> cd /etc/apache2/sites-available $> cp default-ssl mygitdomain.com |
9) Добавьте (или измените ) существующую конфигурацию файла mygitdomain.com , который вы только что создали, на основе следующей конфигурации.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
ServerName mygitdomain.com ServerAdmin webmaster@localhost ErrorLog /var/log/apache2/git_apache_error .log SetEnv GIT_PROJECT_ROOT /opt/allgit SetEnv GIT_HTTP_EXPORT_ALL SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER ScriptAlias /allgit/ /usr/lib/git-core/git-http-backend/ <Directory "/usr/lib/git-core/" > AllowOverride None Options +ExecCGI -Includes Order allow,deny Allow from all <LocationMatch "^/allgit/repos/.*$" > AuthType Basic AuthName "My Git Repositories" AuthUserFile /etc/gitdata/gitusers . passwd Require valid-user SSLEngine on SSLCertificateFile /etc/gitdata/mygit_ssl .crt SSLCertificateKeyFile /etc/gitdata/mygit_ssl .key |
Протестируйте свой Git-сервер
1) Конфигурация завершена. Включите этот сайт на вашем сервере Apache, а затем перезапустите Apache.
1
2
|
$> a2ensite mygitdomain.com $> /etc/init .d /apache2 restart |
2) Попробуйте клонировать ваш пустой репозиторий git.
1
|
$> git clone <a href= "https://mygitdomain.com/allgit/repos/repo1.git" >https: //mygitdomain .com /allgit/repos/repo1 .git< /a > repo1 |
Ошибка проверки сертификата
1
2
|
error: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates .crt CRLfile: none while accessing https: //mygitdomain .com /allgit/repos/repo1 .git /info/refs fatal: HTTP request failed |
У вас есть 3 варианта, чтобы решить эту проблему:
1. Установите эту переменную в текущей оболочке (будет включено для всех следующих команд).
$> export GIT_SSL_NO_VERIFY = false
2. Установите перед каждой командой git ту же переменную, что и раньше.
$> env GIT_SSL_NO_VERIFY = true
3. Чтобы рассматривать ваш сертификат как доверенный, даже если он является самозаверяющим сертификатом, вы можете получить сертификат сервера и установить его в один из следующих каталогов:
/ И т.д. / SSL / сертификаты /
/ USR / доли / CA-сертификаты /
Заметки
Это просто быстрая конфигурация, которую я сделал 3 месяца назад, чтобы оценить Git. Есть много моментов, которые вы можете улучшить (усиление безопасности), чтобы улучшить конфигурацию.
Все настройки выполняются пользователем root .
Справка: Настройка сервера Git с HTTPS для чтения / записи в Debian от нашего партнера по JCG