Установка и настройка Git сервера — различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | * Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | ||
− | == 2. Установка Git | + | == 2. Установка Git == |
=== Установка пакета === | === Установка пакета === | ||
1. Обновите список пакетов: | 1. Обновите список пакетов: | ||
− | < | + | <pre>sudo apt update</pre> |
2. Установите Git: | 2. Установите Git: | ||
− | < | + | <pre>sudo apt install git</pre> |
3. Установите дополнительные компоненты: | 3. Установите дополнительные компоненты: | ||
− | < | + | <pre>sudo apt install git-core gitweb git-daemon-run</pre> |
=== Проверка установки === | === Проверка установки === | ||
1. Проверьте версию Git: | 1. Проверьте версию Git: | ||
− | < | + | <pre>git --version</pre> |
2. Проверьте конфигурацию: | 2. Проверьте конфигурацию: | ||
− | < | + | <pre>git config --list</pre> |
− | == 3. Настройка Git сервера | + | == 3. Настройка Git сервера == |
=== Создание пользователя для Git === | === Создание пользователя для Git === | ||
1. Создайте пользователя для Git: | 1. Создайте пользователя для Git: | ||
− | < | + | <pre>sudo useradd -m -s /bin/bash git</pre> |
2. Установите пароль: | 2. Установите пароль: | ||
− | < | + | <pre>sudo passwd git</pre> |
3. Создайте директорию для репозиториев: | 3. Создайте директорию для репозиториев: | ||
− | < | + | <pre>sudo mkdir -p /home/git/repositories</pre> |
− | < | + | <pre>sudo chown git:git /home/git/repositories</pre> |
− | < | + | <pre>sudo chmod 755 /home/git/repositories</pre> |
=== Настройка SSH ключей === | === Настройка SSH ключей === | ||
1. Переключитесь на пользователя git: | 1. Переключитесь на пользователя git: | ||
− | < | + | <pre>sudo su - git</pre> |
2. Создайте директорию для SSH ключей: | 2. Создайте директорию для SSH ключей: | ||
− | < | + | <pre>mkdir -p ~/.ssh</pre> |
− | < | + | <pre>chmod 700 ~/.ssh</pre> |
3. Создайте файл authorized_keys: | 3. Создайте файл authorized_keys: | ||
− | < | + | <pre>touch ~/.ssh/authorized_keys</pre> |
− | < | + | <pre>chmod 600 ~/.ssh/authorized_keys</pre> |
− | == 4. Создание репозиториев | + | == 4. Создание репозиториев == |
=== Создание голого репозитория === | === Создание голого репозитория === | ||
1. Создайте голый репозиторий: | 1. Создайте голый репозиторий: | ||
− | < | + | <pre>cd /home/git/repositories</pre> |
− | < | + | <pre>git init --bare my-project.git</pre> |
2. Установите права доступа: | 2. Установите права доступа: | ||
− | < | + | <pre>sudo chown -R git:git my-project.git</pre> |
− | < | + | <pre>sudo chmod -R 755 my-project.git</pre> |
=== Создание репозитория с GitWeb === | === Создание репозитория с GitWeb === | ||
1. Создайте репозиторий для GitWeb: | 1. Создайте репозиторий для GitWeb: | ||
− | < | + | <pre>cd /home/git/repositories</pre> |
− | < | + | <pre>git init --bare --shared=group my-project-web.git</pre> |
2. Настройте описание репозитория: | 2. Настройте описание репозитория: | ||
− | < | + | <pre>echo "My Project Repository" > my-project-web.git/description</pre> |
3. Включите GitWeb: | 3. Включите GitWeb: | ||
− | < | + | <pre>echo "gitweb" > my-project-web.git/gitweb</pre> |
− | == 5. Настройка GitWeb | + | == 5. Настройка GitWeb == |
=== Установка и настройка GitWeb === | === Установка и настройка GitWeb === | ||
1. Установите GitWeb: | 1. Установите GitWeb: | ||
− | < | + | <pre>sudo apt install gitweb</pre> |
2. Отредактируйте конфигурацию GitWeb: | 2. Отредактируйте конфигурацию GitWeb: | ||
− | < | + | <pre>sudo nano /etc/gitweb.conf</pre> |
3. Настройте основные параметры: | 3. Настройте основные параметры: | ||
− | < | + | <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;</ | + | $strict_export = 1;</pre> |
=== Настройка веб-сервера для GitWeb === | === Настройка веб-сервера для GitWeb === | ||
1. Создайте конфигурацию для Apache: | 1. Создайте конфигурацию для Apache: | ||
− | < | + | <pre>sudo nano /etc/apache2/sites-available/gitweb.conf</pre> |
2. Добавьте конфигурацию: | 2. Добавьте конфигурацию: | ||
− | < | + | <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></ | + | </VirtualHost></pre> |
3. Включите сайт: | 3. Включите сайт: | ||
− | < | + | <pre>sudo a2ensite gitweb</pre> |
− | < | + | <pre>sudo systemctl restart apache2</pre> |
− | == 6. Настройка Git Daemon | + | == 6. Настройка Git Daemon == |
=== Настройка Git Daemon === | === Настройка Git Daemon === | ||
1. Отредактируйте конфигурацию Git Daemon: | 1. Отредактируйте конфигурацию Git Daemon: | ||
− | < | + | <pre>sudo nano /etc/default/git-daemon</pre> |
2. Настройте параметры: | 2. Настройте параметры: | ||
− | < | + | <pre>GIT_DAEMON_ENABLE=1</pre> |
− | < | + | <pre>GIT_DAEMON_USER=git</pre> |
− | < | + | <pre>GIT_DAEMON_BASE_PATH=/home/git/repositories</pre> |
− | < | + | <pre>GIT_DAEMON_OPTIONS="--export-all --reuseaddr --verbose --base-path=/home/git/repositories"</pre> |
3. Запустите Git Daemon: | 3. Запустите Git Daemon: | ||
− | < | + | <pre>sudo systemctl start git-daemon</pre> |
− | < | + | <pre>sudo systemctl enable git-daemon</pre> |
=== Настройка репозиториев для Git Daemon === | === Настройка репозиториев для Git Daemon === | ||
1. Создайте файл для экспорта репозитория: | 1. Создайте файл для экспорта репозитория: | ||
− | < | + | <pre>touch /home/git/repositories/my-project.git/git-daemon-export-ok</pre> |
2. Установите права доступа: | 2. Установите права доступа: | ||
− | < | + | <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 конфигурацию: | ||
− | < | + | <pre>sudo nano /etc/ssh/sshd_config</pre> |
2. Добавьте настройки для Git: | 2. Добавьте настройки для Git: | ||
− | < | + | <pre>Match User git</pre> |
− | < | + | <pre>AllowUsers git</pre> |
− | < | + | <pre>ForceCommand git-shell</pre> |
− | < | + | <pre>X11Forwarding no</pre> |
− | < | + | <pre>AllowTcpForwarding no</pre> |
3. Перезапустите SSH: | 3. Перезапустите SSH: | ||
− | < | + | <pre>sudo systemctl restart ssh</pre> |
=== Настройка Git Shell === | === Настройка Git Shell === | ||
1. Создайте директорию для Git Shell: | 1. Создайте директорию для Git Shell: | ||
− | < | + | <pre>sudo mkdir -p /home/git/git-shell-commands</pre> |
− | < | + | <pre>sudo chown git:git /home/git/git-shell-commands</pre> |
2. Создайте скрипт для отображения репозиториев: | 2. Создайте скрипт для отображения репозиториев: | ||
− | < | + | <pre>sudo nano /home/git/git-shell-commands/list-repos</pre> |
3. Добавьте содержимое: | 3. Добавьте содержимое: | ||
− | < | + | <pre>echo "Available repositories:"</pre> |
− | < | + | <pre>ls -la /home/git/repositories/</pre> |
4. Сделайте скрипт исполняемым: | 4. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /home/git/git-shell-commands/list-repos</pre> |
− | < | + | <pre>sudo chown git:git /home/git/git-shell-commands/list-repos</pre> |
− | == 8. Настройка файрвола | + | == 8. Настройка файрвола == |
=== Настройка UFW === | === Настройка UFW === | ||
1. Разрешите SSH трафик: | 1. Разрешите SSH трафик: | ||
− | < | + | <pre>sudo ufw allow ssh</pre> |
2. Разрешите HTTP трафик для GitWeb: | 2. Разрешите HTTP трафик для GitWeb: | ||
− | < | + | <pre>sudo ufw allow 80/tcp</pre> |
3. Разрешите Git Daemon порт: | 3. Разрешите Git Daemon порт: | ||
− | < | + | <pre>sudo ufw allow 9418/tcp</pre> |
4. Проверьте статус: | 4. Проверьте статус: | ||
− | < | + | <pre>sudo ufw status</pre> |
=== Настройка iptables === | === Настройка iptables === | ||
1. Разрешите необходимые порты: | 1. Разрешите необходимые порты: | ||
− | < | + | <pre>sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT</pre> |
− | < | + | <pre>sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT</pre> |
− | < | + | <pre>sudo iptables -A INPUT -p tcp --dport 9418 -j ACCEPT</pre> |
2. Сохраните правила: | 2. Сохраните правила: | ||
− | < | + | <pre>sudo iptables-save > /etc/iptables/rules.v4</pre> |
− | == 9. Управление репозиториями | + | == 9. Управление репозиториями == |
=== Создание репозитория === | === Создание репозитория === | ||
1. Создайте новый репозиторий: | 1. Создайте новый репозиторий: | ||
− | < | + | <pre>cd /home/git/repositories</pre> |
− | < | + | <pre>sudo -u git git init --bare new-project.git</pre> |
2. Установите права доступа: | 2. Установите права доступа: | ||
− | < | + | <pre>sudo chown -R git:git new-project.git</pre> |
− | < | + | <pre>sudo chmod -R 755 new-project.git</pre> |
3. Настройте описание: | 3. Настройте описание: | ||
− | < | + | <pre>echo "New Project Repository" | sudo tee new-project.git/description</pre> |
=== Управление доступом === | === Управление доступом === | ||
1. Добавьте SSH ключ пользователя: | 1. Добавьте SSH ключ пользователя: | ||
− | < | + | <pre>sudo -u git bash -c "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC...' >> /home/git/.ssh/authorized_keys"</pre> |
2. Удалите SSH ключ: | 2. Удалите SSH ключ: | ||
− | < | + | <pre>sudo -u git bash -c "sed -i '/ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC.../d' /home/git/.ssh/authorized_keys"</pre> |
=== Управление репозиториями === | === Управление репозиториями === | ||
1. Просмотрите список репозиториев: | 1. Просмотрите список репозиториев: | ||
− | < | + | <pre>ls -la /home/git/repositories/</pre> |
2. Удалите репозиторий: | 2. Удалите репозиторий: | ||
− | < | + | <pre>sudo rm -rf /home/git/repositories/old-project.git</pre> |
3. Переименуйте репозиторий: | 3. Переименуйте репозиторий: | ||
− | < | + | <pre>sudo mv /home/git/repositories/old-name.git /home/git/repositories/new-name.git</pre> |
− | == 10. Мониторинг и логирование | + | == 10. Мониторинг и логирование == |
=== Настройка логирования === | === Настройка логирования === | ||
1. Создайте скрипт логирования Git операций: | 1. Создайте скрипт логирования Git операций: | ||
− | < | + | <pre>sudo nano /home/git/git-shell-commands/log-activity</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>echo "$(date): $SSH_ORIGINAL_COMMAND" >> /home/git/git-activity.log</pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /home/git/git-shell-commands/log-activity</pre> |
− | < | + | <pre>sudo chown git:git /home/git/git-shell-commands/log-activity</pre> |
=== Просмотр логов === | === Просмотр логов === | ||
1. Просмотрите логи SSH: | 1. Просмотрите логи SSH: | ||
− | < | + | <pre>sudo tail -f /var/log/auth.log | grep git</pre> |
2. Просмотрите логи Git активности: | 2. Просмотрите логи Git активности: | ||
− | < | + | <pre>sudo tail -f /home/git/git-activity.log</pre> |
3. Просмотрите логи Apache для GitWeb: | 3. Просмотрите логи Apache для GitWeb: | ||
− | < | + | <pre>sudo tail -f /var/log/apache2/access.log | grep gitweb</pre> |
=== Создание скрипта мониторинга === | === Создание скрипта мониторинга === | ||
1. Создайте скрипт мониторинга: | 1. Создайте скрипт мониторинга: | ||
− | < | + | <pre>sudo nano /usr/local/bin/git-monitor.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>if systemctl is-active --quiet ssh; then</pre> |
− | < | + | <pre>echo "SSH is running"</pre> |
− | < | + | <pre>else</pre> |
− | < | + | <pre>echo "SSH is not running"</pre> |
− | < | + | <pre>fi</pre> |
− | < | + | <pre>if systemctl is-active --quiet git-daemon; then</pre> |
− | < | + | <pre>echo "Git Daemon is running"</pre> |
− | < | + | <pre>else</pre> |
− | < | + | <pre>echo "Git Daemon is not running"</pre> |
− | < | + | <pre>fi</pre> |
− | < | + | <pre>if systemctl is-active --quiet apache2; then</pre> |
− | < | + | <pre>echo "Apache is running"</pre> |
− | < | + | <pre>else</pre> |
− | < | + | <pre>echo "Apache is not running"</pre> |
− | < | + | <pre>fi</pre> |
− | < | + | <pre>REPO_COUNT=$(ls -1 /home/git/repositories/ | wc -l)</pre> |
− | < | + | <pre>echo "Number of repositories: $REPO_COUNT"</pre> |
− | < | + | <pre>DISK_USAGE=$(du -sh /home/git/repositories/ | cut -f1)</pre> |
− | < | + | <pre>echo "Repository disk usage: $DISK_USAGE"</pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/git-monitor.sh</pre> |
− | == 11. Устранение неполадок | + | == 11. Устранение неполадок == |
=== Частые проблемы === | === Частые проблемы === | ||
1. '''Не могу клонировать репозиторий''': | 1. '''Не могу клонировать репозиторий''': | ||
− | * Проверьте SSH ключи: < | + | * Проверьте SSH ключи: <pre>ssh -T git@server</pre> |
− | * Проверьте права доступа: < | + | * Проверьте права доступа: <pre>ls -la /home/git/repositories/</pre> |
* Проверьте SSH конфигурацию | * Проверьте SSH конфигурацию | ||
2. '''GitWeb не работает''': | 2. '''GitWeb не работает''': | ||
− | * Проверьте Apache: < | + | * Проверьте Apache: <pre>sudo systemctl status apache2</pre> |
− | * Проверьте конфигурацию GitWeb: < | + | * Проверьте конфигурацию GitWeb: <pre>sudo nano /etc/gitweb.conf</pre> |
* Проверьте права доступа к репозиториям | * Проверьте права доступа к репозиториям | ||
3. '''Git Daemon не работает''': | 3. '''Git Daemon не работает''': | ||
− | * Проверьте статус: < | + | * Проверьте статус: <pre>sudo systemctl status git-daemon</pre> |
− | * Проверьте конфигурацию: < | + | * Проверьте конфигурацию: <pre>sudo nano /etc/default/git-daemon</pre> |
− | * Проверьте файрвол: < | + | * Проверьте файрвол: <pre>sudo ufw status</pre> |
=== Диагностика === | === Диагностика === | ||
1. Проверьте статус служб: | 1. Проверьте статус служб: | ||
− | < | + | <pre>sudo systemctl status ssh</pre> |
− | < | + | <pre>sudo systemctl status git-daemon</pre> |
− | < | + | <pre>sudo systemctl status apache2</pre> |
2. Проверьте подключения: | 2. Проверьте подключения: | ||
− | < | + | <pre>sudo netstat -tlnp | grep -E ':(22|80|9418)'</pre> |
3. Проверьте SSH подключение: | 3. Проверьте SSH подключение: | ||
− | < | + | <pre>ssh -T git@localhost</pre> |
4. Проверьте права доступа: | 4. Проверьте права доступа: | ||
− | < | + | <pre>ls -la /home/git/</pre> |
− | < | + | <pre>ls -la /home/git/repositories/</pre> |
− | == 12. Дополнительные настройки | + | == 12. Дополнительные настройки == |
=== Настройка хуков === | === Настройка хуков === | ||
1. Создайте хук для уведомлений: | 1. Создайте хук для уведомлений: | ||
− | < | + | <pre>sudo nano /home/git/repositories/my-project.git/hooks/post-receive</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>echo "Repository updated: $(date)" | mail -s "Git Update" admin@example.com</pre> |
3. Сделайте хук исполняемым: | 3. Сделайте хук исполняемым: | ||
− | < | + | <pre>sudo chmod +x /home/git/repositories/my-project.git/hooks/post-receive</pre> |
− | < | + | <pre>sudo chown git:git /home/git/repositories/my-project.git/hooks/post-receive</pre> |
=== Настройка резервного копирования === | === Настройка резервного копирования === | ||
1. Создайте скрипт резервного копирования: | 1. Создайте скрипт резервного копирования: | ||
− | < | + | <pre>sudo nano /usr/local/bin/git-backup.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>BACKUP_DIR="/backup/git"</pre> |
− | < | + | <pre>REPO_DIR="/home/git/repositories"</pre> |
− | < | + | <pre>DATE=$(date +%Y%m%d_%H%M%S)</pre> |
− | < | + | <pre>mkdir -p $BACKUP_DIR</pre> |
− | < | + | <pre>tar -czf $BACKUP_DIR/git_repos_$DATE.tar.gz -C $REPO_DIR .</pre> |
− | < | + | <pre>find $BACKUP_DIR -name "git_repos_*.tar.gz" -mtime +7 -delete</pre> |
− | < | + | <pre>echo "Git backup completed: git_repos_$DATE.tar.gz"</pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/git-backup.sh</pre> |
4. Добавьте в crontab: | 4. Добавьте в crontab: | ||
− | < | + | <pre>0 2 * * * /usr/local/bin/git-backup.sh</pre> |
== Заключение == | == Заключение == |
Текущая версия на 10:43, 15 октября 2025
Содержание
- 1 Установка и настройка Git сервера
- 1.1 1. Подготовка системы
- 1.2 2. Установка Git
- 1.3 3. Настройка Git сервера
- 1.4 4. Создание репозиториев
- 1.5 5. Настройка GitWeb
- 1.6 6. Настройка Git Daemon
- 1.7 7. Настройка SSH доступа
- 1.8 8. Настройка файрвола
- 1.9 9. Управление репозиториями
- 1.10 10. Мониторинг и логирование
- 1.11 11. Устранение неполадок
- 1.12 12. Дополнительные настройки
- 1.13 Заключение
Установка и настройка 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):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных Git серверов
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних команд
Наши специалисты помогут с настройкой Git сервера и обеспечением безопасности ваших репозиториев!