SlideShare a Scribd company logo
Иван Климчук 
Телепортация MODX 
Решаем проблемы деплоя
Ты кто такой? 
• MODX Ambassador 
• MODX Professinal 
• Опыт работы с MODX — 4 года 
• Люблю MODX 
2
Разработка
Этапы разработки 
• Установка MODX 
• Настройка (ЧПУ, имя сайта, почта и тд.) 
• Установка дополнений 
• Заполнение дерева (структура) 
• Наполнение шаблонов и чанков 
• Творческий процесс разработчика 
4
Известные недостатки MODX 
• Элементы в БД 
• Необходимость работы через админпанель 
• Git? Бесполезен 
5
Тестирование
Перенос сайта 
• FTP 
• SSH (SFTP) 
• scp / rsync / ... 
• PhpMyAdmin / mysqldump 
• Vapor 
• только для MODX Revo 2.2+ 
• только MODX Cloud 
7
OK. Перенесли 
И тут заказчик решает добавить на сайт новый раздел 
— Я все оплачу, делайте! 
“ Заказчик 
8
¯_(ツ)_/¯
Неужели нет решения? 
• SE Manager + StaticSaver + git 
• ElementHelper + git 
• Cast 
• Gitify 
• Общие недостатки 
10
SE Manager + StaticSaver + git 
+ Быстрый экспорт элементов в файлы из админки 
+ Автоматическая подстановка имени файла в форму ресурса 
+ Контроль версий для статических элементов 
- При добавлении файла нельзя автоматически создать элемент 
- Нельзя использовать ссылки на ресурсы по id 
- Нет сведений о состоянии системы 
11
ElementHelper + git 
+ Умеет TV 
+ Умеет отслеживать историю изменений элемента 
+ Есть автоудаление элементов 
+ Умеет создавать элементы из файлов 
- Нельзя использовать ссылки на ресурсы по id 
- Нет сведений о состоянии системы 
12
Cast 
CAST - Content Addressable Storage and Transfer, библиотека для MODX, построенная вокруг git. 
+ Работает с объектами xPDO 
+ Обертки git-команд в самой библиотеке 
+ Есть настройка того, что нужно сериализовать 
- Не поддерживает команды с взаимодействием с пользователем 
- Перед десереализацией удаляет записи из таблиц 
13
Gitify 
Новый инструмент от Марка Хамстры, презентованный на MODX Weekend. 
+ Конфигурация в YAML 
+ Дополнительные команды для управления сайтом 
+ Данные хранятся в виде обычных файлов, конфиги в заголовках 
- На сегодня очень мало умеет и еще в разработке 
- Не удобно править файлы, не срабатывает подстветка синтаксиса 
14
Общие проблемы 
• Однонаправленность 
• Недостаток документации 
• Сложность для обычного пользователя 
15
Teleport
Teleport 
Teleport - это расширяемый набор скриптов для работы с одним 
или несколькими локальными экземлярами MODX Revolution. 
github.com/modxcms/teleport 
Автор: Jason Coward 
MODX Cloud 
17
Установка 
1. Создать папку teleport там, где удобно. Обычно в /home/username 
2. Скачать в нее teleport.phar 
Каталоги 
Во время работы teleport создает каталоги: 
• profile - в нем будут размещены профили сайтов 
• workspace - в нем будут размещены собранные пакеты 
18
Как работает? 
1. Создание профиля 
2. Упаковка сайта в пакет 
3. Перенос пакета в нужное место 
4. Создание профиля целевого сайта 
5. Распаковка и установка обновлений 
19
Что умеет? 
• Profile 
• Extract 
• Inject 
• Push 
• UserCreate 
• Packages/GC 
20
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
Extract 
php teleport.phar  
--action=Extract  
--profile=profile/mysite.profile.json  
--tpl=phar://teleport.phar/tpl/complete.tpl.json 
01. 
02. 
03. 
04. 
22
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
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
UserCreate 
php teleport.phar  
--action=UserCreate  
--profile=profile/mysite.profile.json  
--username=superuser  
--password=password  
--sudo  
--active  
--fullname="Test User"  
--email=testuser@example.com 
01. 
02. 
03. 
04. 
05. 
06. 
07. 
08. 
09. 
25
Packages/GC 
php teleport.phar  
--action=Packages/GC  
--profile=profile/mysite.profile.json 
01. 
02. 
03. 
26
Шаблоны
Шаблоны 
• Запакованы в phar: phar://teleport.phar/tpl/*.json.tpl 
• Формат - json 
• 11 шаблонов из коробки: changeset, complete, complete_db, 
develop, elements, packages, resource_children, resources, 
settings, user, users 
28
changeset.json.tpl 
Извлекает определенный набор изменений, зафиксированный 
обратной функцией, заданной в настройках MODX. 
settings.json.tpl 
Извлекает все настройки из первого сайта для импорта во второй, 
обновляет и дополняет существующие. 
29
complete.json.tpl 
Извлекает все объекты ядра, файлы и пользовательские таблицы 
из первого сайта и заменяет все это во втором. 
complete_db.json.tpl 
Извлекает все объекты ядра и пользовательские таблицы, без 
файлов. 
packages.json.tpl 
Извлекает все пакеты из первого сайта и устанавливает во втором. 
30
develop.json.tpl 
Извлекает все объекты ядра, файлы и пользовательские таблицы 
из первого сайта для импорта во второй, дополняет существующие 
объекты и таблицы. 
elements.json.tpl 
Извлекает все элементы и связанные с ними данные из первого 
сайта для импорта во второй, обновляет и дополняет 
существующие. 
31
resources.json.tpl 
Извлекает все ресурсы из первого сайта для импорта во второй, 
обновляет и дополняет существующие. 
resource_children.json.tpl 
Извлекает все ресурсы, которые являются потомками заданного 
родительского ресурса. 
32
user.json.tpl 
Излекает одного указанного пользователя и сопутствующие 
данные из первого сайта для импорта во второй. 
users.json.tpl 
Излекает все пользователей из первого сайта для импорта во 
второй, обновляет и дополняет существующих. 
33
Собственные шаблоны 
Простейший шаблон 
{"name":"elements", "vehicles":[]} 
• Обычный json 
• Отношения и условия как в map-файлах modx 
34
Пример собственного шаблона 
01. 
{"name":"elements", "vehicles":[ 
02. 
{ 
03. 
04. 
05. 
06. 
07. 
08. 
09. 
10. 
11. 
12. 35 
"vehicle_class":"xPDOFileVehicle", 
"object":{ 
"source":"{+properties.modx.core_path}components", 
"target":"return MODX_CORE_PATH;" 
}, 
"attributes":{ 
"vehicle_class":"xPDOFileVehicle" 
} 
} 
]}
Пример собственного шаблона 
{"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
Телепортация
Телепортация A в B 
Сайт A Сайт B 
Profile: sitea.profile.json Profile: siteb.profile.json 
Extract: 
Inject: 
packages 
packages 
develop 
develop 
Синхронизированы 
38
Телепортация 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
Телепортация 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
Телепортация 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
Телепортация 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
Migrate a MODX 
site in under 15 
minutes
Проблемы 
• complete и complete_db не подходит для установки через менеджер 
пакетов 
• в конфиге нельзя исключить из упаковки отдельную папку 
• не на все действия есть документация 
• до сих пор нет документации по custom tpls 
45
Планы 
• Панель управления dev-экземлярами 
• Автоматическая сборка пакетов 
• Специальный репозиторий для обновлений 
• Continuous Delivery через пакеты 
46
Создание сложных интернет-магазинов и сайтов на MODX 
• alroniks.com - команда 
• klimchuk.by - личный и контакты 
• modx.by - сообщество 
47
Вопросы?

More Related Content

What's hot

Git for you
Git for youGit for you
Git for you
Pavel Alexeev
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
Andrey Kazarinov
 
Обзор Linux Control Groups
Обзор Linux Control GroupsОбзор Linux Control Groups
Обзор Linux Control Groups
OSLL
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)
AvitoTech
 
Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)
AvitoTech
 
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел ТихомировРазвёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
OpenVZ
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
Provectus
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
 
