Cómo instalar Rainloop Webmail en Ubuntu 22.04

Rainloop es un cliente de correo electrónico de código abierto basado en la web y escrito en PHP. Es rápido, ligero y soporta los protocolos SMTP e IMAP.

Esta guía te enseñará a instalar el cliente Rainloop en un servidor Ubuntu 22.04.

Requisitos previos

  • Un servidor con Ubuntu 22.04.
  • Un nombre de dominio que apunte al servidor. Para nuestro tutorial, utilizaremos el dominio rainloop.example.com.
  • Un usuario no root con privilegios sudo.
  • Asegúrate de que todo está actualizado.
    $ sudo apt update && sudo apt upgrade
    
  • Instala los paquetes de utilidades básicas. Es posible que algunos de ellos ya estén instalados.
    $ sudo apt install wget curl nano unzip -y
    

Paso 1 – Configurar el cortafuegos

El primer paso antes de instalar Rainloop es configurar el cortafuegos. 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)

Rainloop necesita puertos HTTP y HTTPs para funcionar.

$ sudo ufw allow http
$ sudo ufw allow https

Abre los puertos para las cuentas de correo que utilices.

$ sudo ufw allow 587/tcp
$ sudo ufw allow 993/tcp
$ sudo ufw allow 465/tcp

Vuelve a comprobar el estado para confirmarlo.

$ sudo ufw status
Status: active

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

Paso 2 – Instalar Nginx

Ubuntu 22.04 viene con 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

Instalar Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.0

Paso 3 – Instalar y configurar PHP

Ubuntu 22.04 viene con PHP 8.1 por defecto. Pero para que Rainloop funcione, necesitamos instalar PHP 8.0. El primer paso es añadir el repositorio de PHP de Ondrej.

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

Instala PHP y las extensiones requeridas por Rainloop.

 $ sudo dnf install php8.0-fpm php8.0-curl php8.0-mbstring php8.0-mysql php8.0-xml php8.0-cli

Verifica la instalación.

$ php --version
PHP 8.0.20 (cli) (built: Jun 25 2022 08:12:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.20, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.20, Copyright (c), by Zend Technologies

Comprueba el estado del servicio PHP.

$ sudo systemctl status php8.0-fpm
? php8.0-fpm.service - The PHP 8.0 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php8.0-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-07-04 01:52:55 UTC; 1min 22s ago
       Docs: man:php-fpm8.0(8)
    Process: 12463 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.0/fpm/pool.d/www.conf 80 (code=exited, status=0/SUCCESS)
   Main PID: 12460 (php-fpm8.0)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 2241)
     Memory: 8.7M
        CPU: 89ms
     CGroup: /system.slice/php8.0-fpm.service
             ??12460 "php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)

Abre el archivo php.ini para editarlo.

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

Cambia los valores de las siguientes variables para establecer el tamaño del archivo adjunto al correo en 25MB.

upload_max_filesize = 25M
post_max_size = 25M

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

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

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

Busca las líneas user=apache y group=apache en el archivo y cámbialas como se indica a continuación.

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

Además, busca las líneas listen.owner = www-data y listen.group = www-data y cámbialas como sigue.

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

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

Reinicia el servicio PHP-FPM.

$ sudo systemctl restart php8.0-fpm

Paso 4 – Instalar MySQL

Ubuntu 22.04 incluye la última versión de MySQL. Puedes instalarlo con un solo comando.

$ sudo apt install mysql-server

Comprueba la versión de MySQL.

$ mysql --version
mysql  Ver 8.0.29-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))

Este paso es necesario para las versiones de MySQL 8.0.28 y superiores. Entra en el Shell de MySQL.

$ sudo mysql

Ejecuta el siguiente comando para establecer la contraseña de tu usuario root. Asegúrate de que tiene una mezcla de números, mayúsculas, minúsculas y caracteres especiales.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

Sal del shell.

mysql> exit

Ejecuta el script de instalación segura de MySQL.

$ sudo mysql_secure_installation

En primer lugar, se te pedirá la contraseña de root. Introdúcela. A continuación, se te pedirá que instales el componente de validación de contraseñas. Éste comprueba la solidez de las contraseñas utilizadas en MySQL. Pulsa Y para instalarlo.

A continuación, se te pedirá que establezcas el nivel de la política de validación de contraseñas. Elige el 2, ya que es el más fuerte.

A continuación, pulsa N para rechazar el cambio de la contraseña de root. Además, pulsa Y para eliminar los usuarios anónimos, no permitir los inicios de sesión remotos de root, eliminar la base de datos de prueba y recargar las tablas de privilegios.

Paso 5 – Configurar MySQL

Accede al shell de MySQL. Introduce tu contraseña de root cuando se te pida.

