Деплой на shared-хостинг: боль и страдания или простая рутина?

в 16:35, , рубрики: deploy, deployment tools, php, Веб-разработка, выкладка, ит-инфраструктура, утилиты деплоя

Коротко для тех, кто спешит

Утилита FTP Deployment: написана на php, принимает в качестве параметра путь к конфигу и выкладывает файлы на удаленный сервер, довольно быстро и хорошо.

Долго и подробно для тех, кому интересно

Все мы любим классные и удобные методы деплоя с помощью capistrano, rsync или, на худой конец, git pull. А если надо выкладывать проекты на shared-хостинг?

Да, некоторые провайдеры предоставляют ssh и git. Но, прямо скажу, их немного.

Однажды я вдруг понял, что привык к хорошему, и ненавижу выкладывать проекты через (S)FTP: не залился какой-то файл; надо вспомнить, где лежат конфиги; вот эту папку не надо выкладывать вообще; вот тут надо проверить права. Думаю, многие этот список легко продолжат.

Тут еще надо сказать, что я с большим удовольствием пользуюсь символическими ссылками для минимизации места (и автоматической актуализации кода). Небольшой shell-скрипт создает контекст нового проекта, в котором уже есть библиотеки, ядро, статика и docroot с htaccess. Мне остается положить правильные конфиги и настроить всё “под клиента”.

В старые времена всё это я делал на своей локальной системе, а потом с помощью FileZilla или GnomeCommander заливал на хостинг. Сейчас перешел на небольшой выделенный сервер, и пришлось искать решение. Хотелось готовое и простое — и я его нашел!

С помощью FTP Deployment выкладка из долгого муторного занятия превращается в одну команду. Ну, на самом деле, в две — тестовый запуск никто не отменял:).

Первый этап: в папку проекта (или в любое удобное место) нужно поместить конфиг утилиты. Ini или php — на ваш выбор. Позволю себе перевести на русский комментарии в примере.

[my site] ; Может быть несколько секций
; удаленный FTP-сервер
remote = ftp://user:secretpassword@ftp.example.com/directory

; пассивный режим FTP
passiveMode = yes

; локальный путь (опционально, но я обычно указывают абсолютный путь вроде /var/www/production/project_path/)
local = .

; тестовый режим? (можно включить опцией -t или --test)
test = no

; Список игнорируемых файлов и каталогов
ignore = "
.git*
project.pp[jx]
/deployment.*
/log
temp/*
!temp/.htaccess
"
; Удалять файлы на сервере? (по умолчанию -- да)
allowDelete = yes

; скрипты, которые надо запустить до загрузки
before[] = http://example.com/deployment.php?before

; скрипты, которые надо запустить после загрузки
afterUpload[] = http://example.com/deployment.php?afterUpload

; скрипты, которые будут запущены в конце
after[] = http://example.com/deployment.php?after

; каталоги, которые надо очистить после загрузки
purge[] = temp/cache

; файлы для предобработки (по умолчанию -- *.js *.css)
preprocess = no

; Файл, в котором будут контрольные суммы загруженных файлов
deploymentFile = .deployment

В общем-то, всё достаточно очевидно и понятно. Readme проясняет некоторые неясности.

Например, в игнорируемых файлах pp[jx] — означает и ppj и ppx. Восклицательный знак — исключение из предыдущей строчки. В примере — всё, что находится в temp мы не загружаем. Но папку создаем и temp/.htaccess в нее загружаем.

И, наконец, про препроцессор. Утилита может сжимать css с помощью YUI Compressor, а js — с помощью Google Closure Compiler. Оба инструмента в дистрибутиве, но требуют Java.

Когда конфиг готов, можно провести тестовый запуск.

php deployment.php deployment.ini -t

Утилита расскажет, что она собирается делать и с какими файлами. Если вы сомневаетесь в списке игнорируемого — самое то.
image

Если всё хорошо — можно деплоиться:

php deployment.php deployment.ini

image

Поначалу внимательно читайте, что вам напишет тестовый запуск. По очевидным причинам нельзя закачивать на сервер ftp-deployment.ini. Ну, и вообще, у кого-то и config.php.bak в проектах болтается…

Мне утилита очень понравилась, с удовольствием пользуюсь и друзьям советую. Если знаете удобные альтернативы на других языках — буду благодарен.

Автор: Andrewus

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js