Microservice architecture for Geo2Tag
Microservice architecture for Geo2TagMicroservice architecture for Geo2Tag
Microservice architecture for Geo2Tag
OSLL
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
Anton Ivanov
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
MoscowJS
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе docker
Ivan Grishaev
 
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании
Enterprise-инфраструктура менеджмента php-пакетов в рамках компанииEnterprise-инфраструктура менеджмента php-пакетов в рамках компании
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании
Evgeny Fomin
 
Testing with Selenium
Testing with SeleniumTesting with Selenium
Testing with Selenium
OSLL
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
aviatakz
 
Docker: from understanding to production
Docker: from understanding to productionDocker: from understanding to production
Docker: from understanding to production
Anton Turetsky
 
Базовые принципы работы с SVN.
Базовые принципы работы с SVN.Базовые принципы работы с SVN.
Базовые принципы работы с SVN.
DressTester
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
Andrey Markelov
 

What's hot (18)

Git for you
Git for youGit for you
Git for you
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
Обзор Linux Control Groups
Обзор Linux Control GroupsОбзор Linux Control Groups
Обзор Linux Control Groups
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)
 
Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)
 
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел ТихомировРазвёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Microservice architecture for Geo2Tag
Microservice architecture for Geo2TagMicroservice architecture for Geo2Tag
Microservice architecture for Geo2Tag
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе docker
 
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании
Enterprise-инфраструктура менеджмента php-пакетов в рамках компанииEnterprise-инфраструктура менеджмента php-пакетов в рамках компании
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании
 
Testing with Selenium
Testing with SeleniumTesting with Selenium
Testing with Selenium
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Docker: from understanding to production
Docker: from understanding to productionDocker: from understanding to production
Docker: from understanding to production
 
Базовые принципы работы с SVN.
Базовые принципы работы с SVN.Базовые принципы работы с SVN.
Базовые принципы работы с SVN.
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
 

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

Эволюция BackDoor.Flashback
Эволюция BackDoor.FlashbackЭволюция BackDoor.Flashback
Эволюция BackDoor.Flashbackhexminer
 
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Igor Sazonov
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Yandex
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
Anna Fedoruk
 
Web deployment
Web deploymentWeb deployment
Web deployment
GetDev.NET
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Александр Егурцов
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
Denis Latushkin
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
vovasik
 
Creating custom module
Creating custom moduleCreating custom module
Creating custom moduleyulia_tsyba
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
Ontico
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"
FDConf
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"
Yandex
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Yandex
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Badoo Development
 

Similar to Телепортация MODX - MODX Meetup Minsk (20)

Эволюция BackDoor.Flashback
Эволюция BackDoor.FlashbackЭволюция BackDoor.Flashback
Эволюция BackDoor.Flashback
 
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
 
Yulia tsuba
Yulia tsubaYulia tsuba
Yulia tsuba
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
Creating custom module
Creating custom moduleCreating custom module
Creating custom module
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 

More from MODX Беларусь

modmore Team Time
modmore Team Timemodmore Team Time
modmore Team Time
MODX Беларусь
 
История возникновения и развития связки Modstore — Modx.pro — Modhost
История возникновения и развития связки Modstore — Modx.pro — ModhostИстория возникновения и развития связки Modstore — Modx.pro — Modhost
История возникновения и развития связки Modstore — Modx.pro — Modhost
MODX Беларусь
 
Sterc Team Time
Sterc Team TimeSterc Team Time
Sterc Team Time
MODX Беларусь
 
E-commerce проекты 15000+ товаров в полной интеграции с 1С
E-commerce проекты 15000+ товаров в полной интеграции с 1СE-commerce проекты 15000+ товаров в полной интеграции с 1С
E-commerce проекты 15000+ товаров в полной интеграции с 1С
MODX Беларусь
 
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
Синхронный MODX: как сделать настоящую синхронизацию и не застрелитьсяСинхронный MODX: как сделать настоящую синхронизацию и не застрелиться
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
MODX Беларусь
 
miniShop2 – что нас ждет в новых версиях
miniShop2 – что нас ждет в новых версияхminiShop2 – что нас ждет в новых версиях
miniShop2 – что нас ждет в новых версиях
MODX Беларусь
 
MIGX. Табличный тип данных в MODX - MODX Meetup Minsk
MIGX. Табличный тип данных в MODX - MODX Meetup MinskMIGX. Табличный тип данных в MODX - MODX Meetup Minsk
MIGX. Табличный тип данных в MODX - MODX Meetup Minsk
MODX Беларусь
 
ElacticSearch в связке с MODX Revo - MODX Meetup Minsk
ElacticSearch в связке с MODX Revo - MODX Meetup MinskElacticSearch в связке с MODX Revo - MODX Meetup Minsk
ElacticSearch в связке с MODX Revo - MODX Meetup Minsk
MODX Беларусь
 

More from MODX Беларусь (8)

