48
Иван Климчук Телепортация MODX Решаем проблемы деплоя

Телепортация MODX - MODX Meetup Minsk

  • Upload
    modx-

  • View
    600

  • Download
    8

Embed Size (px)

Citation preview

Page 1: Телепортация MODX - MODX Meetup Minsk

Иван Климчук

Телепортация MODXРешаем проблемы деплоя

Page 2: Телепортация MODX - MODX Meetup Minsk

Ты кто такой?

•  MODX Ambassador

•  MODX Professinal

•  Опыт работы с MODX — 4 года

•  Люблю MODX

2

Page 3: Телепортация MODX - MODX Meetup Minsk

Разработка

Page 4: Телепортация MODX - MODX Meetup Minsk

Этапы разработки

•  Установка MODX

•  Настройка (ЧПУ, имя сайта, почта и тд.)

•  Установка дополнений

•  Заполнение дерева (структура)

•  Наполнение шаблонов и чанков

•   Творческий процесс разработчика

4

Page 5: Телепортация MODX - MODX Meetup Minsk

Известные недостатки MODX

•  Элементы в БД

•  Необходимость работы через админпанель

•  Git? Бесполезен

5

Page 6: Телепортация MODX - MODX Meetup Minsk

Тестирование

Page 7: Телепортация MODX - MODX Meetup Minsk

Перенос сайта

•  FTP

•  SSH (SFTP)

•  scp / rsync / ...

•  PhpMyAdmin / mysqldump

•  Vapor

•   только для MODX Revo 2.2+

•   только MODX Cloud

7

Page 8: Телепортация MODX - MODX Meetup Minsk

OK. Перенесли

И тут заказчик решает добавить на сайт новый раздел

— Я все оплачу, делайте!

Заказчик“8

Page 9: Телепортация MODX - MODX Meetup Minsk

¯\_(ツ)_/¯

Page 10: Телепортация MODX - MODX Meetup Minsk

Неужели нет решения?

•  SE Manager + StaticSaver + git

•  ElementHelper + git

•  Cast

•  Gitify

•  Общие недостатки

10

Page 11: Телепортация MODX - MODX Meetup Minsk

SE Manager + StaticSaver + git

+ Быстрый экспорт элементов в файлы из админки

+ Автоматическая подстановка имени файла в форму ресурса

+ Контроль версий для статических элементов

- При добавлении файла нельзя автоматически создать элемент

- Нельзя использовать ссылки на ресурсы по id

- Нет сведений о состоянии системы

11

Page 12: Телепортация MODX - MODX Meetup Minsk

ElementHelper + git

+ Умеет TV

+ Умеет отслеживать историю изменений элемента

+ Есть автоудаление элементов

+ Умеет создавать элементы из файлов

- Нельзя использовать ссылки на ресурсы по id

- Нет сведений о состоянии системы

12

Page 13: Телепортация MODX - MODX Meetup Minsk

Cast

CAST - Content Addressable Storage and Transfer, библиотека для MODX, построенная вокруг git.

+ Работает с объектами xPDO

+ Обертки git-команд в самой библиотеке

+ Есть настройка того, что нужно сериализовать

- Не поддерживает команды с взаимодействием с пользователем

- Перед десереализацией удаляет записи из таблиц

13

Page 14: Телепортация MODX - MODX Meetup Minsk

Gitify

Новый инструмент от Марка Хамстры, презентованный на MODX Weekend.

+ Конфигурация в YAML

+ Дополнительные команды для управления сайтом

+ Данные хранятся в виде обычных файлов, конфиги в заголовках

- На сегодня очень мало умеет и еще в разработке

- Не удобно править файлы, не срабатывает подстветка синтаксиса

14

Page 15: Телепортация MODX - MODX Meetup Minsk

Общие проблемы

•  Однонаправленность

•  Недостаток документации

•  Сложность для обычного пользователя

15

Page 16: Телепортация MODX - MODX Meetup Minsk

Teleport

Page 17: Телепортация MODX - MODX Meetup Minsk

Teleport

Teleport - это расширяемый набор скриптов для работы с одним

или несколькими локальными экземлярами MODX Revolution.

github.com/modxcms/teleport

Автор: Jason Coward

MODX Cloud

17

Page 18: Телепортация MODX - MODX Meetup Minsk

Установка

