1. Home
  2. Linux
  3. Ubuntu
  4. How to Install Postal Mail Server on an Ubuntu 16.04 VPS

How to Install Postal Mail Server on an Ubuntu 16.04 VPS

How to Install Postal Mail Server on an Ubuntu 16.04 VPS
How to Install Postal Mail Server on an Ubuntu 16.04 VPS

In this guide, we plan to show you how you can install Postal Mail Server on an Ubuntu 16.04 VPS. Postal is a feature-rich mail server application which generally gets used as an alternative to Sendgrid, MAilchimp, Mailgun and other similar SMPT servers. You could use Postal to send out bulk emails, newsletters and more. This tutorial can work on different Linux VPS systems but it was made and tested in a Ubuntu 16.04 VPS.


There are certain requirements for the Postal setup.

An Ubuntu VPS

Ruby version 2.3 or up, MySQL/MariaDB, RabbitMQ, Node.js and Git installed on your server

Step 1: Installing Basic Packages and Dependencies

Before we begin, we will need to install the packages and dependencies on your system, including nginx, mariadb, git and more.

[user]$ sudo apt-get install python-software-properties  software-properties-common
[user]$ sudo apt-get install git nginx mariadb-server build-essential libmysqlclient-dev

Step 2: Installing Node.js

Now, we will need to install the latest version of Node.js on the system. To install the latest 7.x version, use the command below:

[user]$ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
[user]$ sudo apt-get install nodejs

Step 3: Installing Ruby 2.3

Once Nodejs is done installing, we will have to install Ruby and append the Ruby PPAs:

[user]$ sudo apt-add-repository ppa:brightbox/ruby-ng -y
[user]$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

Now, install Ruby 2.3:

[user]$ sudo apt-get update
[user]$ sudo apt-get install -y ruby2.3 ruby2.3-dev

Step 4: Install RabbitMQ Server

RabbitMQ is used for messaging, so we will want to enable the Erlang PPA by executing the command below:

[user]$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
[user]$ sudo dpkg -i erlang-solutions_1.0_all.deb

You also have to enable the RabbitMQ server PPA:

[user]$ echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
[user]$ wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add –

Now, you may install the RabbitMQ server along with its dependencies:

[user]$ sudo apt-get update
[user]$ sudo apt-get install erlang erlang-nox rabbitmq-server

Step 5: Creating a Database in MySQL

We will need to create a database and a user for your Postal mail server and give permissions to the user:

[user]$ mysql -u root -p
Enter password:*******
mysql> CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql> GRANT ALL ON `postal`.* TO `postal`@`` IDENTIFIED BY "passw0rd";
mysql> GRANT ALL ON `postal-%`.* TO `postal`@`` IDENTIFIED BY "passw0rd";

Be sure to sure a strong password.

Step 6: Creating the RabbitMQ VirtualHost

Next, we will want to create a VirtualHost in your RabbitMQ server and create a new user for your app:

[user]$ rabbitmqctl add_vhost /postal
[user]$ rabbitmqctl add_user postal passw0rd
[user]$ rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"

Step 7: Installing and Configuring the Postal Mail Server

Since we’ve finished with the prerequisites we may move on to the actual Postal setup, for starters we will start with creating a user(account) called’postal’

[user]$ sudo useradd -r -m -d /opt/postal -s /bin/bash postal
[user]$ sudo setcap 'cap_net_bind_service=+ep' /usr/bin/ruby2.3

Next, we will duplicate the source code from the Postal Github repo and append a soft link to the postal binary file:

[user]$ sudo -i -u postal git clone https://github.com/atech/postal /opt/postal/app
[user]$ ln -s /opt/postal/app/bin/postal /usr/bin/postal

In order to configure Postal, you have to install bundler and procodile. Do that with the command below:

[user]$ sudo gem install procodile bundler

For the installs to be done, we will switch to the portal user:

[user]$ su - postal
[user]$ postal bundle /opt/postal/app/vendor/bundle
[user]$ postal initialize-config
[user]$ postal initialize

Now we will open the postal.yml file from /opt/postal/config and update it according to your setup.
Run Postal in the background by executing the following command:

[user]$ postal start

Step 8: Creating a Postal Admin User
In order to create the first Postal administrator account, execute make-user:

[user]$ postal make-user
Postal User Creator
 Enter the information required to create a new Postal user.
 This tool is usually only used to create your initial admin user.
E-Mail Address : admin@dreamvps.com
 First Name : DreamVPS
 Last Name : Admin
 Initial Password: : *********
User has been created with e-mail address admin@dreamvps.com
Again, use a strong password!

Step 9: Checking Postal Running Status

Since your Postal was successfully installed, configured and running. Check its status by executing the following command:

[user]$ postal status

Please confirm that every service is running and working correctly.
Step 10: Configuring Nginx with Postal
Postal has its own configuration file. You may copy the cfg file to your nginx directory. Swap the default configuration file or create a new one.

[user]$ cp /opt/postal/app/resource/nginx.cfg /etc/nginx/sites-available/default

On default, Postal only works with SSL. You may use a self-signed SSL.

[user]$ sudo mkdir /etc/nginx/ssl/
[user]$ sudo cd /etc/nginx/ssl/
[user]$  openssl req -x509 -nodes -newkey rsa:4096 -keyout postal.key -out postal.crt

Now, restart nginx so the changes take effect.

[user]$ sudo service nginx reload

You may now access the Postal dashboard from https Use the details from step 8.
The Postal installation is now done

Updated on December 23, 2018

Was this article helpful?

Related Articles

Leave a Comment

[apsl-login-lite login_text='Please login with a social account']