Коротко для тех, кто спешит
Утилита FTP Deployment: написана на php, принимает в качестве параметра путь к конфигу и выкладывает файлы на удаленный сервер, довольно быстро и хорошо.
Долго и подробно для тех, кому интересно
Все мы любим классные и удобные методы деплоя с помощью capistrano, rsync или, на худой конец, git pull. А если надо выкладывать проекты на shared-хостинг?
Да, некоторые провайдеры предоставляют ssh и git. Но, прямо скажу, их немного.
Однажды я вдруг понял, что привык к хорошему, и ненавижу выкладывать проекты через (S)FTP: не залился какой-то файл; надо вспомнить, где лежат конфиги; вот эту папку не надо выкладывать вообще; вот тут надо проверить права. Думаю, многие этот список легко продолжат.
Тут еще надо сказать, что я с большим удовольствием пользуюсь символическими ссылками для минимизации места (и автоматической актуализации кода). Небольшой shell-скрипт создает контекст нового проекта, в котором уже есть библиотеки, ядро, статика и docroot с htaccess. Мне остается положить правильные конфиги и настроить всё “под клиента”.
В старые времена всё это я делал на своей локальной системе, а потом с помощью FileZilla или GnomeCommander заливал на
С помощью FTP Deployment выкладка из долгого муторного занятия превращается в одну команду. Ну, на самом деле, в две — тестовый запуск никто не отменял:).
Первый этап: в папку проекта (или в любое удобное место) нужно поместить конфиг утилиты. Ini или php — на ваш выбор. Позволю себе перевести на русский комментарии в примере.
; пассивный режим FTP ; локальный путь (опционально, но я обычно указывают абсолютный путь вроде /var/www/production/project_path/) ; тестовый режим? (можно включить опцией -t или --test) ; Список игнорируемых файлов и каталогов ; скрипты, которые надо запустить до загрузки ; скрипты, которые надо запустить после загрузки ; скрипты, которые будут запущены в конце ; каталоги, которые надо очистить после загрузки ; файлы для предобработки (по умолчанию -- *.js *.css) ; Файл, в котором будут контрольные суммы загруженных файлов[my site] ; Может быть несколько секций
; удаленный FTP-сервер
remote = ftp://user:secretpassword@ftp.example.com/directory
passiveMode = yes
local = .
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
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
Утилита расскажет, что она собирается делать и с какими файлами. Если вы сомневаетесь в списке игнорируемого — самое то.
Если всё хорошо — можно деплоиться:
php deployment.php deployment.ini
Поначалу внимательно читайте, что вам напишет тестовый запуск. По очевидным причинам нельзя закачивать на сервер ftp-deployment.ini. Ну, и вообще, у кого-то и config.php.bak в проектах болтается…
Мне утилита очень понравилась, с удовольствием пользуюсь и друзьям советую. Если знаете удобные альтернативы на других языках — буду благодарен.
Автор: Andrewus