How to Setup WordPress with LAMP + Postfix as Send-Only Mail Notifications on VPS Server
Chances are that you already know what WordPress is: a free and open source blogging tool and content management system (CMS) based on PHP and MySQL. Its official website states – in a play on words – that it is both free and priceless.
Among its distinguishing features, the possibility to install and switch between themes (the look & feel) stands out. Also, hundreds of available plugins make it possible to do almost everything with your site.
As a robust blogging tool, WordPress allows your visitors to comment on posts and thus engage in (hopefully enriching) conversations about the topics presented therein. To do so, it includes a messaging component that sends out notifications to authors when readers have commented on their posts.
In addition, when you subscribe to a post (regardless of whether you are an author or a reader), you can choose to be notified when someone comments on it.
If you have bought a shared hosting package, the mail service that WordPress depends on must have already been set up and configured for you (by the way, most shared hosting providers offer a 1-click installation of WordPress).
However, if you are using a VPS and want to install and use WordPress, you will have to set up and configure the mail server (Postfix or other) that will allow WordPress to send out notifications.
In this post we will explain how to set up a full LAMP server on a cloud VPS and how to integrate WordPress with Postfix. We highly recommend you consider one of our partners while looking for a hosting provider (feel free to check our reviews about their services and plans here).
In order for your WordPress to successfully send out notifications, you will need to ensure the following requirements are met:
Step 1: Setting Up DNS MX and A Records for WordPress
1. Along with the installation of the LAMP stack, you will need to add the necessary DNS MX and A records for your mail server and domain.
Although those links explain how to set up the DNS records for a Linode VPS, it should not differ significantly for other providers.
Step 2: Install LAMP Stack for WordPress in Linux
2. Set up a full LAMP (Linux – Apache – MySQL / MariaDB – PHP) stack.
Here are the instructions to do so in two major distribution families:
- Install LAMP on RHEL/CentOS 7.0
- Install LAMP on Fedora 24 Server
- Install LAMP on Fedora 23 Server
- Install LAMP on Ubuntu 16.04 (and later)
- Install LAMP on Ubuntu 15.04 (and later)
Step 3: Create a Database for WordPress
3. Create a database with a name of your choice and an account for WordPress to use. You will need this information later to edit the WordPress configuration file.
Login to the MySQL / MariaDB prompt using the root password that you chose while executing the
mysql_secure_installation script in the above LAMP installation step:
# mysql -u root -p [Enter password here] MariaDB [(none)]> CREATE DATABASE wp_myblog; MariaDB [(none)]> GRANT ALL PRIVILEGES ON wp_myblog.* TO 'your_username_here'@'localhost' IDENTIFIED BY 'your_chosen_password_here'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> EXIT;
Once the first three steps listed above as prerequisites have taken care of, let’s proceed with the installation and configuration of WordPress.
Step 4: Installing and Configuring WordPress
4. Download and extract the latest WordPress tarball.
# wget http://wordpress.org/latest.tar.gz # tar xzf latest.tar.gz # cd wordpress
5. In the wordpress directory, rename existing
# mv wp-config-sample.php wp-config.php
then update it with your database information under the MySQL settings section (refer to the highlighted boxes in the image below):
// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define('DB_NAME', '
database_name_here'); /** MySQL database username */ define('DB_USER', '
username_here'); /** MySQL database password */ define('DB_PASSWORD', '
password_here'); /** MySQL hostname */ define('DB_HOST', '
localhost'); /** Database Charset to use in creating database tables. */ define('DB_CHARSET', '
utf8'); /** The Database Collate type. Don't change this if in doubt. */ define('DB_COLLATE',
Explanation of the above settings:
- DB_NAME: the name of the database you created for WordPress (
- DB_USER: the username for DB_NAME (
- DB_PASSWORD: the password you chose for DB_USER (
- DB_HOST: the hostname (usually
- DB_CHARSET: the database character set, normally should not be changed.
- DB_COLLATE: the database collation should normally be left blank.
6. Move the wordpress directory to the root directory (or to a subdirectory if you are planning on setting up other virtual hosts) of the web server.
In this example we will move wordpress to
/var/www/html/wp (a subdirectory inside the Apache DocumentRoot):
# mv wordpress /var/www/html/wp
http://<ip>/wp/wp-admin/install.php in your browser and fill the requested on screen information (where
<ip> is the IP address of your server):
- Site Title
- Password, twice
- Admin email
- Click “Install WordPress”
If the installation succeeds, the following page will be shown:
You can now click Login to logon to your WordPress control panel using the credentials you chose in this same step.
Step 5: Setting up Postfix to Send WordPress Notifications
At this point you have a functional LAMP environment and WordPress. In order to allow WordPress to send notifications through our own mail server, we will need to install and configure Postfix as a null client.
This means that we will only use the Postfix mail service to send mail for WordPress email notifications. Follow the instructions given in these articles depending on your chosen distribution:
Install Postfix in Ubuntu and Debian
----------- On Ubuntu and Debian systems ----------- # apt-get update && sudo apt-get install postfix
When you are asked to configure the mail server, choose:
- Mail configuration type:
- System mail name:
Install Postfix in CentOS, RHEL and Fedora
----------- On CentOS, RHEL and Fedora systems ----------- # yum update && yum install postfix
Regardless of the distro you’re using, edit
/etc/postfix/main.cf with the following values:
mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = loopback-only
You may want to refer to the Postfix official documentation for details on the above settings.
Now go ahead and write a dummy post. Then add a comment using the form at the bottom. You, as an author, should start receiving notifications in no time.
Common installation pitfalls and solutions
After you have installed WordPress, you may run into the following issues. Not a big deal – just follow the outlined instructions to fix them:
1. If you see a directory listing instead of a web page when you browse to
http://<ip>/wp, this most likely means that the web server needs to be told to read the
index.php file by default.
The easiest way to accomplish this task is by creating a
.htaccess file inside the installation directory with the following content:
# echo 'DirectoryIndex index.php' > /var/www/html/wp/.htaccess
2. If you see php tags (
<?php and / or
?>) displayed as plain text in a web page, PHP is not working properly. Make sure that your PHP version meets the requirements (
# php -v
3. Any other errors while trying to open the
index.php file (including but not limited to “Headers already sent”) may be caused by any character present (including whitespaces) before the PHP beginning tag
(<?php) or after the ending tag
(?>) in the
wp-config.php file that you configured in STEP 5 above.
In this article we have explained how to install WordPress after setting up a LAMP stack on Ubuntu or CentOS.
If you have properly set the DNS records for your domain as explained earlier, you should start receiving comment notifications immediately. If not, check the mail server logs (
/var/log/mail.log in CentOS and Ubuntu, respectively) and get back to us using the comment form below.
We will be more than glad to take a look and answer whatever questions you may have.