Cómo instalar Monica Personal CRM en Rocky Linux 9

Convencionalmente, el software de Gestión de las Relaciones con los Clientes (CRM) está hecho para que las empresas gestionen a sus clientes. El software CRM ayuda a las empresas a recopilar datos de los clientes y proporcionarles asistencia a través de diversos medios de comunicación.

Monica Personal CRM, sin embargo, está dirigido a particulares y a sus relaciones con su familia y amigos. Monica CRM ayuda a organizar y almacenar todo lo relacionado con las personas que te rodean. Es de código abierto y totalmente gratuito.

En este tutorial, aprenderás a instalar Monica Personal CRM en un servidor Rocky Linux 9.

Requisitos previos

  • Un servidor que ejecute Rocky Linux 9 con un mínimo de 1,5 GB de RAM. Si tu servidor tiene menos de 1,5 GB de RAM, lo más probable es que fallen las tareas de instalación de Yarn. Actualiza a un servidor con mejor RAM antes de continuar con este tutorial para garantizar una instalación sin problemas.
  • Un usuario no root con privilegios sudo.
  • Un Nombre de Dominio Completamente Cualificado (FQDN) como monica.example.com que apunte a tu servidor.
  • Una cuenta SMTP con un servicio de correo electrónico como Amazon SES o Mailgun.
  • Todo actualizado.
    $ sudo dnf update
    
  • Se necesitan algunos paquetes esenciales para que funcionen el tutorial y Monica CRM. Algunos de ellos ya estarán en tu servidor.
    $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.

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

Debería mostrar la siguiente salida.

cockpit dhcpv6-client ssh

Permite los puertos HTTP y HTTPS.

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

Vuelve a comprobar el estado del cortafuegos.

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

Deberías ver un resultado similar.

cockpit dhcpv6-client http https ssh

Recarga el cortafuegos para activar los cambios.

$ sudo firewall-cmd --reload

Paso 2 – Instala Git

Git suele venir preinstalado con Rocky Linux 9, pero en caso de que no esté instalado, ejecuta el siguiente comando para instalarlo.

$ sudo dnf install git -y

Comprueba la versión de Git.

$ git --version
git version 2.39.3

Ejecuta los siguientes comandos para configurar Git y añadirle tu nombre y dirección de correo electrónico.

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

Paso 3 – Instalar Node

Monica CRM necesita Node.js para funcionar.

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

Instala el paquete RPM Nodesource. La versión actual de Node LTS es la 20.x, pero no funciona con el gestor de paquetes Yarn, por lo que por ahora la hemos fijado en la 18.x.

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

Instala Node.js.

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

Confirma si está instalado correctamente.

$ node --version
v18.18.2

Actualiza NPM.

$ sudo npm install -g npm@latest

Verifica la versión de NPM.

$ npm --version
10.2.4

Paso 4 – Instalar Yarn

Yarn es otro gestor de paquetes Javascript que necesita Monica CRM junto con Node.js. El método habitual para instalar Yarn es instalarlo globalmente. Esto garantiza que todas las herramientas de pruebas y automatización de un proyecto utilicen la misma versión de Yarn, evitando incoherencias.

Instala Yarn utilizando el siguiente comando.

$ sudo npm install --global yarn

Verifica la instalación de Yarn.

$ yarn --version
1.22.21

Paso 5 – Instalar Nginx

Rocky Linux 9 incluye una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Crea y abre el archivo /etc/yum.repos.d/nginx.repo para editarlo.

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

Pega en él el siguiente código.

