Деплой статического блога через 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