Николай Ланец
19 дек. 2019 г., 9:02

Разворачиваем prisma-cms за 5 минут в докере

Всем привет!

Заголовок немного желтушный, конечно же. Если у вас не установлены docker и docker-compose, то конечно же придется потратить немного времени на их установку, и в 5 минут уже будет точно не уложиться. Но если стоят и сеть хорошая, то вполне можно...

Итак, сразу к делу (как будто у нас докер уже имеется и мы знаем как с ним работать).

1. Скачиваем репозиторий с субмодулями
git clone https://github.com/prisma-cms/docker.git --recurse-submodules
2. Глядя в readme.md, выполняем
cp .env.sample .env cp caddy/Caddyfile.sample caddy/Caddyfile
3. Запускаем дев-сайт
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up --build -d
или сразу боевой
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

Все. Больше делать ничего не надо.

Остается только дождаться, когда скачаются все зависимости, запустится mysql и prisma-сервер, развернется сайт (в том числе скачаются для него все js-зависимости), продеплоится схема, запустится прокси-сервер caddy (альтернатива nginx, которая из коробки умеет в let's encrypt) и т.д. и т.п. В общем, все то, что ранее вам приходилось бы самим делать, а сейчас вот просто надо посидеть подождать... Помните две предыдущие статьи Разворачиваем Graphcool Prisma на голом железе и Разворачиваем сайт с нуля на prisma-cms? Вот теперь этого всего делать не надо. Все это теперь запихано в докер и не надо париться на счет установки правильной версии ПО, конфигурирования и т.п. Я не проверял, но по идее это и под виндой должно работать теперь, если у вас докер установлен.

Самое сложное здесь сейчас - это понимание того, как работает докер. Если вы с ним не знакомы и не используете, то самое время начинать его изучать, потому что дальше будет очень много на нем завязано. И понятие "оркестрация" так же должно о чем-то говорить (спойлер: это не относится к музыкальному искусству).

Дев- и прод- сайт

Есть несколько существенных отличий между работающими дев- и прод- сайтами.

1. Дев-сайт деплоится в дев-базу (dev_endpoint), а прод соответственно в боевую базу (prod_endpoint).
Эти эндпоинты прописываются в переменное окружение, например в файл .env (см .env.sample).
Хотя можно и вручную задать при запуске, например так:
endpoint=http://prisma:4466/prisma-cms/test docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
2. В дев-сайте создается сим-линк на папку сырцов src/, плюс сам сайт запускается в дев-режиме, с hot-reload и т.п., что позволяет локально править исходники, как будто в контейнере, при этом сайт будет сразу реагировать на изменения и перегружаться автоматически (кто работал с react-scripts или типа того, поймет).

3. При запуске прод-сайта, фронт полностью пересобирается с минификацией и т.п., то есть на выходе скрипты и стили будут весить минимум.

4. Как я говорил, здесь используется прокси-сервер caddy (контейнер proxy). Более подробно про его настройку я расскажу позже в отдельном топике, но сейчас отмечу, что в дев-режиме у него вот такая раскладка портов расписана:
2015 - фронт сайта
2016 - API сайта
2016 - PhpMyAdmin
А в боевом режиме он уже слушает порты 80 и 443. При чем если вы будете запускать на публичном домене и пропишите конфигурацию именно для https://ваш-домен, то сервер автоматически и самостоятельно запросит для него ssl-сертификат и он будет валидный :)

Настройка и запуск своего собственного сайта на базе prisma-cms

По умолчанию проект тянет за собой @prisma-cms/boilerplate (см. .gitmodules). То есть, как и прежде, сам сайт я публикую в самостоятельный репозиторий. Но как быть, если вы захотели на его основе создать свой собственный сайт, со своими плюшками?
Помните статью Разворачиваем у себя копию MODX-Клуба (prisma-cms.com)? prisma-cms.com тоже ведь на базе @prisma-cms/boilerplate делается. То есть был сделан клон проекта и самостоятельно развивается, но когда в boilerplate добавляются новые коммиты, я их тяну и в prisma-cms.com.
Так вот, для примера мы и добавим prisma-cms.com в наш проект.

1. Добавляем его как субмодуль.
git submodule add https://github.com/prisma-cms/prisma-cms.com prisma-cms/prisma-cms.com
2. Или в .env прописываем SITE=prisma-cms.com, или просто его указываем при вызове.
SITE=prisma-cms.com docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build api front
Таким образом в контейнер будет скопирована не папка prisma-cms/boilerplate/, а prisma-cms/prisma-cms.com/, то есть будет работать наш собственный сайт, в котором можно делать что угодно (хотя на самом деле и в boilerplate можно делать что угодно, но там из коробки меньше функционала).

Редактирование шаблонов

Когда у нас сайт запустится, он конечно же еще будет пустой. То есть мы должны сами прописать шаблоны и логику. На этот счет читайте внимательно эту статью. Но если вы запускаете у себя prisma-cms.com, то для быстро запуска можно обойтись всего-лишь вот таким шаблоном:
{ "name": "Page", "component": "Page", "props": {}, "components": [ { "name": "OldPageHeader", "props": {}, "components": [], "component": "OldPageHeader" }, { "name": "OldPages", "props": {}, "components": [], "component": "OldPages" } ] }
Тут сразу будет и шапка с основным меню, и обработка основных страниц (блоги, топики, проекты, задачи, пользователи и т.п.).

В общем, экспериментируйте, и спрашивайте если что-то не понятно или не получается. Чем больше интереса будет с вашей стороны, тем больше я буду рассказывать и показывать (а показал я сейчас оооочень мало).

P.S. Требования по версии докера:
  • docker v 19+
  • docker-compose v 1.25+

Улучшил скрипты. Теперь downtime при деплое проекта составляет всего несколько секунд.

Добавить комментарий