When Hugo Meets OpenShift
Learn how to run Hugo on OpenShift DIY cartridge
Table of Contents
I used Hexo, which is written in Node.js, to generate static web files and used OpenShift Node.js cartridge to host the files. It took almost 10 sec to generate for just 5 posts. On the contrary, Hugo, written in Go, generates all static files within 1 sec. That’s 10x fast than Hexo! In the following paragraph, we’ll go through the steps to create our own OpenShift DIY cartridge and run Hugo on it!
- Install OpenShift Client: Tutorial
- OpenShift does not provide the cartridge for running binary, we have to create our own cartridge by OpenShift DIY .
- Cartridge name MUST NOT contain any pattern that matches “hugo”, I’ll explain it later.
$ rhc app-create <cartridge name> diy
- Once the cartridge is created, it will automatically clone git repo from OpenShift.
$ git rm *
$ git commit -m "Remove DIY stuff"
We need to download Hugo binary that runs on OpenShift.
- Go to https://github.com/spf13/hugo/releases
- Download the latest linux 64bit version binary
$ wget https://github.com/spf13/hugo/releases/download/v0.16/hugo_0.16_linux-64bit.tgz
$ tar -zxvf hugo_0.16_linux-64bit.tgz hugo
$ rm -rf hugo_0.16_linux-64bit.tgz
$ mkdir bin/ && mv hugo bin/
hugo new site .
echo "/public" > .gitignore
git add *
git commit -m "Adding hugo site"
.openshift/action_hooks/build
#!/bin/bash
rm -rf $OPENSHIFT_REPO_DIR/public
.openshift/action_hooks/start
Don’t forget to modify --baseURL="http://my-base-url/"
to domain name you want
#!/bin/bash
# The logic to start up your application should be put in this
# script. The application will work only if it binds to
# $OPENSHIFT_DIY_IP:$OPENSHIFT_DIY_PORT
nohup $OPENSHIFT_REPO_DIR/bin/hugo \
--bind=$OPENSHIFT_DIY_IP \
--port=$OPENSHIFT_DIY_PORT \
--source=$OPENSHIFT_REPO_DIR \
--destination=$OPENSHIFT_REPO_DIR/public \
--watch=false \
--appendPort=false \
--disableLiveReload=true \
--baseURL="http://my-base-url/" \
server |& /usr/bin/logshifter -tag diy &
.openshift/action_hooks/stop
We use ps -ef | grep hugo
to get pid of hugo and kill it and then start the deployment process.
#!/bin/bash
source $OPENSHIFT_CARTRIDGE_SDK_BASH
# The logic to stop your application should be put in this script.
if [ -z "$(ps -ef | grep hugo | grep -v grep)" ]
then
client_result "Application is already stopped"
else
kill `ps -ef | grep hugo | grep -v grep | awk '{ print $2 }'` > /dev/null 2>&1
fi
When we deploy new web files, OpenShift dispatches the stop script to stop cartridge first.
# OpenShift log when we command git push
$ git push
...
Writing objects: 100% (5/5), 455 bytes | 0 bytes/s, done.
Total 5 (delta 3), reused 0 (delta 0)
remote: Stopping DIY cartridge
remote: Building git ref 'master', commit b17eca3
remote: Preparing build for deployment
remote: Deployment id is e3f3adf0
remote: Activating deployment
remote: Starting DIY cartridge
...
If cartridge naming with pattern of hugo
, the process that is redeploying the application will also be killed. The only way to solve it is to create a new cartridge again.
- Apply 755 permission
$ chmod 755 .openshift/action_hooks/*
$ git add .openshift/action_hooks/*
$ git commit -m "updating action_hooks"
- Make sure that every step is doing right before you deploy it
$ git push
Thanks to the post on sub-pop, that’s really help a lot!
- http://sub-pop.net/post/running-hugo-site-on-openshift/
- http://www.hfaber.com/post/134988456944/git-the-remote-end-hung-up-unexpectedly
See Also
- Implementation of Google Cloud Pub/Sub Push Subscription
- Implementation of Google Cloud Pub/Sub Pull Subscription
- Implementation of Google Cloud Pub/Sub Publisher
- Introduction to Google Cloud Pub/Sub
To reproduce, republish or re-use the content,
please attach with link: https://tachingchen.com/
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email