Beberapa waktu yang lalu team fullstack berdiskusi dengan saya dan mengatakan bahwa mereka cukup sulit menghapalkan url dari setiap project karena masih menggunakan kombinasi ip address dan port, mereka ingin proses kolaborasi bisa lebih mudah terutama saat mengakses aplikasi.
Hal ini bisa diwujudkan dengan menggunakan dns server, tapi cukup sulit jika harus mendaftarkan setiap aplikasi satu persatu. Karena semua aplikasi berbasis docker maka saya coba menginstall proxy menggunakan traefik.
Sesuai hasil penelusuran, traefik bisa cukup mudah mengarahkan aplikasi ke subdomain dengan hanya menambahkan label pada setiap container yang berjalan. Jadi saya coba terapkan semuanya pada server stagging yang berbasis on-premises ini, dan hasilnya team fullstack bisa lebih nyaman pada saat berkolaborasi.

Kita mulai bahas proses setup satu persatu.
Contents
Bagian 1 : Setup DNS dengan dnsmasq
Berhubung server berjalan secara lokal, maka pertama kita harus menginstallkan dns server pada server stagging yang berjalan. Disini saya menggunakan server ubuntu.
sudo apt-get install -y dnsmasqSelanjutnya buat file konfigurasi domain /etc/dnsmasq.d/myserver.conf, isikan konfigurasi seperti berikut.
# /etc/dnsmasq.d/myserver.conf
domain-needed
bogus-priv
# jangan tarik upstream dari resolv.conf; pakai DNS publik sendiri
no-resolv
server=1.1.1.1
server=8.8.8.8
# PENTING: pastikan bind di loopback & IP LAN server
listen-address=127.0.0.1,192.168.0.121
bind-dynamic # (atau: bind-interfaces)
interface=lo
interface=eth0 # cek NIC: `ip -br a`
# Wildcard *.stagging.dev -> IP Traefik (staging-1)
address=/.stagging.dev/192.168.0.121
# Debug (opsional, bantu lihat query masuk)
log-queries
log-facility=/var/log/dnsmasq.log
# (Opsional) performa & TTL cache
cache-size=1000
local-ttl=60Notes :
- stagging.dev : Sesuaikan dengan nama domain kamu
- 192.168.0.121 : Sesuaikan dengan IP Server Stagging
Setelah itu jalankan service dnsmasq
sudo systemctl enable --now dnsmasqBagian 2 : Setup Traefik
Setup traefik cukup sederhana, kita cukup jalankan menggunakan docker compose. Pastikan traefik di daftarkan ke network yang sama dengan aplikasi docker yang berjalan. Disini kita akan buat network baru bernama proxy.
docker network create proxySetelah itu, buat docker compose seperti berikut (silahkan sesuaikan):
networks:
edge:
external: true
services:
traefik:
image: traefik:v3.1
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
# uncomment jika nanti pakai HTTPS lokal (mkcert)
# - --entrypoints.websecure.address=:443
# - --providers.file.directory=/etc/traefik/dynamic
# - --providers.file.watch=true
ports:
- "80:80"
# - "443:443" # aktifkan kalau pakai HTTPS
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
# - ./dynamic:/etc/traefik/dynamic # untuk TLS file provider
# - ./certs:/etc/traefik/certs # untuk sertifikat lokal
networks:
- proxy
restart: unless-stopped
Jalankan docker compose :
docker compose up -dBagian 3 : Setup Aplikasi Container
Untuk mendaftarkan aplikasi container ke traefik, kita cukup tambahkan label pada docker compose atau docker swarm. Pada case ini kita menjalankan pada docker compose :
networks:
proxy:
external: true
services:
app1:
image: webdevops/php-nginx:8.3-alpine
expose:
- "8080" # port di dalam container (bisa 80/3000/5000 dst)
labels:
- traefik.enable=true
- traefik.http.routers.app1.rule=Host(`app1.stagging.dev`)
- traefik.http.routers.app1.entrypoints=web
- traefik.http.services.app1.loadbalancer.server.port=8080
networks:
- edge
restart: unless-stopped
Traefik akan membaca docker runtime dan melihat setiap container yang berjalan, dan mengarahkan container sesuai dengan label yang sudah tertulis. Seperti contoh compose diatas app1 dengan domain app1.stagging.dev.
Bagian 4 : Testing
Untuk memastikan apakah setup yang sudah kita lakukan berhasil, maka bisa kita gunakan perintah dig pada server stagging yang dipakai.
dig +short app1.stagging.dev @192.168.0.121
# harusnya membalas 192.168.0.121Jika berhasil, selanjutnya tambahkan IP Server stagging yang sebelumnya kita jadikan DNS Server (192.168.0.121) ke dalam DNS Laptop, atau perangkat jaringan di kantor.
Ujicoba dengan melakukan nslookup atau mengakses langsung domain app1.stagging.dev di browser. Apabila berhasil maka akan muncul kontendari aplikasi tersebut.
Catatan :
- Buka port 53/TCP dan 53/UDP pada perangkat yang menggunakan GNU/Linux
- Sebagian GNU/Linux mengaktifkan firewall sehingga jika port belum dibuka maka domain local tidak bisa terbaca.
Penutup
Sekian pengalaman yang bisa saya bagikan pada Part 1 Setup Stagging Server, hal ini bisa diaplikasikan terutama pada environment on-premises. Karena ini bisa memudahkan team yang sedang melakukan development. Sedangkan jika pada environment Cloud mungkin bisa lebih sederhana karena biasanya setiap stack sudah diarahkan ke domain khusus development.
Referensi
- https://doc.traefik.io/traefik/expose/docker/
- Discussion with chatgpt



