Rainloop Webmail installeren op Ubuntu 22.04

Rainloop is een open-source, web-gebaseerd e-mail programma geschreven in PHP. Het is snel, lichtgewicht, en ondersteunt SMTP en IMAP protocollen.

Deze gids leert je om het Rainloop programma te installeren op een Ubuntu 22.04 server.

Vereisten

  • Een server waarop Ubuntu 22.04 draait.

  • Een domeinnaam die naar de server wijst. Voor onze handleiding zullen we het rainloop.example.com domein gebruiken.

  • Een niet-root gebruiker met sudo rechten.

  • Zorg ervoor dat alles bijgewerkt is.

    $ sudo apt update && sudo apt upgrade
    
  • Installeer basis hulppakketten. Sommige kunnen al geïnstalleerd zijn.

    $ sudo apt install wget curl nano unzip -y
    

Stap 1 – Firewall instellen

De eerste stap voor je Rainloop installeert is het instellen van de firewall. Controleer de status van de firewall.

$ sudo ufw status

Je zou iets als het volgende moeten zien.

Status: active

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

Rainloop heeft HTTP en HTTPs poorten nodig om te kunnen werken.

$ sudo ufw allow http
$ sudo ufw allow https

Open poorten voor de mail accounts die je gebruikt.

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

Controleer de status nogmaals om te bevestigen.

$ 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)

Stap 2 – Installeer Nginx

Ubuntu 22.04 wordt geleverd met een oudere versie van Nginx. Om de nieuwste versie te installeren, moet je de officiële Nginx repository downloaden.

Importeer de ondertekeningssleutel van Nginx.

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

Voeg de repository voor de stabiele versie van Nginx toe.

$ 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

Werk de systeem repositories bij.

$ sudo apt update

Installeer Nginx.

$ sudo apt install nginx

Verifieer de installatie.

$ nginx -v
nginx version: nginx/1.22.0

Stap 3 – Installeer en configureer PHP

Ubuntu 22.04 wordt standaard geleverd met PHP 8.1. Maar om Rainloop te laten werken, moeten we PHP 8.0 installeren. De eerste stap is het toevoegen van Ondrej’s PHP repository.

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

Installeer PHP en de door Rainloop benodigde uitbreidingen.

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

Controleer de installatie.

$ 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

Controleer de status van de PHP dienst.

$ 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)

Open het php.ini bestand om het te bewerken.

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

Verander de waarden van de volgende variabelen om de grootte van de mailbijlage op 25MB te zetten.

upload_max_filesize = 25M
post_max_size = 25M

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

Open het bestand /etc/php/8.0/fpm/pool.d/www.conf.

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

Zoek de regels user=apache en group=apache in het bestand en verander ze als volgt.

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

Zoek ook de regels listen.owner = www-data en listen.group = www-data en verander ze als volgt.

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

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

Herstart de PHP-FPM dienst.

$ sudo systemctl restart php8.0-fpm

Stap 4 – Installeer MySQL

Ubuntu 22.04 wordt geleverd met de nieuwste versie van MySQL. Je kunt het met een enkel commando installeren.

$ sudo apt install mysql-server

Controleer de versie van MySQL.

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

Deze stap is nodig voor MySQL versies 8.0.28 en hoger. Ga de MySQL Shell binnen.

$ sudo mysql

Voer het volgende commando uit om het wachtwoord voor je root gebruiker in te stellen. Zorg ervoor dat het een mix heeft van cijfers, hoofdletters, kleine letters, en speciale tekens.

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

Verlaat de shell.

mysql> exit

Voer het beveiligde installatiescript van MySQL uit.

$ sudo mysql_secure_installation

Eerst wordt je om je root wachtwoord gevraagd. Voer het in. Vervolgens wordt je gevraagd om het Validate Password Component te installeren. Het controleert de sterkte van wachtwoorden die in MySQL gebruikt worden. Druk op Y om het te installeren.

Vervolgens wordt je gevraagd het niveau van het wachtwoord validatiebeleid in te stellen. Kies 2 want dat is de sterkste.

Druk vervolgens op N om te weigeren het root wachtwoord te veranderen. Druk ook op Y om anonieme gebruikers te verwijderen, remote root logins te verbieden, de testdatabase te verwijderen, en de privilegetabellen opnieuw te laden.

Stap 5 – Configureer MySQL

Log in op de MySQL shell. Voer je root wachtwoord in als daarom gevraagd wordt.

