Установка и настройка Git сервера — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
 
Строка 6: Строка 6:
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  
== 2. Установка Git ===
+
== 2. Установка Git ==
  
 
=== Установка пакета ===
 
=== Установка пакета ===
  
 
1. Обновите список пакетов:
 
1. Обновите список пакетов:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
  
 
2. Установите Git:
 
2. Установите Git:
<code>sudo apt install git</code>
+
<pre>sudo apt install git</pre>
  
 
3. Установите дополнительные компоненты:
 
3. Установите дополнительные компоненты:
<code>sudo apt install git-core gitweb git-daemon-run</code>
+
<pre>sudo apt install git-core gitweb git-daemon-run</pre>
  
 
=== Проверка установки ===
 
=== Проверка установки ===
  
 
1. Проверьте версию Git:
 
1. Проверьте версию Git:
<code>git --version</code>
+
<pre>git --version</pre>
  
 
2. Проверьте конфигурацию:
 
2. Проверьте конфигурацию:
<code>git config --list</code>
+
<pre>git config --list</pre>
  
== 3. Настройка Git сервера ===
+
== 3. Настройка Git сервера ==
  
 
=== Создание пользователя для Git ===
 
=== Создание пользователя для Git ===
  
 
1. Создайте пользователя для Git:
 
1. Создайте пользователя для Git:
<code>sudo useradd -m -s /bin/bash git</code>
+
<pre>sudo useradd -m -s /bin/bash git</pre>
  
 
2. Установите пароль:
 
2. Установите пароль:
<code>sudo passwd git</code>
+
<pre>sudo passwd git</pre>
  
 
3. Создайте директорию для репозиториев:
 
3. Создайте директорию для репозиториев:
<code>sudo mkdir -p /home/git/repositories</code>
+
<pre>sudo mkdir -p /home/git/repositories</pre>
<code>sudo chown git:git /home/git/repositories</code>
+
<pre>sudo chown git:git /home/git/repositories</pre>
<code>sudo chmod 755 /home/git/repositories</code>
+
<pre>sudo chmod 755 /home/git/repositories</pre>
  
 
=== Настройка SSH ключей ===
 
=== Настройка SSH ключей ===
  
 
1. Переключитесь на пользователя git:
 
1. Переключитесь на пользователя git:
<code>sudo su - git</code>
+
<pre>sudo su - git</pre>
  
 
2. Создайте директорию для SSH ключей:
 
2. Создайте директорию для SSH ключей:
<code>mkdir -p ~/.ssh</code>
+
<pre>mkdir -p ~/.ssh</pre>
<code>chmod 700 ~/.ssh</code>
+
<pre>chmod 700 ~/.ssh</pre>
  
 
3. Создайте файл authorized_keys:
 
3. Создайте файл authorized_keys:
<code>touch ~/.ssh/authorized_keys</code>
+
<pre>touch ~/.ssh/authorized_keys</pre>
<code>chmod 600 ~/.ssh/authorized_keys</code>
+
<pre>chmod 600 ~/.ssh/authorized_keys</pre>
  
== 4. Создание репозиториев ===
+
== 4. Создание репозиториев ==
  
 
=== Создание голого репозитория ===
 
=== Создание голого репозитория ===
  
 
1. Создайте голый репозиторий:
 
1. Создайте голый репозиторий:
<code>cd /home/git/repositories</code>
+
<pre>cd /home/git/repositories</pre>
<code>git init --bare my-project.git</code>
+
<pre>git init --bare my-project.git</pre>
  
 
2. Установите права доступа:
 
2. Установите права доступа:
<code>sudo chown -R git:git my-project.git</code>
+
<pre>sudo chown -R git:git my-project.git</pre>
<code>sudo chmod -R 755 my-project.git</code>
+
<pre>sudo chmod -R 755 my-project.git</pre>
  
 
=== Создание репозитория с GitWeb ===
 
=== Создание репозитория с GitWeb ===
  
 
1. Создайте репозиторий для GitWeb:
 
1. Создайте репозиторий для GitWeb:
<code>cd /home/git/repositories</code>
+
<pre>cd /home/git/repositories</pre>
<code>git init --bare --shared=group my-project-web.git</code>
+
<pre>git init --bare --shared=group my-project-web.git</pre>
  
 
2. Настройте описание репозитория:
 
2. Настройте описание репозитория:
<code>echo "My Project Repository" > my-project-web.git/description</code>
+
<pre>echo "My Project Repository" > my-project-web.git/description</pre>
  
 
3. Включите GitWeb:
 
3. Включите GitWeb:
<code>echo "gitweb" > my-project-web.git/gitweb</code>
+
<pre>echo "gitweb" > my-project-web.git/gitweb</pre>
  
