Sunday, January 28, 2018

Автоматическая загрузка сайта на хостинг

upd 07.11.2021: теперь для проектов используется инструмент для автоматизации github action:
https://github.com/features/actions
FTP Deploy:
https://github.com/SamKirkland/FTP-Deploy-Action


Проблема

Каждый раз при изменении сайта мне приходится копировать изменения на хостинг. Для этого я выполняю такие действия:

  • открываю FTP клиент;
  • подключаюсь к серверу;
  • удаляю файлы на сервере;
  • копирую новые файлы на сервер;
  • отключаюсь и закрываю FTP клиент.

В данном посте я хочу автоматизировать эти действия.


Исследование

Единственное что мне было неизвестно: как выполнить команду на удаленном сервере.

Ответ по ссылке:
https://stackoverflow.com/a/7363641/1775459


Написание скрипта 

Скрипт оказался маленьким. Это хорошо:

#!/bin/bash

# Скрипт выкладывает данные на сервак

LOGIN="тут ваш логин"
HOST="тут имя вашего сервера"

scp -r ./dist $LOGIN@$HOST:~/tmpdir

ssh $LOGIN@$HOST 'bash -s' <<'ENDSSH'
  # эти команды выполнятся на вашем удаленном сервере
  rm -rf yourwebsite
  mv tmpdir yourwebsite
ENDSSH

Некоторые пояснения к скрипту:
  1. Команда scp копирует папку dist на сервер в соответствующую папку. Папка dist - это папка, в которой находятся файлы сайта. Если файлы вашего сайта находятся в другой папке, необходимо указать именно ее.
  2. Новые файлы на сервере копируются сначала в новую папку tmpdir. Это временная папка.
  3. Старые файлы полностью удаляются, а на их место перемещается все содержимое временной папки.

Итого

Теперь, когда у меня есть скрипт, я обновляю свой сайт путем выполнения одной команды. Это круто и экономит время.