1.  Создать папку teleport там, где удобно. Обычно в /home/username

2.  Скачать в нее teleport.phar

Каталоги

Во время работы teleport создает каталоги:

•   profile - в нем будут размещены профили сайтов

•   workspace - в нем будут размещены собранные пакеты

18

Page 19: Телепортация MODX - MODX Meetup Minsk

Как работает?

1.  Создание профиля

2.  Упаковка сайта в пакет

3.  Перенос пакета в нужное место

4.  Создание профиля целевого сайта

5.  Распаковка и установка обновлений

19

Page 20: Телепортация MODX - MODX Meetup Minsk

Что умеет?

•  Profile

•  Extract

•  Inject

•  Push

•  UserCreate

•  Packages/GC

20

Page 21: Телепортация MODX - MODX Meetup Minsk

Profile

php teleport.phar \

--action=Profile \

--name="MySite" \

--code=mysite \

--core_path=/path/to/mysite/modx/core/ \

--config_key=config

01.

02.

03.

04.

05.

06.

21

Page 22: Телепортация MODX - MODX Meetup Minsk

Extract

php teleport.phar \

--action=Extract \

--profile=profile/mysite.profile.json \

--tpl=phar://teleport.phar/tpl/complete.tpl.json

01.

02.

03.

04.

22

Page 23: Телепортация MODX - MODX Meetup Minsk

Inject

php teleport.phar \

--action=Inject \

--profile=profile/mysite.profile.json \

--source=workspace/mysite_develop-120315.1106.30-2.2.1-dev.transport.zip

01.

02.

03.

04.

23

Page 24: Телепортация MODX - MODX Meetup Minsk

Push

php teleport.phar \

--action=Extract \

--profile=profile/mysite.profile.json \

--tpl=phar://teleport.phar/tpl/complete.tpl.json \

--target=s3://mybucket/snapshots/ \

--push

01.

02.

03.

04.

05.

06.

24

Page 25: Телепортация MODX - MODX Meetup Minsk

UserCreate

php teleport.phar \

--action=UserCreate \

--profile=profile/mysite.profile.json \

--username=superuser \

--password=password \

--sudo \

--active \

--fullname="Test User" \

[email protected]

01.

02.

03.

04.

05.

06.

07.

08.

09.

25

Page 26: Телепортация MODX - MODX Meetup Minsk

Packages/GC

php teleport.phar \

--action=Packages/GC \

--profile=profile/mysite.profile.json

01.

02.

03.

26

Page 27: Телепортация MODX - MODX Meetup Minsk

Шаблоны

Page 28: Телепортация MODX - MODX Meetup Minsk

Шаблоны

•  Запакованы в phar: phar://teleport.phar/tpl/*.json.tpl

•  Формат - json

•  11 шаблонов из коробки: changeset, complete, complete_db,

develop, elements, packages, resource_children, resources,

settings, user, users

28

Page 29: Телепортация MODX - MODX Meetup Minsk

changeset.json.tpl

Извлекает определенный набор изменений, зафиксированный

обратной функцией, заданной в настройках MODX.

settings.json.tpl

Извлекает все настройки из первого сайта для импорта во второй,

обновляет и дополняет существующие.

29

Page 30: Телепортация MODX - MODX Meetup Minsk

complete.json.tpl

Извлекает все объекты ядра, файлы и пользовательские таблицы

из первого сайта и заменяет все это во втором.

complete_db.json.tpl

Извлекает все объекты ядра и пользовательские таблицы, без

файлов.

packages.json.tpl

Извлекает все пакеты из первого сайта и устанавливает во втором.30

Page 31: Телепортация MODX - MODX Meetup Minsk

develop.json.tpl

Извлекает все объекты ядра, файлы и пользовательские таблицы

из первого сайта для импорта во второй, дополняет существующие

объекты и таблицы.

elements.json.tpl

Извлекает все элементы и связанные с ними данные из первого

сайта для импорта во второй, обновляет и дополняет

существующие.

31

Page 32: Телепортация MODX - MODX Meetup Minsk

resources.json.tpl

Извлекает все ресурсы из первого сайта для импорта во второй,

обновляет и дополняет существующие.

resource_children.json.tpl

Извлекает все ресурсы, которые являются потомками заданного

родительского ресурса.

32

Page 33: Телепортация MODX - MODX Meetup Minsk

