Собственный Git-хостинг - без серверной инфраструктуры
Развертывание Git (Bare Repo) через SSH
0. Приоритет безопасности (Network & Cyber Security)
- ВАЖНО:
- Используйте только аутентификацию по SSH-ключам (Ed25519 или RSA-4096).
- Запретите вход по паролю в /etc/ssh/sshd_config (PasswordAuthentication no).
- В идеале используйте git-shell вместо /bin/bash для пользователя git, чтобы запретить выполнение произвольных команд.
1. Создание удаленного репозитория (Server Side)
На удаленном сервере создаем (bare) репозиторий. В нем хранятся
только дельты и снапшоты, исходных файлов в открытом виде нет.
Кстати рекомендую VPS c большим диском по низким ценам!
- это не реклама 100гигов за 330р на момент публикации
# 1. Подключаемся к серверу
ssh user@remote-server-ip
# 2. Создаем директорию для хранения репозиториев
mkdir -p ~/gitshare/project.git
# 3. Инициализируем bare-репозиторий
cd ~/gitshare/project.git
git init --bare
2. СТОРОНА КЛИЕНТА: Работа с файлами
Обычный рабочий процесс разработчика.
# 1. Клонируем репозиторий (SSH используется автоматически)
# Синтаксис: git clone user@host:/путь/до/папки
git clone user@remote-server-ip:~/gitshare/project.git
# 2. Переходим в папку
cd project
# 3. Создаем проверочный файл
echo "Hello World" > README.md
# 4. Фиксируем изменения
git add README.md
git commit -m "Init: Hello World created"
# 5. Отправляем на сервер
git push origin master
3. СНОВА СЕРВЕР: Просмотр содержимого (2 способа)
Так как в bare-репозитории нет файлов в открытом виде, используем один из методов ниже.
Способ А: Git Plumbing (Низкоуровневый, самый быстрый)
Просмотр базы данных Git напрямую без распаковки.
cd ~/gitshare/project.git
# 1. Посмотреть список файлов в последнем коммите (HEAD)
git ls-tree --full-tree -r HEAD
# Вывод: 100644 blob a5c19667... README.md
# 2. Прочитать содержимое файла по его хешу (blob)
# Хеш берем из вывода предыдущей команды
git cat-file blob a5c19667...
# Вывод: Hello World
Способ Б: Локальное клонирование (Для удобства)
Клонирование репозитория в соседнюю папку прямо на сервере, чтобы увидеть файлы "как обычно".
cd ~/gitshare
# 1. Клонируем bare-репозиторий в обычную папку рядом
# Указываем путь к папке (./project.git), SSH тут не нужен
git clone ./project.git ./project_preview
# 2. Заходим и проверяем
cd ./project_preview
ls -la
cat README.md
# Вывод: Hello World
5. Миграция (Если потребуется позже)
Перенос локального bare-репозитория на публичный сервис (GitHub/GitLab).
cd ~/gitshare/project.git
git remote add origin <GitHub-URL>
git push --mirror origin
Не пропусти - впереди ещё кое что интересное...
CI/CD на собственном Git хостинге