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.
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.
Si todo es correcto, pulsa el botón Siguiente para continuar.
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.
Configura también la configuración regional del sistema.
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.
Haz clic en el botón Siguiente para continuar. Aparecerá la página de inicio de sesión.
Introduce las credenciales de la cuenta de administrador y haz clic en Iniciar sesión para abrir el 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.