Как установить публичный Git-репозиторий на Debian
Введение
Git — распределённая система контроля версий. Короткая определение: Git хранит полную историю проекта и позволяет работать локально и через сеть.
В этой инструкции показано, как развернуть публичный Git-репозиторий на Debian с веб-интерфейсом gitweb и доступом по git-daemon (порт 9418).
Важно: инструкция ориентирована на Debian и предположительно на систему с Apache как веб-сервером.
Что потребуется
- Доступ root или sudo на сервере Debian.
- Установленный Apache (DocumentRoot в примере — /var/www).
- Пакеты из репозитория Debian: git-core и gitweb.
Установка git и gitweb
Получим пакеты из репозитория Debian с помощью aptitude:
$ sudo aptitude install git-core gitwebСоздадим каталоги для репозиториев и для веб-файлов gitweb:
$ sudo mkdir /var/www/git
$ [ -d "/var/cache/git" ] || sudo mkdir /var/cache/gitНастройка Apache для gitweb
Создайте файл конфигурации Apache, например /etc/apache2/conf.d/git, и поместите туда правила доступа и обработку CGI:
Allow from all
AllowOverride all
Order allow,deny
Options ExecCGI
SetHandler cgi-script
DirectoryIndex gitweb.cgi
SetEnv GITWEB_CONFIG /etc/gitweb.confВажно: путь к каталогу должен совпадать с тем, куда вы поместите gitweb.cgi.
Перемещение файлов gitweb
Перенесём скрипт и статические файлы в каталог веб-документов:
$ sudo mv /usr/share/gitweb/* /var/www/git
$ sudo mv /usr/lib/cgi-bin/gitweb.cgi /var/www/gitАльтернатива: можно оставить файлы в /usr/share/gitweb и настроить Alias в Apache.
Настройка /etc/gitweb.conf
Отредактируйте конфигурацию gitweb, чтобы указать расположение репозиториев и внешние ресурсы:
$projectroot = '/var/cache/git/';
$git_temp = "/tmp";
#$home_link = $my_uri || "/";
$home_text = "indextext.html";
$projects_list = $projectroot;
$stylesheet = "/git/gitweb.css";
$logo = "/git/git-logo.png";
$favicon = "/git/git-favicon.png";После изменений перезагрузите Apache:
$ sudo /etc/init.d/apache2 reloadСоздание и инициализация репозитория
Перейдите в каталог с репозиториями и создайте новый bare-репозиторий:
$ cd /var/cache/git/
$ mkdir project.git
$ cd project.git
$ git initДобавьте краткое описание и настройте имя и email для коммитов (если ещё не настроены):
$ echo "Short project's description" > .git/description
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"Примечание: чтобы сделать первый commit, создайте локальный клон, добавьте файлы и выполните push в bare-репозиторий. Команда git commit -a в пустом bare-репозитории не создаст коммиты сама по себе.
Отметить репозиторий как экспортируемый для git-daemon
Для того чтобы git-daemon раздавал репозиторий по протоколу git, создайте файл .git/git-daemon-export-ok:
$ cd /var/cache/git/project.git
$ touch .git/git-daemon-export-okЗапуск git-daemon
Git имеет лёгкий демон для шаринга репозиториев. Запустим его с базовым путём к репозиториям (без завершающего слеша):
$ git daemon --base-path=/var/cache/git --detach --syslog --export-allЭтот демон слушает порт 9418 по умолчанию. Теперь репозиторий доступен по URL типа git://server/project.git
Клонирование репозитория
С вашей рабочей машины выполните:
$ git clone git://server/project.git projectЕсли клонирование прошло успешно, у вас появится локальная папка project.
Альтернативные подходы
- Доступ по SSH: безопаснее и проще для контроля прав. Настройка: git user + bare-репозиторий + SSH-ключи.
- HTTP/HTTPS (smart HTTP): используйте git-http-backend и mod_cgi/mod_fcgi для безопасного доступа через TLS.
- Хостинги: GitLab, Gitea, GitHub Enterprise — предоставляют UI, управление правами и CI.
Безопасность и жёсткая настройка
Важно:
- Не используйте –export-all без крайней необходимости. Лучше разрешать экспорт только для конкретных репозиториев.
- Защитите веб-интерфейс Apache: доступ по HTTPS, настройка директив Allow/Deny и аутентификация при необходимости.
- Права на каталоги: владелец репозиториев должен быть системный пользователь (напр., git), права — 770/750 по необходимости.
- Фаервол: откройте порт 9418 только для доверенных сетей, если репозиторий не должен быть полностью публичным.
Роль‑ориентированный чек‑лист
Администратору:
- Установить git, gitweb.
- Настроить Apache и права доступа.
- Запустить git-daemon и проверить логи.
Разработчику:
- Проверить git clone по git:// и через веб-интерфейс.
- Сделать тестовый push и проверить видимость в gitweb.
Операциям (Ops):
- Настроить бэкапы каталога /var/cache/git.
- Автоматизировать создание новых bare-репозиториев.
Мини‑методология развертывания
- Установить пакеты. 2. Создать каталоги и права. 3. Настроить web (gitweb). 4. Инициализировать bare-репозиторий. 5. Разрешить экспорт и запустить daemon. 6. Протестировать клонирование и веб-доступ.
Критерии приёмки
- Репозиторий доступен по git://server/project.git и корректно клонируется.
- gitweb отображает список проекта и метаданные.
- Права файлов и доступность через веб соответствуют политике безопасности.
Глоссарий (одна строка)
- git: распределённая система контроля версий; gitweb: веб-интерфейс для просмотра репозиториев; git-daemon: простой демон для раздачи репозиториев по протоколу git.
Факты и числа
- Порт по умолчанию для git-daemon: 9418.
- Стандартный каталог в примере для репозиториев: /var/cache/git.
- Стандартный каталог веб-документов в примере: /var/www.
Тестовые сценарии
- Клонирование: git clone git://server/project.git должен завершиться без ошибок.
- Веб-интерфейс: открытие http://server/git/ должно показать gitweb с проектом.
- Разрешения: попытка записи от неавторизованного пользователя должна быть запрещена.
Резюме
Вы установили git и gitweb, создали bare-репозиторий, пометили его для экспорта и запустили git-daemon. Для продакшена рассмотрите доступ через SSH или HTTPS и настройку прав пользователей, бэкапы и мониторинг.
Важно: в продакшн‑среде публичный доступ требует дополнительной политики безопасности и резервного копирования.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента