eyenx

eyenx

yet another geek

11 Nov 2014
new design

big surprise - new design!

I was already going through the interwebs for a few weeks, until I found some promising themes I wanted to try out on jekyllthemes.org.

After some days, I got hooked by the wonderful, yet simple jekyll themes Mu-An Chiou designed. Seriously, go check her work out on muan.co or on her github profile.

trying hard again

In the last 5 days I went full jekyll mode. I switched to so many themes on my development environment, that I can hardly remember a single one of them.

But what caught my eye was scribble. I find it:

  • simple
  • beautiful
  • fresh
  • clean

That’s about it. I’m easy to impress, I know. A few of my friends like it, others don’t. But what matters is my own opinion. And I like it a lot.

systemctl stop nginx

My standalone HTTP Server isn’t required anymore. I switched using Docker with tutum now, even on my production homepage.

betatag

Oops. Let’s look at a few more details.

node clusters

I’ve only got one cluster with two really cheap (5$) Digitalocean nodes deployed on it. It may seem not that much, but the cool thing is, that at the moment it’s more than enough.

service clusters

On the other side, I’ve got way to many docker instances.

services

Yes, you saw right. 9 docker instances deployed on two 1CPU/500MB nodes. It gets kinda interesting to see how the services are connected with each other.

It took me way more time than I intended to draw this. So please, at least look at it for a few seconds.

network

Every connection between the services is accomplished with the docker linking technology. eyenx-ch-rp, the nginx reversproxy, is linked with the two loadbalancers eyen-ch-lb and eyenx-ch-dev-lb and these services are linked with their respective jekyll backends. For the loadbalancers I’m using the haproxy docker image provided by tutum as described in my previous post.

Personally I think that 4 containers in the production eyenx-ch-jekyll service might be a little overkill. But I’m just playing around with the tutum scaling capabilities.

sequential deployment

When creating the jekyll services, I wanted them to have the sequential deployment option active. Sadly, upon finishing the service creation process, I saw the missing ON flag in the eyenx-ch-jekyll service details.

servicedetail

A few minutes later I tried again and took some screenshots for the purpose to contact the tutum support team. This was their response:

mail

I gratefullly denied their kind offer. It just was nice to know they were already working on the fix.

Dockerfiles

This might not be a mistery. Anyway, I’ll show you my Dockerfiles on which I worked so hard (~10 minutes).

FROM ruby:latest
MAINTAINER eye@eyenx.ch
RUN apt-get update && apt-get install -y node python-pygments
RUN apt-get clean && rm -rf /var/lib/apt/lists/
RUN gem install github-pages jekyll jekyll-redirect-from \
kramdown redcarpet rouge rdiscount
WORKDIR /src
RUN git clone http://github.com/eyenx/eyenx.ch /src
EXPOSE 4000
CMD git pull;jekyll serve

You may ask yourself why my start command is git pull;jekyll serve. I update the git repository under /src every time the container starts. This gives me the possibility to update my static generated homepage without actually having to redeploy the whole service. I can achieve an update with absolutely no downtime with this simple for loop:

for c in $(tutum container ps | awk '/eyenx-ch-jekyll/ {print $2}')
  do tutum container stop $c; sleep 45; tutum container start $c; sleep 5
done

Finally let’s take a look at the eyenx-ch-rp Dockerfile.

FROM nginx:latest
MAINTAINER eye@eyenx.ch
RUN apt-get install -y python-pip
RUN pip install j2cli
COPY start /start
RUN chmod +x /start
COPY nginx.tmpl /nginx.tmpl
CMD /start
EXPOSE 80

The nginx.conf is created from a Jinja2 template file using j2cli. For more information visit my github project or the public docker repository