Установка Monica Personal CRM на Rocky Linux 9
TL;DR
Кратко: установите на сервер Rocky Linux 9 все зависимости (Node.js 18, Yarn, PHP 8.2, Composer, MariaDB, Nginx), клонируйте репозиторий Monica, настройте .env, соберите фронтенд, выполните миграции и создайте SSL через Certbot. В статье представлен пошаговый SOP, чеклисты, отладка и инструкции по резервному копированию и откату.
Important: перед началом убедитесь, что у вас есть FQDN, SMTP-аккаунт и минимум 1.5 ГБ оперативной памяти.
Monica — персональная CRM для управления связями с друзьями и семьёй. В отличие от корпоративных CRM, Monica предназначена для индивидуального использования, хранит информацию о людях, событиях и заметках. Она Open Source и бесплатна.
В этом руководстве подробно описана установка Monica на сервер с Rocky Linux 9: от подготовки окружения до получения работающего HTTPS-сайта и планового обновления.
Основные понятия (одно предложение)
- Monica: Open Source персональная CRM, написана на Laravel (PHP).
- LEMP: Linux + Nginx + MariaDB + PHP-FPM — стек, использующийся для Monica.
- FQDN: Fully Qualified Domain Name — полное доменное имя сайта.
Предварительные требования
- Сервер с Rocky Linux 9, минимум 1.5 ГБ RAM (Yarn может требовать больше). Если RAM < 1.5 ГБ, возможны ошибки при установке фронтенда.
- Нерутовый пользователь с sudo-привилегиями.
- FQDN, например monica.example.com, указывающий на сервер.
- SMTP-учётная запись (Amazon SES, Mailgun или другой SMTP).
- Система обновлена:
$ sudo dnf update- Установлены базовые утилиты:
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -yСодержание руководства
- Настройка фаервола
- Установка Git
- Установка Node.js (18.x)
- Установка Yarn
- Установка Nginx
- Установка PHP 8.2 и расширений
- Установка Composer
- Установка MariaDB 10.11
- Конфигурация базы данных для Monica
- Загрузка Monica из GitHub
- Установка приложения
- Установка SSL (Certbot)
- Настройка SELinux
- Конфигурация PHP-FPM
- Конфигурация Nginx
- Доступ к Monica
- Настройка cron
- Обновление и резервное копирование
Далее — развернутые инструкции и дополнительные разделы: чеклисты, отладка, аварийное восстановление и критерии приёмки.
1. Конфигурация фаервола
Rocky Linux использует firewalld. Проверьте его статус:
$ sudo firewall-cmd --state
runningСписок сервисов в текущей зоне (по умолчанию — public):
$ sudo firewall-cmd --permanent --list-servicesЕсли видно, например, “cockpit dhcpv6-client ssh”, добавьте 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 --reload2. Установка Git
Git обычно предустановлен. Если нет:
$ sudo dnf install git -yПроверьте версию:
$ git --versionНастройте имя и email:
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"3. Установка Node.js (версия 18.x)
Monica требует Node.js. На момент руководства Node LTS 20.x может конфликтовать с Yarn, поэтому используем 18.x.
Импорт ключа Nodesource:
$ 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.x.xОбновите npm:
$ sudo npm install -g npm@latest
$ npm --version4. Установка Yarn
Yarn требуется для сборки фронтенда.
$ sudo npm install --global yarn
$ yarn --versionЕсли вы планируете управлять несколькими проектами с разными версиями Yarn, используйте локальные версии через .yarnrc, но для Monica глобальная установка подходит.
5. Установка Nginx
Чтобы получить актуальную версию Nginx, добавьте официальный репозиторий:
Создайте файл /etc/yum.repos.d/nginx.repo и вставьте:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=trueСохраните и установите:
$ sudo dnf install nginx -y
$ nginx -v
$ sudo systemctl enable nginx --now
$ sudo systemctl status nginxОткройте IP-адрес сервера в браузере — должна показать стартовую страницу Nginx.