[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

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Instala Nginx.

$ sudo dnf install nginx -y

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.24.0

Habilita e inicia el servicio del servidor Nginx.

$ sudo systemctl enable nginx --now

Comprueba el estado del servicio.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Thu 2023-11-23 01:10:33 UTC; 1s ago
       Docs: http://nginx.org/en/docs/
    Process: 4560 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 4561 (nginx)
      Tasks: 2 (limit: 10841)
     Memory: 1.9M
        CPU: 11ms
     CGroup: /system.slice/nginx.service
             ??4561 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??4562 "nginx: worker process"

Abre la dirección IP de tu servidor en tu navegador web. Deberías ver la siguiente página, lo que significa que tu servidor está en funcionamiento.

Página por defecto de Nginx

Paso 6 – Instala PHP y las extensiones

Rocky Linux 9 viene con PHP 8.1 por defecto. Para estar siempre con la última versión de PHP o si quieres instalar varias versiones de PHP, tenemos que utilizar el repositorio REMI.

El primer paso es coger el repositorio Epel.

$ sudo dnf install epel-release -y

A continuación, instala el repositorio Remi.

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

Comprueba si hay versiones de PHP disponibles.

$ dnf module list php -y
Name    Stream              Profiles                                      Summary
php     8.1                 common [d], devel, minimal                    PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name    Stream              Profiles                                      Summary
php     remi-7.4            common [d], devel, minimal                    PHP scripting language
php     remi-8.0            common [d], devel, minimal                    PHP scripting language
php     remi-8.1            common [d], devel, minimal                    PHP scripting language
php     remi-8.2            common [d], devel, minimal                    PHP scripting language
php     remi-8.3            common [d], devel, minimal                    PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

La versión por defecto es la 8.1. Habilita el repositorio PHP 8.2 de Remi.

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

Instala PHP y sus extensiones.

$ 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

Comprueba la versión de PHP instalada.

$ php --version
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies

Habilita e inicia el servicio PHP-FPM.

$ sudo systemctl enable php-fpm --now

Comprueba el estado del servicio.

$ sudo systemctl status php-fpm
? php-fpm.service - The PHP FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: disabled)
     Active: active (running) since Thu 2023-11-23 01:21:11 UTC; 1s ago
   Main PID: 5643 (php-fpm)
     Status: "Ready to handle connections"
      Tasks: 6 (limit: 10841)
     Memory: 15.7M
        CPU: 85ms
     CGroup: /system.slice/php-fpm.service
             ??5643 "php-fpm: master process (/etc/php-fpm.conf)"
             ??5644 "php-fpm: pool www"
             ??5645 "php-fpm: pool www"
             ??5646 "php-fpm: pool www"
             ??5647 "php-fpm: pool www"
             ??5648 "php-fpm: pool www"

Paso 7 – Instalar Composer

Composer actúa como gestor de dependencias para PHP. También es el gestor de dependencias del framework PHP Laravel, que es el que impulsa Monica CRM.

Descarga el script de instalación de Composer.

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

Verifica el instalador descargado.

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

Recibirás la siguiente salida.

Installer verified

Ejecuta el script de instalación para descargar la última versión de Composer.

$ php composer-setup.php

Elimina el script de instalación.

$ php -r "unlink('composer-setup.php');"

Mueve el archivo binario descargado al directorio /usr/local/bin.

$ sudo mv composer.phar /usr/local/bin/composer

Confirma la instalación.

$ composer --version
Composer version 2.6.5 2023-10-06 10:11:52

Paso 8 – Instalar MariaDB

MariaDB es un sustituto directo de MySQL, lo que significa que los comandos para ejecutar y utilizar MariaDB son los mismos que los de MySQL.

Rocky Linux 9 incluye por defecto MariaDB 10.5.22, que está un poco obsoleta. Para obtener la última versión estable de MariaDB, tienes que utilizar el repositorio oficial.

Crea el archivo del repositorio de MariaDB y ábrelo para editarlo.

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

Pega en él el siguiente código.

[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 

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Ejecuta el siguiente comando para instalar el servidor MariaDB. Fíjate en que el nombre del paquete está en mayúsculas. El paquete oficial MariaDB que Rocky Linux distribuye se llama simplemente mariadb-server. Asegúrate de no confundir los dos.

$ sudo dnf install MariaDB-server -y

Comprueba si MariaDB se ha instalado correctamente.

$ mysql --version

Deberías ver la siguiente salida.

mysql  Ver 15.1 Distrib 10.11.6-MariaDB, for Linux (x86_64) using  EditLine wrapper

También puedes utilizar mariadb --version para comprobar la versión.

Inicia y habilita el servicio MariaDB.

$ sudo systemctl enable --now mariadb

El servicio MariaDB ya está habilitado y en funcionamiento. Comprueba su estado utilizando el siguiente comando.

$ sudo systemctl status mariadb
? mariadb.service - MariaDB 10.11.6 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)
    Drop-In: /etc/systemd/system/mariadb.service.d
             ??migrated-from-my.cnf-settings.conf
     Active: active (running) since Thu 2023-11-23 01:23:52 UTC; 2s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 6831 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 6832 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR >
    Process: 6850 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
   Main PID: 6840 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 10 (limit: 10841)
     Memory: 193.1M
        CPU: 162ms
     CGroup: /system.slice/mariadb.service
             ??6840 /usr/sbin/mariadbd

Ejecuta el siguiente comando para realizar la configuración por defecto, como dar una contraseña de root, eliminar los usuarios anónimos, no permitir el inicio de sesión de root de forma remota y eliminar las tablas de prueba.

$ sudo mariadb-secure-installation