$ sudo mysql -u root -p

Maak een database voor Rainloop.

mysql> CREATE DATABASE rainloop;

Maak een SQL gebruiker om de database te benaderen. Vervang yourpassword door een wachtwoord naar keuze.

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

Verleen rainuser toegang tot de database.

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

Herlaad de privilege tabel.

mysql> FLUSH PRIVILEGES;

Sluit de shell af.

mysql> exit

Stap 6 – Installeer Rainloop

Maak de public directory voor Rainloop.

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

Download de nieuwste versie van Rainloop.

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

Pak het gedownloade bestand uit naar de publieke map.

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

Verander het eigendom van de directory in Nginx.

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

Stel lees- en schrijfrechten in die Rainloop nodig heeft.

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

Stap 7 – Installeer SSL

We moeten Certbot installeren om gratis SSL certificaten te genereren die door Let’s Encrypt worden aangeboden.

Je kunt Certbot installeren met Ubuntu’s repository of de nieuwste versie pakken met het Snapd gereedschap. We zullen de Snapd versie gebruiken.

Ubuntu 22.04 wordt standaard geleverd met Snapd geïnstalleerd. Voer het volgende commando uit om te controleren of je versie van Snapd up-to-date is.

$ sudo snap install core

Installeer Certbot.

$ sudo snap install --classic certbot

Gebruik het volgende commando om ervoor te zorgen dat het Certbot commando uitgevoerd kan worden door een symbolische link naar de /usr/bin directory te maken.

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

Genereer een SSL Certificaat voor Rainloop.

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

Genereer een Diffie-Hellman groepscertificaat.

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

Open het bestand /etc/letsencrypt/renewal/rainloop.example.com.conf om het te bewerken.

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

Plak de volgende code onderaan.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

We hebben het SSL certificaat gemaakt met de standalone optie van Certbot. Het draait zijn webserver om het certificaat te maken, wat betekent dat Nginx tijdens de vernieuwing uitgeschakeld moet zijn. De pre_hook en post_hook commando’s lopen voor en na de vernieuwing om de Nginx server automatisch af te sluiten en weer op te starten, zodat geen handmatige interventie nodig is.

Om te controleren of de SSL vernieuwing goed werkt, voer je het proces droog uit.

$ sudo certbot renew --dry-run

Als je geen fouten ziet, ben je helemaal klaar. Je certificaat wordt automatisch vernieuwd.

Stap 8 – Configureer Nginx

Open het bestand nginx.conf om het te bewerken.

$ sudo nano /etc/nginx/nginx.conf

Zoek de regel include /etc/nginx/conf.d/*.conf; en plak er de volgende code onder.

server_names_hash_bucket_size  64;

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

Maak het Rainloop configuratiebestand voor Nginx en open het om te bewerken.

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

Plak er de volgende code in.

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

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren wanneer daarom wordt gevraagd.

Controleer de syntaxis van de Nginx configuratie.

$ sudo nginx -t

Herstart de Nginx dienst.

$ sudo systemctl restart nginx

Stap 9 – Configureer en krijg toegang tot Rainloop

Open Rainloop’s Beheerder pagina via de URL https://rainloop.example.com/?admin en je krijgt het volgende inlogscherm.

Regenloop Beheerder Inloggen

Voer de volgende inloggegevens in en druk op enter om in te loggen.

Username: admin
Password: 12345

Het beheerdersdashboard van Rainloop opent met een waarschuwing om je standaard wachtwoord te veranderen.

Waarschuwing beheerderswachtwoord voor Rainloop

Verander het standaard wachtwoord via de link in het dashboard.

Regenloop Wachtwoord veranderen scherm

Voer je nieuwe wachtwoord in en klik op de knop Update Password om verder te gaan.

Rainloop gebruikt MySQL om contactinformatie op te slaan. Open de Contacten pagina en kies MySQL uit het dropdown menu.

Regenloop Contacten Pagina

Voer de eerder aangemaakte databankgegevens in.

Rainloop MySQL details

Druk op de Test knop om de verbinding te controleren en de tabellen te installeren. Als de knop groen wordt, betekent dit dat de verbinding geslaagd is.

Je kunt Rainloop nu gaan gebruiken door je mail accounts toe te voegen.

Conclusie

Je hebt Rainloop met succes geïnstalleerd op een Ubuntu 22.04 server. Als je nog vragen hebt, stel ze dan in de commentaar hieronder.