Зачем нужен деплой?

Классический метод доставки WordPress-сайта с локальной машины на сервер - заливка файлов через FTP. Этим способом пользовались дедушки и бабушки и до сих пор он работает. Но насколько качественно этот способ выполняет свою задачу?

Опишем существующие проблемы классического способа:

  • При заливке файлов через FTP неизбежны ошибки, вследствие разрыва сетевого соединения например;
  • Вы не можете быть уверены, что состав и содержимое файлов на локальном проекте и на удаленном сервере идентичны;
  • В момент заливки файлов может возникнуть аварийная ситуация, если один из новых файлов вызывает функцию из другого нового файла, который не успел залиться;
  • Процесс заливки через FTP сложно автоматизировать, так как требуется FTP-клиент и оператор-человек, который им воспользуется;

Что нам даст деплой в сравнении с классикой:

  • Автоматизацию и еще раз автоматизацию. Например мы можем связать процесс доставки свежих версий сайта с какой-либо веткой репозитория и новая версия сайта будет доставляться после просто пуша в эту ветку;
  • Гарантия соответствия кода на сервере нашему локальному коду;
  • Избавление от риска падения сайта в процессе деплоя(даже если новая версия окажется нерабочей, мы сможем откатить ее почти мгновенно);

В наше время многие хостеры стали предоставлять доступ к аккаунту хостинга через SSH. И хотя возможности этого доступа сильно ограничены, мы все же можем воспользоваться ими для автоматизации доставки новых версий сайта на хостинг. Рассмотрим все варианты, начиная с самых простых и заканчивая полной автоматизацией процессов деплоя.

Простейший деплой через связку SSH/Rsync

Для нашей статьи я специально купил шаред хостинг в компании Beget. Все практические примеры будут рассмотрены применительно к нему. Для начала необходимо включить SSH-доступ к хостингу в панели управления в разделе Тех. информация или FTP. Затем проверим вход через SSH. По-умолчанию используется вход по паролю. Логин и пароль совпадают с логином и паролем для входа в панель управления.

ssh ВАШ_ЛОГИН@ВАШЕ_ИМЯ_СЕРВЕРА

Если мы всё сделали верно, то нам предложат ввести пароль от панели управления и мы попадём на сервер. Проверим, какие инструменты нам доступны на хостинге, поочереди вводя команды:

wp cli version
composer --version
git --version

Для большего удобства добавим возможность авторизоваться на хостинге по ключу. Для этого достаточно зайти в Файловый менеджер хостинга и создать файл .ssh/authorized_keys. После чего отредактируем созданный файл и добавим в него наш публичный SSH-ключ. Проверим снова вход по SSH. Теперь запроса на пароль уже нет и авторизация пройдет сразу. Отлично, хостинг готов для деплоя. Но готов ли наш локальный компьютер? Если Вы используете операционную систему Linux, то всё хорошо и скорее всего программа rsync уже установлена. C пользователями Windows ситуация немного сложнее. Но скорее всего у вас уже установлена программа Git for Windows. Эта программа имеет собственную консоль Git Bash, в которой прекрасно работают некоторые команды Linux. но нет rsync. Осталось только найти подходящий исполняемый файл rsync. Поиски приводят нас на этот ресурс, где ссылка на скачивание устарела, но путём несложных манипуляций находим новую ссылку. Файл заархивирован в хитром формате, поэтому специально для этой статьи я его распаковал и залил на свой блог: Rsync for Git Bash on Windows. Файл из архива rsync.exe необходимо распаковать в папку: C:\Program Files\Git\usr\bin. Запускаем консоль Git Bash и проверяем работу rsync:

rsync --version

Теперь мы можем попробовать при помощи rsync залить наш WordPress сайт на хостинг. Зайдем в папку нашего сайта и из нее запустим Git Bash. После чего введем команду для заливки сайта на сервер:

rsync -avh /d/wordpress/ ВАШ_ЛОГИН@ВАШЕ_ИМЯ_СЕРВЕРА:~/ВАШЕ_ИМЯ_СЕРВЕРА/public_html

В моем случае путь к папке такой: /d/wordpress/. С точки зрения OC Windows он соответствует пути: D:\wordpress. В вашем случае необходимо подставить свой путь к папке сайта. Например путь Windows: C:\laragon\www\wordpress преобразуется в /c/laragon/www/wordpress/. Внимание! Путь к исходной папке должен обязательно заканчиваться косой чертой. После завершения копирования мы можем через файловый менеджер хостинга проверить папку сайта, все файлы сайта успешно доставлены! Теперь изменим любой файл в локальной папке, например readme.html и повторим операцию. Теперь на сервер будет отправлен только файл readme.html, так как остальные не изменялись.

В продолжении статьи мы рассмотрим более сложный метод деплоя и попробуем автоматизировать его.