GIT та стратегія розгортання Magento2


92

З Magento 1 я використовував інструмент розгортання, який втягувався в GIT repo, виконував команди на зразок modman deploy-allі переконувався, що varкаталог записується. Для цього .gitignoreя використав цей, який працював досить добре.

Але що з Magento 2 ?

Який gitignore найкраще працює, як розгортати проект та яку команду слід запускати до та після розгортання. З нетерпінням чекаю, коли чутимуть інформацію від громади

Питання залишатиметься відкритим ще довгий час


Добре запитання @sander Mangel
Amit Bera

1
За визначенням канонічної відповіді на це не може бути, тому це, ймовірно, занадто широко, а також погано підходить для природоохоронного характеру сайту. Мабуть, має бути мета. Але ви це вже знаєте. Це сказав, я дозволю це, поки не закінчиться щедрість.
philwinkle

@philwinkle це може бути широким, але, мабуть, не надто широким, оскільки вже було дано 3 відповіді. Як обговорювалося тут: meta.magento.stackexchange.com/questions/745/… Meta потрібно використовувати для запитань про MageSE, а не випадкових публікацій / питань. Якщо ви хочете видалити його, я не можу вас зупинити, але, здається, багато люди цікавляться питанням, і на мою думку, це справедливе питання, все це не надто конкретно.
Сандер Мангел

Дві речі: По-перше, Сандер правильний щодо Meta - його слід використовувати лише для запитань щодо платформи SE, оскільки це стосується Magento SE (Примітка: ми, можливо, недостатньо добре розібрали Meta, щоб посилити це правило). По-друге, "багато людей [цікавляться] питанням не мають нічого спільного з тим, чи можна відповісти на питання канонічно чи ні" (отже, з придатністю питання до формату StackExchange). Напевно це засмучує (я сам проти цього прийшов). Я схильний бачити, куди йде ця нитка Q / A. Можливо, A можна сказати досить добре, щоб бути виключно "правильним" ...
орієнтири

@benmarks у такому випадку я вибрав неправильну причину чи предмет для винагороди, моїм мотивом було винагородити того, хто знайшов час, щоб написати повну відповідь на це. Якщо ця тема не належить сюди, я скопіюю її та розміщую десь в Інтернеті, зараховуючи авторів, оскільки я вважаю, що вона все ще має значення. Будь ласка, повідомте мене, якщо перед видаленням
Sander Mangel

Відповіді:


56

Нижче описано, як створити середовище для розробки спеціальних модулів, а не для виробництва.

Ініціалізація проекту

  1. Додайте облікові дані repo.magento.com та маркер доступу github до auth.json у домашній каталог композитора
  2. Створіть проект за допомогою наступної команди:

    composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .

  3. Візьміть цей .gitignore і вставте в корінь свого проекту. Майже всі основні файли / каталоги вже додані до кореня .gitignore, але краще також додати наступні 2 /updateта /phpserver(просто додайте ці 2 рядки до .gitignore)

  4. Ініціалізуйте нове сховище git у корені проекту
  5. Додайте всі відслідковувані файли до git та виконайте їх
  6. Почніть розробку своїх модулів як завжди (помістіть їх під app/code/VendorName/ModuleName), тепер у вашому git сховищі буде лише власний код

Установка Magento

  1. Переконайтеся, що всі дозволи файлової системи встановлені так, як зазначено в офіційному посібнику
  2. Встановіть Magento за допомогою командного рядка, наприклад:

    ${project_root}/bin/magento setup:install \ --db-host=localhost \ --db-name=magento \ --db-user=root \ --backend-frontname=admin \ --base-url=http://base.url.goes.here/ \ --language=en_US \ --timezone=America/Chicago \ --currency=USD \ --admin-lastname=Admin \ --admin-firstname=Admin \ --admin-email=admin@example.com \ --admin-user=admin \ --admin-password=123123q \ --cleanup-database \ --use-rewrites=1

  3. Увімкніть завдання індексаторів cron, наприклад, на Ubuntu:

    echo "* * * * * php ${project_root}/bin/magento cron:run &" | crontab -u www-data -

  4. Magento запуститься в defaultрежимі, і весь відсутній вміст буде створено автоматично за першим запитом. Тому не потрібно запускати компілятор або статичний розгортання вмісту
  5. [необов’язково] Якщо використовується PHP Storm, запустіть таку команду, щоб увімкнути підтримку XSD:

    bin/magento dev:urn-catalog:generate .idea/misc.xml


