Гид по технологиям

Установка Monica CRM на Rocky Linux 9

10 min read DevOps Обновлено 09 Nov 2025
Установка Monica CRM на Rocky Linux 9
Установка Monica CRM на Rocky Linux 9

Обычно CRM‑системы ориентированы на компании и управление клиентами. Monica Personal CRM предназначена для личных связей — семьи и друзей. Monica помогает организовывать и хранить все данные о людях вокруг вас. Это проект с открытым исходным кодом и полностью бесплатен.

В этом руководстве вы научитесь ставить Monica Personal CRM на сервер с Rocky Linux 9.

Основной сценарий и альтернативные форматы использования

Primary intent: установка Monica CRM на Rocky Linux 9. Другие варианты: установка в тестовую среду, обновление существующей инсталляции, перенос данных между инстансами, разворачивание в контейнере/VM.

Important: если сервер имеет менее 1.5 ГБ оперативной памяти, задачи установки Yarn, сборки frontend или компиляции могут завершиться с ошибкой. По возможности используйте минимум 2 ГБ ОЗУ для комфортного процесса.

Кому пригодится это руководство

  • Системным администраторам и DevOps инженерам, развертывающим Monica для одного пользователя или небольшой группы.
  • Разработчикам, тестирующим Monica локально на сервере Rocky Linux 9.
  • Тем, кто хочет держать личную CRM под собственным контролем.

Что будет в статье

  • Подготовка сервера и требования
  • Пошаговая установка: Git, Node, Yarn, Nginx, PHP, Composer, MariaDB
  • Конфигурация SELinux и PHP‑FPM, SSL через Certbot
  • Настройка cron, бэкап и обновление Monica
  • Чек‑лист, сценарии отката, отладка и рекомендации по безопасности

Предварительные требования

  • Сервер с Rocky Linux 9, рекомендовано минимум 2 ГБ ОЗУ (строго минимум 1.5 ГБ). Если ОЗУ меньше — увеличьте память прежде чем продолжать.
  • Нераутовый пользователь с sudo-привилегиями.
  • Полное доменное имя (FQDN), например monica.example.com, указывающее на сервер.
  • SMTP‑аккаунт (Amazon SES, Mailgun и т. п.) для отправки писем из Monica.
  • Система обновлена:
$ sudo dnf update
  • Установлены базовые пакеты (часть может быть уже на сервере):
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y

Шаг 1 — Настройка брандмауэра

Rocky Linux использует firewalld. Проверьте статус:

$ sudo firewall-cmd --state
running

Просмотрите активные службы в зоне public (по умолчанию):

$ sudo firewall-cmd --permanent --list-services

Разрешите HTTP и HTTPS:

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Проверьте ещё раз и перезагрузите правила:

$ sudo firewall-cmd --permanent --list-services
$ sudo firewall-cmd --reload

Шаг 2 — Установка Git

Git часто уже установлен. Если нет — установите:

$ sudo dnf install git -y

Проверьте версию:

$ git --version
git version 2.39.3

Сконфигурируйте имя и email:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Шаг 3 — Установка Node.js

Monica требует Node.js для сборки frontend. Добавим репозиторий Nodesource и установим Node 18.x (на текущий момент Node 20 LTS несовместим с Yarn):

$ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource.gpg

Установите RPM‑пакет репозитория:

$ NODE_MAJOR=18
$ sudo yum install https://rpm.nodesource.com/pub_$NODE_MAJOR.x/nodistro/repo/nodesource-release-nodistro-1.noarch.rpm -y

Установите Node.js:

$ sudo yum install nodejs -y --setopt=nodesource-nodejs.module_hotfixes=1

Проверьте:

$ node --version
v18.18.2

Обновите npm:

$ sudo npm install -g npm@latest
$ npm --version
10.2.4

Шаг 4 — Установка Yarn

Yarn нужен для установки frontend‑пакетов и сборки ассетов.

$ sudo npm install --global yarn
$ yarn --version
1.22.21

Примечание: обычно рекомендуют фиксировать версию Yarn в проекте (yarn.lock) и использовать её для консистентности сборки.

Шаг 5 — Установка Nginx

Rocky Linux может поставлять старую версию Nginx, поэтому добавим официальный репозиторий Nginx и установим актуальную версию.