$ sudo mysql -u root -p

Crea una base de datos para Rainloop.

mysql> CREATE DATABASE rainloop;

Crea un usuario SQL para acceder a la base de datos. Sustituye yourpassword por una contraseña de tu elección.

mysql> CREATE USER 'rainuser'@'localhost' IDENTIFIED BY 'YourPassword23!';

Concede a rainuser acceso a la base de datos.

mysql> GRANT ALL ON rainloop.* TO 'rainuser'@'localhost';

Recarga la tabla de privilegios.

mysql> FLUSH PRIVILEGES;

Sal del shell.

mysql> exit

Paso 6 – Instalar Rainloop

Crea el directorio público para Rainloop.

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

Descarga la última versión de Rainloop.

$ wget http://www.rainloop.net/repository/webmail/rainloop-community-latest.zip

Descomprime el archivo descargado en el directorio público.

$ sudo unzip rainloop-community-latest.zip -d /var/www/html/rainloop

Cambia la propiedad del directorio a Nginx.

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

Establece los permisos de lectura y escritura requeridos por Rainloop.

$ sudo find /var/www/html/rainloop -type d -exec chmod 755 {} \;
$ sudo find /var/www/html/rainloop -type f -exec chmod 644 {} \;

Paso 7 – Instalar SSL

Necesitamos instalar Certbot para generar los certificados SSL gratuitos que ofrece Let’s Encrypt.

Puedes instalar Certbot utilizando el repositorio de Ubuntu o bien coger la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta el siguiente comando para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core

Instala Certbot.

$ sudo snap install --classic certbot

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

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

Genera un certificado SSL para Rainloop.

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

Genera un certificado de grupo Diffie-Hellman.

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

Abre el archivo /etc/letsencrypt/renewal/rainloop.example.com.conf para editarlo.

$ sudo nano /etc/letsencrypt/renewal/rainloop.example.com.conf

Pega el siguiente código en la parte inferior.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

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

Hemos generado el certificado SSL utilizando la opción autónoma de Certbot. Ejecuta su servidor web para crear el certificado, lo que significa que Nginx debe estar apagado durante la renovación. Los comandos pre_hook y post_hook se ejecutan antes y después de la renovación para cerrar y reiniciar automáticamente el servidor Nginx, por lo que no es necesaria la intervención manual.

Para comprobar si la renovación de SSL funciona bien, haz una ejecución en seco del proceso.

$ sudo certbot renew --dry-run

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

Paso 8 – Configurar Nginx

Abre el archivo nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Busca la línea include /etc/nginx/conf.d/*.conf; y pega el siguiente código debajo de ella.

server_names_hash_bucket_size  64;

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

Crea el archivo de configuración de Rainloop para Nginx y ábrelo para editarlo.

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

Pega en él el siguiente código.

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name rainloop.example.com;
    root /var/www/html/rainloop;

    index index.php;
    client_max_body_size 25M;

    access_log  /var/log/nginx/rainloop.access.log;
    error_log   /var/log/nginx/rainloop.error.log;

    ssl_certificate      /etc/letsencrypt/live/rainloop.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/rainloop.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/rainloop.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.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }

    location ^~ /data {
        deny all;
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  rainloop.example.com;
    return 301   https://$host$request_uri;
}

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

Verifica la sintaxis de la configuración de Nginx.

$ sudo nginx -t

Reinicia el servicio Nginx.

$ sudo systemctl restart nginx

Paso 9 – Configurar y acceder a Rainloop

Abre la página del Administrador de Rainloop a través de la URL https://rainloop.example.com/?admin y obtendrás la siguiente pantalla de acceso.

Inicio de sesión del administrador de Rainloop

Introduce las siguientes credenciales y pulsa intro para iniciar la sesión.

Username: admin
Password: 12345

Se abrirá el panel del administrador de Rainloop con una advertencia para que cambies tu contraseña por defecto.

Aviso de la contraseña del administrador de Rainloop

Cambia la contraseña por defecto utilizando el enlace del panel de control.

Pantalla de cambio de contraseña de Rainloop

Introduce tu nueva contraseña y haz clic en el botón Actualizar contraseña para continuar.

Rainloop utiliza MySQL para almacenar la información de los contactos. Abre la página de Contactos y selecciona MySQL en el menú desplegable.

Página de contactos de Rainloop

Introduce las credenciales de la base de datos creadas anteriormente.

Detalles de Rainloop MySQL

Pulsa el botón Probar para comprobar la conexión e instalar las tablas. Si el botón se pone en verde, significa que la conexión es correcta.

Puedes empezar a utilizar Rainloop añadiendo tus cuentas de correo.

También te podría gustar...