Установка и настройка Git сервера
Содержание
- 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 сервера и обеспечением безопасности ваших репозиториев!