Создайте файл /etc/yum.repos.d/nginx.repo и вставьте в него блок из оригинала (сохраните с помощью Ctrl+X, затем Y).

$ sudo nano /etc/yum.repos.d/nginx.repo

(вставьте содержимое репо из исходного руководства)

Установите Nginx:

$ sudo dnf install nginx -y
$ nginx -v
nginx version: nginx/1.24.0
$ sudo systemctl enable nginx --now

Проверьте статус:

$ sudo systemctl status nginx

Откройте IP сервера — должна отобразиться стандартная страница Nginx.

Страница по умолчанию Nginx

Alt: Стандартная стартовая страница веб‑сервера Nginx, подтверждающая работу сервера

Шаг 6 — Установка PHP и расширений

Rocky Linux 9 по умолчанию содержит PHP 8.1. Чтобы иметь возможность устанавливать более новые потоки PHP (8.2 и выше), подключим репозиторий Remi.

Установите EPEL:

$ sudo dnf install epel-release -y

Установите Remi:

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

Проверьте доступные потоки PHP, затем переключитесь на remi-8.2:

$ dnf module list php -y
$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.2

Установите PHP и необходимые расширения:

$ sudo dnf install php php-bcmath php-cli php-curl php-common \
    php-fpm php-gd php-gmp php-intl php-mbstring \
    php-mysql php-opcache php-redis php-xml php-zip -y

Проверьте версию:

$ php --version
PHP 8.2.13 (cli) ...

Включите и запустите php-fpm:

$ sudo systemctl enable php-fpm --now
$ sudo systemctl status php-fpm

Шаг 7 — Установка Composer

Composer — менеджер зависимостей для PHP / Laravel.

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

Проверьте sha384 инсталлятора (в примере проверяется конкретный хеш — при установке всегда убедитесь, что используете актуальный хеш с getcomposer.org):

$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Установите Composer и переместите бинарник:

$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"
$ sudo mv composer.phar /usr/local/bin/composer
$ composer --version
Composer version 2.6.5

Шаг 8 — Установка MariaDB

MariaDB — взаимозаменяемая альтернатива MySQL. Чтобы получить свежую версию (например 10.11), подключим официальный репозиторий MariaDB.

Создайте /etc/yum.repos.d/mariadb.repo и вставьте блок репозитория (как в исходнике).

Установите MariaDB (обратите внимание на регистр имени пакета, в примере используется MariaDB-server):

$ sudo dnf install MariaDB-server -y
$ mysql --version

Включите и запустите службу:

$ sudo systemctl enable --now mariadb
$ sudo systemctl status mariadb

Затем запустите скрипт безопасной настройки:

$ sudo mariadb-secure-installation

Следуйте подсказкам. В большинстве случаев нажимайте y для удаления анонимных пользователей, отключения удаленного root и удаления тестовой базы.

Для входа в консоль MariaDB используйте sudo mysql.

Шаг 9 — Конфигурация MariaDB для Monica

Войдите в консоль:

$ sudo mysql

Создайте базу данных и пользователя (замените имена и пароль на свои):

MariaDB> CREATE DATABASE monica CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB> CREATE USER 'monicauser'@'localhost' IDENTIFIED BY 'yourpassword';
MariaDB> GRANT ALL PRIVILEGES ON monica.* TO 'monicauser'@'localhost';
MariaDB> FLUSH PRIVILEGES;
MariaDB> exit

Если нужно создать административного пользователя с полными правами (опционально):

MariaDB> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Запомните или безопасно сохраните пароли, используемые для БД.

Шаг 10 — Скачивание Monica

Создайте корневой каталог веб‑приложения и назначьте владела:

$ sudo mkdir /var/www/html/monica -p
$ sudo chown -R $USER:$USER /var/www/html/monica
$ cd /var/www/html/monica

Клонируйте репозиторий Monica в текущую директорию (обратите внимание на точку в конце команды):

$ git clone https://github.com/monicahq/monica.git .
$ git fetch

Выберите релиз (в примере v4.0.0 — замените на требуемую версию):

$ git checkout tags/v4.0.0

После checkout вы будете в detached HEAD состоянии — это нормально для установки конкретного тега.

Шаг 11 — Установка Monica

