I finally took the time to move this site to s3 instead of my previous setup with a digitalocean droplet.
Before I used my own git server, capistrano and nginx to serve and deploy the site. That approach was a bit brittle and ultimately was not as automatic as I’d like.
Here’s a quick rundown of the new deployment and hosting.
The site is now open source and hosted at Github, feel free to have a look at the code if you like. TravisCI and the gem s3_website is used for deployment to S3. Due to limitations in DNS, namely that the root @
record cannot be a CNAME I’ve used my droplet and nginx to redirect traffic to hugotunius.se to www.hugotunius.se which is a CNAME for the s3 bucket.
Code
Here are the relevant parts of the deployment code if you are interested in setting up something similar
language: ruby
branches:
only: master
script: "./_scripts/deploy.sh"
env:
global:
- secure: "Y8oSq4b3m6bCJOLGQf5PZCS8x078mZA3VNoHyPOMcVCi0m+Qalp+nildzv4eiKIx8zIhz3Ushf+jHAytAn3TU8hK+zdg7KYX6DoisxAehHxw0n6t0SniELixla70ckrV87FqiNFG3TCrERoOWsk2s6had0oV07IXxPFuBQQe3w0="
- secure: "NHIh4KBJ3TK2o8K5iP5f6cfnHDu9MyHWKnEAHC3WecDbTutnWnjZSN46I3gCro9uRuMz8oLOqTU3EJxvFG/tLUlw/fk9C/88ZboKvib8SpIVX5CmEut6s9/U/sllT+Msx80bWTeRX3Q8U3bYtLeS7x+v56gGuu0YS3HC+Qkar6k="
cache: bundler
The secure fields contain the environment variables for the S3 credentials used for uploads
s3_id: <%= ENV['S3_ACCESS_ID'] %>
s3_secret: <%= ENV['S3_ACCESS_SECRET'] %>
s3_bucket: hugotunius.se
gzip:
- .html
- .css
- .png
s3_reduced_redundancy: true
task :default => :watch
desc 'Cleanup generated files'
task :clean do
sh 'rm -rf _site'
compass 'clean'
end
desc 'Build the site'
task build: [:clean] do
jekyll "build"
end
desc 'Deploy the site to s3'
task deploy: [:build] do
s3 "push"
end
desc 'Serve the site locally and watch for changes'
task watch: [:clean] do
jekyll "serve --watch --drafts"
end
def jekyll(command)
with_bundler "jekyll #{command}"
end
def s3(command)
with_bundler "s3_website #{command}"
end
def compass(command)
with_bundler "compass #{command}"
end
def with_bundler(command)
sh "bundle exec #{command}"
end
Finally the small script scripts/deploy.sh
#!/bin/bash
if [[ $TRAVIS_BRANCH == 'master' ]] ; then
rake deploy
fi
glues it all together on Travis