Cómo instalar Monica Personal CRM en Debian 12

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 personales 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 de uso completamente gratuito. Está escrito utilizando el framework web Laravel PHP.

En este tutorial, aprenderás a instalar Monica Personal CRM en un servidor Debian 12.

Requisitos previos

  • Un servidor que ejecute Debian 12 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.
  • Firewall sin complicaciones (UFW) activado y en ejecución.
  • Un Nombre de Dominio Completamente Cualificado (FQDN) como monica.example.com apuntando a tu servidor.
  • Una cuenta SMTP con un servicio de correo electrónico como Amazon SES o Mailgun.
  • Todo está actualizado.
    $ sudo apt update && sudo apt upgrade
    
  • Se necesitan algunos paquetes esenciales para que funcionen el tutorial y Monica CRM. Algunos de ellos ya estarán en tu servidor.
    $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
    

Paso 1 – Configurar el cortafuegos

El primer paso antes de instalar ningún paquete es configurar el cortafuegos para permitir conexiones HTTP y HTTPS.

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver algo como lo siguiente

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Permitir puertos HTTP y HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Vuelve a comprobar el estado para confirmarlo.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Paso 2 – Instala Git

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

$ sudo apt install git -y

Comprueba la versión de Git.

$ git --version
git version 2.39.2

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. Importa la clave GPG de Nodesource.

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

Crea el repositorio deb de 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
$ echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Instala Node.js.

$ sudo apt install nodejs -y

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

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

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añade el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación. En los sistemas Debian, el siguiente comando sólo funcionará con sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Inicia el servidor Nginx.

$ sudo systemctl start nginx

Comprueba el estado del servicio.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Mon 2023-11-20 13:24:40 UTC; 4s ago
       Docs: https://nginx.org/en/docs/
    Process: 16778 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 16779 (nginx)
      Tasks: 2 (limit: 2315)
     Memory: 1.7M
        CPU: 8ms
     CGroup: /system.slice/nginx.service
             ??16779 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??16780 "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 – Instalar PHP y las extensiones

Debian 12 incluye PHP 8.2 por defecto. Puedes instalarlo junto con las extensiones que necesita Monica CRM ejecutando el siguiente comando.

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

Para estar siempre con la última versión de PHP o si quieres instalar varias versiones de PHP, añade el repositorio PHP de Ondrej.

Primero, importa la clave GPG del repositorio PHP de Sury.

$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

Añade el repositorio PHP de Ondrej Sury.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

Actualiza la lista de repositorios de tu sistema.

$ sudo apt update

Probablemente recibirás información sobre actualizaciones pendientes. Ejecútalas.

$ sudo apt upgrade

Instala PHP y sus extensiones.

$ sudo apt install php8.2 php8.2-bcmath php8.2-cli php8.2-curl php8.2-common \
    php8.2-fpm php8.2-gd php8.2-gmp php8.2-intl php8.2-mbstring \
    php8.2-mysql php8.2-opcache php8.2-redis php8.2-xml php8.2-zip

Comprueba la versión de PHP instalada.

$ php --version
PHP 8.2.12 (cli) (built: Oct 27 2023 13:00:10) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.12, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.12, Copyright (c), by Zend Technologies

Paso 7 – Configurar PHP-FPM

Abre php.ini para editarlo.

$ sudo nano /etc/php/8.2/fpm/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/8.2/fpm/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 10M/' /etc/php/8.2/fpm/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/8.2/fpm/php.ini

Abre el archivo /etc/php/8.2/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=www-data y group=www-data 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.
user = nginx
group = nginx
...

Busca también las líneas listen.owner=www-data y listen.group=www-data en el archivo y cámbialas por nginx.

listen.owner = nginx
listen.group = nginx

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 php8.2-fpm

Paso 8 – Instalar Composer

Composer actúa como gestor de dependencias para PHP. También es el gestor de dependencias del framework PHP Laravel, que es lo que potencia 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 9 – 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.

Debian 12 incluye por defecto MariaDB 10.11.4, que está un poco obsoleta. Para obtener la última versión estable de MariaDB, tienes que utilizar el repositorio oficial.

Importa la clave GPG de MariaDB.

$ sudo curl -o /usr/share/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'

Crea el archivo del repositorio de MariaDB.

$ echo "deb [signed-by=/usr/share/keyrings/mariadb-keyring.pgp] https://deb.mariadb.org/10.11/debian `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/mariadb-server.list

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Ejecuta el siguiente comando para instalar el servidor MariaDB.

$ sudo apt 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 debian-linux-gnu (x86_64) using  EditLine wrapper

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

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

$ sudo systemctl status mariadb
? mariadb.service - MariaDB 10.11.6 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/mariadb.service.d
             ??migrated-from-my.cnf-settings.conf
     Active: active (running) since Tue 2023-11-21 07:49:48 UTC; 8min ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 28307 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
    Process: 28308 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 28310 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: 28350 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 28352 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
   Main PID: 28339 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 8 (limit: 2315)
     Memory: 213.3M
        CPU: 585ms
     CGroup: /system.slice/mariadb.service
             ??28339 /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 la contraseña de root. En Debian 12, 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 38
Server version: 10.11.6-MariaDB-1:10.11.6+maria~deb12 mariadb.org binary distribution

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 10 – 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 11 – Descarga de Monica

Crea el directorio raíz de la web.

$ sudo mkdir /var/www/html -p

Establece al usuario actualmente conectado como propietario de este directorio.

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

Cambia al directorio.

$ cd /var/www/html

Clona el repositorio oficial de Monica en Github en esta ubicación.

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

Cambia al directorio clonado.

$ cd monica

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 12 – 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 13 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Debian u obtener la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Debian 12 no viene con Snapd instalado. Instala el paquete Snapd.

$ sudo apt install snapd

Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

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     
---------------------------------------------------------------------------------------------------------------------------               
Tue 2023-11-21 11:39:00 UTC 4min 54s left Tue 2023-11-21 11:09:07 UTC 24min ago    phpsessionclean.timer     phpsessionclean.service
Tue 2023-11-21 12:57:00 UTC 1h 22min left -                           -            snap.certbot.renew.timer  snap.certbot.renew.service
Wed 2023-11-22 00:00:00 UTC 12h left      Tue 2023-11-21 00:00:03 UTC 11h ago      dpkg-db-backup.timer      dpkg-db-backup.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 14 – 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/php8.2-fpm.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 15 – 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 16 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. Pasaremos nginx como usuario, ya que tiene acceso al directorio /var/www/html/monica.

$ sudo crontab -u nginx -e

Si es la primera vez que ejecutas crontab, se te pedirá que elijas el editor.

no crontab for nginx - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny

Choose 1-3 [1]: 1

Introduce 1 para elegir el editor nano, ya que es el más fácil de manejar. A continuación, accederás al editor crontab. Pega esta línea en la parte inferior 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 17 – 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 Debian 12. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...