== 5. Настройка GitWeb ===
+
== 5. Настройка GitWeb ==
  
 
=== Установка и настройка GitWeb ===
 
=== Установка и настройка GitWeb ===
  
 
1. Установите GitWeb:
 
1. Установите GitWeb:
<code>sudo apt install gitweb</code>
+
<pre>sudo apt install gitweb</pre>
  
 
2. Отредактируйте конфигурацию GitWeb:
 
2. Отредактируйте конфигурацию GitWeb:
<code>sudo nano /etc/gitweb.conf</code>
+
<pre>sudo nano /etc/gitweb.conf</pre>
  
 
3. Настройте основные параметры:
 
3. Настройте основные параметры:
<code># Основные настройки
+
<pre>\# Основные настройки
 
$projectroot = "/home/git/repositories";
 
$projectroot = "/home/git/repositories";
 
$git_temp = "/tmp";
 
$git_temp = "/tmp";
 
$projects_list = $projectroot;
 
$projects_list = $projectroot;
  
# Настройки отображения
+
\# Настройки отображения
 
$site_name = "Git Server";
 
$site_name = "Git Server";
 
$site_html_head_string = "<link rel='stylesheet' type='text/css' href='/gitweb.css'/>";
 
$site_html_head_string = "<link rel='stylesheet' type='text/css' href='/gitweb.css'/>";
Строка 101: Строка 101:
 
$site_footer = "/gitweb-footer.html";
 
$site_footer = "/gitweb-footer.html";
  
# Настройки безопасности
+
\# Настройки безопасности
 
$export_ok = "git-daemon-export-ok";
 
$export_ok = "git-daemon-export-ok";
$strict_export = 1;</code>
+
$strict_export = 1;</pre>
  
 
=== Настройка веб-сервера для GitWeb ===
 
=== Настройка веб-сервера для GitWeb ===
  
 
1. Создайте конфигурацию для Apache:
 
1. Создайте конфигурацию для Apache:
<code>sudo nano /etc/apache2/sites-available/gitweb.conf</code>
+
<pre>sudo nano /etc/apache2/sites-available/gitweb.conf</pre>
  
 
2. Добавьте конфигурацию:
 
2. Добавьте конфигурацию:
<code><VirtualHost *:80>
+
<pre><VirtualHost *:80>
 
     ServerName git.example.com
 
     ServerName git.example.com
 
     DocumentRoot /usr/share/gitweb
 
     DocumentRoot /usr/share/gitweb
Строка 129: Строка 129:
 
         Require all granted
 
         Require all granted
 
     </Directory>
 
     </Directory>
</VirtualHost></code>
+
</VirtualHost></pre>
  
 
3. Включите сайт:
 
3. Включите сайт:
<code>sudo a2ensite gitweb</code>
+
<pre>sudo a2ensite gitweb</pre>
<code>sudo systemctl restart apache2</code>
+
<pre>sudo systemctl restart apache2</pre>
  
== 6. Настройка Git Daemon ===
+
== 6. Настройка Git Daemon ==
  
 
=== Настройка Git Daemon ===
 
=== Настройка Git Daemon ===
  
 
1. Отредактируйте конфигурацию Git Daemon:
 
1. Отредактируйте конфигурацию Git Daemon:
<code>sudo nano /etc/default/git-daemon</code>
+
<pre>sudo nano /etc/default/git-daemon</pre>
  
 
2. Настройте параметры:
 
2. Настройте параметры:
<code>GIT_DAEMON_ENABLE=1</code>
+
<pre>GIT_DAEMON_ENABLE=1</pre>
<code>GIT_DAEMON_USER=git</code>
+
<pre>GIT_DAEMON_USER=git</pre>
<code>GIT_DAEMON_BASE_PATH=/home/git/repositories</code>
+
<pre>GIT_DAEMON_BASE_PATH=/home/git/repositories</pre>
<code>GIT_DAEMON_OPTIONS="--export-all --reuseaddr --verbose --base-path=/home/git/repositories"</code>
+
<pre>GIT_DAEMON_OPTIONS="--export-all --reuseaddr --verbose --base-path=/home/git/repositories"</pre>
  
 
3. Запустите Git Daemon:
 
3. Запустите Git Daemon:
<code>sudo systemctl start git-daemon</code>
+
<pre>sudo systemctl start git-daemon</pre>
<code>sudo systemctl enable git-daemon</code>
+
<pre>sudo systemctl enable git-daemon</pre>
  
 
=== Настройка репозиториев для Git Daemon ===
 
=== Настройка репозиториев для Git Daemon ===
  
 
1. Создайте файл для экспорта репозитория:
 
