ssh и git --bareКогда у меня будет депрессивная фаза я никому не скажу, но будут признаки.
Вы уже прочитали первый пост и второй пост про как и зачем мы git --bare и всё ещё не понимаете зачем.
Давайте представим что у нас есть статический сайт и мы хотим его деплоить с локального устройство на серверное устройство. Мы всё тоже самое можем сделать через гитхаб, но мы можем и без!
Я вам расскажу как без, но это вряд ли оптимальный способ жить:
+ весело
+ независимо
– если у вас много картинок, то блог будет занимать x2 или даже сильно хуже
– гитхаб даст третью точку для бекапа
Но нам нужно весело поэтому давайте веселиться! Но вы можете всё тоже самое сделать и через гитхаб, просто не тоже самое!
1. делаем ssh
Допустим у нас есть блог hshhhhh.name, на сервере пользователь тоже hshhhhh.name и мы уже можем подключиться к нему по ssh.
Теперь мы добавим в ~/ssh/config:
Host hshhhhh.name
HostName 159.223.250.0
IdentityFile ~/.ssh/keys/hshhhhh.name
User hshhhhh.name
Теперь работает так:
$ ssh hshhhhh.name
2. подготавливаем сервер
Мы будем направлять nginx на директорию /home/hshhhhh.name/public_html/ потому что мы чтим традиции и уважаем чтение традиций. Поэтому мы создадим на сервере один git --bare и один нормальный, нормальный будет получать апдейты из git --bare, а потом нгинкс через симлинк будет ходить в нормальный.
Или на локальном устройстве, или на удалённом устройстве:
$ ssh hshhhhh.name "git init --bare ~/.git--bare" $ ssh hshhhhh.name "mkdir ~/git/"
3. делаем блог
Внутри нашего репозитория тоже будет /public_html/ директория куда мы будем складывать результат. Всякое остальное на ваш выбор.
На локальном устройстве:
$ mkdir -p /tmp/hshhhhh.name/public_html/ $ cd /tmp/hshhhhh.name/ $ date > public_html/index.html $ git init . $ git config --local user.name "hshhhhh" $ git config --local user.email "email" $ git add public_html/ $ git commit -m "initial commit"
И посылаем это на удалённое устройство (если в урле есть : то это относительный путь, а если нет — абсолютный (но тогда должно начинаться с ssh://)):
$ git remote add hosting "hshhhhh.name:.git--bare/" $ git push hosting
4. деплоим
Сначала мы git pull в локальный нормальный репозиторий, потом мы симлинкаем и как-нибудь там перезапускаем nginx если он вдруг не оценит подмену директории на симлинк.
Или на локальном устройстве, или на удалённом устройстве:
$ ssh hshhhhh.name "git clone ~/.git--bare ~/git/" $ ssh hshhhhh.name "git -C ~/git/ pull" $ ssh hshhhhh.name "cat ~/git/public_html/index.html"
Делаем симлинк и проверяем в браузере (при создании симлинка в конце не должно быть слеша):
$ ssh hshhhhh.name "mv ~/public_html/ ~/public_html_backup/" $ ssh hshhhhh.name "ln -s ~/git/public_html/ ~/public_html" $ curl --location https://hshhhhh.name/
4. деплоим обновление
На локальном устройстве:
$ cd /tmp/hshhhhh.name/ $ date >> public_html/index.html $ git add public_html/index.html $ git commit -m "second commit" $ git push hosting $ ssh hshhhhh.name "git -C ~/git/ pull" $ curl --location https://hshhhhh.name/
Потрясающе, вы прямо хакер такие чудеса делаете может быть вам бы уже завести себе бложик и делиться вашими исследованиями?
#linux #howto #man #git #deploy
2025.11.10 04:05