Различия

Показаны различия между двумя версиями страницы.


gitolite [2025/07/06 12:38] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Установка и настройка Gitolite ======
 +~~Title: Руководство по инсталляции и использованию Gitolite ~~
 +{{htmlmetatags>
 +metatag-description=(Gitolite позволяет настроить хостинг Git на центральном сервере с детализированным контролем доступа и множеством других мощных функций.)
 +}}
 +{{ ::gitolite_install.jpg?nolink&400 |}}
  
 +Gitolite— это средство для создания централизованных репозиториев для совместной разработки через [[Git|Git]].
 +
 +[[https://github.com/sitaramc/gitolite|Gitolite]] позволяет легко и безопасно размещать репозитории [[Git|Git]], указать права доступа не только для репозиториев, но и для веток или имён меток внутри каждого репозитория. То есть, вы можете указать, что определённые люди (или группы людей) могут отправлять (push) определённые "ссылки" (ветки или метки), а остальные нет. В Gitolite доступ осуществляется по [[ssh|ssh]].
 +
 +Термины:
 +  * Сервером называется хост, на котором установлены git и gitolite и хранятся репозитарии.
 +  * Для управления gitolite нужен админ — технически это обычный клиентский хост, но сам пользователь наделен расширенными правами(серверный и админский хосты могут быть одним и тем же сервером).
 +  * Клиент- хост аналогичен на админскому хосту, но без возможности управления gitolite.
 +
 +Четыре способа установки Gitolite:
 +  - package method - установка из пакетов
 +  - root method - вы должны быть root на сервере и нужно развернуть несколько Gitolite- серверов (не репозиториев, а именно серверов)
 +  - non-root method - установка одного Gitolite- сервера, не требует root
 +  - from-client - аналогичен предыдущему методу, единсвенное все команды выполняются удаленно с админ-клиентского хоста
 +
 +====== Введение Git и Gitolite ======
 +Gitolite работает поверх [[ssh|SSH]] с использованием аутентификации через public-key (точнее, это наиболее популярная конфигурация). На сервере заводится единственный реальный пользователь, через которого будет происходить работа с репозиториями. А «магия» gitolite заключается в том, что в authorized_keys эти ключики попадают с опцией «command=[path]/gl-auth-command ...». Эта опция предписывает ssh- серверу запускать указанную команду независимо от того, что реально хотел исполнить пользователь. При этом оригинальная команда сохраняется в переменной SSH_ORIGINAL_COMMAND, которую и считывает gitolite, чтобы узнать, что от него хотели.
 +
 +<note warning>Вы не должны устанавливать ключи на сервер вручную (через ssh-copy-id). Всё надо делать через gitolite-admin/keydir и gitolite-admin/conf/gitolite.conf. В первую папку кладёте публичный ключ, в gitolite.conf прописываете имя пользователя, совпадающее с именем ключа до .pub Дело в том, что gitolite не просто добавляет ключи в .ssh/authorized_keys, а записывает там команду, по которой потом и происходит авторизация в gitolite.
 +Выглядит это в authorized_keys так
 +<file>
 +command="/usr/local/bin/gl-auth-command username",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa дальше пошел ключ
 +</file>
 +</note>
 +===== Инсталляция Gitolite в Debian =====
 +  * Установка git- сервера и Gitolite. Существует 4 способа установки Gitolite. На сервере на котором будут располагаться репозитории:<file>
 +# aptitude install git gitolite
 +</file>
 +  * Создание серверного git- пользователя, который будет общим для всех клиентов git. Gitolite управляет несколькими репозитариями под одной учетной записью пользователя, с использованием SSH ключей для идентификации пользователей. Конечным пользователям не нужны учетные записи на сервере, они будут входить через один общий аккаунт, который не позволит им запускать произвольные команды.<file>
 +# useradd -d /home/gitserver/ -m -c 'git version control' git
 +# passwd git
 +</file>
 +  * На клиентском хосте управления gitolite можно создать нового пользователя gitadmin, либо воспользоваться уже существующим<file>
 +# /usr/sbin/useradd gitadmin
 +# passwd gitadmin
 +</file>
 +  * Настраиваем [[ssh]] авторизацию по rsa- ключам админ- хоста на сервер. Для этого создадим на админском компьютере ключи и скопируем их на сервер. Важно имя файла до .pub должно совпадать с именем пользователя, в этом случае имя user, поэтому при копировании переименовываем id_rsa.pub в user.pub<file>
 +$ ssh-keygen -t rsa -C "gitadmin777@gmail.com"
 +[user@client ~]$ scp ~/.ssh/id_rsa.pub user@server.example.org:/tmp/user.pub
 +</file>После копирования публичного ключа, авторизация пользователя git с админского хоста должна происходить без запроса пароля на сервере.
 +  * На сервере запускаем настройку. Инициализируем Gitolite своим ключом (этот пользователь будет администратором репозиториев)<file>
 +# sudo -u git -i
 +$ gl-setup /tmp/user.pub
 +</file>
 +  * Инсталляция закончена. Остается выгрузить репозиторий gitolite-admin, в котором создаются новые репозитории. Создадим для примера новый репозиторий Test777<file>
 +[user@client ~]$ git clone gitolite@server.example.org:gitolite-admin
 +$ cd gitolite-admin
 +$ nano conf/gitolite.conf
 +repo    gitolite-admin
 +        RW+       user
 +
 +repo    testing
 +        RW+       @all
 +
 +repo    test777
 +        RW+       user
 +        RW+       @all
 +$ git add .
 +$ git commit -am 'Added repo Test777'
 +$ git push origin master
 +</file>
 +===== Управление Gitolite =====
 +
 +  * **Посмотреть какие репозитории доступны на сервере и какие права есть у вас для этих репозиториев**:
 +<file>
 +$ ssh git@server.example.org info
 +hello user, this is gitolite 2.3-1 (Debian) running on git 1.7.10.4
 +the gitolite config gives you the following access:
 +       W gitolite-admin
 +    @R  @W test777
 +    @R_ @W_ testing
 +</file>
 +
 +  * В отличии от [[gitosis]] в gitolite можно предварительно не создавать репозиторий через init, достаточно добавить его в конфигурационный файл.
 +  * @all — особая, предопределенная группа. Она описывает — в зависимости от контекста — всех аутентифицированных пользователей, или все репозитории.
 +  * Базовые права доступа в gitolite.conf:
 +        * R — позволяет чтение
 +        * RW — позволяет делать push в существующий ref или создавать новый ref
 +        * RW+ — позволяет делать «push -f» или удалять ref (т.е. уничтожать информацию)
 +        * -(минус) — запрещает доступ
 +  * **Добавление нового пользователя**. Перед добавлением нового пользователя создаем (получаем от него) его публичный ключ. После получения ключа, переименовываем его, что бы имя файла было похоже на имя_пользователя.pub. Скопируем ключ в директорию keydir. Отредактируем файл conf/gitolite.conf, для добавления нового репозитория, пользователя и прав доступа. Имена пользователей должны совпадать с имена файлов их публичных ключей, без расширения. Commit и push правок на сервер репозитория gitolite-admin.

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!