Se te pedirá la contraseña de root. Como no tenemos establecida ninguna contraseña de root, pulsa la tecla Intro para continuar.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

A continuación, se te preguntará si quieres cambiar al complemento unix_socket. El complemento unix_socket te permite acceder a MariaDB con tus credenciales de usuario de Linux. Elige n para no cambiar a él, puesto que ya tienes una cuenta protegida root.

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

A continuación, se te preguntará si quieres cambiar tu contraseña de root. En Rocky Linux 9, la cuenta raíz para MariaDB está estrechamente vinculada al mantenimiento automatizado del sistema, por lo que no debes cambiar los métodos de autenticación configurados para la cuenta. Hacerlo permitiría que una actualización de paquetes rompiera el sistema de base de datos al eliminar el acceso a la cuenta administrativa. Escribe n para continuar.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

A partir de aquí, pulsa y y luego Enter para aceptar los valores por defecto de todas las preguntas siguientes. Esto eliminará el acceso a los usuarios anónimos, probará las bases de datos, desactivará el inicio de sesión de root remoto y cargará los cambios.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Ya está. La próxima vez que quieras acceder al shell de MariaDB, utiliza el siguiente comando.

$ sudo mysql

Introduce tu contraseña de root de Linux cuando se te solicite.

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.11.6-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Pulsa exit para cerrar el intérprete de comandos de MariaDB.

Paso 9 – Configurar MariaDB

Inicia sesión en el intérprete de comandos MariaDB.

$ sudo mysql

Crea una nueva base de datos MySQL, un usuario de base de datos y una contraseña para tu instalación de Monica CRM.

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';

Sustituye monica, monicauser y yourpassword por las credenciales de tu elección. Elige una contraseña segura.

Crea también un usuario administrativo con las mismas capacidades que la cuenta root.

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

Borra los privilegios para asegurarte de que se guardan en la sesión actual.

MariaDB> FLUSH PRIVILEGES;

Sal del intérprete de comandos MariaDB.

MariaDB> exit

Paso 10 – Descarga de Monica

Crea el directorio raíz web para Monica CRM.

$ sudo mkdir /var/www/html/monica -p

Establece al usuario actualmente conectado como propietario de este directorio.

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

Cambia al directorio.

$ cd /var/www/html/monica

Clona el repositorio oficial de Monica en Github en esta ubicación. Fíjate en el punto(.) al final del comando, que significa clonar Monica en el directorio actual en lugar de en un subdirectorio.

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

Obtén los últimos datos de GitHub.

$ git fetch

Comprueba la última versión de Monica. Para elegir la última versión, consulta la página de versiones de Monica. En el momento de escribir este tutorial, la última versión disponible es 4.0.0. Sustituye 4.0.0 por la versión que estás instalando en el comando que aparece a continuación.

$ git checkout tags/v4.0.0

Obtendrás el siguiente resultado.

Note: switching to 'tags/v4.0.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e1a3e1315 build: delete heroku workflow (#6540)

Paso 11 – Instalar Monica

Asegúrate de que estás en el directorio raíz de Monica.

$ cd /var/www/html/monica

Copia el archivo de variables de entorno de ejemplo para crear uno para configurar Monica CRM.

$ cp .env.example .env

Cambia los siguientes valores como se muestra. Establece la variable APP_ENV en production. De este modo se aplicará el protocolo HTTPS. Establece la variable APP_URL al nombre de dominio de tu Monica junto con el protocolo HTTPS. Establece las credenciales de la base de datos tal y como se crearon en el paso anterior. En nuestro tutorial, estamos utilizando el servicio SMTP SES de Amazon. Introduce los datos del servicio que vayas a utilizar. Si no vas a utilizar ninguno, puedes omitir rellenar esos campos.

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
# Outgoing emails will be sent with these identity
[email protected]
MAIL_FROM_NAME="Monica CRM"
# New registration notification sent to this email
[email protected]
...

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Instala todos los paquetes necesarios para Monica utilizando Composer.

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

Utiliza Yarn para instalar los paquetes del frontend y generar los activos (JS, CSS y fuentes).

$ yarn install
$ yarn run production

Genera el valor APP_KEY y rellénalo automáticamente en el archivo .env. Se te preguntará si quieres continuar o no. Escribe para proceder.

$ php artisan key:generate

Ejecuta el siguiente comando para ejecutar migraciones, sembrar la base de datos y crear directorios de enlaces simbólicos. Se te preguntará si deseas continuar o no. Escribe para continuar. Introduce la dirección de correo electrónico y la contraseña necesarias para crear un usuario predeterminado y utiliza esos valores en el comando.

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

