Установка 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.

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 в браузере — вы увидите страницу входа.

Alt: Страница входа 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)
- Остановите веб‑сервер: sudo systemctl stop nginx
- Откатите код к предыдущему рабочему тегу: git checkout tags/
- Верните зависимости PHP: composer install –no-interaction –no-dev
- Верните ассеты: yarn install && yarn run production
- Откатите миграции (только если есть резервная копия БД):
- Восстановите БД из SQL‑дампа: sudo mysql -u root -p < /path/to/backup.sql
- Восстановите права владельца: sudo chown -R nginx:nginx /var/www/html/monica
- Перезапустите сервисы: 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, миграции.
- Владелец данных / пользователь:
- Конфигурирование почты, управление пользователями, экспорт данных.
Мини‑методология обновления (шаги безопасного обновления)
- Создать полную резервную копию БД и файлов.
- Протестировать обновление на стендовой копии (клонировать БД и файлы).
- Выполнить обновление зависимостей и сборку ассетов на стенде.
- Выполнить миграции на стенде и тесты: функциональные сценарии.
- При успешных тестах — повторить процедуру в production в окне обслуживания.
- Мониторинг после обновления: проверка логов, ошибок 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!
Похожие материалы
Троян Herodotus: как он действует и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей PivotTable в Excel — руководство
Включить новый Пуск в Windows 11 — инструкция
Дубликаты Диспетчера задач в Windows 11 — как исправить