Docker Reverse Proxy Menggunakan Traefik

Aug 27, 2022 · 2 mins read
Docker Reverse Proxy Menggunakan Traefik

Jika sebelumnya sudah pernah dengar Reverse Proxy terutama pada Nginx Reverse Proxy, maka kali ini saya akan bahas mengenai Traefik Reverse Proxy. Traefik ini lebih ditujukan pada docker, container.

Daftar Isi:

Prasyarat:

  • Docker Engine
  • Docker Compose

Buat File docker-compose.yml

Langkah pertama buat file docker-compose.yml, tapi kali ini nama file yang saya gunakan adalah docker-compose-traefik-nginx.yml, sehingga ketika running nanti harus lebih spesifik nama filenya.

mkdir traefik
cd traefik/
touch docker-compose-traefik-nginx.yml

Edit File docker-compose.yml atau docker-compose-traefik-nginx.yml

Edit file docker-compose-traefik-nginx.yml dan kemudian isi file dengan:

version: "3.3"

services:
  traefik:
    container_name: traefik
    image: "traefik:v2.5"
    command:
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --providers.docker
      - --log.level=DEBUG
      - --certificatesresolvers.leresolver.acme.httpchallenge=true
      - --certificatesresolvers.leresolver.acme.email=email@example.com
      - --certificatesresolvers.leresolver.acme.storage=./acme.json
      - --certificatesresolvers.leresolver.acme.httpchallenge.entrypoint=web
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "$TRAEFIKV2DIR/acme/acme.json:/acme.json"
    labels:
      - "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
      - "traefik.http.routers.http-catchall.entrypoints=web"
      - "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    networks:
      - traefik_webgateway
    logging:
      driver: "json-file"
      options:
        max-size: "100m"

  nginx:
    container_name: nginx
    image: nginx:latest
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nginx.rule=Host(`nginx.wibiharto.web.id`)"
      - "traefik.http.routers.nginx.entrypoints=websecure"
      - "traefik.http.services.nginx.loadbalancer.server.port=80"
      - "traefik.http.routers.nginx.service=nginx"
      - "traefik.http.routers.nginx.tls.certresolver=leresolver"
    networks:
      - traefik_webgateway

networks:
  traefik_webgateway:
    external: true

pada isian file diatas saya menggunakan networks traefik_webgateway. Kemudian selain traefik, saya juga running nginx dengan domain nginx.wibiharto.web.id.

Pada baris --certificatesresolvers.leresolver.acme.email isikan email yang digunakan untuk letsencrypt nantinya. Selain itu pada Service Nginx, baris traefik.http.services.nginx.loadbalancer.server.port isikan port default container tersebut, nginx menggunakan default port 80.

Running file docker-compose

Jika file docker compose kalian menggunakan nama docker-compose.yml, maka tinggal eksekusi perintah berikut.

docker-compose up -d

Tapi jika nama filenya tidak sesuai, gunakan perintah berikut.

docker-compose -f <nama_file>.yml up -d

menjadi.

docker-compose -f docker-compose-traefik-nginx.yml up -d

Silahkan cek hasilnya menggunakan perintah docker ps. Cek juga domain yang sudah kita konfigurasi tadi, nginx.wibiharto.web.id seharusnya sudah tersertifikasi letsencrypt juga

Sharing is caring!