ALT: Стандартная страница Nginx, подтверждающая работу веб-сервера на сервере
6. Установка PHP и расширений (PHP 8.2)
Rocky Linux 9 идёт с PHP 8.1 по умолчанию. Для обновления используйте репозиторий Remi.
Установите EPEL и Remi:
$ sudo dnf install epel-release -y
$ 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 и расширения, необходимые для Monica:
$ 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:
$ php --versionВключите и запустите php-fpm:
$ sudo systemctl enable php-fpm --now
$ sudo systemctl status php-fpm7. Установка Composer
Composer — менеджер зависимостей PHP (Laravel использует его).
Скачайте и проверьте инсталлятор:
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ 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 --version8. Установка MariaDB 10.11
По умолчанию Rocky Linux включает MariaDB 10.5. Для актуальной версии подключите официальный репозиторий MariaDB и установите MariaDB 10.11.
Создайте /etc/yum.repos.d/mariadb.repo:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.11/rhel9-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1Установите MariaDB:
$ sudo dnf install MariaDB-server -y
$ mysql --version
$ sudo systemctl enable --now mariadb
$ sudo systemctl status mariadbЗапустите скрипт безопасной конфигурации:
$ sudo mariadb-secure-installationОтветьте на подсказки: если root пароль не установлен — нажмите Enter, затем в большинстве случаев соглашайтесь (y) с удалением анонимных пользователей, удалением тестовой базы и перезагрузкой привилегий. На Rocky Linux рекомендуется не переключать root на unix_socket, если вы не уверены.
Подключение к shell:
$ sudo mysql9. Конфигурация MariaDB для Monica
Внутри MariaDB создайте базу и пользователя:
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> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
MariaDB> FLUSH PRIVILEGES;
MariaDB> exitЗамените имена базы, пользователя и пароли на свои. Пароль должен быть сильным.
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. Проверьте релизы Monica и подставьте нужную версию:
$ git checkout tags/v4.0.0(Если хотите ветку master, используйте git checkout main или git switch.)
11. Установка Monica
Перейдите в корень проекта, скопируйте .env
$ cd /var/www/html/monica
$ cp .env.example .envОтредактируйте .env и измените значения: установите APPENV=production, APP_URL=https://вашдомен, DB*, MAIL* по вашим данным. Пример фрагмента .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"Важно: если вы не будете использовать SMTP, оставьте параметры пустыми, но тогда уведомления по почте работать не будут.
Установите зависимости PHP (Composer) и фронтенд (Yarn):
$ composer install --no-interaction --no-dev
$ yarn install
$ yarn run productionСгенерируйте ключ приложения Laravel:
$ php artisan key:generateЗапустите initial setup: миграции, сиды и создание пользователя. Пример (замените email и пароль):
$ php artisan setup:production [email protected] --password=yourpassword -vВы должны увидеть сообщение об успешной установке с URL и логином.
12. Установка SSL (Certbot через Snap)
Установите snapd (EPEL уже должен быть установлен):
$ 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Сгенерируйте сертификат для 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-run13. Настройка SELinux
Разрешите Nginx (httpd) записывать файлы Monica:
$ 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Если PHP-FPM не может соединиться с MariaDB (частая проблема с MariaDB 10.11), создайте модуль SELinux:
Создайте файл my-phpfpm.te в домашней директории и вставьте:
module my-phpfpm 1.0;
require {
type unconfined_service_t;
type httpd_t;
type httpd_sys_content_t;
class dir write;
class unix_stream_socket connectto;
}
#============= httpd_t ==============
#!!!! This avc is allowed in the current policy
allow httpd_t httpd_sys_content_t:dir write;
#!!!! This avc is allowed in the current policy
allow httpd_t unconfined_service_t:unix_stream_socket connectto;Затем выполните:
$ 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.pp14. Конфигурация PHP-FPM
Отредактируйте /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:
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/session15. Конфигурация Nginx
Дайте собственность nginx на директорию Monica и права на storage:
$ sudo chown -R nginx:nginx /var/www/html/monica
$ sudo chmod -R 775 /var/www/html/monica/storageОткройте /etc/nginx/nginx.conf и добавьте выше include:
server_names_hash_bucket_size 64;Создайте файл конфигурации /etc/nginx/conf.d/monica.conf и вставьте пример ниже, заменив monica.example.com на ваш домен:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name monica.example.com;
root /var/www/html/monica/public;
index index.php;
client_max_body_size 10M;
access_log /var/log/nginx/monica.access.log;
error_log /var/log/nginx/monica.error.log;
ssl_certificate /etc/letsencrypt/live/monica.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/monica.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/monica.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_keep_conn on;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name monica.example.com;
return 301 https://$host$request_uri;
}Проверьте конфигурацию и перезапустите nginx:
$ sudo nginx -t
$ sudo systemctl restart nginx16. Доступ к Monica CRM
Откройте https://monica.example.com
Вы увидите страницу логина и далее приветственный экран.