modmore Team Time
modmore Team Timemodmore Team Time
modmore Team Time
 
История возникновения и развития связки Modstore — Modx.pro — Modhost
История возникновения и развития связки Modstore — Modx.pro — ModhostИстория возникновения и развития связки Modstore — Modx.pro — Modhost
История возникновения и развития связки Modstore — Modx.pro — Modhost
 
Sterc Team Time
Sterc Team TimeSterc Team Time
Sterc Team Time
 
E-commerce проекты 15000+ товаров в полной интеграции с 1С
E-commerce проекты 15000+ товаров в полной интеграции с 1СE-commerce проекты 15000+ товаров в полной интеграции с 1С
E-commerce проекты 15000+ товаров в полной интеграции с 1С
 
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
Синхронный MODX: как сделать настоящую синхронизацию и не застрелитьсяСинхронный MODX: как сделать настоящую синхронизацию и не застрелиться
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
 
miniShop2 – что нас ждет в новых версиях
miniShop2 – что нас ждет в новых версияхminiShop2 – что нас ждет в новых версиях
miniShop2 – что нас ждет в новых версиях
 
MIGX. Табличный тип данных в MODX - MODX Meetup Minsk
MIGX. Табличный тип данных в MODX - MODX Meetup MinskMIGX. Табличный тип данных в MODX - MODX Meetup Minsk
MIGX. Табличный тип данных в MODX - MODX Meetup Minsk
 
