I’ve been hosting my WordPress sites with Digital Ocean for a few months now. It took me quite a while to learn how to manage everything, and I thought it would be worth sharing a few shortcuts and tricks I’ve picked up.
If you’re looking to migrate your sites to Digital Ocean, I also have a post on that.
SSH Shortcut
The way to get on the server is to SSH:
ssh [email protected]
However, no one wants to memorize an IP address or type that much. If you’re logging in a lot, set up an SSH alias.
In:
~/.ssh/config
Add:
Host example HostName 127.0.0.1 User user
Now, you just need to type “ssh example” to get to your server.
Download Files from the Server
If you need to download a directory from the server, you can do that with scp:
scp -r [email protected]:/var/www/mysite.io/htdocs/wp-content/ .
This pulls the entire “wp-content” folder from your remote site into your current path on your local machine.
Reverse it to go the other way:
scp -r wp-content [email protected]:/var/www/mysite.io/htdocs/
Syncing WordPress Files
If you’re developing locally, you probably need to occasionally sync files. Rsync is a great way to do that because it only downloads/uploads the files that have changed.
You can also exclude files you don’t want to sync, like a cache directory. Here’s one command I use all the time to pull down updates:
rsync -rvz --exclude "w3-total-cache" --progress [email protected]:/var/www/mysite.io/htdocs/wp-content/ /Users/Me/Sites/mysite/'
This syncs any changes in the “wp-content” folder on the remote server to the “wp-content” directory in “mysite” locally.
You can reverse the paths to go the other way (be careful!), and of course, set up an alias or shell script if you need to do this a lot.
Updating the Server
It seems like every time I log into the server there’s updates. Here’s how you get those:
sudo apt-get update # Fetches the list of available updates sudo apt-get upgrade # Strictly upgrades the current packages sudo apt-get dist-upgrade # Installs updates (new ones)
Restart MySQL
MySQL seems to conk out every now and then on Digital Ocean. Enabling Swap really helped with that. But sometimes you just need to:
/etc/init.d/mysql start
Cron Job to Restart MySQL
If MySQL conks out on a regular basis because of memory errors, it might be a good idea to upgrade the droplet. In my case, MySQL failed about every 3-4 weeks and overall CPU use was still low. So I just decided to set up a cron job instead. This runs every minute and will restart MySQL if it is down.
To set it up, log in and type:
sudo crontab -e
Then add this line to the bottom of your crontab:
* * * * * /etc/init.d/mysql start
For a more detailed account of how cron jobs work (or to set different times), read this.
I am new cron jobs, so if anyone has improvements/alternates to this approach I’d love to know it.
Restart Ngnix
service nginx reload
Hope some of these tips are useful! Feel free to share your own.
Take a look at serverpilot.io. It’s a great for using it ontop of DigitalOcean. Serverpilot.io is a tool to run websites on DigitalOcean much easier. It will do all the config stuff and install updates automatically.
Restarting Mysql with a cronjob is a TERRIBLE idea
Hi Andrew. Could you help me understand the reasons why this is a terrible idea and if there are better alternatives? MySQL would generally cut out about once or twice a month for this site on the $10/mo plan. Caching would keep the site up for the few seconds it took MySQL to restart. Swap is already on. I could upgrade the droplet, but when MySQL kicked out it always associated with a massive memory spike- and I was concerned the issue would still occur even after upgrading.
Would love to learn more. Thanks!