In this article, we will show you how to install Magento 2 on an Ubuntu 16.04 VPS with MariaDB, Varnish as a full page cache, Apache and Pound as SSL termination. This guide should work on other Linux VPS systems as well but was tested and written for an Ubuntu 16.04 VPS.
Before we begin, you may want a different setup for your Magento. You can follow this tutorial to install Magento 2 on an Ubuntu 16.04 VPS with MariaDB, PHP-FPM 7.0, Varnish as a full page cache, Nginx as SSL termination and Redis for session storage and page caching.
Or you can check out this tutorial to install Magento 2 on an Ubuntu 16.04 VPS with MariaDB, Varnish as a full page cache, Apache and Memcache for session storage.
If you have any different requirements, just get a Linux VPS from us and we’ll set everything up for you, free of charge.
Table of Contents
1. Login and update your server
First of all, you need to login to your Ubuntu 16.04 VPS via SSH as user root:
ssh root@server_IP_address
It is also recommended to start a screen session by executing the following command
screen -U -S magento
Update the system and install necessary packages with:
apt-get update && apt-get -y upgrade apt-get -y install curl nano git
It is crucial that you always keep your server up to date. You can even enable automatic updates in order to achieve this.
2. Install and configure MariaDB
Install the latest MariaDB 10.0 server from the official Ubuntu repositories:
apt-get install -y mariadb-server
Next, we need to create a database for our Magento installation.
mysql -u root -p
MariaDB [(none)]> CREATE DATABASE magento; MariaDB [(none)]> GRANT ALL PRIVILEGES ON magento.* TO 'magento'@'localhost' IDENTIFIED BY 'strong_password'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> \q
Do not forget to replace ‘strong_password’ with an actual strong password. You can even generate a strong password from the command line.
3. Install Apache2 web server
apt-get install apache2
4. Install PHP and required PHP modules
To install the latest stable version of PHP version 7 and all necessary modules, run:
apt-get install php7.0 libapache2-mod-php7.0 php7.0-mbstring php7.0-curl php7.0-zip php7.0-gd php7.0-mysql php7.0-mcrypt php7.0-xsl php-imagick php7.0-gd php7.0-cli php-pear php7.0-intl
Change few default PHP settings:
sed -i "s/memory_limit = .*/memory_limit = 256M/" /etc/php/7.0/cli/php.ini sed -i "s/upload_max_filesize = .*/upload_max_filesize = 128M/" /etc/php/7.0/cli/php.ini sed -i "s/zlib.output_compression = .*/zlib.output_compression = on/" /etc/php/7.0/cli/php.ini sed -i "s/max_execution_time = .*/max_execution_time = 18000/" /etc/php/7.0/cli/php.ini
Enable the Apache2 rewrite module if it is not already done:
a2enmod rewrite
In order to activate the new configuration, restart the Apache web server using the following command:
service apache2 restart
5. Install Composer
Composer is a dependency manager for PHP with which you can install packages. Composer will pull in all the required libraries and dependencies you need for your project.
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
6. Install Magento 2 from Github
Clone the Magento repository to the ~/myMagentoSite.com
directory using the following command:
git clone https://github.com/magento/magento2.git /var/www/myMagentoSite.com
Get the latest Magento 2 stable release:
cd /var/www/myMagentoSite.com
git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
Run composer to install all Magento dependencies:
composer install
To continue with the installation you can either use the installation wizard or the command line, in this guide we will use the latter.
bin/magento setup:install \ --base-url=http://myMagentoSite.com/ \ --db-host=localhost \ --db-name=magento \ --db-user=magento \ --db-password=strong_password \ --admin-firstname=First \ --admin-lastname=Last \ --admin-email=user@myMagentoSite.com \ --admin-user=admin \ --admin-password=strong_password123 \ --language=en_US \ --currency=USD \ --timezone=America/Chicago \ --use-rewrites=1
If the installation is successful you will see something like below:
[SUCCESS]: Magento installation complete. [SUCCESS]: Magento Admin URI: /admin_1m0ezr
Run the crontab
command to create a cronjob
crontab -u www-data -e
and add the following line:
* * * * * /usr/bin/php /var/www/myMagentoSite.com/bin/magento cron:run | grep -v "Ran jobs by schedule" >> /var/www/myMagentoSite.com/var/log/magento.cron.log
Finally, set the correct permissions:
chown -R www-data: /var/www/myMagentoSite.com
7. Configure Apache
Create a new virtual host directive in Apache. For example, you can create a new Apache configuration file named ‘magento.conf’ on your server:
touch /etc/apache2/sites-available/magento.conf ln -s /etc/apache2/sites-available/magento.conf /etc/apache2/sites-enabled/magento.conf nano /etc/apache2/sites-available/magento.conf
Then, add the following lines:
<VirtualHost *:80> ServerAdmin admin@yourdomain.com DocumentRoot /var/www/myMagentoSite.com/ ServerName myMagentoSite.com ServerAlias www.myMagentoSite.com <Directory /var/www/myMagentoSite.com/> Options FollowSymLinks AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/myMagentoSite.com-error_log CustomLog /var/log/apache2/myMagentoSite.com-access_log common </VirtualHost>
Restart the Apache web server for the changes to take effect:
service apache2 restart
You should be now able to login to your Magento back-end by going to http://myMagentoSite.com/admin_1m0ezr
using the information you set when running the bin/magento setup:install
.
8. Install and configure Varnish
To install Varnish, simply run the following command:
apt-get install varnish
From you Magento Admin dashboard click on the STORES link (left sidebar) -> Configuration -> ADVANCED -> System -> Full Page Cache
Uncheck “Use system value” and from the Caching Application list, select Varnish Cache (Recommended), save the configuration, click on the Varnish Configuration link and click on the Export VCL for Varnish 4 button. The varnish.vcl
file which we will use will be exported in the /var/www/myMagentoSite.com/var/
directory.
Flush the Magento cache with:
php bin/magento cache:flush
Delete the /etc/varnish/default.vcl
and symlink it to the exported varnish configuration.
rm -f /etc/varnish/default.vcl ln -sf /var/www/myMagentoSite.com/var/varnish.vcl /etc/varnish/default.vcl
To change varnish port from 6081 to 80, we need to edit the systemd service configuration.
Create a new customexec.conf
file
mkdir -p /etc/systemd/system/varnish.service.d nano /etc/systemd/system/varnish.service.d/customexec.conf
paste the following:
[Service] ExecStart= ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
and reload systemd units
systemctl daemon-reload
Now we need to change Apache listening port from 80 to 8080. To do that, open the Apache ports configuration file and change it as follows:
nano /etc/apache2/ports.conf Listen 80 -> Listen 8080
nano /etc/apache2/sites-available/magento.conf <VirtualHost *:80> -> <VirtualHost *:8080>
If everything is setup correctly now you should be able to login to your Magento back-end by going to https://myMagentoSite.com/admin_1m0ezr
.
[ecko_alert color=”blue”]Stuck somewhere? Get a VPS from us and we’ll do all of this for you, free of charge![/ecko_alert]
9. Install and configure Pound as SSL termination
For this part of the tutorial we assume that you already have an SSL certificate installed for your domain.
Otherwise, you can purchase a trusted SSL certificate.
Varnish doesn’t support SSL traffic, so you will need to install a proxy or load balancer like Pound to handle the SSL traffic. To do this, we will configure Pound to only listen on port 443 and pass the traffic to Varnish on port 80.
First, let’s install Pound with:
apt-get install pound
Open the Pound configuration file:
nano /etc/pound/pound.cfg
and set the following:
ListenHTTPS Address 1.2.3.4 ## this should be your server public IP address Port 443 Cert "/etc/apache2/ssl/myMagentoSite.com.pem" ## path to your SSL certificate HeadRemove "X-Forwarded-Proto" AddHeader "X-Forwarded-Proto: https" Service BackEnd Address 127.0.0.1 Port 80 End End End
After you are done, restart your Apache and Varnish, and Pound:
service apache2 restart service varnish restart service pound restart
10. Further Optimizations
To further optimize your Magento installation from your Magento admin dashboard:
1. Go to STORES -> Configuration -> CATALOG -> Catalog -> Use Flat Catalog Category, select Yes and click Save Config.
2. Go to STORES -> Configuration -> ADVANCED -> Developer -> JavaScript Settings and set both Merge JavaScript Files and Minify JavaScript Files to Yes and click Save Config..
3. Go to STORES -> Configuration -> ADVANCED -> Developer -> CSS Settings and set both Merge CSS Files and Minify CSS Files to Yes and click Save Config.
4. Consider using a CDN – Content Delivery Network
Do not forget to flush the cache again:
php bin/magento cache:flush
You can also follow our guide on how to speed up Magento.
That’s it. You have successfully installed Magento 2 with Memcache as a session storage and page caching, Varnish as a full page caching and Apache on your Ubuntu 16.04 VPS and you have set up Pound as SSL termination. For more information about how to manage your Magento installation, please refer to the official Magento documentation.
Installing Magento 2 with Varnish, Apache and Pound as SSL termination, is an easy task if you have a VPS with us. Feel free to ask our expert Linux Administrators to install these for you, and it will be taken care of immediately. They are available 24×7, so you can get the help you need at any time.
Nice Article. You have explain every single part with separate Headings and commands. It’s really helpful for me for learn something new.
Really well written article. I`d like to ask how to deal with the ssl termination on ubuntu 18 as I can`t install pound directly from apt install
The pound package was deleted from official Ubuntu repos while 18.04 was still in development.
Thanks for the reply, I`m still fighting with the termination issue, I tried hitch but it seems to have troubles working smoothly on ubuntu, do you have anything to suggest? perhaps the best solution is to manually add the Pound repos?
You can either build pound from source as shown on their website or use Nginx as SSL termination.
can you use HTTP2 in this configuration? Does it need to be enabled on Pound or Apache? How can this be done?
Hi, very good article. I have a problem, pound won’t start with error: HTTP socket bind 199.192.25.137:443: Address already in use – aborted
Can you help me on that ? Thanks
This error occurs when another process already uses 443 port and Apache cannot bind to it.