git и автоматический upload на фтп

artoodetoo

великий и ужасный
Масштабы накладывают отпечаток на сложность деплоя. Я на ***** равняться не boodoo )))
 

keltanas

marty cats
Композер умеет забирать код прямо из репозтория проекта.
В композере есть такая замечательная вещь, как скрипты. Т.е. после апдейта можно запускать скрипты, которые перегерят статику (как, например, в симфони), очистят кэш, применят миграции и т.д.
Также композер предоставляет уже готовый psr-0 / classmap / files. загрузчик для пакетов, которые он устанавливает (главное, настроить это в пакете).
Ваш проект он может так же деплоить в качестве пакета, решая все проблемы с автозагрузкой классов (надеюсь, что проект поддерживает psr-0).

Настроив composer.json, нужно будет только запустить php composer.phar install или php composer.phar update, в ручную, через хук или по расписанию (например), чтобы обновить версию проекта на продакшене.

В общем наигравшись в последнее время с композером, нахожу его не менее интересным инструментом для деплоя, чем для управления зависимостями. Благо одно другому не мешает.
 

fixxxer

К.О.
Партнер клуба
А я вот поигрался и меня не совсем все устроило, но может быть потому что я не до конца разобрался?
Смотри, что мне нужно:
1) никаких извращений с phar-репозами - все завязать на vcs (вроде можно);
2) на девел-среде надо уметь держать клон гит-репозитория "сбоку" и брать оттуда только подкаталог. Например, из Твига брать lib/Twig. Как именно это делается на девеле - не суть важно, можно просто использовать полный путь в клон, НО
3) при деплое (точнее, создании архива для деплоя) надо уметь положить в папочку vendor/ именно указанные поддиректории, а не таскать с собой весь мусор.

Вот с третьим пунктом вроде засада. Я понимаю, что можно таскать все лишнее дерьмо и композер.жсоны с путями на прод, но не хочу :) накой мне на проде тесты и документация
 

keltanas

marty cats
1. Не совсем понял, о чем ты. У тебя предполагается один phar-файл - composer.phar
2. Чтобы подключить к проекту twig, достаточно прописать в composer.json:
PHP:
{
    "require": {
        "twig/twig": "1.12.*@dev"
    }
}
Т.к. твиг уже есть на пакагисте.

Если захочешь, например, форкнуть твиг и использовать свою версию, то тебе нужно будет прописать к своему форку адрес репозитория:

PHP:
{
    "require": {
        "twig/twig": "1.12.*@dev"
    },
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/fixxxer/Twig"
        },
    ]
}
Если тебе нужно использовать репозиторий, для которого нет настроенного composer.json, то тебе надо прописать нужные настройки в своем composer.json:

PHP:
{
    "require": {
        "twig/twig": "1.12"
    },
    "repositories": [
        {
            "type":"package",
            "package":{
                "name":"twig/twig",
                "version":"1.12",
                "source":{
                    "type":"git",
                    "url":"https://github.com/fixxxer/Twig",
                    "reference":"master"
                },
                "autoload": {
                    "psr-0" : {
                        "Twig_" : "lib/"
                    }
                }
            }
        },
    ]
}
В секции autoload я определяю, как должны загружаться классы твига композеровским автолоадером.

3. Да, есть такое дело. Я рассматриваю такой вариант, в котором тебе не надо вообще таскать папку vendor куда-либо. Она создается и обновляется на сервере композером на основе прописанных конфигов. С каждым php composer.phar update будут загружаться указанные в конфиге версии пакетов (если версии отличаются от установленных).

Конечно, избежать клонирования лишних файлов в этом случае не удается. Если они мешают, можно написать обработчик на post-update-cmd, который удалит все лишнее. Но, зачем? Только из соображений эстетики? Доки и тесты же не мешают коду работать?

Тебе надо представить, что ты пользователь. Запускаешь программу установки, она ставит тебе нужный пакет. Пакет работает без лишних плясок с бубном. Что еще надо для счастья?

Тут предлагают возможность устанавливать пакет из удаленного zip-архива. Но, готовить для всех пакетов архивы, в которых лежат только нужные тебе файлы устанешь.
 

fixxxer

К.О.
Партнер клуба
Да я не хочу себе ничего представлять, я знаю чего я хочу. Из соображений не эстетики но сокращения времени деплоя.

Я собственно уже сам написал то, что мне надо - просто хотел удостовериться, вдруг я чего-то не понял и зря изобрел велосипед. В общем я все понял правильно, спасибо за уточнения. :)

И да, еще один package manager - это ересь, в любом линуксе он уже есть, плюс есть pear - какой-то велосипедизм.
 

keltanas

marty cats
Но, если деплоить код через пакет для конкреного дистрибутива, то становишься платфомозависимым. PEAR, устанавливает пакеты в систему глобально. Т.о. если у тебя на сервере крутяться 2 сайта, которым нужны разные версии одной библиотеки, установленной через пир, то один из сайтов будет отваливаться.

Композер же позволяет для каждого проекта выставлять ту версию пакета, для которой он писался. Опенсурс - он такой изменчивый... Например КнпПагинатор взяли и сломали в 2.3 некоторые функции из 2.2. С помощью композера заморозил версию и пишу под 2.2, чтобы не переписывать уже готовый код.

Думаю, что композер - это скорее ответ pip и gem, нежели менеджерам пакетов линукса.
 

fixxxer

К.О.
Партнер клуба
Мне пофигу на платформозависимость 100500 раз.
Репозитории я считаю подходящими только для разработки (в любом виде), деплой надо делать целиком всего нужного для приложения кода в одном tar.gz - иначе задача атомарного обновления становится почти нерешаемой. Продакшен репозиторий уместен только если весь деплой это один .deb/.rpm пакет, который пост-инсталлом умеет переключиться на новую ревизию и запустить пост деплой скрипты - но это проще сделать простым шелл-скриптом.
То есть что мне нужно оно очень простое:
- есть конфигурация зависимостей, со ссылками на их vcs, прибито по тегу или хэшу ревизии
- на девеле это все выкачивается и обновляется одной командой и нужные пути идут в include_path
- при деплое это все собирается в один tar.gz, зависимости кладутся в папочку vendor которая идет в include_path, если все зависимости удовлетворяют psr-0 больше ничего и не надо
 

Вурдалак

Продвинутый новичок
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Это если что-то не оказалось вытесненным из кэша посреди дела прямо в нужный момент. Маловероятно - но возможно. Писать файлы поверх, завязываясь на то, что старое есть в кэше - это хождение по лезвию бритвы.

А еще я хочу иметь возможность откатиться на прошлую ревизию одной перегенерацией nginx.conf, а не плясками с бубном.

Вообще серверная инфраструктура должна быть простой и примитивной. Стоимость обслуживания одного сервера должна стремиться к нулю. Если для администрирования сервера надо знать зависимости в php-коде и уметь ими управлять - это хреновая инфраструктура.
 

fixxxer

К.О.
Партнер клуба
set $application_root /var/www/projectName/revisionNumber;
fastcgi_param SCRIPT_FILENAME $application_root/index.php;
 
Сверху