I am upgrading my Hugo-based blog from v0.15 to v0.48 (extended)! Quite a mad leap. Update: As it turns out, extended won’t run on my (or any) shared hosting provider, and I am still building my site on my shared host. I know, that’s not cool anymore, but updating my deployment pipeline would require more time than I have.

My Architecture

Local is Mac

I am using a Mac for this process.

Host is Dreamhost

My host is Dreamhost shared hosting, because I have an unlimited plan with them, and they are fundamentally awesome in my experience, but this guide will probably work for whatever host I have. Deploying a static site means I don’t need an app server that eats barbells for breakfast.

Configured my web directory as:

railsbling.com

Build is Hugo

Hugo is very customizable. Static doesn’t need to mean boring. There is also a wide range of possibilities with Javascript.

Theme is redlounge

So nice right?!? Have that source.

HOW TO HUGO

Enough evangelism, let’s talk code .

Setup the Web Host

Setup my computer to connect to my server.

I used ssh keys and my ~/.ssh/config so I can just ssh <server name alias> without any fuss. The one thing that always trips me up when I setup a new server for key -based auth is the permissions on the authorized_keys file.

chmod 600 ~/.ssh/authorized_keys

So I ssh in to my server, and cleanup a bit from the old Hugo installs.

cd ~/debs
mkdir -p old_debs
mv hugo_0.14_amd64.deb old_debs/
mv hugo_0.15_amd64.deb old_debs/

I remove the old local hugo install.

rm -rf ~/root

Now I download and build the new Hugo.

root=~/root
wget https://github.com/gohugoio/hugo/releases/download/v0.48/hugo_0.48_Linux-ARM64.deb
mkdir -p $root
for d in *.deb; do echo "Installing $d"; dpkg -x $d $root; done

Then add Hugo’s bin dir to my $PATH. I had already done this for the initial install 2 years ago, but the path has changed, so I had to fix it.

echo 'export PATH=~/root/usr/local/bin:$PATH' >> ~/.bashrc

You will be pushing my site’s git repo onto the server as a remote from my local. So prepare for that. I had already done this for the initial install 2 years ago, and it isn’t changing, so I skipped this step.

mkdir ~/railsbling.git
cd ~/railsbling.git
git init
git config receive.denyCurrentBranch ignore 

Then checkout the theme I chose onto the server. I picked redlounge (for now) from the options at the master theme repo. I had already done this for the initial install 2 years ago, and it isn’t changing, so I skipped this step…

git clone https://github.com/tmaiaroto/hugo-redlounge.git ~/redlounge.git

And instead I just went into my redlounge.git directory and did a git pull.

Then tweak for my needs and make it my ~/railsbling.git/.git/hooks/post-receive : I had already done this for the initial install 2 years ago, but the path changed with the newer version of hugo (adds local).

cat ~/railsbling.git/.git/hooks/post-receive

SITE_REPO=$HOME/railsbling.git
THEME_REPO=$HOME/redlounge.git
SITE_TMP=$HOME/tmp/railsbling
THEME_TMP=$HOME/tmp/railsbling/themes/redlounge
SITE_WWW=$HOME/railsbling.com

git clone $SITE_REPO $SITE_TMP
git clone $THEME_REPO $THEME_TMP
cd $SITE_TMP
$HOME/root/usr/local/bin/hugo --theme="redlounge" -s $SITE_TMP -d $SITE_WWW -b "https://www.railsbling.com"
rm -Rf $SITE_TMP
exit

Setup Local Development

Homebrew continues to kick ass and take names. Give it the name “hugo”, and brew will kick its ass.

$ brew install hugo
...
==> Downloading https://homebrew.bintray.com/bottles/hugo-0.48.high_sierra.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring hugo-0.48.high_sierra.bottle.1.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/hugo/0.48: 32 files, 37.2MB

Create this website and move in.

hugo new railsbling.com ~/Documents/hugo/railsbling
cd ~/Documents/hugo/railsbling

Create some pages

hugo new about.md
hugo new cv.md
...

The top of each file before the +++ is called the frontmatter, and it is the part where all the fancy config happens on a per post level, if any. For now ignore that.

Below the +++ is regular Markdown. So Blaze that Fireball and write some stuff in there.

Install the themes. Just grab them all initially so I can try out a bunch and find the one I like.

cd ~/Documents/hugo/railsbling
git clone --depth 1 --recursive https://github.com/gohugoio/hugoThemes.git themes

From the directory listing, pick a theme that has a name I am particularly drawn to, like “redlounge”, and execute it without prejudice.

The following can be run from any directory, so I have it aliased as bling on my system.

hugo server --source ~/Documents/hugo/railsbling --buildDrafts --watch --theme redlounge --destination ~/Documents/hugo/drafts

Now I have the site running locally. Now comes the actual work.

Git it.

git init
git remote add live ssh://railsbling.com/home/<username>/railsbling.git
git add .
git commit -m "Hot Toddy"
git push --set-upstream live master

Like magic, and unless I missed something in my writeup, my new site will deploy and be live!

Update: I am switching my theme to coder!

Update to last Update: Actually… toha is a great theme :)

Hero image (cropped) by Scott Webb