Cómo instalar SuiteCRM con Nginx y Let’s Encrypt SSL gratis en Ubuntu 22.04

SuiteCRM es una solución de código abierto para la gestión de las relaciones con los clientes escrita en PHP. Es una bifurcación del popular software SugarCRM después de que SugarCRM dejara de publicar su edición comunitaria. Se utiliza para crear un repositorio central para todos los datos de tus clientes, con el fin de obtener información que puedas utilizar para mejorar y alimentar tus relaciones comerciales.

Algunas de sus funciones son Almacenamiento de documentos, Marketing por correo electrónico, Calendario, Integración con redes sociales, Gestión de territorios, Segmentación, Automatización del marketing, Cualificación de clientes potenciales, Integración con chat interno, Atención al cliente, CRM social, Automatización de Sales-force, Campañas de marketing, CRM móvil e Informes. Se puede integrar con servicios de retransmisión SMTP de terceros como Mandrill, Sendgrid, Amazon SES, etc. Puedes instalar plugins para ampliar la funcionalidad de SuiteCRM. Se puede integrar con aplicaciones de terceros como Mautic, Facebook, Twitter, MailChimp, Zoom, Quickbooks, DocuSign, etc.

En este post, aprenderás a instalar SuiteCRM utilizando el servidor web Nginx y Let’s Encrypt SSL en Ubuntu 22.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un usuario sudo no root.
  • Un Nombre de Dominio Completamente Cualificado (FQDN) que apunte al servidor como suitecrm.example.com.
  • Asegúrate de que todo está actualizado.
    $ sudo apt update
    $ sudo apt upgrade
    
  • Pocos paquetes que necesite tu sistema.
    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    Puede que algunos de estos paquetes ya estén instalados en tu sistema.

Paso 1 – Configurar el Cortafuegos

El primer paso es configurar el cortafuegos. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.

Comprueba si el cortafuegos se está ejecutando.

$ sudo ufw status

Obtendrás la siguiente salida.

Status: inactive

Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.

$ sudo ufw allow OpenSSH

Permite también los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Habilita el cortafuegos

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Comprueba de nuevo el estado del cortafuegos.

$ sudo ufw status

Deberías ver un resultado similar.

Status: active

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

Paso 2 – Instala Nginx