ElacticSearch в связке с MODX Revo - MODX Meetup Minsk
ElacticSearch в связке с MODX Revo - MODX Meetup MinskElacticSearch в связке с MODX Revo - MODX Meetup Minsk
ElacticSearch в связке с MODX Revo - MODX Meetup Minsk
 

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

  • 1. Иван Климчук Телепортация MODX Решаем проблемы деплоя
  • 2. Ты кто такой? • MODX Ambassador • MODX Professinal • Опыт работы с MODX — 4 года • Люблю MODX 2
  • 4. Этапы разработки • Установка MODX • Настройка (ЧПУ, имя сайта, почта и тд.) • Установка дополнений • Заполнение дерева (структура) • Наполнение шаблонов и чанков • Творческий процесс разработчика 4
  • 5. Известные недостатки MODX • Элементы в БД • Необходимость работы через админпанель • Git? Бесполезен 5
  • 7. Перенос сайта • FTP • SSH (SFTP) • scp / rsync / ... • PhpMyAdmin / mysqldump • Vapor • только для MODX Revo 2.2+ • только MODX Cloud 7
  • 8. OK. Перенесли И тут заказчик решает добавить на сайт новый раздел — Я все оплачу, делайте! “ Заказчик 8
  • 10. Неужели нет решения? • SE Manager + StaticSaver + git • ElementHelper + git • Cast • Gitify • Общие недостатки 10
  • 11. SE Manager + StaticSaver + git + Быстрый экспорт элементов в файлы из админки + Автоматическая подстановка имени файла в форму ресурса + Контроль версий для статических элементов - При добавлении файла нельзя автоматически создать элемент - Нельзя использовать ссылки на ресурсы по id - Нет сведений о состоянии системы 11
  • 12. ElementHelper + git + Умеет TV + Умеет отслеживать историю изменений элемента + Есть автоудаление элементов + Умеет создавать элементы из файлов - Нельзя использовать ссылки на ресурсы по id - Нет сведений о состоянии системы 12
  • 13. Cast CAST - Content Addressable Storage and Transfer, библиотека для MODX, построенная вокруг git. + Работает с объектами xPDO + Обертки git-команд в самой библиотеке + Есть настройка того, что нужно сериализовать - Не поддерживает команды с взаимодействием с пользователем - Перед десереализацией удаляет записи из таблиц 13
  • 14. Gitify Новый инструмент от Марка Хамстры, презентованный на MODX Weekend. + Конфигурация в YAML + Дополнительные команды для управления сайтом + Данные хранятся в виде обычных файлов, конфиги в заголовках - На сегодня очень мало умеет и еще в разработке - Не удобно править файлы, не срабатывает подстветка синтаксиса 14
  • 15. Общие проблемы • Однонаправленность • Недостаток документации • Сложность для обычного пользователя 15
  • 17. Teleport Teleport - это расширяемый набор скриптов для работы с одним или несколькими локальными экземлярами MODX Revolution. github.com/modxcms/teleport Автор: Jason Coward MODX Cloud 17
  • 18. Установка 1. Создать папку teleport там, где удобно. Обычно в /home/username 2. Скачать в нее teleport.phar Каталоги Во время работы teleport создает каталоги: • profile - в нем будут размещены профили сайтов • workspace - в нем будут размещены собранные пакеты 18
  • 19. Как работает? 1. Создание профиля 2. Упаковка сайта в пакет 3. Перенос пакета в нужное место 4. Создание профиля целевого сайта 5. Распаковка и установка обновлений 19
  • 20. Что умеет? • Profile • Extract • Inject • Push • UserCreate • Packages/GC 20
  • 21. 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
  • 22. Extract php teleport.phar --action=Extract --profile=profile/mysite.profile.json --tpl=phar://teleport.phar/tpl/complete.tpl.json 01. 02. 03. 04. 22
  • 23. 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
  • 24. 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
  • 25. UserCreate php teleport.phar --action=UserCreate --profile=profile/mysite.profile.json --username=superuser --password=password --sudo --active --fullname="Test User" --email=testuser@example.com 01. 02. 03. 04. 05. 06. 07. 08. 09. 25
  • 26. Packages/GC php teleport.phar --action=Packages/GC --profile=profile/mysite.profile.json 01. 02. 03. 26
  • 28. Шаблоны • Запакованы в phar: phar://teleport.phar/tpl/*.json.tpl • Формат - json • 11 шаблонов из коробки: changeset, complete, complete_db, develop, elements, packages, resource_children, resources, settings, user, users 28
  • 29. changeset.json.tpl Извлекает определенный набор изменений, зафиксированный обратной функцией, заданной в настройках MODX. settings.json.tpl Извлекает все настройки из первого сайта для импорта во второй, обновляет и дополняет существующие. 29
  • 30. complete.json.tpl Извлекает все объекты ядра, файлы и пользовательские таблицы из первого сайта и заменяет все это во втором. complete_db.json.tpl Извлекает все объекты ядра и пользовательские таблицы, без файлов. packages.json.tpl Извлекает все пакеты из первого сайта и устанавливает во втором. 30
  • 31. develop.json.tpl Извлекает все объекты ядра, файлы и пользовательские таблицы из первого сайта для импорта во второй, дополняет существующие объекты и таблицы. elements.json.tpl Извлекает все элементы и связанные с ними данные из первого сайта для импорта во второй, обновляет и дополняет существующие. 31
  • 32. resources.json.tpl Извлекает все ресурсы из первого сайта для импорта во второй, обновляет и дополняет существующие. resource_children.json.tpl Извлекает все ресурсы, которые являются потомками заданного родительского ресурса. 32
  • 33. user.json.tpl Излекает одного указанного пользователя и сопутствующие данные из первого сайта для импорта во второй. users.json.tpl Излекает все пользователей из первого сайта для импорта во второй, обновляет и дополняет существующих. 33
  • 34. Собственные шаблоны Простейший шаблон {"name":"elements", "vehicles":[]} • Обычный json • Отношения и условия как в map-файлах modx 34
  • 35. Пример собственного шаблона 01. {"name":"elements", "vehicles":[ 02. { 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 35 "vehicle_class":"xPDOFileVehicle", "object":{ "source":"{+properties.modx.core_path}components", "target":"return MODX_CORE_PATH;" }, "attributes":{ "vehicle_class":"xPDOFileVehicle" } } ]}
  • 36. Пример собственного шаблона {"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
  • 38. Телепортация A в B Сайт A Сайт B Profile: sitea.profile.json Profile: siteb.profile.json Extract: Inject: packages packages develop develop Синхронизированы 38
  • 39. Телепортация 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
  • 40. Телепортация 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
  • 41. Телепортация 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
  • 42. Телепортация 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
  • 43.
  • 44. Migrate a MODX site in under 15 minutes
  • 45. Проблемы • complete и complete_db не подходит для установки через менеджер пакетов • в конфиге нельзя исключить из упаковки отдельную папку • не на все действия есть документация • до сих пор нет документации по custom tpls 45
  • 46. Планы • Панель управления dev-экземлярами • Автоматическая сборка пакетов • Специальный репозиторий для обновлений • Continuous Delivery через пакеты 46
  • 47. Создание сложных интернет-магазинов и сайтов на MODX • alroniks.com - команда • klimchuk.by - личный и контакты • modx.by - сообщество 47