Перейдите в корень Monica и создайте файл окружения:

$ cd /var/www/html/monica
$ cp .env.example .env

Отредактируйте .env и поменяйте переменные, например:

APP_ENV=production
APP_URL=https://monica.example.com
DB_DATABASE=monicadb
DB_USERNAME=monicauser
DB_PASSWORD=YourPassword23!
MAIL_MAILER=smtp
MAIL_HOST=email-smtp.us-west-2.amazonaws.com
MAIL_PORT=587
MAIL_USERNAME=SESID
MAIL_PASSWORD=SESKey
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=[email protected]
MAIL_FROM_NAME="Monica CRM"
MAIL_TO=[email protected]

Сохраните файл.

Установите PHP‑зависимости через Composer (без dev‑зависимостей):

$ composer install --no-interaction --no-dev

Установите frontend‑зависимости и соберите ассеты:

$ yarn install
$ yarn run production

Сгенерируйте APP_KEY:

$ php artisan key:generate

Запустите установочный скрипт для production — он выполнит миграции, посеет данные и создаст симлинки. Ответьте yes и введите почту и пароль для административного пользователя:

$ php artisan setup:production [email protected] --password=yourpassword -v

Если всё успешно, вы увидите сообщение о готовности Monica.

Шаг 12 — Установка SSL (Certbot)

Установим Snapd, затем Certbot через snap для получения Let’s Encrypt сертификата.

$ sudo dnf install -y snapd
$ sudo systemctl enable snapd --now
$ sudo snap install core && sudo snap refresh core
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ certbot --version
certbot 2.7.4

Запрос сертификата (например, для Nginx):

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d monica.example.com

Сертификаты будут в /etc/letsencrypt/live/monica.example.com.

Создайте Diffie‑Hellman параметр:

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Проверьте планировщик обновлений и выполните тест обновления сертификатов:

$ sudo systemctl list-timers
$ sudo certbot renew --dry-run

Если dry‑run успешен — автоматическое обновление будет работать.

Шаг 13 — Настройка SELinux

Разрешите Nginx/PHP доступ к директории Monica и настройте необходимые boolean‑пересылки:

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/monica(/.*)?"
$ sudo restorecon -Rv /var/www/html/monica/
$ sudo setsebool -P httpd_can_network_connect_db 1
$ sudo setsebool -P httpd_can_network_connect 1

Проблема: с MariaDB 10.11 php-fpm может блокироваться SELinux и не сможет подключаться к MariaDB. Решение — локальная политика SELinux.

Создайте файл my-phpfpm.te в домашней директории и вставьте содержимое (как в исходнике). Затем выполните:

$ cd ~
$ nano my-phpfpm.te
$ sudo checkmodule -M -m -o my-phpfpm.mod my-phpfpm.te
$ sudo semodule_package -o my-phpfpm.pp -m my-phpfpm.mod
$ sudo semodule -i my-phpfpm.pp

Это разрешит соединение PHP‑FPM с сокетом/службой MariaDB при включенном SELinux.

Шаг 14 — Конфигурация PHP‑FPM

Отредактируйте /etc/php.ini чтобы увеличить лимиты загрузки и память:

$ sudo nano /etc/php.ini
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 10M/' /etc/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 10M/' /etc/php.ini
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php.ini

Откройте /etc/php-fpm.d/www.conf и смените пользователя/группу на nginx, а также права сокета:

$ sudo nano /etc/php-fpm.d/www.conf

Убедитесь, что указано:

user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Перезапустите php-fpm и измените группу каталога сессий:

$ sudo systemctl restart php-fpm
$ sudo chgrp -R nginx /var/lib/php/session

Шаг 15 — Конфигурация Nginx для Monica

Дайте nginx владение директорией проекта и настройте права:

$ sudo chown -R nginx:nginx /var/www/html/monica
$ sudo chmod -R 775 /var/www/html/monica/storage

Отредактируйте /etc/nginx/nginx.conf — добавьте строку server_names_hash_bucket_size 64 перед include:

$ sudo nano /etc/nginx/nginx.conf

Создайте /etc/nginx/conf.d/monica.conf и вставьте конфигурацию виртуального хоста (замените monica.example.com на ваш домен). Обратите внимание на client_max_body_size = 10M — должна совпадать с PHP.