1. Создайте файл для экспорта репозитория:
<code>touch /home/git/repositories/my-project.git/git-daemon-export-ok</code>
+
<pre>touch /home/git/repositories/my-project.git/git-daemon-export-ok</pre>
  
 
2. Установите права доступа:
 
2. Установите права доступа:
<code>sudo chown git:git /home/git/repositories/my-project.git/git-daemon-export-ok</code>
+
<pre>sudo chown git:git /home/git/repositories/my-project.git/git-daemon-export-ok</pre>
  
== 7. Настройка SSH доступа ===
+
== 7. Настройка SSH доступа ==
  
 
=== Настройка SSH для Git ===
 
=== Настройка SSH для Git ===
  
 
1. Отредактируйте SSH конфигурацию:
 
1. Отредактируйте SSH конфигурацию:
<code>sudo nano /etc/ssh/sshd_config</code>
+
<pre>sudo nano /etc/ssh/sshd_config</pre>
  
 
2. Добавьте настройки для Git:
 
2. Добавьте настройки для Git:
<code>Match User git</code>
+
<pre>Match User git</pre>
<code>AllowUsers git</code>
+
<pre>AllowUsers git</pre>
<code>ForceCommand git-shell</code>
+
<pre>ForceCommand git-shell</pre>
<code>X11Forwarding no</code>
+
<pre>X11Forwarding no</pre>
<code>AllowTcpForwarding no</code>
+
<pre>AllowTcpForwarding no</pre>
  
 
3. Перезапустите SSH:
 
3. Перезапустите SSH:
<code>sudo systemctl restart ssh</code>
+
<pre>sudo systemctl restart ssh</pre>
  
 
=== Настройка Git Shell ===
 
=== Настройка Git Shell ===
  
 
1. Создайте директорию для Git Shell:
 
1. Создайте директорию для Git Shell:
<code>sudo mkdir -p /home/git/git-shell-commands</code>
+
<pre>sudo mkdir -p /home/git/git-shell-commands</pre>
<code>sudo chown git:git /home/git/git-shell-commands</code>
+
<pre>sudo chown git:git /home/git/git-shell-commands</pre>
  
 
2. Создайте скрипт для отображения репозиториев:
 
2. Создайте скрипт для отображения репозиториев:
<code>sudo nano /home/git/git-shell-commands/list-repos</code>
+
<pre>sudo nano /home/git/git-shell-commands/list-repos</pre>
  
 
3. Добавьте содержимое:
 
3. Добавьте содержимое:
<code>echo "Available repositories:"</code>
+
<pre>echo "Available repositories:"</pre>
<code>ls -la /home/git/repositories/</code>
+
<pre>ls -la /home/git/repositories/</pre>
  
 
4. Сделайте скрипт исполняемым:
 
4. Сделайте скрипт исполняемым:
<code>sudo chmod +x /home/git/git-shell-commands/list-repos</code>
+
<pre>sudo chmod +x /home/git/git-shell-commands/list-repos</pre>
<code>sudo chown git:git /home/git/git-shell-commands/list-repos</code>
+
<pre>sudo chown git:git /home/git/git-shell-commands/list-repos</pre>
  
== 8. Настройка файрвола ===
+
== 8. Настройка файрвола ==
  
 
=== Настройка UFW ===
 
=== Настройка UFW ===
  
 
1. Разрешите SSH трафик:
 
1. Разрешите SSH трафик:
<code>sudo ufw allow ssh</code>
+
<pre>sudo ufw allow ssh</pre>
  
 
2. Разрешите HTTP трафик для GitWeb:
 
2. Разрешите HTTP трафик для GitWeb:
<code>sudo ufw allow 80/tcp</code>
+
<pre>sudo ufw allow 80/tcp</pre>
  
 
3. Разрешите Git Daemon порт:
 
3. Разрешите Git Daemon порт:
<code>sudo ufw allow 9418/tcp</code>
+
<pre>sudo ufw allow 9418/tcp</pre>
  
 
4. Проверьте статус:
 
4. Проверьте статус:
<code>sudo ufw status</code>
+
<pre>sudo ufw status</pre>
  
 
=== Настройка iptables ===
 
=== Настройка iptables ===
  
 
1. Разрешите необходимые порты:
 
1. Разрешите необходимые порты:
<code>sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT</code>
+
<pre>sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT</pre>
<code>sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT</code>
+
<pre>sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT</pre>
<code>sudo iptables -A INPUT -p tcp --dport 9418 -j ACCEPT</code>
+
<pre>sudo iptables -A INPUT -p tcp --dport 9418 -j ACCEPT</pre>
  
 
2. Сохраните правила:
 
