Skip to content


  1. Affiliater
    February 22, 2015 @ 10:50 pm

    Thanks Dave for this exceptional article! It works like a charm and i’m really excited to get my datafeedr API site up and running now on Digital Ocean.


  2. Simon Haynes
    March 26, 2015 @ 3:25 pm

    This setup is fantastic, our sites are running much much faster! Thanks!

    P.S. have you had any issues with this setup and the Datafeedr Bulk import tool getting stuck on the same image/product?


    • Anon
      March 26, 2015 @ 3:32 pm

      One thing to watch out for with Datafeedr is to ensure you don’t enable ‘Object caching’ in W3 Total Cache as it’s not compatible.

      I’ve not experienced Datafeedr Bulk Import tool getting stuck on same image/product – make sure you have a proper cron job set up so you’re not relying on visitor traffic in order for your batch jobs to run – I made a guide for that here:


    • Eric
      May 4, 2015 @ 6:55 pm

      Hi Simon

      This issue should be fixed in the newest version of the Datafeedr Product Sets plugin. It was an issue related to caching plugins and the Object cache.



      • Anon
        May 4, 2015 @ 9:27 pm

        That’s great news. I’ve got a client I’m setting up the mercury service for, so I’ll include the object caching and we can see what impact it makes.


  3. Simon Haynes
    March 27, 2015 @ 2:15 pm

    We have this running on an 8gb 8 core server, what in your professional opinion would be the optimal hhvm settings for memory etc?


    • Anon
      May 4, 2015 @ 9:30 pm

      Wow – sorry I missed this comment. I’d need to measure the impact – it can depend on the size of your database, or how long your pages are taking to process. I’ve got plenty sites with 256MB script setting in HHVM that are running very well. You can track your uptime using for free as well, which is important if you’re scaling.


  4. judo
    February 10, 2016 @ 8:16 am

    i tried to install this diy mercury stack to digitalocean droplet with your kind explanation. and i think it was done succesfully .

    but i couldn’t upload my wordpress theme . i did almost everything in the google so that solve this issues but it’s still not work.

    what can i do for it?? can you give me some advice?


    • Anon
      February 10, 2016 @ 9:56 am

      Hi – is there any error message specifically? If you are saying you can’t upload your wordpress theme, I presume that means you got WordPress installed. Probably it’s your /etc/php/7.0/fpm/php.ini file – if you edit this you will find a line like this:

      upload_max_filesize = 2M

      Change the 2M to 24M and you should be able to upload your theme. That’s just a guess at what’s wrong as you didn’t give me very much to go on!

      Or it could be your /etc/hhvm/php.ini file – same line (you will need to ADD it to the hhvm/php.ini file as it doesn’t exist in the first place). Depends what you have set up in your nginx /etc/nginx/sites-available/ file to process your PHP (either PHP 7 or HHVM)


      • judo
        February 10, 2016 @ 2:42 pm

        thanks for your reply. the exist message from wordpress uploader was ‘are you really do this?’

        i did edit php.ini php7.0 folder. and it didn’t works. i will try same things in hhvm. thanks a lot!


      • judo
        February 10, 2016 @ 4:54 pm

        Now, another error code has been generated during uploading theme.

        Error 503 Service Unavailable

        Service Unavailable

        Guru Meditation:

        XID: 1771580132

        Varnish cache server

        should i off varnish??


        • Anon
          February 10, 2016 @ 7:07 pm

          If you have varnish enabled, make sure you access your back end with :8080 port which bypasses varnish.


          Alternatively, disable varnish using the disable command above and:

          service varnish stop

          And then edit the port number in /etc/nginx/sites-available/ to 80 instead of 8080.


  5. Marc
    February 13, 2016 @ 9:06 am

    Awesomesauce! Followed your instructions, step-by-step.

    I got a bit confused as to how to change the configuration to disable Varnish and HHVM… but I think it’s working. *optimistic*


    • Anon
      February 14, 2016 @ 4:44 pm

      Good – glad to hear it – let me know how it goes. I’ll keep working on improving this article to make it easier to follow for future readers.


  6. judo
    February 14, 2016 @ 3:09 pm

    hhmm i was destory my droplet on digital ocean. then when i tried to reinstall mercury stack to droplet , during the process for playbook.yml

    the message like this had appeared and failed.


    • Anon
      February 14, 2016 @ 4:37 pm

      Judo – what message are you seeing when running the playbook? If you’ve got error messages, the likeliest scenario is you’re trying to install to a different operating system other than Ubuntu 14.04 64 bit – e.g. maybe you went for 32 bit by mistake?


  7. Cala
    February 14, 2016 @ 4:52 pm

    Hi, Dave.

    Thanks for the guide. It’s truly awesome!

    This mercury install uses and outdated version of nginx and varnish (v3 instead of v4).

    How can I use this mercury installation with the latest version of nginx and varnish (v4 sintax is not compatible with the v3 syntax).

    Thanks for your time!


    • Anon
      February 14, 2016 @ 7:17 pm

      Hi – one way to get the latest version of nginx and varnish is to run:

      apt-get update
      apt-get upgrade

      Soon I’ll be making my own ansible script – maybe next week, maybe the week after – the main thing I’m aiming for is obviously the latest versions of nginx and varnish but most importantly I want nginx to be built with the ngx_http_realip_module built into it. You have to build from source to get this. It’s required if you’re using Cloudflare and Fail2ban together so that Fail2ban doesn’t end up banning the Cloudflare IP addresses.


      • Cala
        February 15, 2016 @ 3:29 pm

        That’s great news!

        I was able, in a clean Ubuntu installation, to first install nginx (latest version) and only then run the ansible script for the mercury environment. This seems to run just fine.

        Unfortunately this doesn’t work for varnish because when I run the mercury installation it fails because the syntax of the config file of varnish is incompatible with version 4.

        Regarding SSL (https) I was able to configure nginx as a proxy for 443 port so I can have both nginx and varnish running on https since varnish doesn’t support SSL. It works fine! But I have an issue… When trying to log in in wp-admin the port defaults to 8080 (I’m using this is to bypass varnish in the backend) but because of that SSL stops working (it works fine in the frontend). I get this error messages in Chrome: SSL connection error and ERR_SSL_PROTOCOL_ERROR. Still trying to figure this out :/


  8. Cala
    February 15, 2016 @ 3:33 pm

    Also, when you make your ansible script, please add the pagespeed mod and the newest version of openssl 1.0.2 so we can have ALPN when using http/2. That would be a great addition 🙂

    Thanks once again for all the contributions you’ve made. The mercury environment is awesome!


  9. Ferri
    March 12, 2016 @ 5:38 pm

    hi, whats the meaning of this?

    worker_rlimit_nofile 42000;

    and how to adjust pm.max_request correctly?



    • Anon
      April 5, 2016 @ 11:19 am

      Hi – the worker_rlimit_nofile controls how many files can be opened at once by worker processes for nginx. This is important if you’re using a disk/file-based caching system like that offered by W3 Total Cache.


  10. Mohammad Farouk
    April 14, 2016 @ 12:00 am


    Great tutorial, But I need to upgrade the current Varnish 3.0 installed through guide here to Varnish 4, can you please help with that ?


  11. matthew
    June 2, 2016 @ 2:26 am

    I think you missed what should be add in the wp-config in

    Set up W3 Total Cache

    5: Add the following to your wp-config.php file:


    • Anon
      July 5, 2016 @ 1:33 pm

      Yes – you’re right – to complete your W3 Total Cache config if you visit your site /wp-admin/admin.php?page=w3tc_install it will tell you the extra lines to enter to your nginx config file


  12. Peter Ode
    June 30, 2016 @ 8:46 pm

    Hi Dave,
    I’ve been around Windows Servers since NT and 2000 versions, hosted on my own hardware. Now I’m learning Linux and love being able to spin up a $5 or $10 VPS at Digital Ocean in a few minutes.

    I’m mostly hosting WordPress sites and find them on the slow side. I will also be installing WooCommerce on WP. Your Mercury stack seems the way to go. I have a few questions that might also benefit your other readers.

    Q1: You discussed a newer Ansible Playbook that includes the newer NGINX and Varnish. If now available, can you please direct me? Otherwise, do you have any suggestions about how to update your tutorial to get the latest please.

    Q2: You state only Ununtu 14.04 should be used. It’s now a year later so I’m wondering if Ubuntu 16.04 can work?

    Q3: I would like to use the control panel. Where in your tutorial should I install Ajenti?

    Q4: With respect to WordPress and all the plugins, is PHP 7, for the fallback, better than PHP 5.6? I saw your post about fixes for major plugins for PHP7, but that leaves other plugins I might use with problems (potentially).

    Thank you.


    • Anon
      July 4, 2016 @ 4:11 pm

      1. I don’t have it to hand right now and google is failing me – you can run this tutorial and then upgrade varnish and/or rebuild nginx if you wish

      2. I haven’t yet tested it with Ubuntu 16.04 – I’d love it if someone would try and feedback?

      3. I don’t have Ajenti installation in the tutorial yet. It’s something I’m offering for people who purchase the installation service but I can tell you it’s not that easy or straightforward to install. I’ll try and pull a guide together, but I may yet back off from Ajenti if I can’t get it to do everything I want.

      4. It’s your choice – you can have PHP 7 + PHP 5.6 fallback if you wish, or HHVM + PHP 5.6 fallback. This ansible script installs PHP 5.6, so you will have that available as an option if you wish.


  13. lance
    September 8, 2016 @ 7:32 am

    for the life of me i could not get php7 working.. i searched for the php7.0-fpm.sock file and it wasn’t even in any of my directories.. anything come to mind as to why that could be?


    • Dave H.
      November 17, 2016 @ 12:51 pm

      The php7 file is in a different folder – a different subdirectory. /var/run/php/php7.0-fpm.sock


      • Shane Barrett
        May 31, 2017 @ 12:54 pm

        I’ve got the same issue, I have followed every step, but WordPress is telling me I’m using 5.6.99 as a fallback and I’ve also got a Max upload size of 0 – any ideas?


        • Anon
          May 31, 2017 @ 1:03 pm

          Yes if you followed the above script then the php file that contains the .sock reference needs to be edited. Note: don’t just change the PHP7 reference, there’s also a folder difference – that’ll likely be the issue.


          • Shane Barrett
            May 31, 2017 @ 1:24 pm

            Thanks Dave,

            Sorry if I sound a bit thick, but could you elaborate one that a bit more, cannot find a php7.0-fpm.sock anywhere

  14. Anderson Oliveira
    December 5, 2016 @ 7:26 pm

    Dear, I’m starting to test this optimized installation that seems to be very good as well as your article, however when you access the link: I came across this warning: WARNING: DEPRECATED

    Unfortunately I do not have the time to upkeep this project or provide updates for issues. I would recommend using Carl Alexander’s DebOps for WordPress project which does the same thing as this project. You can find it here:

    Is it still worth following the old project or the new project?


  15. Aaron
    March 10, 2017 @ 6:20 pm

    This is great, but unless I’m missing something (which is very possible!) I don’t see Percona being installed in the instructions above.


    • Anon
      March 21, 2017 @ 12:47 pm

      Percona is installed through the ansible script.


  16. Mariyan Nenchev
    February 5, 2018 @ 4:12 pm

    Is this tutorial still relevant for 2018?


Leave a Reply

Your email address will not be published. Required fields are marked *