dinosaur bonie

How to Install Craft CMS on a Digital Ocean Server

[et_pb_section fb_built=”1″ _builder_version=”3.0.47″][et_pb_row _builder_version=”3.0.48″ background_size=”initial” background_position=”top_left” background_repeat=”repeat”][et_pb_column type=”4_4″ _builder_version=”3.0.47″][et_pb_text _builder_version=”3.0.74″ background_size=”initial” background_position=”top_left” background_repeat=”repeat”]I run this blog on WordPress, but I’m always interested in WP alternatives, and one of the biggest right now seems to be Craft CMS.

This post is not about debating Craft CMS vs. WordPress though – I just wanted to document the process of installing it on a Digital Ocean VPS (err, “Droplet”), because it’s something I tried and gave up on a few months ago.

These general instructions should also work on Chunkhost and Linode with some messing around.

I don’t remember the exact details, but the first time I tried to install it, I got to some stage where I was getting a pretty inscrutable error, and couldn’t find any way to get it running. I was only installing it for fun, so I didn’t really care too much, but I recently wanted to try it for something else, so I gave it another go, with mixed results.

Installing it was not really that simple, and it took me a while, but I got it going. I don’t know how often they update the Craft CMS docs, but I ran into some trouble, and a few of the issues took a fair amount of time to fix – and I’m very comfortable with installing anything on a LAMP server.

Again, I’m not trying to do compare it to WordPress, but I do think that a very large reason that WP has become such a behemoth is because they worked incredibly hard on making the installation process quick and easy. Even if you happen to run into an error, I’m pretty sure there are good instructions on how to fix it, and I don’t think Craft is there yet. But luckily, if you just follow this procedure step-by-step, you should probably not have to worry about that – unless Digital Ocean change something, or Craft does.

So let’s jump to it. If something becomes outdated, please comment here. I am not the fastest at replying to comments, so if you have a question about this specific installation guide (I am not a Craft CMS expert, or even a real user yet), feel free to tweet @bn2b about it.

This guide is specifically about installing on a Digital Ocean Droplet (VPS). I would imagine that it should work on any Ubuntu server with a LAMP stack going, but your mileage may vary.


1. You need a Digital Ocean account. If you don’t have one, sign up here. (It’s an affiliate link but I’m not shilling – Digital Ocean are great and I wrote a few articles featuring them before even realizing they had an affiliate program.)

2. Now you’re going to create a droplet. Inside your Digital Ocean dashboard, go to the Droplets page, and then click the big green Create button and click “Droplets

I can’t link these directly because D.O. seems to create links with unique strings in the URL, and I have a feeling the ones I get won’t work for you, so here’s a screenshot:

3. You should now be at a page titled “Create Droplets“. You want to click the “One-click apps” tab, and then “LAMP on 16.04” (it could be that by the time you read this, it’s a different version number, but it should probably be fine). Again, D.O. create links with unique IDs so I’m going to add a screenshot instead of links:


4. At this point, you’ll have the choice of sizes/prices, and a few other options you can choose yourself. I leave all this as default myself, and I’m sure the cheapest plan should be fine. There’s an option here to add an SSH key you want.

5. At this point, you’re going to get your login information. Digital Ocean will email you a temporary password – I’m not sure if they do this if you specified an SSH key in the last step. Use this info to log into your server using SSH (I feel like explaining this process strays too far from the point of this tutorial), and set up a new password.

6. So now you’re logged into your server. I’m going to give you a bunch of commands to paste in here without much explanation. My theory is that you don’t understand what these commands are doing (which is fine), you probably don’t care anyway.

cd /var/www/
apt install unzip
wget https://craftcms.com/latest-v3.zip
unzip latest-v3.zip
mv html/ /tmp/
mv latest-v3.zip /tmp/

7. Now you need to do a very quick and easy edit an Apache config file on the server. I’m going to assume you’re happy to use Pico (the best editor). Just in case you’re not used to it, remember Ctrl-O is Save and when you’re done editing, Ctrl-X will Exit the program. So run this command:

pico -w /etc/apache2/sites-enabled/000-default.conf

Once the file is open, you’ll see about 18 lines of text. Two of these lines contain the string /var/www/html and all you need to do is change it to /var/www/web in both spots, save the file (Ctrl-O) and exit (Ctrl-X).

8. Okay, back to sticking commands into the server. Some of these are interactive, so if you paste the whole block at once, I don’t think it’ll work – go line by line.

apt-get update
apt-get upgrade
sudo apt-get install php-mbstring
sudo apt-get install php-mcrypt
sudo apt-get install php-imagick
sudo apt-get install php-curl
sudo apt-get install php-xml
sudo apt-get install php-zip

sudo a2enmod rewrite
service apache2 restart

chown -R www-data:www-data /var/www/

9. You now have to edit the config/general.php file and set a securityKey in it. Open the file using the command below:

pico -w ./config/general.php

and set some random string in the spot shown below. This is what it’d look like if you changed it to blahblahblah-somerandomstringeogihoeihfioh3249863982:

 'securityKey' => 'blahblahblah-somerandomstringeogihoeihfioh3249863982',

10. Now you’re going to want to check what your default MySQL password is and change it. The commands below will show you your password, and then let you change it, as well as disabling remote login (recommended):

cat /root/.digitalocean_password

11. Now you’re going to use your new password to log into MySQL and create a database for your Craft CMS blog:

mysql -uroot -p
mysql> create database craftblog;
mysql> \q

12. Now, edit the config/db.php file to include the new info you’ve set up. You’ll have to change the username, host, password and database name here:

pico -w /var/www/config/db.php

13. Almost done! Now you can visit your installation in your browser and it’ll ask you a few things and let you log in! You just need to go to http://xxx.xxx.xxx.xx/admin in your browser (with the xxx.xxx.xx.xx being the IP of your Digital Ocean droplet).

Okay, you’re ready to use Craft CMS now! This article wasn’t really written to help you past this point, I just wanted to document the steps I took to get it set up successfully. If there’s any interest in this article, I’d be happy to compare it to WordPress at some point, and give a general overview/review of it. Let me know in the comments I guess!

Also let me know if there are any errors in this – I tested this again as I wrote this post, but there’s always the chance that something changes and this document needs to be updated accordingly.[/et_pb_text][/et_pb_column][/et_pb_row][/et_pb_section][et_pb_section fb_built=”1″ inner_shadow=”on” fullwidth=”on” _builder_version=”3.0.98″ background_color=”#2ea3f2″ use_background_color_gradient=”on” background_color_gradient_start=”#2ea3f2″ background_color_gradient_end=”#2e6df4″ background_color_gradient_direction=”330deg”][et_pb_fullwidth_header title=”Welcome to My Blog” subhead=”Here is a masonry blog layout with no sidebar” _builder_version=”3.16″ background_color=”rgba(255, 255, 255, 0)” button_one_text_size__hover_enabled=”off” button_two_text_size__hover_enabled=”off” button_one_text_color__hover_enabled=”off” button_two_text_color__hover_enabled=”off” button_one_border_width__hover_enabled=”off” button_two_border_width__hover_enabled=”off” button_one_border_color__hover_enabled=”off” button_two_border_color__hover_enabled=”off” button_one_border_radius__hover_enabled=”off” button_two_border_radius__hover_enabled=”off” button_one_letter_spacing__hover_enabled=”off” button_two_letter_spacing__hover_enabled=”off” button_one_bg_color__hover_enabled=”off” button_two_bg_color__hover_enabled=”off”][/et_pb_fullwidth_header][/et_pb_section][et_pb_section fb_built=”1″ _builder_version=”3.0.74″ background_color=”#f7f7f7″][et_pb_row _builder_version=”3.0.47″ background_size=”initial” background_position=”top_left” background_repeat=”repeat”][et_pb_column type=”4_4″ _builder_version=”3.0.47″][et_pb_blog fullwidth=”off” posts_number=”18″ _builder_version=”3.0.94″][/et_pb_blog][/et_pb_column][/et_pb_row][/et_pb_section]