Roundcube is a free and open source webmail client written in PHP. A webmail is a mail client in your browser, which means instead of reading and sending emails from a desktop mail client like Mozilla Thunderbird, you can access your email from a web browser. Roundcube functionality includes MIME support, address book, folder management, message searching and spell checking. This tutorial is going to show you how to install Roundcube webmail on Ubuntu 18.04 with Apache or Nginx web server.
Roundcube 1.4 Release
Roundcube 1.4 was released on November 10, 2019 after two years of development. This release features:
- A responsive skin called Elastic with full mobile device support
- Email Resent (Bounce) feature
- Improved Mailvelope integration
- Support for Redis and Memcached cache
- Support for SMTPUTF8 and GSSAPI
- Plus numerous improvements and bug fixes
Prerequisites
To follow this tutorial, it’s assumed that
- Postfix SMTP server and Dovecot IMAP server have been installed on your Ubuntu 18.04 server
- You have already installed a LAMP stack or LEMP stack on Ubuntu 18.04 server.
If not, please click the above links and follow the instructions to complete prerequisites. Note that if you set up your email server using iRedMail before, then you server meets all requirements and Roundcube is already installed on your server.
Now let’s proceed to install Roundcube.
Step 1: Download Roundcube Webmail on Ubuntu 18.04
Log in to your Ubuntu server via SSH, then run the following command to download the latest 1.4 stable version from Roundcube Github repository.
wget https://github.com/roundcube/roundcubemail/releases/download/1.4.0/roundcubemail-1.4.0-complete.tar.gz
Note: You can always use the above URL format to download Roundcube from command line. If a new version comes out, simply replace 1.4.0 with the new version number. You can check if there’s new release at Roundcube downloade page.
Extract the tarball, move the newly created folder to web root (/var/www/
) and rename it as roundcube
at the same time.
tar xvf roundcubemail-1.4.0-complete.tar.gz sudo mv roundcubemail-1.4.0 /var/www/roundcube
Step 2: Install Dependencies
Run the following command to install required PHP extensions.
sudo apt install php-net-ldap2 php-net-ldap3 php-imagick php7.2-common php7.2-gd php7.2-imap php7.2-json php7.2-curl php7.2-zip php7.2-xml php7.2-mbstring php7.2-bz2 php7.2-intl php7.2-gmp
Install Composer, which is a dependency manager for PHP.
sudo apt install composer
Change into the roundcube directory.
cd /var/www/roundcube
Use Composer to install all needed dependencies (3rd party libraries) for Roundcube Webmail.
composer install --no-dev
If you see the nothing to install or update
message, then all dependencies are installed.
Make the web server user (www-data
) as the owner of the temp
and logs
directory so that web server can write to these two directories.
sudo chown www-data:www-data temp/ logs/ -R
Step 3: Create a MariaDB Database and User for Roundcube
Log into MariaDB shell as root.
sudo mysql -u root
Then create a new database for Roundcube using the following command. This tutorial name it roundcube
, you can use whatever name you like for the database.
CREATE DATABASE roundcube DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Next, create a new database user on localhost using the following command. Again, this tutorial name it roundcubeuser
, you can use whatever name you like. Replace password
with your preferred password.
CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';
Then grant all permission of the new database to the new user so later on Roundcube webmail can write to the database.
GRANT ALL PRIVILEGES ON roundcube.* TO roundcubeuser@localhost;
Flush the privileges table for the changes to take effect.
flush privileges;
Exit MariaDB Shell:
exit;
Import the initial tables to roundcube
database.
sudo mysql roundcube < /var/www/roundcube/SQL/mysql.initial.sql
Step 4: Create Apache Virtual Host or Nginx Config File for Roundcube
Apache
If you use Apache web server, create a virtual host for Roundcube.
sudo nano /etc/apache2/sites-available/roundcube.conf
Note: If you followed my Postfix/Dovecot tutorial, an virtual host already exists. you should edit the following file.
sudo nano /etc/apache2/sites-available/mail.example.com.conf
Put the following text into the file. Replace mail.example.com
with your real domain name and don’t forget to set DNS A record for it.
ServerName mail.example.com DocumentRoot /var/www/roundcube/ ErrorLog ${APACHE_LOG_DIR}/roundcube_error.log CustomLog ${APACHE_LOG_DIR}/roundcube_access.log combined Options FollowSymLinks AllowOverride All Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all
Save and close the file. Then enable this virtual host with:
sudo a2ensite roundcube.conf
Reload Apache for the changes to take effect.
sudo systemctl reload apache2
Now you should be able to see the Roundcube web-based install wizard at http://mail.example.com/installer
.
Nginx
If you use Nginx web server, create a virtual host for Roundcube.
sudo nano /etc/nginx/conf.d/roundcube.conf
Note: If you followed my Postfix/Dovecot tutorial, an virtual host already exists. you should edit the following file.
sudo nano /etc/nginx/conf.d/mail.example.com.conf
Put the following text into the file. Replace the domain name and don’t forget to set DNS A record for it.
server {
listen 80;
server_name mail.example.com;
root /var/www/roundcube/;
index index.php index.html index.htm;
error_log /var/log/nginx/roundcube.error;
access_log /var/log/nginx/roundcube.access;
location / {
try_files $uri $uri/ /index.php;
}
location ~ .php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.well-known/acme-challenge {
allow all;
}
location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
deny all;
}
location ~ ^/(bin|SQL)/ {
deny all;
}
# 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;
}
}
Save and close the file. Then test Nginx configurations.
sudo nginx -t
If the test is successful, reload Nginx for the changes to take effect.
sudo systemctl reload nginx
Now you should be able to see the Roundcube web-based install wizard at http://mail.example.com/installer
.
Step 5: Enabling HTTPS
It’s highly recommended that you use TLS to encrypt your webmail. We can enable HTTPS by installing a free TLS certificate issued from Let’s Encrypt. Run the following command to install Let’s Encrypt client (certbot) on Ubuntu 18.04 server.
sudo apt install certbot
If you use Nginx, then you also need to install the Certbot Nginx plugin.
sudo apt install python3-certbot-nginx
Next, run the following command to obtain and install TLS certificate.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d mail.example.com
If you use Apache, install the Certbot Apache plugin.
sudo apt install python3-certbot-apache
And run this command to obtain and install TLS certificate.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d mail.example.com
Where
--nginx
: Use the nginx plugin.--apache
: Use the Apache plugin.--agree-tos
: Agree to terms of service.--redirect
: Force HTTPS by 301 redirect.--hsts
: Add the Strict-Transport-Security header to every HTTP response. Forcing browser to always use TLS for the domain. Defends against SSL/TLS Stripping.--staple-ocsp
: Enables OCSP Stapling. A valid OCSP response is stapled to the certificate that the server offers during TLS.
The certificate should now be obtained and automatically installed.
Note: If you followed my Postfix/Dovecot tutorial, and now you install Roundcube on the same server, then certbot will probably tell you that a certificate for mail.example.com already exists as shown below, so you can choose to install the existing TLS certificate to your web server configuration file.
Step 6: Finish the Installation in Web Browser
In your web browser, go to the Roundcube installer page.
https://mail.example.com/installer
The web installer will first check if PHP extensions, database and 3rd party libraries are installed. If you follow this tutorial, then all requirements should be met.
Click Next button. In the 2nd page, you need to fill in MariaDB database details that you created earlier.
The IMAP and SMTP section allows you to configure how to receive and submit email. Enter the following values for IMAP.
- IMAP host:
ssl://mail.example.com
port:993
Enter the following values for SMTP settings.
- SMTP port:
tls://mail.example.com
port:587
Next, you can scroll down to the Plugins
section to enable some plugins. For example: the password plugin, mark as junk plugin and so on. I enabled all of them.
Once that’s done, click create config
button which will create configuration based on the information you entered. You need to copy the configuration and save it as config.inc.php
under the /var/www/roundcube/config/
directory.
Once the config.inc.php file is created, click continue button. In the final step, test your SMTP and IMAP settings by sending a test email and checking IMAP login.
If the test fails, then you can click the 2. Create config
link on the top of page to go back to step 2 and recreate the config.inc.php
file.
If test is successful, go to your Webmail domain without /installer
and login.
Roundcube Webmail interface
Now you should remove the whole installer folder from the document root or make sure that enable_installer
option in config.inc.php
file is disabled.
sudo rm /var/www/roundcube/installer/ -r
These files may expose sensitive configuration data like server passwords and encryption keys to the public. Make sure you cannot access the installer page from your browser.
Configure the Sieve Message Filter
You can create folders in Roundcube webmail and then create rules to filter email messages into different folders. In order to do this, you need to install the ManageSieve server with the following command.
sudo apt install dovecot-sieve dovecot-managesieved
By default, Postfix uses its builtin local delivery agent (LDA) to move inbound emails to the message store (inbox, sent, trash, Junk, etc). We can configure it to use Dovecot to deliver emails, via the LMTP protocol, which is a simplified version of SMTP. LMTP allows for a highly scalable and reliable mail system and it is required if you want to use the sieve plugin to filter inbound messages to different folders.
Install the Dovecot LMTP Server.
sudo apt install dovecot-lmtpd
Edit the Dovecot main configuration file.
sudo nano /etc/dovecot/dovecot.conf
Add lmtp
to the supported protocols.
protocols = imap lmtp
Save and close the file. Then edit the Dovecot 10-master.conf file.
sudo nano /etc/dovecot/conf.d/10-master.conf
Change the lmtp service definition to the following.
service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } }
Next, edit the Postfix main configuration file.
sudo nano /etc/postfix/main.cf
Add the following lines at the end of the file. The first line tells Postfix to deliver emails to local message store via the dovecot LMTP server. The second line disables SMTPUTF8 in Postfix, because Dovecot-LMTP doesn’t support this email extension.
mailbox_transport = lmtp:unix:private/dovecot-lmtp smtputf8_enable = no
Save and close the file. Finally, restart Postfix and Dovecot.
sudo systemctl restart postfix dovecot
Now you can go to Roundcube webmail, open an email message and click the more
button and select create filters
to create message filters. For example, I create a filter that moves every email sent from redhat.com to the Red Hat folder.
Wrapping Up
I hope this tutorial helped you install Roundcube Webmail on Ubuntu 18.04. As always, if you found this post useful, subscribe to our free newsletter to get more tips and tricks 🙂
Rate this tutorial
[Total: 3 Average: 5]