Установка и настройка Git сервера — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Установка и настройка Git сервера = == 1. Подготовка системы == * Войдите в систему под учет…») |
Admin (обсуждение | вклад) |
||
Строка 11: | Строка 11: | ||
1. Обновите список пакетов: | 1. Обновите список пакетов: | ||
− | <code> | + | <code>sudo apt update</code> |
− | sudo apt update | ||
− | </code> | ||
2. Установите Git: | 2. Установите Git: | ||
− | <code> | + | <code>sudo apt install git</code> |
− | sudo apt install git | ||
− | </code> | ||
3. Установите дополнительные компоненты: | 3. Установите дополнительные компоненты: | ||
− | <code> | + | <code>sudo apt install git-core gitweb git-daemon-run</code> |
− | sudo apt install git-core gitweb git-daemon-run | ||
− | </code> | ||
=== Проверка установки === | === Проверка установки === | ||
1. Проверьте версию Git: | 1. Проверьте версию Git: | ||
− | <code> | + | <code>git --version</code> |
− | git --version | ||
− | </code> | ||
2. Проверьте конфигурацию: | 2. Проверьте конфигурацию: | ||
− | <code> | + | <code>git config --list</code> |
− | git config --list | ||
− | </code> | ||
== 3. Настройка Git сервера === | == 3. Настройка Git сервера === | ||
Строка 42: | Строка 32: | ||
1. Создайте пользователя для Git: | 1. Создайте пользователя для Git: | ||
− | <code> | + | <code>sudo useradd -m -s /bin/bash git</code> |
− | sudo useradd -m -s /bin/bash git | ||
− | </code> | ||
2. Установите пароль: | 2. Установите пароль: | ||
− | <code> | + | <code>sudo passwd git</code> |
− | sudo passwd git | ||
− | </code> | ||
3. Создайте директорию для репозиториев: | 3. Создайте директорию для репозиториев: | ||
− | <code> | + | <code>sudo mkdir -p /home/git/repositories |
− | sudo mkdir -p /home/git/repositories | ||
sudo chown git:git /home/git/repositories | sudo chown git:git /home/git/repositories | ||
− | sudo chmod 755 /home/git/repositories | + | sudo chmod 755 /home/git/repositories</code> |
− | </code> | ||
=== Настройка SSH ключей === | === Настройка SSH ключей === | ||
1. Переключитесь на пользователя git: | 1. Переключитесь на пользователя git: | ||
− | <code> | + | <code>sudo su - git</code> |
− | sudo su - git | ||
− | </code> | ||
2. Создайте директорию для SSH ключей: | 2. Создайте директорию для SSH ключей: | ||
− | <code> | + | <code>mkdir -p ~/.ssh |
− | mkdir -p ~/.ssh | + | chmod 700 ~/.ssh</code> |
− | chmod 700 ~/.ssh | ||
− | </code> | ||
3. Создайте файл authorized_keys: | 3. Создайте файл authorized_keys: | ||
− | <code> | + | <code>touch ~/.ssh/authorized_keys |
− | touch ~/.ssh/authorized_keys | + | chmod 600 ~/.ssh/authorized_keys</code> |
− | chmod 600 ~/.ssh/authorized_keys | ||
− | </code> | ||
== 4. Создание репозиториев === | == 4. Создание репозиториев === | ||
Строка 82: | Строка 60: | ||
1. Создайте голый репозиторий: | 1. Создайте голый репозиторий: | ||
− | <code> | + | <code>cd /home/git/repositories |
− | cd /home/git/repositories | + | git init --bare my-project.git</code> |
− | git init --bare my-project.git | ||
− | </code> | ||
2. Установите права доступа: | 2. Установите права доступа: | ||
− | <code> | + | <code>sudo chown -R git:git my-project.git |
− | sudo chown -R git:git my-project.git | + | sudo chmod -R 755 my-project.git</code> |
− | sudo chmod -R 755 my-project.git | ||
− | </code> | ||
=== Создание репозитория с GitWeb === | === Создание репозитория с GitWeb === | ||
1. Создайте репозиторий для GitWeb: | 1. Создайте репозиторий для GitWeb: | ||
− | <code> | + | <code>cd /home/git/repositories |
− | cd /home/git/repositories | + | git init --bare --shared=group my-project-web.git</code> |
− | git init --bare --shared=group my-project-web.git | ||
− | </code> | ||
2. Настройте описание репозитория: | 2. Настройте описание репозитория: | ||
− | <code> | + | <code>echo "My Project Repository" > my-project-web.git/description</code> |
− | echo "My Project Repository" > my-project-web.git/description | ||
− | </code> | ||
3. Включите GitWeb: | 3. Включите GitWeb: | ||
− | <code> | + | <code>echo "gitweb" > my-project-web.git/gitweb</code> |
− | echo "gitweb" > my-project-web.git/gitweb | ||
− | </code> | ||
== 5. Настройка GitWeb === | == 5. Настройка GitWeb === | ||
Строка 116: | Строка 84: | ||
1. Установите GitWeb: | 1. Установите GitWeb: | ||
− | <code> | + | <code>sudo apt install gitweb</code> |
− | sudo apt install gitweb | ||
− | </code> | ||
2. Отредактируйте конфигурацию GitWeb: | 2. Отредактируйте конфигурацию GitWeb: | ||
− | <code> | + | <code>sudo nano /etc/gitweb.conf</code> |
− | sudo nano /etc/gitweb.conf | ||
− | </code> | ||
3. Настройте основные параметры: | 3. Настройте основные параметры: | ||
− | <code> | + | <code># Основные настройки |
− | # Основные настройки | ||
$projectroot = "/home/git/repositories"; | $projectroot = "/home/git/repositories"; | ||
$git_temp = "/tmp"; | $git_temp = "/tmp"; | ||
Строка 140: | Строка 103: | ||
# Настройки безопасности | # Настройки безопасности | ||
$export_ok = "git-daemon-export-ok"; | $export_ok = "git-daemon-export-ok"; | ||
− | $strict_export = 1; | + | $strict_export = 1;</code> |
− | </code> | ||
=== Настройка веб-сервера для GitWeb === | === Настройка веб-сервера для GitWeb === | ||
1. Создайте конфигурацию для Apache: | 1. Создайте конфигурацию для Apache: | ||
− | <code> | + | <code>sudo nano /etc/apache2/sites-available/gitweb.conf</code> |
− | sudo nano /etc/apache2/sites-available/gitweb.conf | ||
− | </code> | ||
2. Добавьте конфигурацию: | 2. Добавьте конфигурацию: | ||
− | <code> | + | <code><VirtualHost *:80> |
− | <VirtualHost *:80> | ||
ServerName git.example.com | ServerName git.example.com | ||
DocumentRoot /usr/share/gitweb | DocumentRoot /usr/share/gitweb | ||
Строка 170: | Строка 129: | ||
Require all granted | Require all granted | ||
</Directory> | </Directory> | ||
− | </VirtualHost> | + | </VirtualHost></code> |
− | </code> | ||
3. Включите сайт: | 3. Включите сайт: | ||
− | <code> | + | <code>sudo a2ensite gitweb |
− | sudo a2ensite gitweb | + | sudo systemctl restart apache2</code> |
− | sudo systemctl restart apache2 | ||
− | </code> | ||
== 6. Настройка Git Daemon === | == 6. Настройка Git Daemon === | ||
Строка 184: | Строка 140: | ||
1. Отредактируйте конфигурацию Git Daemon: | 1. Отредактируйте конфигурацию Git Daemon: | ||
− | <code> | + | <code>sudo nano /etc/default/git-daemon</code> |
− | sudo nano /etc/default/git-daemon | ||
− | </code> | ||
2. Настройте параметры: | 2. Настройте параметры: | ||
− | <code> | + | <code>GIT_DAEMON_ENABLE=1 |
− | GIT_DAEMON_ENABLE=1 | ||
GIT_DAEMON_USER=git | GIT_DAEMON_USER=git | ||
GIT_DAEMON_BASE_PATH=/home/git/repositories | GIT_DAEMON_BASE_PATH=/home/git/repositories | ||
− | GIT_DAEMON_OPTIONS="--export-all --reuseaddr --verbose --base-path=/home/git/repositories" | + | GIT_DAEMON_OPTIONS="--export-all --reuseaddr --verbose --base-path=/home/git/repositories"</code> |
− | </code> | ||
3. Запустите Git Daemon: | 3. Запустите Git Daemon: | ||
− | <code> | + | <code>sudo systemctl start git-daemon |
− | sudo systemctl start git-daemon | + | sudo systemctl enable git-daemon</code> |
− | sudo systemctl enable git-daemon | ||
− | </code> | ||
=== Настройка репозиториев для Git Daemon === | === Настройка репозиториев для Git Daemon === | ||
1. Создайте файл для экспорта репозитория: | 1. Создайте файл для экспорта репозитория: | ||
− | <code> | + | <code>touch /home/git/repositories/my-project.git/git-daemon-export-ok</code> |
− | touch /home/git/repositories/my-project.git/git-daemon-export-ok | ||
− | </code> | ||
2. Установите права доступа: | 2. Установите права доступа: | ||
− | <code> | + | <code>sudo chown git:git /home/git/repositories/my-project.git/git-daemon-export-ok</code> |
− | sudo chown git:git /home/git/repositories/my-project.git/git-daemon-export-ok | ||
− | </code> | ||
== 7. Настройка SSH доступа === | == 7. Настройка SSH доступа === | ||
Строка 219: | Строка 165: | ||
1. Отредактируйте SSH конфигурацию: | 1. Отредактируйте SSH конфигурацию: | ||
− | <code> | + | <code>sudo nano /etc/ssh/sshd_config</code> |
− | sudo nano /etc/ssh/sshd_config | ||
− | </code> | ||
2. Добавьте настройки для Git: | 2. Добавьте настройки для Git: | ||
− | <code> | + | <code># Настройки для Git |
− | # Настройки для Git | ||
Match User git | Match User git | ||
AllowUsers git | AllowUsers git | ||
ForceCommand git-shell | ForceCommand git-shell | ||
X11Forwarding no | X11Forwarding no | ||
− | AllowTcpForwarding no | + | AllowTcpForwarding no</code> |
− | </code> | ||
3. Перезапустите SSH: | 3. Перезапустите SSH: | ||
− | <code> | + | <code>sudo systemctl restart ssh</code> |
− | sudo systemctl restart ssh | ||
− | </code> | ||
=== Настройка Git Shell === | === Настройка Git Shell === | ||
1. Создайте директорию для Git Shell: | 1. Создайте директорию для Git Shell: | ||
− | <code> | + | <code>sudo mkdir -p /home/git/git-shell-commands |
− | sudo mkdir -p /home/git/git-shell-commands | + | sudo chown git:git /home/git/git-shell-commands</code> |
− | sudo chown git:git /home/git/git-shell-commands | ||
− | </code> | ||
2. Создайте скрипт для отображения репозиториев: | 2. Создайте скрипт для отображения репозиториев: | ||
− | <code> | + | <code>sudo nano /home/git/git-shell-commands/list-repos</code> |
− | sudo nano /home/git/git-shell-commands/list-repos | ||
− | </code> | ||
3. Добавьте содержимое: | 3. Добавьте содержимое: | ||
− | <code> | + | <code>#!/bin/bash |
− | #!/bin/bash | ||
echo "Available repositories:" | echo "Available repositories:" | ||
− | ls -la /home/git/repositories/ | + | ls -la /home/git/repositories/</code> |
− | </code> | ||
4. Сделайте скрипт исполняемым: | 4. Сделайте скрипт исполняемым: | ||
− | <code> | + | <code>sudo chmod +x /home/git/git-shell-commands/list-repos |
− | sudo chmod +x /home/git/git-shell-commands/list-repos | + | sudo chown git:git /home/git/git-shell-commands/list-repos</code> |
− | sudo chown git:git /home/git/git-shell-commands/list-repos | ||
− | </code> | ||
== 8. Настройка файрвола === | == 8. Настройка файрвола === | ||
Строка 269: | Строка 201: | ||
1. Разрешите SSH трафик: | 1. Разрешите SSH трафик: | ||
− | <code> | + | <code>sudo ufw allow ssh</code> |
− | sudo ufw allow ssh | ||
− | </code> | ||
2. Разрешите HTTP трафик для GitWeb: | 2. Разрешите HTTP трафик для GitWeb: | ||
− | <code> | + | <code>sudo ufw allow 80/tcp</code> |
− | sudo ufw allow 80/tcp | ||
− | </code> | ||
3. Разрешите Git Daemon порт: | 3. Разрешите Git Daemon порт: | ||
− | <code> | + | <code>sudo ufw allow 9418/tcp</code> |
− | sudo ufw allow 9418/tcp | ||
− | </code> | ||
4. Проверьте статус: | 4. Проверьте статус: | ||
− | <code> | + | <code>sudo ufw status</code> |
− | sudo ufw status | ||
− | </code> | ||
=== Настройка iptables === | === Настройка iptables === | ||
1. Разрешите необходимые порты: | 1. Разрешите необходимые порты: | ||
− | <code> | + | <code>sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
− | 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 80 -j ACCEPT | ||
− | sudo iptables -A INPUT -p tcp --dport 9418 -j ACCEPT | + | sudo iptables -A INPUT -p tcp --dport 9418 -j ACCEPT</code> |
− | </code> | ||
2. Сохраните правила: | 2. Сохраните правила: | ||
− | <code> | + | <code>sudo iptables-save > /etc/iptables/rules.v4</code> |
− | sudo iptables-save > /etc/iptables/rules.v4 | ||
− | </code> | ||
== 9. Управление репозиториями === | == 9. Управление репозиториями === | ||
Строка 307: | Строка 227: | ||
1. Создайте новый репозиторий: | 1. Создайте новый репозиторий: | ||
− | <code> | + | <code>cd /home/git/repositories |
− | cd /home/git/repositories | + | sudo -u git git init --bare new-project.git</code> |
− | sudo -u git git init --bare new-project.git | ||
− | </code> | ||
2. Установите права доступа: | 2. Установите права доступа: | ||
− | <code> | + | <code>sudo chown -R git:git new-project.git |
− | sudo chown -R git:git new-project.git | + | sudo chmod -R 755 new-project.git</code> |
− | sudo chmod -R 755 new-project.git | ||
− | </code> | ||
3. Настройте описание: | 3. Настройте описание: | ||
− | <code> | + | <code>echo "New Project Repository" | sudo tee new-project.git/description</code> |
− | echo "New Project Repository" | sudo tee new-project.git/description | ||
− | </code> | ||
=== Управление доступом === | === Управление доступом === | ||
1. Добавьте SSH ключ пользователя: | 1. Добавьте SSH ключ пользователя: | ||
− | <code> | + | <code>sudo -u git bash -c "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC...' >> /home/git/.ssh/authorized_keys"</code> |
− | sudo -u git bash -c "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC...' >> /home/git/.ssh/authorized_keys" | ||
− | </code> | ||
2. Удалите SSH ключ: | 2. Удалите SSH ключ: | ||
− | <code> | + | <code>sudo -u git bash -c "sed -i '/ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC.../d' /home/git/.ssh/authorized_keys"</code> |
− | sudo -u git bash -c "sed -i '/ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC.../d' /home/git/.ssh/authorized_keys" | ||
− | </code> | ||
=== Управление репозиториями === | === Управление репозиториями === | ||
1. Просмотрите список репозиториев: | 1. Просмотрите список репозиториев: | ||
− | <code> | + | <code>ls -la /home/git/repositories/</code> |
− | ls -la /home/git/repositories/ | ||
− | </code> | ||
2. Удалите репозиторий: | 2. Удалите репозиторий: | ||
− | <code> | + | <code>sudo rm -rf /home/git/repositories/old-project.git</code> |
− | sudo rm -rf /home/git/repositories/old-project.git | ||
− | </code> | ||
3. Переименуйте репозиторий: | 3. Переименуйте репозиторий: | ||
− | <code> | + | <code>sudo mv /home/git/repositories/old-name.git /home/git/repositories/new-name.git</code> |
− | sudo mv /home/git/repositories/old-name.git /home/git/repositories/new-name.git | ||
− | </code> | ||
== 10. Мониторинг и логирование === | == 10. Мониторинг и логирование === | ||
Строка 357: | Строка 261: | ||
1. Создайте скрипт логирования Git операций: | 1. Создайте скрипт логирования Git операций: | ||
− | <code> | + | <code>sudo nano /home/git/git-shell-commands/log-activity</code> |
− | sudo nano /home/git/git-shell-commands/log-activity | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>#!/bin/bash |
− | #!/bin/bash | + | echo "$(date): $SSH_ORIGINAL_COMMAND" >> /home/git/git-activity.log</code> |
− | echo "$(date): $SSH_ORIGINAL_COMMAND" >> /home/git/git-activity.log | ||
− | </code> | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | <code> | + | <code>sudo chmod +x /home/git/git-shell-commands/log-activity |
− | sudo chmod +x /home/git/git-shell-commands/log-activity | + | sudo chown git:git /home/git/git-shell-commands/log-activity</code> |
− | sudo chown git:git /home/git/git-shell-commands/log-activity | ||
− | </code> | ||
=== Просмотр логов === | === Просмотр логов === | ||
1. Просмотрите логи SSH: | 1. Просмотрите логи SSH: | ||
− | <code> | + | <code>sudo tail -f /var/log/auth.log | grep git</code> |
− | sudo tail -f /var/log/auth.log | grep git | ||
− | </code> | ||
2. Просмотрите логи Git активности: | 2. Просмотрите логи Git активности: | ||
− | <code> | + | <code>sudo tail -f /home/git/git-activity.log</code> |
− | sudo tail -f /home/git/git-activity.log | ||
− | </code> | ||
3. Просмотрите логи Apache для GitWeb: | 3. Просмотрите логи Apache для GitWeb: | ||
− | <code> | + | <code>sudo tail -f /var/log/apache2/access.log | grep gitweb</code> |
− | sudo tail -f /var/log/apache2/access.log | grep gitweb | ||
− | </code> | ||
=== Создание скрипта мониторинга === | === Создание скрипта мониторинга === | ||
1. Создайте скрипт мониторинга: | 1. Создайте скрипт мониторинга: | ||
− | <code> | + | <code>sudo nano /usr/local/bin/git-monitor.sh</code> |
− | sudo nano /usr/local/bin/git-monitor.sh | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>#!/bin/bash |
− | #!/bin/bash | ||
# Проверка статуса Git сервисов | # Проверка статуса Git сервисов | ||
Строка 426: | Строка 315: | ||
# Проверка использования диска | # Проверка использования диска | ||
DISK_USAGE=$(du -sh /home/git/repositories/ | cut -f1) | DISK_USAGE=$(du -sh /home/git/repositories/ | cut -f1) | ||
− | echo "Repository disk usage: $DISK_USAGE" | + | echo "Repository disk usage: $DISK_USAGE"</code> |
− | </code> | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | <code> | + | <code>sudo chmod +x /usr/local/bin/git-monitor.sh</code> |
− | sudo chmod +x /usr/local/bin/git-monitor.sh | ||
− | </code> | ||
== 11. Устранение неполадок === | == 11. Устранение неполадок === | ||
Строка 456: | Строка 342: | ||
1. Проверьте статус служб: | 1. Проверьте статус служб: | ||
− | <code> | + | <code>sudo systemctl status ssh |
− | sudo systemctl status ssh | ||
sudo systemctl status git-daemon | sudo systemctl status git-daemon | ||
− | sudo systemctl status apache2 | + | sudo systemctl status apache2</code> |
− | </code> | ||
2. Проверьте подключения: | 2. Проверьте подключения: | ||
− | <code> | + | <code>sudo netstat -tlnp | grep -E ':(22|80|9418)'</code> |
− | sudo netstat -tlnp | grep -E ':(22|80|9418)' | ||
− | </code> | ||
3. Проверьте SSH подключение: | 3. Проверьте SSH подключение: | ||
− | <code> | + | <code>ssh -T git@localhost</code> |
− | ssh -T git@localhost | ||
− | </code> | ||
4. Проверьте права доступа: | 4. Проверьте права доступа: | ||
− | <code> | + | <code>ls -la /home/git/ |
− | ls -la /home/git/ | + | ls -la /home/git/repositories/</code> |
− | ls -la /home/git/repositories/ | ||
− | </code> | ||
== 12. Дополнительные настройки === | == 12. Дополнительные настройки === | ||
Строка 483: | Строка 361: | ||
1. Создайте хук для уведомлений: | 1. Создайте хук для уведомлений: | ||
− | <code> | + | <code>sudo nano /home/git/repositories/my-project.git/hooks/post-receive</code> |
− | sudo nano /home/git/repositories/my-project.git/hooks/post-receive | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>#!/bin/bash |
− | #!/bin/bash | + | echo "Repository updated: $(date)" | mail -s "Git Update" admin@example.com</code> |
− | echo "Repository updated: $(date)" | mail -s "Git Update" admin@example.com | ||
− | </code> | ||
3. Сделайте хук исполняемым: | 3. Сделайте хук исполняемым: | ||
− | <code> | + | <code>sudo chmod +x /home/git/repositories/my-project.git/hooks/post-receive |
− | 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</code> |
− | sudo chown git:git /home/git/repositories/my-project.git/hooks/post-receive | ||
− | </code> | ||
=== Настройка резервного копирования === | === Настройка резервного копирования === | ||
1. Создайте скрипт резервного копирования: | 1. Создайте скрипт резервного копирования: | ||
− | <code> | + | <code>sudo nano /usr/local/bin/git-backup.sh</code> |
− | sudo nano /usr/local/bin/git-backup.sh | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>#!/bin/bash |
− | #!/bin/bash | ||
BACKUP_DIR="/backup/git" | BACKUP_DIR="/backup/git" | ||
Строка 523: | Строка 392: | ||
find $BACKUP_DIR -name "git_repos_*.tar.gz" -mtime +7 -delete | find $BACKUP_DIR -name "git_repos_*.tar.gz" -mtime +7 -delete | ||
− | echo "Git backup completed: git_repos_$DATE.tar.gz" | + | echo "Git backup completed: git_repos_$DATE.tar.gz"</code> |
− | </code> | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | <code> | + | <code>sudo chmod +x /usr/local/bin/git-backup.sh</code> |
− | sudo chmod +x /usr/local/bin/git-backup.sh | ||
− | </code> | ||
4. Добавьте в crontab: | 4. Добавьте в crontab: | ||
− | <code> | + | <code># Ежедневный бэкап в 2:00 |
− | # Ежедневный бэкап в 2:00 | + | 0 2 * * * /usr/local/bin/git-backup.sh</code> |
− | 0 2 * * * /usr/local/bin/git-backup.sh | ||
− | </code> | ||
== Заключение == | == Заключение == |
Версия 19:55, 14 октября 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:
# Настройки для 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. Добавьте содержимое:
#!/bin/bash
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. Добавьте содержимое:
#!/bin/bash
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. Добавьте содержимое:
#!/bin/bash
- Проверка статуса Git сервисов
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. Добавьте содержимое:
#!/bin/bash
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. Добавьте содержимое:
#!/bin/bash
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 .
- Удаление старых бэкапов (старше 7 дней)
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:
# Ежедневный бэкап в 2:00
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 сервера и обеспечением безопасности ваших репозиториев!