Ubuntu 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ñadir el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `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.

$ nginx -v
nginx version: nginx/1.20.2

Habilita el servicio Nginx.

$ sudo systemctl enable nginx

Paso 3 – Instalar y configurar MariaDB

Ubuntu 22.04 incluye la versión 10.6.7 de MariaDB. Ejecuta el siguiente comando para instalarlo.

$ sudo apt install mariadb-server

Asegura la instalación de MariaDB.

$ sudo mysql_secure_installation

Aparecerán varias preguntas. Respóndelas como se indica a continuación.

Enter current password for root (enter for none): Press Enter
Switch to unix_socket authentication [Y/n] Type y
Change the root password? [Y/n] Type n
Remove anonymous users? [Y/n] Type y
Disallow root login remotely? [Y/n] Type y
Remove test database and access to it? [Y/n] Type y
Reload privilege tables now? [Y/n] Type y

Conéctate al shell de MariaDB utilizando el siguiente comando.

$ sudo mysql

Crea una nueva base de datos para SuiteCRM.

$ CREATE DATABASE suitecrm;

Crea un nuevo usuario para la base de datos y utiliza una contraseña segura para t.

$ CREATE USER 'suitecrmuser'@'localhost' identified by 'yourpassword';

Concede permisos sobre la base de datos al usuario.

$ GRANT ALL PRIVILEGES ON suitecrm.* TO 'suitecrmuser'@'localhost';

Elimina todos los privilegios.

$ FLUSH PRIVILEGES;

Sal del intérprete de comandos MySQL.

$ exit

Paso 4 – Instalar PHP y extensiones

Ubuntu 22.04 viene con PHP 8.1 que todavía no es compatible con SuiteCRM. Necesitamos instalar PHP 8.0. Para ello, necesitamos añadir el repositorio PHP de Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

A continuación, instala PHP y sus extensiones requeridas por SuiteCRM.

$ sudo apt install php-imagick php8.0-fpm php8.0-mysql php8.0-common php8.0-gd php8.0-imap php8.0-curl php8.0-zip php8.0-xml php8.0-mbstring php8.0-bz2 php8.0-intl php8.0-gmp

Verifica la instalación.

$ php --version
PHP 8.0.18 (cli) (built: May  1 2022 04:42:09) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.18, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.18, Copyright (c), by Zend Technologies

Paso 5 – Descarga SuiteCRM

Descarga la última versión estable de SuiteCRM. Puedes obtener el enlace de descarga desde el sitio web oficial de SuiteCRM.

Para nuestro tutorial, instalaremos la v7 de SuiteCRM, ya que está soportada durante un largo periodo de tiempo. Puedes instalar la versión v8 si quieres, pero inicialmente tendrá un periodo de soporte más corto.

$ wget -O suitecrm.zip https://suitecrm.com/files/147/SuiteCRM-7.12/614/SuiteCRM-7.12.5.zip

Crea un directorio raíz web para servir SuiteCRM. La bandera -p crea los directorios de nivel superior en la ruta si no están presentes.

$ sudo mkdir -p /var/www/

Extrae el archivo zip descargado.

$ sudo unzip suitecrm.zip -d /var/www/

La opción -d especifica el directorio de destino del archivo.

Se guardará en el directorio /var/www/SuiteCRM-7.12.5/. Le cambiaremos el nombre para que sea más sencillo.

$ sudo mv /var/www/SuiteCRM-7.12.5/ /var/www/suitecrm

Cambia a la raíz web.

$ cd /var/www/suitecrm

Establece la propiedad y los permisos correctos para los distintos directorios.

$ sudo chown -R nginx:nginx .
$ sudo chmod -R 755 .
$ sudo chmod -R 775 cache custom modules themes data upload
$ sudo chmod 775 config_override.php 2>/dev/null

Paso 6 – Instalar y configurar SSL

Antes de configurar Nginx, tenemos que instalar el certificado SSL.

Para instalar un certificado SSL utilizando Let’s Encrypt, necesitamos descargar la herramienta Certbot. Para ello utilizaremos el instalador de paquetes Snapd.

Instala el instalador Snap.

$ sudo apt install snapd

Asegúrate 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 ejecuta el comando Certbot creando un enlace simbólico al directorio /usr/bin.

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

Detén el servidor Nginx, ya que interfiere con la herramienta Certbot.

$ sudo systemctl stop nginx

Genera un certificado SSL.

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

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

Genera un certificado de grupo Diffie-Hellman.

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

Crea un directorio raíz web de desafío para la renovación automática de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero, crea el archivo /etc/cron.daily/certbot-renew y ábrelo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pega el siguiente código.

#!/bin/sh
certbot renew --cert-name suitecrm.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

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

Cambia los permisos del archivo de la tarea para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Paso 7 – Configurar Nginx y PHP

Configurar PHP-FPM

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

$ sudo nano /etc/php/8.0/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.

Configurar el tamaño de subida PHP

PHP establece un límite para el tamaño del archivo de subida. El tamaño por defecto establecido por PHP es de 2 MB. Para aumentar el tamaño de subida, abre el archivo de configuración PHP para editarlo.

$ sudo nano /etc/php/8.0/fpm/php.ini

Busca la siguiente línea.

upload_max_filesize = 2M

Cambia su valor a 20MB como se muestra.

upload_max_filesize = 20M

Busca la siguiente línea.

post_max_size = 8M

Cambia su valor a 20 MB como se muestra.

post_max_size = 20M

Busca la siguiente línea.

;cgi.fix_pathinfo=1

Descoméntala eliminando el punto y coma y cambiando su valor a 0.

cgi.fix_pathinfo=0

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

Reinicia el proceso PHP-fpm.

$ sudo systemctl restart php8.0-fpm

Configurar Nginx

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

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

Pega en él el siguiente código.

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name suitecrm.example.com;

    root /var/www/suitecrm;
    error_log /var/log/nginx/suitecrm.error.log;
    access_log /var/log/nginx/suitecrm.access.log;
    client_max_body_size 20M;

    index index.php index.html index.htm;
    
    ssl_certificate      /etc/letsencrypt/live/suitecrm.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/suitecrm.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/suitecrm.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 to serve file directly, fallback to app.php
        try_files $uri /index.php$is_args$args;
    }

    location ~ \.php$ {
        # try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        #Note: If you install SuiteCRM on iRedMail server, you should use the TCP socket instead.
        #fastcgi_pass 127.0.0.1:9999
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;

        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 16k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    # Don't log favicon
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    # Don't log robots
    location = /robots.txt  {
        access_log off;
        log_not_found off;
    }

    # Deny all attempts to access hidden files/folders such as .htaccess, .htpasswd, .DS_Store (Mac), etc...
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # A long browser cache lifetime can speed up repeat visits to your page
    location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
        access_log        off;
        log_not_found     off;
        expires           360d;
    }
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  suitecrm.example.com;
    return 301   https://$host$request_uri;
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite una vez hayas terminado.

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.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicia el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl restart nginx

Paso 8 – Instalar y configurar SuiteCRM

Abre el sitio https://suitecrm.example.com en el navegador y se te presentará el asistente de configuración.

Asistente de configuración de SuiteCRM

Marca la casilla Acepto y pulsa el botón Siguiente para continuar. Se te presentará la pantalla que comprueba los requisitos previos a la instalación.

Requisitos previos a la instalación de SuiteCRM

Si todo es correcto, pulsa el botón Siguiente para continuar.

Página de configuración de SuiteCRM

Introduce las credenciales de la base de datos establecidas en el paso 3. Introduce localhost como Nombre de host. Introduce también los datos de la cuenta de administrador e introduce https://suitecrm.example.com como URL de la Instancia.

Puedes configurar opciones adicionales como los datos de demostración, la configuración del servidor SMTP, la marca, la configuración regional del sistema, la seguridad y la configuración de la base de datos.

Para activar la configuración SMTP, amplía la sección Especificación del servidor SMTP de la página y rellena los valores adecuados. Si utilizas Gmail o Microsoft exchange, puedes utilizar los botones dedicados para configurarlos. Para nuestro tutorial, estamos utilizando Amazon SES.

Configuración del servidor SMTP de SuiteCRM

Configura también la configuración regional del sistema.

Configuración local de SuiteCRM

Una vez que hayas terminado, haz clic en el botón Siguiente en la parte inferior de la página para continuar. Se te presentarán los detalles de la finalización de la configuración de SuiteCRM.

Configuración completa de SuiteCRM

Haz clic en el botón Siguiente para continuar. Aparecerá la página de inicio de sesión.

Página de inicio de sesión de SuiteCRM

Introduce las credenciales de la cuenta de administrador y haz clic en Iniciar sesión para abrir el panel de SuiteCRM.

Panel de SuiteCRM

Ya puedes empezar a utilizar SuiteCRM para gestionar los datos de tu empresa y de tus clientes.

Paso 9 – Configurar Cron Jobs

SuiteCRM necesita cron jobs para funcionar correctamente. Edita el archivo crontab del usuario nginx.

$ sudo crontab -e -u nginx

Añade la siguiente línea al final del archivo.

*    *    *    *    *     cd /var/www/suitecrm; php -f cron.php > /dev/null 2>&1

Guarda y cierra el archivo.

Conclusión

Con esto concluye el tutorial sobre la instalación de SuiteCRM utilizando el servidor Nginx con Let’s Encrypt SSL en Ubuntu 22.04. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...