user.json.tpl

Излекает одного указанного пользователя и сопутствующие

данные из первого сайта для импорта во второй.

users.json.tpl

Излекает все пользователей из первого сайта для импорта во

второй, обновляет и дополняет существующих.

33

Page 34: Телепортация MODX - MODX Meetup Minsk

Собственные шаблоны

Простейший шаблон

{"name":"elements", "vehicles":[]}

•  Обычный json

•  Отношения и условия как в map-файлах modx

34

Page 35: Телепортация MODX - MODX Meetup Minsk

Пример собственного шаблона

{"name":"elements", "vehicles":[

{

"vehicle_class":"xPDOFileVehicle",

"object":{

"source":"{+properties.modx.core_path}components",

"target":"return MODX_CORE_PATH;"

},

"attributes":{

"vehicle_class":"xPDOFileVehicle"

}

}

]}

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12. 35

Page 36: Телепортация MODX - MODX Meetup Minsk

Пример собственного шаблона

{"name":"elements", "vehicles":[

{

"vehicle_class":"xPDOObjectVehicle",

"object":{

"class":"modPropertySet",

"criteria":["1 = 1"],

"graph":{

"Category":[]

},

"package":"modx"

},

"attributes":{

"preserve_keys":false,

"update_object":true,

"unique_key":"name",

"related_objects":true,

"related_object_attributes":{

"Category":{

"preserve_keys":false,

"update_object":true,

"unique_key":"category"

}

}

}

},

]}

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

36

Page 37: Телепортация MODX - MODX Meetup Minsk

Телепортация

Page 38: Телепортация MODX - MODX Meetup Minsk

Телепортация A в B

Сайт A Сайт B

Profile: sitea.profile.json Profile: siteb.profile.json

Extract:

packages

develop

Inject:

packages

develop

Синхронизированы

38

Page 39: Телепортация MODX - MODX Meetup Minsk

Телепортация modx.by

Профиль для modx.by.dev.alroniks.com

php teleport.phar --action=Profile \

--name="modxbydevalronikscom" --code=modxbydevalronikscom \

--core_path=/var/www/modx.by.dev.alroniks.com/www/core/ \

--config_key=config

01.

02.

03.

04.

39

Page 40: Телепортация MODX - MODX Meetup Minsk

Телепортация modx.by

Профиль для modx.by

php teleport.phar --action=Profile \

--name="modxby" --code=modxby \

--core_path=/var/www/modx.by/www/core/ \

--config_key=config

01.

02.

03.

04.

40

Page 41: Телепортация MODX - MODX Meetup Minsk

Телепортация modx.by

Упаковка для modx.by.dev.alroniks.com

php teleport.phar --action=Extract \

--profile=profile/modxbydevalronikscom.profile.json /

--tpl=phar://teleport.phar/tpl/elements.tpl.json /

--target=/var/www/modx.by/www/core/packages/

--push

01.

02.

03.

04.

05.

41

Page 42: Телепортация MODX - MODX Meetup Minsk

Телепортация modx.by

Установка для modx.by

php teleport.phar --action=Inject \

--profile=profile/modxby.profile.json \

--source=/var/www/modx.by/www/core/packages/

modxbydevalronikscom_complete-141125.1702.46-2.3.2-pl.transport.zip

01.

02.

03.

42

Page 43: Телепортация MODX - MODX Meetup Minsk
Page 44: Телепортация MODX - MODX Meetup Minsk

Migrate a MODXsite in under 15

minutes

Page 45: Телепортация MODX - MODX Meetup Minsk

Проблемы

•  complete и complete_db не подходит для установки через менеджер

пакетов

•  в конфиге нельзя исключить из упаковки отдельную папку

•  не на все действия есть документация

•  до сих пор нет документации по custom tpls

45

Page 46: Телепортация MODX - MODX Meetup Minsk

Планы

•  Панель управления dev-экземлярами

•  Автоматическая сборка пакетов

•  Специальный репозиторий для обновлений

•  Continuous Delivery через пакеты

46

Page 47: Телепортация MODX - MODX Meetup Minsk

Создание сложных интернет-магазинов и сайтов на MODX

•  alroniks.com - команда

•  klimchuk.by - личный и контакты

•  modx.by - сообщество

47

Page 48: Телепортация MODX - MODX Meetup Minsk

Вопросы?