This article will walk you through the process I followed to setup Statamic on a new DigitalOcean droplet. I will detail the steps in configuring a Linux (Ubuntu 14.04), Apache, and PHP stack (LAP)—no MySQL since I’m using Statamic—that I used to get my own site deployed.
The initial steps in setting up Ubuntu were borrowed from one of DigitalOcean’s own tutorials. They have a vast number of helpful tutorials for users, one of the main reasons I decided using them as a host. It’s made the process much easier for a newb like me.
Quick Links
Configuring Ubuntu
When creating a new DigitalOcean droplet, you’re given the options of which Linux distro image you’d like to use. I’ve chosen Ubuntu 14.04 x64 for my setup and this tutorial. Of course, others are available.
SSH login as root
The first step in configuring your new server is to login as root with SSH. During the creation of a new droplet, an email will be sent to you with your server’s password. You will need this password to login as a root user. You will also need your server’s public IP address which can also be in that email, or in the DigitalOcean control panel. Open up a new terminal window and enter the following:
ssh root@server_ip_address
You will see the following warning.
The authenticity of host '123.123.123.123 (123.123.123.123)' can't be established.
ECDSA key fingerprint is
79:95:46:1a:ab:37:11:8e:86:54:36:38:bb:3c:fa:c0.
Are you sure you want to continue connecting (yes/no)?
Type yes
to continue. This warning is due to an unrecognized server, since this is the first time you are connecting. You should now be logged in.
Changing the root user’s password
Next, you’ll want to change the password of your root user to something more memorable. The command to do so is as follows:
passwd
Type in your desired password, hit enter, then repeat your password. The terminal window will not reveal the password as you type for obvious reasons.
Adding a new user
As an added layer of security we need to create a new user that has root privileges. username
in the following should be changed to your preferred username.
adduser username
To allow this user to have root privileges we need to add a line to a configuration file. Open this file with the following command:
visudo
Once the file is open you will need to scroll down and locate the following lines:
# User privilege specification
root ALL=(ALL:ALL) ALL
Copy the line root ALL=(ALL:ALL) ALL
and paste it on a new line, changing root
to your username.
# User privilege specification
root ALL=(ALL:ALL) ALL
username ALL=(ALL:ALL) ALL
Once you’ve added this new line, press CTRL-X to exit, type “Y” to save the file, then press “ENTER” to confirm the file location. Your new user will now have root privileges.
Changing the SSH port and restricting root login
To add an additional layer of security, we should change the port that we use to login through SSH. We can do this by opening up the SSH configuration file:
nano /etc/ssh/sshd_config
Once that file is open find the following line:
Port 22
Change the 22
to any number between 1025 and 65536. For example:
Port 45600
Next we will restrict the ability to login as the root user. Find the following line in the same file as the port we just changed:
PermitRootLogin yes
We need to disallow root login, so change yes
to no
.
PermitRootLogin no
Lastly, in this same file, add the following line to only allow the username you’ve created.
AllowUsers username
Once you’ve added this line, restricted root access, and changed the port, press CTRL-X to exit, type “Y” to save the file, then press “ENTER” to confirm the file location. You can now only login to your server through SSH on the port you’ve chosen with the newly created user.
Almost done: Restart SSH and test your login
We’ve added a new user with root privileges, restricted the root user, and changed the port through which we connect. Now we need to restart SSH and test out our connection with the new user.
service ssh restart
Now, open a new terminal window so we can test the connection. In the new window we will connect through SSH with our newly created user: username
, on the port we’ve chosen: -p 45600
. Here’s what it should look like:
ssh -p 45600 username@server_ip_address
If all is properly configured you should now be connected to your server. Congrats. Type exit
to logout of the previous window logged in as root, and continue with this new user.
Installing and Configuring Apache
Well, we’ve configured our Ubuntu user, so now we’ll install Apache, the popular software that runs most web servers. Do this through Ubuntu’s apt
package manager command:
sudo apt-get update
sudo apt-get install apache2
You will be prompted for your password since we are running a sudo
command that allows root privileges.
You can check if this install was successful by visiting your public IP in a web browser:
http://server_IP_address
You should see a default Apache2 Ubuntu page, which will indicate you’ve correctly installed your web server. Cool, now let’s configure Apache in preparation for installing PHP.
Configurations for PHP
By default, HTML files are preferred over PHP. let’s change this to prefer PHP files first:
sudo nano /etc/apache2/mods-enabled/dir.conf
Find the following lines and note the order of each index file:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
To prefer PHP files move index.php
before index.html
:
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
As always, press CTRL-X to exit, type “Y” to save the file, then press “ENTER” to confirm the file location. After you restart Apache, it will now look for PHP files first and foremost.
sudo service apache2 restart
Allowing .htaccess
In order for Statamic to rewrite URLs, we need to make some Apache configuration changes to allow our .htaccess file to work. Let open the Apache configuration file:
sudo nano /etc/apache2/apache2.conf
Find the following lines:
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Change the line AllOverride None
to AllOverride All
:
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Press CTRL-X to exit, type “Y” to save the file, then press “ENTER” to confirm the file location.
Next enable the following Apache modules
a2enmod rewrite
a2enmod headers
That should be it for Apache configurations. On to PHP.
Installing PHP
Most sites run on PHP. Statamic is not an exception, so let’s install PHP. Again, we’ll do this through Ubuntu’s apt
package manager command:
sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt
Hooray! Done. Well sorta, we still need to install Statamic. Let’s do that with GIT.
Installing Statamic with GIT
My site is version controlled with GIT and I’ll be installing it on the server with GIT’s clone
command. You’ll just need your repo’s HTTPS url for cloning. My repo is hosted on GitHub.
First we cd
to the directory where we’d like to clone our repo. By default, Apache only allows public html to reside in /var/www/
cd /var/www/
Next we’ll clone the repo using our HTTPS repo url:
sudo git clone https://github.com/username/repo-name.git
Great, now our website is on the server, but we need to make one more small configuration to Apache before the site can be accessed.
Change Apache’s default site directory
We need to point Apache to the newly created directory; by default it points to /var/www/html/
. Let’s edit another Apache configuration file:
sudo nano /etc/apache2/sites-available/000-default.conf
Locate the following lines:
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
Change the html
directory to your public folder within the cloned directory name, e.g. repo_name/public
:
ServerAdmin webmaster@localhost
DocumentRoot /var/www/repo_name/public
Press CTRL-X to exit, type “Y” to save the file, then press “ENTER” to confirm the file location. Apache should now point to your Statamic website. Restart Apache for the changes to take effect.
sudo service apache2 restart
Now, to change some permissions on a few Statamic folders.
First cd
to the public
directory then run the following commands:
chmod -R 775 _cache
chmod -R 775 _logs
chmod -R 775 _content
chmod -R 775 _config/users
Lastly, we need to change the owner of the files within our www
directory:
chown -R username:www-data /var/www
Great! That should be it. Test it out by visiting your public IP. If everything’s setup correctly you should see a working Statamic site. If not, well, shitfire!, I may have left out a crucial detail.
Conclusion
This is kind of a headache of a process to go through the first time as a newb, but it’s a cool learning experience. Also, it allows you to take advantage of powerful developer hosting which beats a crappy shared hosting plan any day. Welp, if I’ve done anything stupid you can let me know in the comments.