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.
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.
Cambia la contraseña por defecto utilizando el enlace del panel de control.
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.
Introduce las credenciales de la base de datos creadas anteriormente.
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.