Ответы пользователя по тегу Развёртывание ПО
  • Как организовать обновление php модулей?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    composer

    Как при этом вынести настройки под конкретный сайт?


    Просто вынесите настройки, они же в git не хранятся. Если планируете автодеплой налаживать - то все различия в ENV переменные и разруливать все на уровне CI-сервера (у меня например так разруливается, по джобе на сервер, что бы все секьюрные штуки спрятать и не хранить при этом в GIT-е)
    Ответ написан
  • Docker - архитектурные вопросы о деплое и не тольно?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) nginx-proxy
    2) копируйте исходники в образ (в dockerfile), собирайте либо локально либо на CI-сервере эти образы и пушьте их в docker/distribution (либо платный docker-hub либо разверните свой, это с докером делается за минут 10).
    3) Прямо в контейнере с PHP. Либо заведите отдельный контейнер для php-cli и зачедите отдельный контейнер для исходников, и через volumes_from расшарьте между ними. Вариант с cron на хосте тоже достоен существования, но это не ок в большинстве случаев.
    4) обновлять базовый образ. А там уж как организуетесь.
    5) Можно, смотрим пункт 2.
    6) Вообще тут можно схитрить. Вы можете же хранить зависимости прямо в репозитории, в смысле коммитить вендоры. Но вы этого не делаете. На момент когда запускается docker build ваших образов, все зависимости уже должны поставиться. И для каждого из перечисленных вами средств разработки уже есть свой контейнер, готовый. Берем и юзаем.
    7) как мы выяснили в пункте 6 - композера на проде быть не должно. вообще как, вы оттещенный образ со стэйджинга должны просто "мувать" на продакшен. В этом плане риски при релизе минимальны.
    8) тут опять же по разному. Мне удобнее прямо из контейнера коннектиться например в sentry или graylog и скидывать туда логи. Ну или мы должны пихать логи в stdout/stderr контейнера и далее агрегировать их снаружи, тут так же есть куча вариантов.
    9) все это отдельные контейнеры, все это вместе связывается башем и docker-compose. Все это разварачивается либо через docker-machine и CI либо просто через CI. Docker-machine будет "удобным" только с версии 0.7 или 0.8.
    Ответ написан
  • Доставка проекта на продакшен, какие инструменты для деплоя?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    docker

    собираем на CI-ке контейнер, прогоняем на нем тесты (вы же сказали что проект большой, большой проект без тестов - боль), если все хорошо - пушим в docker hub или в свой локальный docker distribution, после чего можно на серваке сделать просто docker-compose pull && docker-compose up -d и радоваться.
    Ответ написан
  • Как деплоить проект в Docker на Production?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ну дата контейнеры - никак. Вы можете их сдампить в образы в принципе.

    В целом же алгоритм такой
    - пушим образы в docker hub (или свой registry/distribution на сервере, в этом случае надо сначала задеплоить его куда-нибудь по той же схеме)
    - добавляем целевую удаленную машину в docker-machine (драйвер general) - тот ставит там докеры шмокеры и в целом настраивает все
    - при помощи docker-machine env переключаемся на удаленный docker-демон
    - делаем docker-compose up -d или как вы там оркестрируете все. Для удобства стоит отдельный yml файлик под прод сделать и указать образы которые вы запушили.

    Готово.
    Ответ написан
  • Чем деплоить php проекты?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Не забудьте про rsync как средство деплоя.

    Вообще все просто, при деплое через git pull у вас перестает работать текущая версия сайта. И время простоя зависит от сложности деплоя. Например вам нужно установить вендоры - пока будет работать composer install мы ждем. Затем мы чистим кеш - опять простой. Затем миграции. Снова ждем, а миграции могут выполняться долго в зависимости от сложности... хотя они редко выполняются дольше пары минут.

    А всякие тулзы типа капифони и т.д. имеют возможность версионизации. То есть пока у вас поднимается новая версия - старая обрабатывает запросы. Как только миграции будут накачены, капифони просто поменяет симлинки и релоаднет nginx (не перезагрузит, а только реалоаднет).

    А когда приходится при каждой выкатке на сервер еще и за окружением следить вход пускают еще и ansible/puppet. Так же есть еще и Docker.
    Ответ написан
  • Как работать с работающим контейнером Docker?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    это LXС, он нужен для изоляции окружения, необходимого приложению для работы. То есть это такой быстрый способ развернуть приложение не парясь о зависимостях.

    Залесть внутрь конечно можно, но проще сделать так:
    https://github.com/audreyt/ethercalc

    там есть Dockerfile по которому строится и провиженится контейнер.

    Вообще фишка докера в том, что это по сути механизм версионизации контейнеров. То есть мы берем один снапшот, изменяем его и сохраняем. Как git для окружения.

    Залезать можно по ssh и можно маунтить директории.
    Ответ написан
  • Создание приложения и деплой, как?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Собственно, а в чем проблемы то?

    Создавать приложения - собственно angular.js + система сборки (gulp/grunt), опционально идут штуки типа less/sass, autoprefixer, зависимости ресолвятся через bower/components... По сути нужно организовать процесс сборки билда, который будет уже деплоиться. Никаких сложностей аля миграций для баз данных и т.д. нету, так что все сводится к аплоаду билда на сервер (по scp например).

    Либо уточните какие моменты вас инетесуют.
    Ответ написан
  • Yii2 и deploy на сервер?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    правильно организовывать "выкладку" на сервер

    У каждого свои подходы. В общем случае, выделяют следующее:

    Есть ветка master, в которой находится production код, есть ветка staging, в которой находятся фичи, которые нужно тестить. Есть кучи feature-бренчей, которые можно мерджить только со staging, а после того как код в стэйджинге стабилизировался, можно мерджить ветку в продакшен.

    Подробнее о таком подходе можно почитать у фаулера, feature-branch. Есть еще другие методологии, типа feature-switch, а еще можно вообще не париться. Все от проекта зависит, количества разработчиков и все такое.

    По поводу же выкладки на сервер - самый пожалуй правильный способ, использовать ansible или подобные штуки, и запускать сборку на CI сервере после успешного прогода тестов (что куда лить можно вешать по пушу в соответсвующую ветку).

    Миграции в контексте yii придется делать руками, причем сразу при реализации каких-то фич. Миграции все же создавались для версионизации структуры данных, так что это даже больше для разработчика, нежели для деплоя. Сразу хочу заметить, что лучше писать такие миграции, которые не ломают логику работы более старой версии приложений (то есть стараться не удалять поля у таблиц, а только разрешать ничего туда не писать, или таблицы не удалять). Хотя опять же зависит от проекта и команды. Автоматизировать создание миграций для схемы данных будет проблематично, ибо модели не дают надежной инфы о схеме (то есть из модели не сгенерить таблицу, хотя можно это реализовать).
    Ответ написан
  • Как из командной строки получать скриншоты веб-страниц webkit'ом?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Берите PhantomJS и не парьтесь. Есть примеры, да и по опыту это самое некорявое и поддерживоемое решение для подобных задач. Далее идет wkhtmltopdf/wkhtmltoimage, но оно бывает глючит и... ну как бы с поддержкой у него похуже. Да и возможностей так же меньше.
    Ответ написан
  • Чем эффективнее склеивать и минифицировать js css?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Я организовал работу как-то так: есть директория assets, в которой исходники js-ок, less файлики, картинки для оформления и т.д. Собирает это дело сейчас gulp, раньше grunt и ложит в webroot куда ему скажут. При чем для разработки настроены ватчеры (можно сделать и в ide, но не всегда разработчики пользуются оными, некоторые используют vim, да и банально удобнее) и лайврелоад, так что при разработке не нужно перезагружать страницу, что немного уменьшает временные издержки. Ну и так же для сборки настроена оптимизация изображений.

    Собственно когда делается пуш в мастер на сервере стартует сборка проекта, (сборка асетов, вармап кэша, установка зависимостей) и затем все это уже перетекает на сервак, где отрабатывают миграции и релоадится сервер (nginx reload с переключением симлинков)
    Ответ написан
  • Как правильно сделать deploy с помощью git?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Можно написать простенький BASH скриптик для деплоя, и повесить его выполнение на хуку при пуше. Примеров масса: вот, вот и вот
    Ответ написан
  • Как синхронизировать продакшен и локальную версию проекта?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Обычно синхронизация идет из репозитория на продакшен. Способ для ленивых — на сервере склониться из репозитория.
    Ответ написан