$ sudo nano /etc/nginx/conf.d/monica.conf

(вставьте серверный блок из руководства)

Проверьте конфигурацию и перезапустите nginx:

$ sudo nginx -t
$ sudo systemctl restart nginx

Шаг 16 — Доступ к Monica CRM

Откройте https://monica.example.com в браузере — вы увидите страницу входа.

Страница входа Monica CRM

Alt: Страница входа Monica CRM с полями электронной почты и пароля

Войдите под созданной учётной записью — вы попадёте на приветственный экран.

Экран приветствия Monica CRM

Alt: Основная панель Monica CRM после входа, с навигацией и карточками контактов

Шаг 17 — Настройка cron

Monica использует планировщик Laravel (php artisan schedule:run). Настройте cron для пользователя nginx:

$ sudo editor=NANO crontab -u nginx -e

Добавьте строку:

* * * * * php /var/www/html/monica/artisan schedule:run >> /dev/null 2>&1

Сохраните. Это обеспечит регулярный запуск фоновых задач.

Шаг 18 — Обновление Monica и бэкапы

Экспорт данных через веб‑интерфейс: Settings → Export data → Export to SQL или Export to Json. Файлы сохраняются в /var/www/html/monica/storage/app/public/exports.

Пример вывода:

$ ls /var/www/html/monica/storage/app/public/exports -al
total 84
...
-rw-r--r-- 1 nginx nginx 53712 Nov 22 09:47 cvlK5RAl7VVLdYLpln...json
-rw-r--r-- 1 nginx nginx 17050 Nov 22 09:47 dgZf5T0SnXeAuZ67Hf...sql

Процесс обновления:

$ cd /var/www/html/monica
$ sudo chown -R $USER:$USER /var/www/html/monica
$ git fetch
$ git checkout tags/v5.0.0-beta.3   # пример: не используйте бета в production
$ composer install --no-interaction --no-dev
$ yarn install
$ yarn run production
$ php artisan monica:update --force
$ sudo chown -R nginx:nginx /var/www/html/monica

Если требуется восстановить SQL в пустой базе:

$ php artisan migrate
$ sudo mysqlimport -u monicauser -p monica /var/www/html/monica/storage/app/public/exports/dgZf5T0SnXeAuZ67HfaFLu2JosyUsByJcp2C8nlv.sql

Вас попросят ввести пароль БД.


Рекомендации по безопасности и соответствию (GDPR/конфиденциальность)

  • Всегда используйте HTTPS и надежные сертификаты. Настройка HSTS (HTTP Strict Transport Security) рекомендована для production‑систем.
  • Ограничьте доступ к SSH по ключам и используйте firewall для разрешения доступа только из нужных адресов.
  • Защитите почтовые учётные записи (SMTP) многофакторной аутентификацией, если поставщик поддерживает.
  • Регулярно делайте резервные копии БД и файлов (ранее описан экспорт). Храните бэкапы в зашифрованном виде и за пределами сервера.
  • Для соответствия GDPR: создавайте и исполняйте политику удаления личных данных при запросе, документируйте процесс обработки данных и храните только необходимые персональные данные.
  • Ограничьте доступ к /var/www/html/monica и логам по принципу наименьших привилегий.

Important: Никогда не храните пароли и секреты (.env) в публичных репозиториях. Используйте менеджер секретов или шифрование файлов .env при необходимости.

Чек‑лист перед вводом в эксплуатацию

  • Сертификат HTTPS успешно установлен и автоматическое продление работает (certbot renew –dry-run).
  • SELinux настроен и необходимые boolean‑переменные включены.
  • PHP‑FPM пользователь = nginx, сокет /run/php-fpm/www.sock доступен nginx.
  • База данных создана, пользователь и права настроены.
  • Cron задача для schedule:run настроена для nginx.
  • Каталог storage имеет права на запись (775) и владелец nginx.
  • Резервная копия SQL и файлов выполнена и проверена.
  • Тестовый пользователь может войти и выполнять ключевые сценарии.

Критерии приёмки

  • Сайт доступен по HTTPS и возвращает код 200 для корневой страницы.
  • Вход в систему под тестовым аккаунтом успешен, базовые операции (создать контакт, экспорт данных) работают.
  • Планировщик заданий (cron) выполняет задачи (проверьте логи и статус задач Laravel scheduler).
  • Резервное копирование и восстановление работает при тестовой миграции в чистую базу.