2. Сохраните правила:
<code>sudo iptables-save > /etc/iptables/rules.v4</code>
+
<pre>sudo iptables-save > /etc/iptables/rules.v4</pre>
  
== 9. Управление репозиториями ===
+
== 9. Управление репозиториями ==
  
 
=== Создание репозитория ===
 
=== Создание репозитория ===
  
 
1. Создайте новый репозиторий:
 
1. Создайте новый репозиторий:
<code>cd /home/git/repositories</code>
+
<pre>cd /home/git/repositories</pre>
<code>sudo -u git git init --bare new-project.git</code>
+
<pre>sudo -u git git init --bare new-project.git</pre>
  
 
2. Установите права доступа:
 
2. Установите права доступа:
<code>sudo chown -R git:git new-project.git</code>
+
<pre>sudo chown -R git:git new-project.git</pre>
<code>sudo chmod -R 755 new-project.git</code>
+
<pre>sudo chmod -R 755 new-project.git</pre>
  
 
3. Настройте описание:
 
3. Настройте описание:
<code>echo "New Project Repository" | sudo tee new-project.git/description</code>
+
<pre>echo "New Project Repository" | sudo tee new-project.git/description</pre>
  
 
=== Управление доступом ===
 
=== Управление доступом ===
  
 
1. Добавьте SSH ключ пользователя:
 
1. Добавьте SSH ключ пользователя:
<code>sudo -u git bash -c "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC...' >> /home/git/.ssh/authorized_keys"</code>
+
<pre>sudo -u git bash -c "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC...' >> /home/git/.ssh/authorized_keys"</pre>
  
 
2. Удалите SSH ключ:
 
2. Удалите SSH ключ:
<code>sudo -u git bash -c "sed -i '/ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC.../d' /home/git/.ssh/authorized_keys"</code>
+
<pre>sudo -u git bash -c "sed -i '/ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC.../d' /home/git/.ssh/authorized_keys"</pre>
  
 
=== Управление репозиториями ===
 
=== Управление репозиториями ===
  
 
1. Просмотрите список репозиториев:
 
1. Просмотрите список репозиториев:
<code>ls -la /home/git/repositories/</code>
+
<pre>ls -la /home/git/repositories/</pre>
  
 
2. Удалите репозиторий:
 
2. Удалите репозиторий:
<code>sudo rm -rf /home/git/repositories/old-project.git</code>
+
<pre>sudo rm -rf /home/git/repositories/old-project.git</pre>
  
 
3. Переименуйте репозиторий:
 
3. Переименуйте репозиторий:
<code>sudo mv /home/git/repositories/old-name.git /home/git/repositories/new-name.git</code>
+
<pre>sudo mv /home/git/repositories/old-name.git /home/git/repositories/new-name.git</pre>
  
== 10. Мониторинг и логирование ===
+
== 10. Мониторинг и логирование ==
  
 
=== Настройка логирования ===
 
=== Настройка логирования ===
  
 
1. Создайте скрипт логирования Git операций:
 
1. Создайте скрипт логирования Git операций:
<code>sudo nano /home/git/git-shell-commands/log-activity</code>
+
<pre>sudo nano /home/git/git-shell-commands/log-activity</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>echo "$(date): $SSH_ORIGINAL_COMMAND" >> /home/git/git-activity.log</code>
+
<pre>echo "$(date): $SSH_ORIGINAL_COMMAND" >> /home/git/git-activity.log</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /home/git/git-shell-commands/log-activity</code>
+
<pre>sudo chmod +x /home/git/git-shell-commands/log-activity</pre>
<code>sudo chown git:git /home/git/git-shell-commands/log-activity</code>
+
<pre>sudo chown git:git /home/git/git-shell-commands/log-activity</pre>
  
 
=== Просмотр логов ===
 
=== Просмотр логов ===
  
 
1. Просмотрите логи SSH:
 
1. Просмотрите логи SSH:
<code>sudo tail -f /var/log/auth.log | grep git</code>
+
<pre>sudo tail -f /var/log/auth.log | grep git</pre>
  
 
2. Просмотрите логи Git активности:
 
2. Просмотрите логи Git активности:
<code>sudo tail -f /home/git/git-activity.log</code>
+
<pre>sudo tail -f /home/git/git-activity.log</pre>
  
 
3. Просмотрите логи Apache для GitWeb:
 
3. Просмотрите логи Apache для GitWeb:
<code>sudo tail -f /var/log/apache2/access.log | grep gitweb</code>
+
<pre>sudo tail -f /var/log/apache2/access.log | grep gitweb</pre>
  
 
=== Создание скрипта мониторинга ===
 
=== Создание скрипта мониторинга ===
  
 
1. Создайте скрипт мониторинга:
 
