Blog server provisioning

  1. DigitalOcean: Docker One-Click image
  2. Install docker-compose
  3. Follow [this tutorial] to get ghost up and running http://nknu.net/how-to-deploy-your-ghost-blog-using-docker-machine-and-docker-compose/
mkdir ghost
# install docker-compose binary
# Follow the turorial. Relevant scripts:

$ wget https://ghost.org/zip/ghost-latest.zip
$ unzip ghost-latest.zip "content/*"
$ rm -f ghost-latest.zip

nano docker-compose.yml

# paste the following
blog:
image: ghost
command: npm start
volumes:
- content:/var/lib/ghost
ports:
- 9999:2368
  1. Insetall nginx
apt-get install nginx
cd /etc/nginx/sites-available
nano ghost

# Paste this script
server {
listen 0.0.0.0:80;
server_name fundamentallyhuman.com;
access_log /var/log/nginx/*your-domain-name*.log;
client_max_body_size 100m;

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;

proxy_pass http://127.0.0.1:9999;
proxy_redirect off;
}
}

# End of pasting

cd ../sites/enabled
rm default
ln -s ../sites-available/ghost
service nginx restart

  1. Backup
apt-get install sqlite3

cd /ghost

# https://github.com/andreafabrizi/Dropbox-Uploader
curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

# set up
$chmod +x dropbox_uploader.sh
$./dropbox_uploader.sh

nano backup.sh
# paste
#!/bin/sh
rsync -av --progress content/ backup/ --exclude data/
rm -f backup/ghost-dev.db.bak
sqlite3 content/data/ghost-dev.db ".backup backup/ghost-dev.db.bak"

name=$(date '+%y-%m-%d')
tar -zcvf --overwrite "$name.tar.gz" backup/
./dropbox_uploader.sh upload "$name.tar.gz" "$name.tar.gz"

# done

# set up cron job

# http://stackoverflow.com/questions/14710257/running-a-cron-job-at-230-am-every-day
# back up every day at night
crontab -e

# add
30 2 * * * /root/ghost/backup.sh

  1. Start after reboot

# ghost/start.sh #!/bin/sh docker-compose up -d # end crontab -e # add @reboot /root/ghost/start.sh