PiStacks Home Setup: Traefik

Welcome to my PiStacks Home Setup tutorial, where I will demonstrate how to setup lots of stacks on a raspberry pi docker swarm cluster.

In this post we will setup Traefik, a modern reverse proxy for microservices.

Applications to Cover

During this series of blogposts, I will be covering the following:

  • Traefik
  • Dynamic DNS
  • Blog
  • Monitoring with Prometheus
  • Monitoring with InfluxDB
  • Logging with Loki
  • Object Storage with Minio

Build Traefik for ARM

Next we will build our docker image for Traefik on ARM.

In our Dockerfile we will build a image for Traefik version 1.7.14 for ARM:

FROM pistacks/alpine

ENV TRAEFIK_VERSION 1.7.14  
ENV ARCH arm

ADD https://github.com/containous/traefik/releases/download/v${TRAEFIK_VERSION}/traefik_linux-${ARCH} ./traefik_linux-${ARCH}  
ADD traefik_linux-${ARCH} /traefik

RUN apk add --no-cache ca-certificates \  
    && chmod +x /traefik \
    && rm -rf /var/cache/apk/*

EXPOSE 80 8080 443

ENTRYPOINT ["/traefik"]  

Once you saved the above content in a Dockerfile, let's build our image:

$ docker build .

Once your image is build you will get a image id:

Successfully built 28395b34c3ed  

Tag that image to the username, repo and tag of your choice, in my example I want to tag it to the following:

$ docker tag 28395b34c3ed pistacks/traefik:1.7.14

Once we have tagged our image, login to our dockerhub account and push the image to the registry:

$ docker login
$ docker push pistacks/traefik:1.7.14

Deploy to Swarm

Now that our image has been pushed to dockerhub, we can deploy Traefik to our Raspberry Pi Swarm.

First we need to create a overlay network that we will use for all the network traefik that will be public, in other words, traverse through Traefik:

Let's create a network called traefik:

$ docker network create --driver overlay traefik

Once our network has been created, create a file called traefik/docker-compose.yml in the mentioned directory:

$ mkdir traefik && cd traefik
$ vim docker-compose.yml

And provide the following content:

version: "3.2"

services:  
  traefik:
    image: pistacks/traefik:1.7.14
    ports:
      - 80:80
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: >
      --docker
      --docker.swarmmode
      --docker.watch
      --logLevel=DEBUG
      --accessLog
      --metrics
      --metrics.prometheus
    networks:
      - traefik

networks:  
  traefik:
    external: true

Once you have saved the content, deploy the traefik service:

$ docker stack deploy -c docker-compose.yml proxy

You have now deployed Traefik on your Raspberry Pi Docker Swarm.

In the following posts we will deploy backend services on our Raspberry Pi Docker Swarm Cluster.