Привіт Алекс. Крок 3 ініціалізації проекту - чи можете ви його трохи розширити? Чи виявили ви, що вам доведеться вручну скопіювати цей підкаталог до кореня? (Мені цікаво, чи щось працює неправильно - я не очікував цього кроку.)
Алан Кент

На даний момент у @AlanKent ви завантажуєте всі файли, пов’язані з Magento vendor, у тому числі magento2-base, що є лише скелетом нового проекту. Не впевнений, чому цей крок не налаштований автоматично робити композитор, спробуємо з’ясувати. Щодо .gitignoreкопіювання з іншого репо, то вже обговорюється, як усунути / спростити цей крок.
Олексій Паляруш

Крок 3 не потрібно. Збір файлів / папок виконується під час кроку 2.
Меді

Дякую @Maddy @AlanKent, копіювання magento2-baseв корінь більше не потрібно (тільки перевірено), здається, виправлено нещодавно. Цей крок видалено з відповіді.
Олексій Паляруш

1) я поміщаю весь код на репо, вже незароблений і все, коли я вийду з цього репо і просто змінять налаштування fort для адміністратора та дефіле даних db, чи все буде працювати правильно? 2) оскільки я забув виключити var / та паб / папку під час натискання, чи можу я їх повністю видалити, щоб вони могли видалити на віддаленому репо, вони відновлять назад? Дякую.
Лъчезар Райчев

25

Для ініціалізації та встановлення виконайте кроки від його відповіді на більшість кроків Алекса, я рекомендував би лише відмінності:

Конфігурація Git

Зберігайте лише такі файли у вашому сховищі Git:

  • composer.json
  • composer.lock
  • app / тощо / config.php

Для власного коду проекту також використовуйте окремі модулі, до яких ви входите через композитора. Управління цим композитором простіше, оскільки ви можете заблокувати конкретну версію / реліз, який ви хочете розгорнути. Це також змушує вас використовувати однаковий підхід для внутрішніх і зовнішніх модулів.

Розгортання

Під час розробки ви оновлюєте модулі свого оточення (dev / test) за допомогою команди:

composer update

Це оновить файл composer.lock з версіями, встановленими на цій установці.

Під час постановки / попереднього виробництва / виробництва ви можете створити / встановити таку ж установку за допомогою команди:

git pull
composer install

Це дозволить встановити всі ті самі модулі, які використовувались у розробці / тесті, щоб забезпечити тестування перед публікацією у виробництві з тими ж версіями модуля, що і розроблено.

Після встановлення виконайте такі команди:

bin/magento setup:upgrade
bin/magento setup:di:compile (or setup:di:compile-multi-tenant)
bin/magento setup:static-content:deploy

Це оновить базу даних (схему та оновлення даних), сформує конфігурацію DI та розгорне всі файли статичного перегляду.


Може бути, має сенс використовувати вибіркові дані замість генерації світильників? Світильники заповнюють лише найважливіші модулі і здаються корисними лише для тестування продуктивності.
Олексій Паляруш

Дякуємо, видалили цю частину, оскільки вона не потрібна під час використання сайту у виробництві.
Володимир Керхофф

Це дуже слідує тому підходу, який я також використовую. Це також добре працює і з Magento 1 (з менш складним процесом збирання). Нехай композитор виконує свою роботу, він працює на розгортання дуже добре, на мій досвід, і ми не бачили багатьох недоліків, крім складностей із стратегією .gitignore, коли ви не слідкуйте за меншим слідом у git.
Епод