1. Создайте скрипт мониторинга:
<code>sudo nano /usr/local/bin/git-monitor.sh</code>
+
<pre>sudo nano /usr/local/bin/git-monitor.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>if systemctl is-active --quiet ssh; then</code>
+
<pre>if systemctl is-active --quiet ssh; then</pre>
<code>echo "SSH is running"</code>
+
<pre>echo "SSH is running"</pre>
<code>else</code>
+
<pre>else</pre>
<code>echo "SSH is not running"</code>
+
<pre>echo "SSH is not running"</pre>
<code>fi</code>
+
<pre>fi</pre>
<code>if systemctl is-active --quiet git-daemon; then</code>
+
<pre>if systemctl is-active --quiet git-daemon; then</pre>
<code>echo "Git Daemon is running"</code>
+
<pre>echo "Git Daemon is running"</pre>
<code>else</code>
+
<pre>else</pre>
<code>echo "Git Daemon is not running"</code>
+
<pre>echo "Git Daemon is not running"</pre>
<code>fi</code>
+
<pre>fi</pre>
<code>if systemctl is-active --quiet apache2; then</code>
+
<pre>if systemctl is-active --quiet apache2; then</pre>
<code>echo "Apache is running"</code>
+
<pre>echo "Apache is running"</pre>
<code>else</code>
+
<pre>else</pre>
<code>echo "Apache is not running"</code>
+
<pre>echo "Apache is not running"</pre>
<code>fi</code>
+
<pre>fi</pre>
<code>REPO_COUNT=$(ls -1 /home/git/repositories/ | wc -l)</code>
+
<pre>REPO_COUNT=$(ls -1 /home/git/repositories/ | wc -l)</pre>
<code>echo "Number of repositories: $REPO_COUNT"</code>
+
<pre>echo "Number of repositories: $REPO_COUNT"</pre>
<code>DISK_USAGE=$(du -sh /home/git/repositories/ | cut -f1)</code>
+
<pre>DISK_USAGE=$(du -sh /home/git/repositories/ | cut -f1)</pre>
<code>echo "Repository disk usage: $DISK_USAGE"</code>
+
<pre>echo "Repository disk usage: $DISK_USAGE"</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/git-monitor.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/git-monitor.sh</pre>
  
== 11. Устранение неполадок ===
+
== 11. Устранение неполадок ==
  
 
=== Частые проблемы ===
 
=== Частые проблемы ===
  
 
1. '''Не могу клонировать репозиторий''':
 
1. '''Не могу клонировать репозиторий''':
* Проверьте SSH ключи: <code>ssh -T git@server</code>
+
* Проверьте SSH ключи: <pre>ssh -T git@server</pre>
* Проверьте права доступа: <code>ls -la /home/git/repositories/</code>
+
* Проверьте права доступа: <pre>ls -la /home/git/repositories/</pre>
 
* Проверьте SSH конфигурацию
 
* Проверьте SSH конфигурацию
  
 
2. '''GitWeb не работает''':
 
2. '''GitWeb не работает''':
* Проверьте Apache: <code>sudo systemctl status apache2</code>
+
* Проверьте Apache: <pre>sudo systemctl status apache2</pre>
* Проверьте конфигурацию GitWeb: <code>sudo nano /etc/gitweb.conf</code>
+
* Проверьте конфигурацию GitWeb: <pre>sudo nano /etc/gitweb.conf</pre>
 
* Проверьте права доступа к репозиториям
 
* Проверьте права доступа к репозиториям
  
 
3. '''Git Daemon не работает''':
 
3. '''Git Daemon не работает''':
* Проверьте статус: <code>sudo systemctl status git-daemon</code>
+
* Проверьте статус: <pre>sudo systemctl status git-daemon</pre>
* Проверьте конфигурацию: <code>sudo nano /etc/default/git-daemon</code>
+
* Проверьте конфигурацию: <pre>sudo nano /etc/default/git-daemon</pre>
* Проверьте файрвол: <code>sudo ufw status</code>
+
* Проверьте файрвол: <pre>sudo ufw status</pre>
  
 
=== Диагностика ===
 
=== Диагностика ===
  
 
1. Проверьте статус служб:
 
1. Проверьте статус служб:
<code>sudo systemctl status ssh</code>
+
<pre>sudo systemctl status ssh</pre>
<code>sudo systemctl status git-daemon</code>
+
<pre>sudo systemctl status git-daemon</pre>
<code>sudo systemctl status apache2</code>
+
<pre>sudo systemctl status apache2</pre>
  
 
2. Проверьте подключения:
 
2. Проверьте подключения:
<code>sudo netstat -tlnp | grep -E ':(22|80|9418)'</code>
+
<pre>sudo netstat -tlnp | grep -E ':(22|80|9418)'</pre>
  
 
3. Проверьте SSH подключение:
 