ALT: Экран входа в Monica CRM с полями логина и пароля

ALT: Добро пожаловать в Monica CRM — главный экран после входа
Войдите с данными, которые вы указали при setup:production.
17. Настройка Cron
Monica использует планировщик Laravel для фоновых задач. Настройте cron для выполнения каждую минуту под пользователем nginx:
$ sudo editor=NANO crontab -u nginx -eДобавьте строку:
* * * * * php /var/www/html/monica/artisan schedule:run >> /dev/null 2>&1Сохраните изменения. Cron будет запускать расписание задач.
18. Резервное копирование и обновление Monica
Монica умеет экспортировать данные в SQL и JSON через интерфейс: Settings → Export data.
Файлы сохраняются в /var/www/html/monica/storage/app/public/exports
Пример вывода:
$ ls /var/www/html/monica/storage/app/public/exports -al
total 84
drwxr-xr-x 2 nginx nginx 4096 Nov 22 09:47 .
drwxrwxr-x 4 nginx nginx 4096 Nov 22 09:47 ..
-rw-r--r-- 1 nginx nginx 53712 Nov 22 09:47 cvlK5RAl7VVLdYLplnSZ8SFGHHwDZy9cjRhtoOWB.json
-rw-r--r-- 1 nginx nginx 17050 Nov 22 09:47 dgZf5T0SnXeAuZ67HfaFLu2JosyUsByJcp2C8nlv.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
$ 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Типичные проблемы и решения
- Ошибка при сборке Yarn: увеличьте RAM или используйте swap, потому что процесс сборки фронтенда может требовать больше памяти.
- PHP-FPM не может подключиться к MariaDB: проверьте SELinux, см. раздел модуля my-phpfpm.
- 502 Bad Gateway от Nginx: проверьте, что php-fpm слушает сокет /run/php-fpm/www.sock и права на него верны.
- Проблемы с SSL: убедитесь, что Certbot создал сертификат в /etc/letsencrypt/live/your_domain и nginx использует правильные пути.
Критерии приёмки
Перед сдачей инстанса проверьте:
- Доступность по HTTPS и корректный сертификат.
- Успешный вход под созданным администратором.
- Отправка тестового письма через настроенный SMTP.
- Возможность загрузки файлов до 10 МБ.
- Cron выполняет artisan schedule:run каждую минуту.
- Наличие экспорта данных в /storage/app/public/exports.
Роль-ориентированные чеклисты
Системный администратор:
- Обновлён OS и установлены базовые утилиты
- Установлен и настроен firewalld
- Установлен и запущен Nginx
- Установлен Certbot и настроено автоматическое продление
- SELinux настроен для доступа приложения
Разработчик/DevOps:
- Установлены Node.js 18 и Yarn
- Установлен Composer и зависимости PHP
- Собраны frontend-ассеты (yarn run production)
- Проверены миграции и сиды
Менеджер/Пользователь Monica:
- Создан администратор и проверен вход
- Настроены SMTP уведомления
- Выполнен экспорт данных как резервная копия
Playbook: короткий SOP для установки (суммированный)
- Обновить систему и установить утилиты.
- Настроить firewalld (http, https).
- Установить Git, Node.js 18, npm, Yarn.
- Установить Nginx из официального репозитория.
- Установить PHP 8.2 и необходимые расширения через Remi.
- Установить Composer.
- Установить MariaDB 10.11, выполнить mariadb-secure-installation.
- Создать БД и пользователя Monica.
- Клонировать проект и настроить .env.
- composer install && yarn install && yarn run production.
- php artisan key:generate && php artisan setup:production.
- Установить Certbot, получить сертификат.
- Настроить SELinux и права на файлы.
- Настроить cron и проверить логи.
Инцидентный план и откат
Сценарий: обновление прервало работу приложения.
Действия отката:
- Восстановить права владельца: sudo chown -R nginx:nginx /var/www/html/monica
- Откатить Git до стабильного тега: git checkout tags/v4.0.0
- composer install && yarn run production
- Возвратить базу из резервной копии SQL (если изменялись схемы):
$ sudo mysql -u monicauser -p monica < /path/to/backup.sql- Перезапустить php-fpm и nginx.
- Проверить логи /var/log/nginx/ и storage/logs для ошибок.
Тесты и критерии приёмки (мини-набор)
- Unit/Smoke: страница логина возвращает 200.
- Интеграция: отправка почты через настроенный SMTP (тестовые письма).
- E2E: пользователь создаёт контакт, прилагает файл 5 МБ, данные отображаются.
- Производительность: первые 20 пользовательских запросов обрабатываются без 5xx ошибок на стандартном сервере.
Риски и их смягчение
- Нехватка памяти при сборке фронтенда -> добавить swap или временно увеличить RAM.
- SELinux блокирует соединения -> писать проверенный модуль SELinux как в разделе 13.
- Неправильные права файлов -> использовать chown/chmod и тестировать от nginx.
- Ошибки при обновлении базы -> всегда делать экспорт SQL перед обновлением.
Краткая методология обновления
- Сделать экспорт SQL и полную копию storage.
- Переключиться на тестовую ветку и выполнить обновление на staging.
- Выполнить миграции и функциональные тесты.
- Если всё ок — применить на production в окне низкой нагрузки.
- Следить за логами в течение 24 часов.
Глоссарий (1 строка)
- FQDN: полное доменное имя сервера; LEMP: Linux+Nginx+MariaDB+PHP-FPM; SELinux: механизм контроля доступа в Linux.
Альтернативные подходы
- Docker: запуск Monica в контейнерах (Docker Compose) упрощает изоляцию и миграции. Подходит для тех, кто предпочитает контейнеризацию.
- Использование MySQL вместо MariaDB: MariaDB совместима, но если в вашей инфраструктуре уже есть MySQL — можно использовать его.
- Управляемые базы и SMTP: размещение БД в RDS/Aurora и использование внешнего SMTP уменьшает нагрузку на сервер.
Когда этот процесс не подходит
- Если сервер с очень ограниченными ресурсами (RAM < 1 ГБ) — лучше использовать Docker на более мощной машине или облачный инстанс.
- Для массового корпоративного использования Monica не предназначена — есть специализированные CRM с расширенным контролем доступа.
Советы по безопасности
- Используйте сильные и уникальные пароли для БД и админов.
- Отключите доступ к MariaDB извне (только localhost), если не требуется.
- Регулярно обновляйте систему и зависимости Composer/Yarn.
- Ограничьте доступ к /var/www/html/monica через SELinux и файловые права.
Резюме
Вы прошли весь путь: от настройки серверного окружения до запуска Monica с HTTPS и автоматическим планировщиком задач. Тестируйте SMTP, резервируйте базу данных перед обновлением и поддерживайте SELinux и права на файлы в корректном состоянии.
Если остались вопросы — проверьте логи nginx и Laravel в storage/logs, а также подтвердите настройки SELinux и права на сокет php-fpm.
Спасибо за прочтение — удачной установки Monica!
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента