Разворачиваем у себя копию MODX-Клуба (prisma-cms.com)

Всем привет!

Сразу скажу, что для тех, кто хоть немного освоил node-js, данная процедура скорее всего не доставит никаких сложностей. По большому счету все будет достаточно проще.

Цель

Развернуть на своем хостинге или локальной машине копию prisma-cms.com. У вас не будет прямого доступа к базе данных, весь обмен данными будет выполняться по API. Но зато вы сможете поиграться с оформлением, а быть может даже предложить какие-то улучшения дизайнерские.

Требования

  • OS Linux (я не проводил адаптацию под винду, пока спрос не такой высокий для этого).
  • node-js минимум 10 версии (сейчас и 11 есть)
  • Оперативки минимум 3 Gb. Вообще для конечной работы скрипта надо совсем немного памяти, но установка зависимостей и билд скриптов требуют не мало.
  • git

Установка

1. Скачиваем себе проект

git clone https://github.com/prisma-cms/prisma-cms.com
cd prisma-cms.com

2. Устанавливаем зависимости

yarn --ignore-engines

3. Скачиваем graphql-схему

Как я и говорил, весь обмен данными происходит через GraphQL-API. Если вы еще не знакомы с GraphQL, советую к прочтению.

Вот, чтобы клиентские части могли более полноценно работать с этим, им нужна схема.

Наглядный пример: https://prisma-cms.com/graphql-voyager. Чтобы этот интерфейс смог отобразить все объекты и связи с ним, ему нужна схема, иначе как он все это узнает? Или когда вы пишете запросы в редакторе кода, чтобы интерфейс мог делать подсказки, подсвечивать ошибки и т.п., ему нужна схема http://joxi.ru/LmGyqplHeXYbxA. Ну, без схемы этот редактор и вовсе откажется работать :)

В общем, она нам нужна. Качаем ее.

yarn get-api-schema -e https://prisma-cms.com/api/

В ответ вы должны получить сообщение Schema file was created: src/schema/generated/api.graphql и там же этот файл должен находиться.

4. Генерируем API-фрагменты

Если вы еще не работали с GraphQL и не знаете еще, что такое фрагменты и с чем их едят, сложно мне будет это сделать сейчас (отложу на потом, на отдельную статью). Сейчас же просто сгенерируйте ее и забудьте:) Просто без нее тоже не будет работать.

yarn build-api-fragments

5. Прописываем точку доступа API

Вообще, все основное уже сделано, но загвоздка в том, что мы разворачиваем не отдельный самостоятельный сайт (хотя эта сборка таковым является, но для ее самостоятельного запуска надо еще призму разворачивать, да и это пустой сайт получится, без наполнения). Вот нам и надо сделать так, чтобы все запросы API и на картинки уходили на https://prisma-cms.com/

Но это не сложно будет сделать. Открываем у себя вот этот файл https://github.com/prisma-cms/prisma-cms.com/blob/master/src/setupProxy.js и меняем его содержимое вот на такое:

// const PrismaProxy = require("@prisma-cms/front/lib/setupProxy");

var proxy = require('http-proxy-middleware');

const cwd = process.cwd();

module.exports = function (app) {

  app.get("/voyager.worker.js", (req, res, next) => {
    res.sendFile(`${cwd}/node_modules/@prisma-cms/graphql-voyager/dist/voyager.worker.js`);
  });


  app.use(proxy(["/api/", "/images/"], {
    ws: true,
    target: 'https://prisma-cms.com',
    changeOrigin: true,
    secure: false,
  }));

  // PrismaProxy(app);

};

Вот теперь все API-запросы и запросы на картинки будут как и прежде идти на ваш сервер, но проксироваться на prisma-cms.com

Все :)

Запускаем сайт

yarn start

Если вы запускаете его локально на вашем компьютере, то у вас браузер сам откроется с адресом http://localhost:3000. Если на удаленном сервере запускаете, то подождите пока сбилдятся скрипты и тогда уже открывайте http://вашДоменИлиIP:3000

Теперь у вас своя собственная версия MODX-Клуба, и можете даже локально авторизовываться и писать комментарии, они будут прилетать сюда, а написанное здесь автоматически будет появляться и у вас. Правда здорово? :)

Кастомизируем оформление

Но это, конечно же, еще не все. Самое интересное в том, что теперь всякий, кому не нравится оформление, и у кого честь чувство стиля и руки откуда надо, каждый теперь может внести свой вклад, чтобы все выглядело интересней.

Давайте попробуем что-нибудь по мелочи поменять в оформлении...

Есть две основные "точки входа" по стилям:

  1. Material-ui theme provider. Кому интересно, можно здесь, поиграться. Механизм этот для большинства, скорее всего, не понятный, поэтому можете особо не заморачиваться. Но если интерес есть, начните с освоения JSS. Можете, к примеру, вот это прочитать. У меня на сайте конфиги темы прописаны здесь.

  2. Непосредственно CSS. Но здесь его нельзя редактировать. Это сгенерированные стили из less. Вот less-файл и надо редактировать.

После того, как less отредактирован, надо сгенерировать css.

Выполняем

yarn build-less

Если сайт у вас уже запущен (yarn less), то скпомпиллированные стили сразу применятся на странице без какой-либо перезагрузки последней.

Если less-правки не единичные (сидите переделываете весь этот недодизайн) и не хотите каждый раз выполнять yarn build-less, можно запустить компилляцию в режиме watch (отслеживания изменений файлов).

yarn build-less -w

В таком случае стили будут пересобираться автоматически после каждого сохранения less-файла. Довольно удобно.

У тут чуть-чуть поигрался со стилями. Интересно знать, стало лучше? Для меня ничего не поменялось:)

Бонус

Точно так же вы можете у себя развернуть копию https://pivkarta.ru/

Этот проект мы делаем совместно с Димой Поповым и он тоже лежит в открытом доступе.

git clone https://github.com/Pivkarta/pivkarta.ru.git
cd pivkarta.ru/
yarn --ignore-engines
yarn get-api-schema -e https://pivkarta.ru/api/
yarn build-api-fragments

# Правим проксирование запросов

# запуск сайта
yarn start

Перед запуском не забываем подправить проксирование по аналогии, как это было описано выше, только вместо https://prisma-cms.com указываем https://pivkarta.ru

Заключение

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

UPD: Если вы хотите полностью развернуть себе самостоятельную копию сайта Клуба, то есть чтобы вообще со своей базой работал и т.п., то вот инструкция:

Пункты 1 и 2 из предыдущей инструкции повторяем.

3. Деплоим базу данных.

Так как мы будем использовать не текущую базу данных MODX-Клуба, а создавать свою, то нам просто надо задеплоить схему, указав endpoint бэкэнда. Вот здесь я писал про то, что это и для чего, и что для тестов поднял публичный эндпоинт: https://modx.pro/development/17092

Вы можете использовать его для тестов и в данном примере я тоже буду в него деплоить схему. Выполняем:

endpoint=http://test-api.prisma-cms.com/{project}/{state} yarn deploy

Надо подставить свои project и state. Обычно это было бы, к примеру modxclub/test, но я предлагаю во избежание конфликтов вместо project указывать свой username, а вместо state использовать {project}-{state}. Например я написал endpoint=http://test-api.prisma-cms.com/fi1osof/modxclub-test yarn deploy

4. Запуск сервера.

Хотя реальная база данных у нас находится на удаленном сервере (в данном случае http://test-api.prisma-cms.com), она у нас только для хранения информации. Реальная логика обрабатывается нашим сервером. Это в примере выше мы проксировали запросы на сайт Клуба, и там вся логика обрабатывалась, а здесь у нас свой сервер. Выполняем:

APP_SECRET={secret} endpoint={endpoint} yarn start-server

endpoint соответственно указываем тот, куда выполняли деплой. secret - произвольная строка, она используется для механизма авторизации пользователей.

Если все запустилось ОК, вы получите сообщение Server is running on http://localhost:4000. Откройте в браузере. По сути это аналог API MODX-Клуба, только для своей базы данных.

5. Запуск сайта

Если у вас сервер запустился, значит можно и фронт запускать. Открываем в новом терминале эту же папку и выполняем:

yarn start

В итоге у вас должен открыться сайт на 3000-ом порту. Так как у вас база своя с нуля, то там конечно же ничего не будет, то есть ни блогов, ни топиков, ни комментариев, ни пользователей. Это не страшно. Регистрируйтесь, заводите блоги, топики и т.п.

Если вы захотите и боевой призма-сервер себе развернуть, я писал про это здесь.