3. Проверьте SSH подключение:
<code>ssh -T git@localhost</code>
+
<pre>ssh -T git@localhost</pre>
  
 
4. Проверьте права доступа:
 
4. Проверьте права доступа:
<code>ls -la /home/git/</code>
+
<pre>ls -la /home/git/</pre>
<code>ls -la /home/git/repositories/</code>
+
<pre>ls -la /home/git/repositories/</pre>
  
== 12. Дополнительные настройки ===
+
== 12. Дополнительные настройки ==
  
 
=== Настройка хуков ===
 
=== Настройка хуков ===
  
 
1. Создайте хук для уведомлений:
 
1. Создайте хук для уведомлений:
<code>sudo nano /home/git/repositories/my-project.git/hooks/post-receive</code>
+
<pre>sudo nano /home/git/repositories/my-project.git/hooks/post-receive</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>echo "Repository updated: $(date)" | mail -s "Git Update" admin@example.com</code>
+
<pre>echo "Repository updated: $(date)" | mail -s "Git Update" admin@example.com</pre>
  
 
3. Сделайте хук исполняемым:
 
3. Сделайте хук исполняемым:
<code>sudo chmod +x /home/git/repositories/my-project.git/hooks/post-receive</code>
+
<pre>sudo chmod +x /home/git/repositories/my-project.git/hooks/post-receive</pre>
<code>sudo chown git:git /home/git/repositories/my-project.git/hooks/post-receive</code>
+
<pre>sudo chown git:git /home/git/repositories/my-project.git/hooks/post-receive</pre>
  
 
=== Настройка резервного копирования ===
 
=== Настройка резервного копирования ===
  
 
1. Создайте скрипт резервного копирования:
 
1. Создайте скрипт резервного копирования:
<code>sudo nano /usr/local/bin/git-backup.sh</code>
+
<pre>sudo nano /usr/local/bin/git-backup.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>BACKUP_DIR="/backup/git"</code>
+
<pre>BACKUP_DIR="/backup/git"</pre>
<code>REPO_DIR="/home/git/repositories"</code>
+
<pre>REPO_DIR="/home/git/repositories"</pre>
<code>DATE=$(date +%Y%m%d_%H%M%S)</code>
+
<pre>DATE=$(date +%Y%m%d_%H%M%S)</pre>
<code>mkdir -p $BACKUP_DIR</code>
+
<pre>mkdir -p $BACKUP_DIR</pre>
<code>tar -czf $BACKUP_DIR/git_repos_$DATE.tar.gz -C $REPO_DIR .</code>
+
<pre>tar -czf $BACKUP_DIR/git_repos_$DATE.tar.gz -C $REPO_DIR .</pre>
<code>find $BACKUP_DIR -name "git_repos_*.tar.gz" -mtime +7 -delete</code>
+
<pre>find $BACKUP_DIR -name "git_repos_*.tar.gz" -mtime +7 -delete</pre>
<code>echo "Git backup completed: git_repos_$DATE.tar.gz"</code>
+
<pre>echo "Git backup completed: git_repos_$DATE.tar.gz"</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/git-backup.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/git-backup.sh</pre>
  
 
4. Добавьте в crontab:
 
4. Добавьте в crontab:
<code>0 2 * * * /usr/local/bin/git-backup.sh</code>
+
<pre>0 2 * * * /usr/local/bin/git-backup.sh</pre>
  
 
== Заключение ==
 
== Заключение ==

Текущая версия на 10:43, 15 октября 2025

Содержание

Установка и настройка Git сервера

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.

2. Установка Git

Установка пакета

1. Обновите список пакетов:

sudo apt update

2. Установите Git:

sudo apt install git

3. Установите дополнительные компоненты:

sudo apt install git-core gitweb git-daemon-run

Проверка установки

1. Проверьте версию Git:

git --version

2. Проверьте конфигурацию:

git config --list

3. Настройка Git сервера

Создание пользователя для Git

1. Создайте пользователя для Git:

sudo useradd -m -s /bin/bash git

2. Установите пароль:

sudo passwd git

3. Создайте директорию для репозиториев:

sudo mkdir -p /home/git/repositories
sudo chown git:git /home/git/repositories
sudo chmod 755 /home/git/repositories

Настройка SSH ключей

1. Переключитесь на пользователя git:

sudo su - git

2. Создайте директорию для SSH ключей:

mkdir -p ~/.ssh
chmod 700 ~/.ssh

3. Создайте файл authorized_keys:

touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

4. Создание репозиториев

Создание голого репозитория

1. Создайте голый репозиторий:

cd /home/git/repositories
git init --bare my-project.git

2. Установите права доступа:

sudo chown -R git:git my-project.git
sudo chmod -R 755 my-project.git

Создание репозитория с GitWeb

1. Создайте репозиторий для GitWeb:

cd /home/git/repositories
git init --bare --shared=group my-project-web.git

2. Настройте описание репозитория:

echo "My Project Repository" > my-project-web.git/description

3. Включите GitWeb:

echo "gitweb" > my-project-web.git/gitweb

5. Настройка GitWeb

Установка и настройка GitWeb

1. Установите GitWeb:

sudo apt install gitweb

2. Отредактируйте конфигурацию GitWeb:

sudo nano /etc/gitweb.conf

3. Настройте основные параметры:

\# Основные настройки
$projectroot = "/home/git/repositories";
$git_temp = "/tmp";
$projects_list = $projectroot;

\# Настройки отображения
$site_name = "Git Server";
$site_html_head_string = "<link rel='stylesheet' type='text/css' href='/gitweb.css'/>";
$site_header = "/gitweb-header.html";
$site_footer = "/gitweb-footer.html";

\# Настройки безопасности
$export_ok = "git-daemon-export-ok";
$strict_export = 1;

Настройка веб-сервера для GitWeb

1. Создайте конфигурацию для Apache:

sudo nano /etc/apache2/sites-available/gitweb.conf

2. Добавьте конфигурацию:

<VirtualHost *:80>
    ServerName git.example.com
    DocumentRoot /usr/share/gitweb
    
    Alias /gitweb /usr/share/gitweb
    <Directory /usr/share/gitweb>
        Options +ExecCGI
        AddHandler cgi-script .cgi
        DirectoryIndex gitweb.cgi
        Require all granted
    </Directory>
    
    ScriptAlias /gitweb.cgi /usr/share/gitweb/gitweb.cgi
    <Directory /usr/share/gitweb>
        Options +ExecCGI
        AddHandler cgi-script .cgi
        Require all granted
    </Directory>
</VirtualHost>

3. Включите сайт:

sudo a2ensite gitweb
sudo systemctl restart apache2

6. Настройка Git Daemon

Настройка Git Daemon

1. Отредактируйте конфигурацию Git Daemon:

sudo nano /etc/default/git-daemon

2. Настройте параметры:

GIT_DAEMON_ENABLE=1
GIT_DAEMON_USER=git
GIT_DAEMON_BASE_PATH=/home/git/repositories
GIT_DAEMON_OPTIONS="--export-all --reuseaddr --verbose --base-path=/home/git/repositories"

3. Запустите Git Daemon:

sudo systemctl start git-daemon
sudo systemctl enable git-daemon

Настройка репозиториев для Git Daemon

1. Создайте файл для экспорта репозитория:

touch /home/git/repositories/my-project.git/git-daemon-export-ok

2. Установите права доступа:

sudo chown git:git /home/git/repositories/my-project.git/git-daemon-export-ok

7. Настройка SSH доступа

Настройка SSH для Git

1. Отредактируйте SSH конфигурацию:

sudo nano /etc/ssh/sshd_config

2. Добавьте настройки для Git:

Match User git
AllowUsers git
ForceCommand git-shell
X11Forwarding no
AllowTcpForwarding no

3. Перезапустите SSH:

sudo systemctl restart ssh

Настройка Git Shell

1. Создайте директорию для Git Shell:

sudo mkdir -p /home/git/git-shell-commands
sudo chown git:git /home/git/git-shell-commands

2. Создайте скрипт для отображения репозиториев:

sudo nano /home/git/git-shell-commands/list-repos

3. Добавьте содержимое:

echo "Available repositories:"
ls -la /home/git/repositories/

4. Сделайте скрипт исполняемым:

sudo chmod +x /home/git/git-shell-commands/list-repos
sudo chown git:git /home/git/git-shell-commands/list-repos

8. Настройка файрвола

Настройка UFW

1. Разрешите SSH трафик:

sudo ufw allow ssh

2. Разрешите HTTP трафик для GitWeb:

sudo ufw allow 80/tcp

3. Разрешите Git Daemon порт:

sudo ufw allow 9418/tcp

4. Проверьте статус:

sudo ufw status

Настройка iptables

1. Разрешите необходимые порты:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9418 -j ACCEPT

2. Сохраните правила:

sudo iptables-save > /etc/iptables/rules.v4

9. Управление репозиториями

Создание репозитория

1. Создайте новый репозиторий:

cd /home/git/repositories
sudo -u git git init --bare new-project.git

2. Установите права доступа:

sudo chown -R git:git new-project.git
sudo chmod -R 755 new-project.git

3. Настройте описание:

echo "New Project Repository" | sudo tee new-project.git/description

Управление доступом

1. Добавьте SSH ключ пользователя:

sudo -u git bash -c "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC...' >> /home/git/.ssh/authorized_keys"

2. Удалите SSH ключ:

sudo -u git bash -c "sed -i '/ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC.../d' /home/git/.ssh/authorized_keys"

Управление репозиториями

1. Просмотрите список репозиториев:

ls -la /home/git/repositories/

2. Удалите репозиторий:

sudo rm -rf /home/git/repositories/old-project.git

3. Переименуйте репозиторий:

sudo mv /home/git/repositories/old-name.git /home/git/repositories/new-name.git

10. Мониторинг и логирование

Настройка логирования

1. Создайте скрипт логирования Git операций:

sudo nano /home/git/git-shell-commands/log-activity

2. Добавьте содержимое:

echo "$(date): $SSH_ORIGINAL_COMMAND" >> /home/git/git-activity.log

3. Сделайте скрипт исполняемым:

sudo chmod +x /home/git/git-shell-commands/log-activity
sudo chown git:git /home/git/git-shell-commands/log-activity

Просмотр логов

1. Просмотрите логи SSH:

sudo tail -f /var/log/auth.log | grep git

2. Просмотрите логи Git активности:

sudo tail -f /home/git/git-activity.log

3. Просмотрите логи Apache для GitWeb:

sudo tail -f /var/log/apache2/access.log | grep gitweb

Создание скрипта мониторинга

1. Создайте скрипт мониторинга:

sudo nano /usr/local/bin/git-monitor.sh

2. Добавьте содержимое:

if systemctl is-active --quiet ssh; then
echo "SSH is running"
else
echo "SSH is not running"
fi
if systemctl is-active --quiet git-daemon; then
echo "Git Daemon is running"
else
echo "Git Daemon is not running"
fi
if systemctl is-active --quiet apache2; then
echo "Apache is running"
else
echo "Apache is not running"
fi
REPO_COUNT=$(ls -1 /home/git/repositories/ | wc -l)
echo "Number of repositories: $REPO_COUNT"
DISK_USAGE=$(du -sh /home/git/repositories/ | cut -f1)
echo "Repository disk usage: $DISK_USAGE"

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/git-monitor.sh

11. Устранение неполадок

Частые проблемы

1. Не могу клонировать репозиторий:

  • Проверьте SSH ключи:
    ssh -T git@server
  • Проверьте права доступа:
    ls -la /home/git/repositories/
  • Проверьте SSH конфигурацию

2. GitWeb не работает:

  • Проверьте Apache:
    sudo systemctl status apache2
  • Проверьте конфигурацию GitWeb:
    sudo nano /etc/gitweb.conf
  • Проверьте права доступа к репозиториям

3. Git Daemon не работает:

  • Проверьте статус:
    sudo systemctl status git-daemon
  • Проверьте конфигурацию:
    sudo nano /etc/default/git-daemon
  • Проверьте файрвол:
    sudo ufw status

Диагностика

1. Проверьте статус служб:

sudo systemctl status ssh
sudo systemctl status git-daemon
sudo systemctl status apache2

2. Проверьте подключения:

sudo netstat -tlnp | grep -E ':(22|80|9418)'

3. Проверьте SSH подключение:

ssh -T git@localhost

4. Проверьте права доступа:

ls -la /home/git/
ls -la /home/git/repositories/

12. Дополнительные настройки

Настройка хуков

1. Создайте хук для уведомлений:

sudo nano /home/git/repositories/my-project.git/hooks/post-receive

2. Добавьте содержимое:

echo "Repository updated: $(date)" | mail -s "Git Update" admin@example.com

3. Сделайте хук исполняемым:

sudo chmod +x /home/git/repositories/my-project.git/hooks/post-receive
sudo chown git:git /home/git/repositories/my-project.git/hooks/post-receive

Настройка резервного копирования

1. Создайте скрипт резервного копирования:

sudo nano /usr/local/bin/git-backup.sh

2. Добавьте содержимое:

BACKUP_DIR="/backup/git"
REPO_DIR="/home/git/repositories"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/git_repos_$DATE.tar.gz -C $REPO_DIR .
find $BACKUP_DIR -name "git_repos_*.tar.gz" -mtime +7 -delete
echo "Git backup completed: git_repos_$DATE.tar.gz"

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/git-backup.sh

4. Добавьте в crontab:

0 2 * * * /usr/local/bin/git-backup.sh

Заключение

Git сервер успешно установлен и настроен! Теперь вы можете предоставлять услуги управления версиями.

Для размещения ваших Git серверов на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой Git сервера и обеспечением безопасности ваших репозиториев!