Ця установка виглядає як "інтегратор". Він додає репост у постачальника / magento / *. Жодного коду не буде в додатку / коді / .. та інших режимах. Як би у мене було Magento 2 core dirs, як в архіві .zip. Чи можна додати через композитор модуль (інший git repo) і чим автоматично переходити в додаток / код / ​​...?
незрозумілий

4
ризиковано, композитор не є інструментом розгортання. якщо щось не вдається встановити композитор при запуску у виробництво ...
Клавді Креанга

3

Re.gitignore, з 2.2 офіційної відповіді Magento буде "config.php переходить у git, env.php - ні".

Ми дивимось на плагіни для композиторів, як Mediawiki, щоб наблизити внутрішній розробник до розробки розширень та сайтів для клієнтів. Ще досліджується, ще не остаточне.

Мені дуже сподобалось використовувати тип сховища Composer "Path" із шляхом ../othergitrepo/app/code/*/*добору модулів, але він використовує символьні посилання, які не так добре працюють із середовищами розробників, що використовують Unison чи подібні.


3

ми застосовуємо інший підхід, який не передбачає окремого побудови-сервера / процесу , ми локально розвиваємося як би у виробництві

Потім ми робимо всі файли, необхідні для виробництва . Потім просто розгортаємо набори змін на сервері і запускаємо команду оновлення.

потрапляння на версію, яка підходить для розробки, але також працює в режимі виробництва, була складною частиною і досі не є ідеальною, але тепер ми отримали рецепт, який працює.

причина полягає в тому, що ми хочемо мати 100% контроль над тим, який код надходить у виробництво. оскільки magento2 генерує тону коду, ми повинні запустити його локально, щоб зрозуміти всі наслідки та бути в змозі налагодити, як ніби у виробництві.

Я усвідомлюю, що це не те, що рекомендують робити багато людей, але для нас це найкраще працює.

кроки встановлення фронтену

Для того, щоб ці сценарії спрацювали, встановіть ваш магазин на режим виробництва у вашому env.php та налаштуйте свою тему в dev/tools/grunt/configs/themes.js. (наступні кроки були вкладені в аннуїзну книжку)

  1. видалити var/cache
  2. видалити var/view_preprocessed
  3. видалити pub/static/*(не видаляти .htaccess)
  4. видалити var/composer_home
  5. бігати php bin/magento cache:flush
  6. бігати php bin/magento setup:static-content:deploy %your_languages%
  7. видаліть усі теми / мови, якими ви фактично не користуєтесь, з pub / static / frontend
  8. видалити копії меншої кількості файлів із pub/static/frontend
  9. бігати php bin/magento dev:source-theme:deploy --locale="%your_language%" --theme="%your_theme%" css/styles-m css/styles-l css/email css/email-inline
  10. необов’язково: ми використовуємо bash-скрипт, щоб змінити абсолютні символьні посилання, створені на кроці 9, на відносні, що дозволяє запускати grunt ззовні vm
  11. бігати grunt less:your_theme

кроки для повернення / встановлення

  1. видалити var/cache
  2. видалити var/generation
  3. видалити var/composer_home
  4. видалити var/di
  5. бігати php bin/magento cache:flush
  6. бігати php bin/magento setup:di:compile

Дякую за це @ greenone83, я в основному прийняв такий підхід, хоча я генерую свій бекенд як частина переднього кінця. Я НІКОЛИ не використовую налаштування: di: компілюйте, як мені здається, це накручує речі! Я не розумію, чому налаштування: статичний контент: розгортання створює файли в згенерованому / кодовому (місце змінилося з вашої публікації)? Я виявив, що якщо я видаляю всі створені / коду, мої сайти у виробничому режимі ці файли створюються автоматично під час перегляду сайту.
PedroKTFC

2

Ви також повинні ігнорувати ці файли
/app/etc/config.php
/app/etc/env.php
/.idea/workspace.xml // phpstorm


2
Якщо ви ігноруєте config.php, вам потрібно буде знову ввімкнути нове розширення після натискання на інше середовище, тому краще включити його у ваше сховище.
Володимир Керхофф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.