How to Install Mailtrain Newsletter Application on FreeBSD 12

Published on: Fri, Oct 4, 2019 at 11:48 am EST
BSD Business Email Server Apps

Mailtrain is an open-source self-hosted newsletter app built on Node.js and MySQL/MariaDB. Mailtrain's source is on GitHub. This guide will show you how to install Mailtrain on a fresh FreeBSD 12 Vultr instance.

Requirements

  • Software Requirements:
    • Node.js v7 or greater
    • MySQL v5.5
    • Nginx
    • Redis (optional)
  • Hardware Requirements:
    • 1 vCPU
    • 1024 MB RAM

Before you begin

Check the FreeBSD version.

uname -ro
# FreeBSD 12.0-RELEASE

Ensure that your FreeBSD system is up to date.

freebsd-update fetch install
pkg update && pkg upgrade -y

Install the necessary packages.

pkg install -y sudo vim unzip wget git bash socat

Create a new user account with your preferred username (we will use johndoe).

adduser

# Username: johndoe
# Full name: John Doe
# Uid (Leave empty for default): <Enter>
# Login group [johndoe]: <Enter>
# Login group is johndoe. Invite johndoe into other groups? []: wheel
# Login class [default]: <Enter>
# Shell (sh csh tcsh nologin) [sh]: bash
# Home directory [/home/johndoe]: <Enter>
# Home directory permissions (Leave empty for default): <Enter>
# Use password-based authentication? [yes]: <Enter>
# Use an empty password? (yes/no) [no]: <Enter>
# Use a random password? (yes/no) [no]: <Enter>
# Enter password: your_secure_password
# Enter password again: your_secure_password
# Lock out the account after creation? [no]: <Enter>
# OK? (yes/no): yes
# Add another user? (yes/no): no
# Goodbye!

Run the visudo command and uncomment %wheel ALL=(ALL) ALL, to allow members of the wheel group to execute any command.

visudo

# Uncomment by removing hash (#) sign
# %wheel ALL=(ALL) ALL

Now, switch to your newly created user with su command.

su - johndoe

NOTE: Replace johndoe with your username.

Set up the timezone.

sudo tzsetup

Install Node.js and npm

Install Node.js and npm.

sudo pkg install -y node10 npm-node10

Check the versions.

node -v && npm -v
# v10.15.3
# 6.9.0

Install MariaDB

Install MariaDB.

sudo pkg install -y mariadb102-client mariadb102-server

Check the version.

mysql --version
# mysql  Ver 15.1 Distrib 10.2.24-MariaDB, for FreeBSD12.0 (amd64) using readline 5.1

Start and enable MariaDB.

sudo sysrc mysql_enable="yes" 
sudo service mysql-server start

Run the mysql_secure_installation script to improve the security of your MariaDB installation.

sudo mysql_secure_installation

Log into MariaDB as the root user.

mysql -u root -p
# Enter password:

Create a new MariaDB database and user. Remember the credentials for this new user.

CREATE DATABASE dbname;
GRANT ALL ON dbname.* TO 'username' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
exit;

Install Nginx

Install Nginx.

sudo pkg install -y nginx

Check the version.

nginx -v
# nginx version: nginx/1.14.2

Enable and start Nginx.

sudo sysrc nginx_enable=yes
sudo service nginx start

Run sudo vim /usr/local/etc/nginx/mailtrain.conf and set up Nginx for Mailtrain.

server {

  listen [::]:80;
  listen 80;

  server_name example.com;

  charset utf-8;
  client_max_body_size 50M;


  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_next_upstream error timeout http_502 http_503 http_504;
  }

}

Save the file and exit.

Now we need to include mailtrain.conf in the main nginx.conf file.

Run sudo vim /usr/local/etc/nginx/nginx.conf and add the following line to the http {} block.

include mailtrain.conf;

Test the configuration.

sudo nginx -t

Reload Nginx.

sudo service nginx reload

Install Mailtrain

Create an empty document root folder where Mailtrain should be installed.

sudo mkdir -p /usr/local/www/mailtrain

Navigate to the document root folder.

cd /usr/local/www/mailtrain

Change ownership of the /usr/local/www/mailtrain folder to user johndoe.

sudo chown -R johndoe:johndoe /usr/local/www/mailtrain

Download and unzip Mailtrain.

wget https://github.com/Mailtrain-org/mailtrain/archive/master.zip
unzip master.zip
rm master.zip
mv mailtrain-master/* . && mv mailtrain-master/.* .
rmdir mailtrain-master

Run npm install --production in the Mailtrain folder to install required dependencies.

Copy config/default.toml as config/production.toml and update MySQL and any other settings in it.

cp config/default.toml config/production.toml
vim config/production.toml

Run the server.

NODE_ENV=production npm start

Installation is complete. Login with the username admin and the password test. Once logged in, update the user information and password via the Mailtrain web interface.

Want to contribute ?

You could earn up to $300 by adding new articles