Документация

Установка Meenu CMS

Четыре шага от покупки до работающего сайта.

  1. Купите лицензию

    Вход по коду из письма, оплата картой. Код активации придёт на email и появится в кабинете.

  2. Скачайте архив

    В личном кабинете — последняя версия Meenu CMS одним zip-архивом.

  3. Установите на сервер

    Распакуйте архив и запустите по инструкции ниже — около часа.

  4. Пройдите мастер

    Откройте свой сайт, введите код активации и данные владельца — готово.

Архив содержит готовую сборку: исходников и node_modules в нём нет, ставить зависимости не нужно.

Требования

  • Linux x86_64 или ARM64 с glibc: Ubuntu 22.04+, Debian 12+ (Alpine/musl этой сборкой не поддерживается).
  • Node.js 24.6 или новее: node -v. Установка — https://nodejs.org (LTS) или NodeSource.
  • MongoDB 6.0 или новее (на этом же сервере или внешняя, например Atlas).
  • unzip: sudo apt install unzip.
  • Домен и обратный прокси с HTTPS (ниже — пример для nginx).

Установка

sudo useradd --system --create-home --home-dir /opt/meenu-cms meenu
sudo -u meenu unzip meenu-cms-X.Y.Z.zip -d /opt/meenu-cms
cd /opt/meenu-cms
sudo -u meenu cp .env.example .env
sudo -u meenu nano .env

В .env обязательно укажите:

  • PUBLIC_URL — адрес сайта, как его видят гости: https://shop.example.ru;
  • MONGO_URL — строка подключения к MongoDB;
  • PORT — порт приложения (по умолчанию 4321);
  • за nginx на этой же машине: HOST=127.0.0.1 и TRUST_PROXY=127.0.0.1.

NODE_ENV=production launcher выставляет сам. Остальные настройки (бренд, оплата, интеграции) задаются в админке.

Первый запуск

cd /opt/meenu-cms && sudo -u meenu node launcher.mjs

В выводе появится строка Система не установлена. Откройте …/install. Откройте адрес: первый шаг мастера — код активации MEENU-XXXX-XXXX-XXXX-XXXX из письма после оплаты или из личного кабинета (серверу нужен доступ в интернет к сайту Meenu), затем — название бизнеса, владелец и первая точка. Код привязывается к этому серверу; при переезде отвяжите прежнюю установку в личном кабинете. Остановить — Ctrl+C; дальше запускайте через systemd.

Автозапуск (systemd)

/etc/systemd/system/meenu-cms.service:

[Unit]
Description=Meenu CMS
After=network-online.target mongod.service
Wants=network-online.target

[Service]
Type=simple
User=meenu
WorkingDirectory=/opt/meenu-cms
ExecStart=/usr/bin/node /opt/meenu-cms/launcher.mjs
Restart=always
RestartSec=5
KillMode=control-group
TimeoutStopSec=30

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now meenu-cms
journalctl -u meenu-cms -f                          # журнал

Путь к node проверьте командой which node (при установке через nvm он другой).

nginx

server {
	listen 443 ssl;
	server_name shop.example.ru;
	# сертификат — certbot --nginx -d shop.example.ru

	client_max_body_size 10m;   # загрузка фото блюд до 10 МБ

	location / {
		proxy_pass http://127.0.0.1:4321;
		proxy_http_version 1.1;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}
}

С nginx обязательно TRUST_PROXY=127.0.0.1 в .env: иначе все гости видны с адреса прокси и ограничения запросов становятся общими на весь сайт.

Что лежит в каталоге

Путь Что это
launcher.mjs супервизор: запускает CMS, перезапускает при сбое, применяет обновления
launcher.prev.mjs предыдущий launcher (появляется после его самообновления)
launcher.pending.json, launcher.rejected.json служебные файлы самообновления launcher
current.json какая версия из releases/ работает
releases/<версия>/ версии приложения (хранятся 3 последние)
.env ваши настройки (в архивах обновлений его нет — не перезаписывается)
uploads/ загруженные фото и логотипы
update-log.json история обновлений

Обновление

Когда выходит новая версия, в админке появляется баннер «Доступна версия X · Подробнее»: заметки всех новых версий и кнопка «Применить обновление» (только владелец, при действующей лицензии или в льготный период). Launcher скачивает архив с сервера Meenu, проверяет подпись, запускает новую версию на временном порту и переключается на неё, только если она ответила. При любой ошибке продолжает работать прежняя версия, причина видна в разделе «Обновления» и в update-log.json.

Если в новой версии изменился сам launcher, он обновляется следом: новый файл сначала проверяется самотестом, затем заменяет launcher.mjs (прежний рабочий сохраняется в launcher.prev.mjs), и launcher перезапускается. CMS при этом перезапускается дважды: при переключении на новую версию и при перезапуске launcher (каждый раз — как обычный рестарт). Не прошёл самотест — остаётся прежний launcher, обновление CMS всё равно применено, в разделе «Обновления» — предупреждение.

  • systemd, запуск вручную — launcher заменяет себя в том же процессе (тот же PID), юнит менять не нужно.
  • pm2 (и любой запуск с IPC-каналом) — launcher останавливает CMS и завершается с кодом 75, pm2 поднимает его заново уже с новым launcher.mjs (нужен включённый по умолчанию autorestart).
  • Docker — launcher.mjs вместе с current.json и releases/ должен лежать на томе (volume): иначе пересоздание контейнера вернёт launcher и версию из образа.

Если новый launcher трижды подряд стартует, но CMS под ним не проработала минуту, на четвёртом старте он сам возвращает launcher.prev.mjs и больше не ставится (launcher.rejected.json); в разделе «Обновления» — предупреждение. Если launcher не запускается вовсе, верните прежний вручную:

cd /opt/meenu-cms && sudo -u meenu cp launcher.prev.mjs launcher.mjs && sudo systemctl restart meenu-cms

Лицензия проверяется раз в сутки. За 30 дней до окончания в админке появится предупреждение; после окончания 14 дней админка работает как обычно, затем закрывается до продления (раздел «Лицензия» остаётся доступным). Витрина и приём заказов работают всегда.

Вручную:

sudo systemctl stop meenu-cms
cd /opt/meenu-cms && sudo -u meenu unzip -o meenu-cms-X.Y.Z.zip
sudo systemctl start meenu-cms

unzip -o добавит releases/X.Y.Z/, обновит launcher.mjs, current.json и эту инструкцию; .env и uploads/ не затрагиваются.

Откат вручную: остановите сервис, впишите в current.json версию из releases/ ({ "version": "1.4.0" }) и запустите. Изменения данных новой версии при откате не отменяются — они всегда совместимы с предыдущей версией.

Резервные копии

Регулярно сохраняйте базу (mongodump --uri "$MONGO_URL" --out /backup/meenu-$(date +%F)) и каталог uploads/.