Setting up a mailcatcher LXC container for development purposes
by Bob Brown email@example.com, 14th Jan 2015.
The goal is to create and configure a LXC container that other containers (and the host machine itself) can deliver email to. Ubuntu 14.04 is the host OS. All email will be accepted and be available via a single IMAP account for browsing. We will use the following:
- exim for accepting mail
- dovecot to serve that mail to clients
- roundcube configured to work with dovecot (as an alternative to using a desktop mail client like Thunderbird)
If you haven’t already, install LXC on your machine/server:
sudo apt-get install lxc
Note that all commands to work with the containers will be run as root (i.e. prefixed with sudo).
Create and start the container
First create the container - we are using “mc” as the container name.
sudo lxc-create -t ubuntu-cloud -n mc -- -S /home/bob/.ssh/id_rsa.pub
Now start the container:
sudo lxc-start -n mc -d
Install packages on the container
Attach to the container and install some packages:
sudo lxc-attach -n mc root@mc:/# apt-get update root@mc:/# apt-get install -y exim4 mysql-server php5-mysql dovecot-imapd roundcube
Answer the installation questions as follows:
- When asked for a password for mysql, use “root”.
- “Yes” (default) to making a self-signed certificate (default hostname of “localhost” is fine)
- “Yes” to configuring database for roundcube with dbconfig-common
- “mysql” (default) to DB type to use
- “root” for the database administrative password
- blank password (default) for the MySQL application password for roundcube
Edit /etc/dovecot/conf.d/10-master.conf and uncomment the line port = 143 then restart dovecot:
service dovecot restart
When roundcube installs it doesn’t make itself available via the apache configuration by default. To do this edit the /etc/roundcube/apache.conf file and uncomment the two Alias lines at the top.
To make things easier for logging in, edit /etc/roundcube/main.inc.php and set the default host to localhost:
$rcmail_config['default_host'] = 'localhost';
Also enable PHP’s mcrypt extension:
root@mc:/# php5enmod mcrypt
Finally restart Apache:
At this point you should be able to log into RoundCube with the default “ubuntu” user with the password “ubuntu” that is created when an LXC container is created. Open your browser and point it at http://mc.lxc/roundcube (assuming you have the .lxc TLD resolving to containers via NetworkManager - see http://seminar.io/2014/07/27/dns-resolution-for-lxc-in-ubuntu-trusty/).
If you get an error when logging in you can check the RoundCube error log at /var/lib/roundcube/logs/error.
Allow SMTP connections from host machine
We need to allow connections from the host machine to exim’s SMTP service for delivering mail. We can use the dpkg-configure wizard for this:
- For the first answer, select “internet site; mail is sent and received directly using SMTP”.
- For the third answer, enter “127.0.0.1 ; 0.0.0.0 ; ::1” - this will allow external SMTP connections.
- For the fifth answer, enter “*” - this will allow any message to be accepted, not just email messages addressed to users on this machine.
Catch all email
We need to configure exim to accept email for any email address and redirect it to the local ubuntu user.
Edit the file /etc/exim4/exim4.conf.template and insert this exim “router” immediately after the “begin routers” line (about line 962).
catchall: driver = redirect domains = ! +local_domains data = ubuntu@localhost no_more
And finally restart exim:
service exim4 restart
Testing and Completion
You should now be able to configure a Thunderbird account to point to the server, or log in and send emails from the RoundCube installation.