Recibirás la siguiente salida notificándote que la instalación se ha realizado correctamente.

Monica v4.0.0 is set up, enjoy.
? Filling database
   INFO  Seeding database.


-----------------------------
|
| Welcome to Monica v4.0.0
|
-----------------------------
| You can now sign in to your account:
| username: [email protected]
| password: <hidden>
| URL:      https://monica.example.com
-----------------------------
Setup is done. Have fun.

Paso 12 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Para ello utilizaremos el instalador de paquetes Snapd. Como Rocky Linux no lo incluye, instala el instalador Snapd. Necesita el repositorio EPEL (Extra Packages for Enterprise Linux) para funcionar. Pero como ya lo hemos instalado en el paso 3, podemos avanzar directamente.

Instala Snapd.

$ sudo dnf install -y snapd

Habilita e Inicia el servicio Snap.

$ sudo systemctl enable snapd --now

Instala el paquete principal de Snap, y asegúrate de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Crea los enlaces necesarios para que Snapd funcione.

$ 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

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Comprueba si Certbot funciona correctamente.

$ certbot --version
certbot 2.7.4

Ejecuta el siguiente comando para generar un certificado SSL.

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

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/monica.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

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

Comprueba el servicio programador de renovación de Certbot.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

NEXT                        LEFT           LAST                        PASSED      UNIT                      ACTIVATES     
---------------------------------------------------------------------------------------------------------------------------               
Thu 2023-11-23 02:34:37 UTC 45min left Thu 2023-11-23 00:57:54 UTC 51min ago    dnf-makecache.timer          dnf-makecache.service
Thu 2023-11-23 08:49:00 UTC 6h left    -                           -            snap.certbot.renew.timer     snap.certbot.renew.service
Fri 2023-11-24 00:00:00 UTC 22h left   Thu 2023-11-23 00:30:29 UTC 1h 18min ago logrotate.timer              logrotate.service

Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 13 – Configurar SELinux

Cambia el contexto de seguridad de archivos para OpenEMR.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/monica(/.*)?"

Aplica la política.

$ sudo restorecon -Rv /var/www/html/monica/

Aplica la política para permitir que Nginx dé acceso a MariaDB.

$ sudo setsebool -P httpd_can_network_connect_db 1

Aplica la política para permitir que se realicen conexiones a hosts externos. Esto es necesario para enviar correos electrónicos.

$ sudo setsebool -P httpd_can_network_connect 1

Con MariaDB 10.11, te encontrarás con otro problema y es que SELinux impide que PHP-FPM se conecte a MariaDB. Eso se puede solucionar instalando un módulo SELinux. El primer paso es crear un archivo type enforcement.

Crea el archivo my-phpfpm.te en tu directorio home y ábrelo para editarlo.

$ cd ~
$ nano my-phpfpm.te

Pega en él el siguiente código.

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;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

El siguiente paso es convertirlo en un módulo de política utilizando el siguiente comando. No modifiques el nombre del archivo en el comando, de lo contrario, no funcionará. El módulo se llama my-phpfpm y el nombre del archivo debe ser el mismo que el del módulo.

$ sudo checkmodule -M -m -o my-phpfpm.mod my-phpfpm.te

A continuación, tenemos que compilar el módulo de políticas para crear un paquete de políticas.

$ sudo semodule_package -o my-phpfpm.pp -m my-phpfpm.mod

El último paso es cargar el paquete de políticas mediante el comando semodule, que instala la política que se va a utilizar.

$ sudo semodule -i my-phpfpm.pp

Paso 14 – Configurar PHP-FPM

Abre php.ini para editarlo.

$ sudo nano /etc/php.ini

Para configurar el tamaño de subida de los archivos, cambia los valores de las variables upload_max_filesize y post_max_size. Este valor decide el tamaño del archivo que puedes subir a Monica. Por defecto, está fijado en 10MB, que es lo que configuraremos con PHP.

$ 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

Configura el límite de memoria de PHP en función de los recursos y requisitos de tu servidor.

$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php.ini

Abre el archivo /etc/php-fpm.d/www.conf.

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

Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=apache y group=apache en el archivo y cámbialas por nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Busca las líneas listen.owner = nobody, listen.group = nobody, listen.mode = 0660 en el archivo y cámbialas después de descomentarlas.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reinicia el proceso PHP-fpm. Asegúrate de que tienes instalado Nginx antes de reiniciar el servicio PHP, de lo contrario, fallará ya que no podrá encontrar el grupo nginx.

$ sudo systemctl restart php-fpm

Cambia el grupo del directorio de sesiones PHP a Nginx.