Сценарий отката (Rollback runbook)

  1. Остановите веб‑сервер: sudo systemctl stop nginx
  2. Откатите код к предыдущему рабочему тегу: git checkout tags/
  3. Верните зависимости PHP: composer install –no-interaction –no-dev
  4. Верните ассеты: yarn install && yarn run production
  5. Откатите миграции (только если есть резервная копия БД):
    • Восстановите БД из SQL‑дампа: sudo mysql -u root -p < /path/to/backup.sql
  6. Восстановите права владельца: sudo chown -R nginx:nginx /var/www/html/monica
  7. Перезапустите сервисы: sudo systemctl start php-fpm && sudo systemctl start nginx

Notes: миграции базы данных часто необратимы. Всегда делайте полный SQL‑дамп до обновления.

Частые проблемы и способы устранения

  • Ошибка при yarn install (OOM): увеличьте объем памяти или используйте swap для временной помощи.
  • Невозможно подключиться к БД из PHP: проверьте SELinux (module my-phpfpm) и boolean httpd_can_network_connect_db.
  • 502 Bad Gateway от Nginx: проверьте, запущен ли php-fpm и правильный ли путь к fastcgi_pass unix:/run/php-fpm/www.sock.
  • Ошибки при composer install: убедитесь, что расширения PHP (mbstring, xml, gd, pdo_mysql) установлены.
  • Сертификат не выдан Certbot: проверьте DNS запись A/AAAA для домена и доступность порта 80.

Роли и обязанности (кто что делает)

  • Системный администратор / DevOps:
    • Подготовка сервера, firewall, SSL, SELinux, настройка бэкапов.
  • Разработчик / тех. поддержка:
    • Установка и обновление кода, сборка frontend, миграции.
  • Владелец данных / пользователь:
    • Конфигурирование почты, управление пользователями, экспорт данных.

Мини‑методология обновления (шаги безопасного обновления)

  1. Создать полную резервную копию БД и файлов.
  2. Протестировать обновление на стендовой копии (клонировать БД и файлы).
  3. Выполнить обновление зависимостей и сборку ассетов на стенде.
  4. Выполнить миграции на стенде и тесты: функциональные сценарии.
  5. При успешных тестах — повторить процедуру в production в окне обслуживания.
  6. Мониторинг после обновления: проверка логов, ошибок 5xx, отчётов cron.

Тесты и критерии приёмки после установки

  • UI: успешная авторизация и создание контакта.
  • Функции: отправка тестового письма из интерфейса (проверить SMTP настройки).
  • Фоновые задачи: проверить, что artisan schedule:run запускает задачи (просмотреть логи).
  • Производительность: базовая проверка времени ответа страницы входа (целевой отклик <1–2 сек на небольшом инстансе).

Глоссарий — 1 строка термина

  • FQDN — полное доменное имя сервера (например monica.example.com).
  • SELinux — механизм обязательного контроля доступа в Linux.
  • php-fpm — FastCGI процесс‑менеджер для PHP.
  • Composer — менеджер зависимостей PHP.
  • Yarn — менеджер фронтенд пакетов JavaScript.

Итог

Вы установили Monica CRM на Rocky Linux 9: подготовили систему, установили и настроили все зависимости, оформили SSL, настроили SELinux и cron, выполнили первоначальную установку Monica и собрали фронтенд‑ассеты. В дополнение вы получили чек‑листы, сценарий отката и рекомендации по безопасности и соответствию.

Если возникли вопросы — проверьте раздел «Частые проблемы» и логи системных сервисов (nginx, php-fpm, mariadb). Удачи в эксплуатации Monica!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Троян Herodotus: как он действует и как защититься
Кибербезопасность

Троян Herodotus: как он действует и как защититься

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Панель полей PivotTable в Excel — руководство
Excel

Панель полей PivotTable в Excel — руководство

Включить новый Пуск в Windows 11 — инструкция
Windows

Включить новый Пуск в Windows 11 — инструкция

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

Как посмотреть историю просмотров Reels в Instagram
Социальные сети

Как посмотреть историю просмотров Reels в Instagram