$ sudo chgrp -R nginx /var/lib/php/session

Paso 15 – Configurar Nginx

Permite el acceso de Nginx al directorio raíz de Monica.

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

Establece los permisos de directorio correctos en el directorio storage.

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

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Crea y abre el archivo /etc/nginx/conf.d/monica.conf para editarlo.

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

Pega en él el siguiente código. Sustituye monica.example.com por el nombre de tu dominio. Asegúrate de que el valor de client_max_body_size se establece en 10 MB, que es el tamaño de subida de archivos por defecto en Monica. Es el mismo valor que configuramos antes con PHP.

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;
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Verifica la configuración de Nginx.

$ sudo nginx -t

Reinicia el servidor Nginx.

$ sudo systemctl restart nginx

Paso 16 – Accede a Monica CRM

Abre la URL https://monica.example.com en tu navegador y accederás a la página de acceso como se muestra a continuación.

Página de inicio de sesión de Monica CRM

Introduce el correo electrónico y la contraseña que configuraste en el paso 12 y pulsa el botón Iniciar sesión para continuar. Accederás a la pantalla de bienvenida desde donde podrás empezar a utilizar la aplicación.

Pantalla de bienvenida de Monica CRM

Paso 17 Configurar Cron

Monica CRM requiere varios procesos en segundo plano para garantizar su buen funcionamiento. Esto se gestiona mediante la funcionalidad Cron. Para ello, configura un cron que se ejecute cada minuto para ejecutar el comando php artisan schedule:run.

Ejecuta el editor crontab. Pasamos nginx como usuario, ya que tiene acceso al directorio /var/www/html/monica. Pasamos nano como la opción de editor en el propio comando, que es la forma más fácil de ponerse en marcha.

$ sudo editor=NANO crontab -u nginx -e

A continuación, accederás al editor crontab. Pega esta línea al final del archivo.

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

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. Ya está. Las tareas programadas de Monica se ejecutarán regularmente utilizando la funcionalidad cron.

Paso 18 – Actualizar Monica CRM

El primer paso para hacer una copia de seguridad del Monica CRM es asegurarte de que está respaldado. Puedes hacer una copia de seguridad del SQL desde la página de configuración. Haz clic en el icono Configuración de la parte superior derecha del panel de control para abrir la página Configuración de la cuenta. A continuación, abre la página Exportar datos en el menú de la izquierda.

Página Monica Exportar Datos

Haz clic en el botón Exportar a SQL para exportar la base de datos. También existe la opción Exportar a Json, que realiza copias de seguridad de mucho más que el SQL, pero no hay forma de importarlo. Probablemente verás el estado como fallido para ambas exportaciones, pero si navegas por el directorio /var/www/html/monica/storage/app/public/exports de tu servidor, deberías ver ambos archivos.

$ 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

Ahora que hemos hecho una copia de seguridad de los datos, es hora de actualizar.

Cambia al directorio Monica.

$ cd /var/www/html/monica

Como los permisos del directorio están establecidos en nginx, tendremos que utilizar sudo para ejecutar cualquier comando. Pero es mejor cambiar los permisos temporalmente en lugar de utilizar sudo que es lo que haremos.

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

Obtén los últimos cambios de Git.

$ git fetch

Clona la versión deseada. Para nuestro tutorial, nos referimos a la versión beta. No la utilices en un servidor de producción.

$ git checkout tags/v5.0.0-beta.3

Actualiza las dependencias.

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

Instala los paquetes frontales.

$ yarn install

Construye los activos JavaScript y CSS.

$ yarn run production

Ejecuta el siguiente comando para actualizar la instancia. Esto ejecuta scripts de migración para la base de datos y vacía todas las cachés de configuración, ruta y vista como proceso de optimización.

$ php artisan monica:update --force

Si quieres restaurar la base de datos SQL en una instancia Monica diferente, asegúrate de que tu instancia está completamente vacía, lo que significa que no hay tablas ni datos. Una vez te hayas asegurado de ello, ejecuta el siguiente comando para iniciar el proceso de migración de la base de datos.

$ php artisan migrate

A continuación, importa el archivo monica.sql utilizando el siguiente comando.

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

Se te pedirá la contraseña de tu usuario Monica DB configurada anteriormente. A continuación, inicia sesión en la instancia utilizando las credenciales utilizadas en la instancia anterior.

Cuando hayas terminado, restaura los permisos del directorio Monica al usuario nginx.

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

Conclusión

Con esto concluye nuestro tutorial en el que has aprendido a instalar el software Monica CRM en un servidor Rocky Linux 9. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...