Cara Setup Cloudflare Tunnel di VPS Biar Docker Container Bisa Diakses Tanpa Buka Port

Punya beberapa container Docker di VPS yang mau diakses dari luar, tapi males bolak-balik buka port di firewall? Cloudflare Tunnel jawabannya, bro. Dengan Cloudflare Tunnel, kamu bisa expose service internal ke internet tanpa perlu membuka port 80 atau 443 sama sekali. Semua koneksi jalan lewat outbound connection dari server kamu ke jaringan Cloudflare, jadi VPS kamu tetap “tertutup” dari sisi firewall tapi tetap bisa diakses lewat domain publik. Di artikel ini kita bahas langkah-langkahnya dari awal, mulai dari bikin tunnel di dashboard sampai jalanin cloudflared lewat Docker Compose.

Kenapa Perlu Cloudflare Tunnel buat Docker Container Kamu

Setup server biasa biasanya butuh port forwarding, aturan firewall yang ribet, dan risiko port scanning dari luar. Cloudflare Tunnel membalik logika itu. Bukan orang luar yang connect ke server kamu, tapi server kamu sendiri yang connect keluar ke Cloudflare lewat daemon bernama cloudflared. Soalnya koneksi ini outbound-only, kebanyakan firewall (termasuk firewall bawaan provider VPS) sudah otomatis mengizinkannya tanpa konfigurasi tambahan. Di titik ini, kamu juga otomatis dapat proteksi DDoS dan SSL gratis dari Cloudflare, jadi dua masalah selesai sekaligus. Buat kamu yang sering deploy dashboard internal atau tool DevOps di VPS, cara ini juga lebih rapi ketimbang harus urus sertifikat SSL sendiri satu per satu.

Persiapan Sebelum Install Cloudflare Tunnel

Sebelum masuk ke instalasi, pastikan domain kamu sudah pakai Cloudflare sebagai DNS provider. Ini penting karena Tunnel butuh akses ke zona DNS domain tersebut untuk bikin record secara otomatis. Selain itu, siapkan juga Docker dan Docker Compose yang sudah terpasang di VPS. Pastikan juga container aplikasi yang mau di-expose, misalnya Nginx UI atau dashboard internal lain, sudah jalan di jaringan Docker yang sama. Akun Cloudflare gratis sudah cukup buat kebutuhan ini, tidak perlu upgrade ke paket berbayar. Satu hal lagi yang sering kelewat, pastikan kamu punya akses admin ke akun Cloudflare tersebut, karena proses generate token cuma bisa dilakukan lewat dashboard, bukan lewat CLI di tahap awal ini.

Cara Bikin Tunnel dan Ambil Token di Dashboard Cloudflare

Masuk ke dashboard Cloudflare Zero Trust, lalu buka menu Networks > Tunnels dan klik Create a tunnel. Pilih Cloudflared sebagai connector type, kasih nama yang gampang diingat misalnya vps-tunnel, lalu lanjut ke halaman instalasi. Di halaman ini Cloudflare akan kasih kamu token panjang yang nanti dipakai buat autentikasi container cloudflared ke akun kamu. Simpan token ini baik-baik, jangan sampai bocor ke publik. Soalnya siapa saja yang pegang token itu bisa ikut mengontrol tunnel kamu.

Setup Docker Compose buat Jalanin Cloudflare Tunnel

Setelah token didapat, buat folder khusus misalnya ~/cloudflared lalu bikin file docker-compose.yml di dalamnya. Isi filenya seperti berikut:

services:   cloudflared:     image: cloudflare/cloudflared:latest     container_name: cloudflared-tunnel     restart: unless-stopped     command: tunnel --no-autoupdate run     environment:       - TUNNEL_TOKEN=isi_token_kamu_disini     networks:       - proxy  networks:   proxy:     external: true

Ganti nilai TUNNEL_TOKEN dengan token yang tadi kamu salin dari dashboard. Pastikan juga network proxy sudah dibuat lebih dulu lewat docker network create proxy kalau belum ada. Menariknya, tanpa mapping port sama sekali di compose file ini, cloudflared tetap bisa jalan normal, karena memang tidak butuh port yang dibuka ke luar. Jalankan dengan docker compose up -d, lalu cek statusnya lewat dashboard Cloudflare. Harusnya tunnel langsung berubah jadi status Healthy dalam beberapa detik.

Konfigurasi Public Hostname biar Domain Kamu Kepetakan

Sekarang balik lagi ke dashboard, buka tab Public Hostname pada tunnel yang barusan dibuat. Isi subdomain yang diinginkan, misalnya app.domainmu.com. Di bagian Service, pilih tipe HTTP dan masukkan nama container plus port internal aplikasi kamu, contohnya http://nginx-ui:9000. Karena cloudflared dan container aplikasi berada di network Docker yang sama, cloudflared bisa langsung resolve nama container itu tanpa perlu IP statis. Setelah disimpan, DNS record otomatis dibuat di Cloudflare dan domain kamu langsung aktif tanpa perlu setting A record manual. Kamu juga bisa nambahin beberapa Public Hostname sekaligus dalam satu tunnel yang sama, jadi tidak perlu bikin tunnel baru tiap kali ada container lain yang mau di-expose.

Troubleshooting Cloudflare Tunnel yang Sering Bikin Pusing

Status tunnel di dashboard menunjukkan Down padahal container sudah jalan? Cek dulu log-nya lewat docker compose logs cloudflared. Biasanya masalahnya ada di token yang salah ketik atau kena spasi tambahan saat copy-paste. Kalau token sudah dipastikan benar tapi masih Down, coba restart container-nya dulu lewat docker compose restart cloudflared sebelum otak-atik konfigurasi lain. Masalah lain yang sering muncul adalah error 502 Bad Gateway meski status tunnel-nya Healthy. Ini umumnya karena nama service di Public Hostname tidak cocok dengan nama container, atau port internal aplikasinya salah. Selain itu, kalau aplikasi kamu jalan di network Docker yang berbeda dari cloudflared, otomatis resolve nama container bakal gagal. Pastikan keduanya ada di satu network yang sama seperti contoh di atas. Buat lapisan keamanan tambahan di sisi server sendiri, kamu bisa gabungkan setup ini dengan Fail2Ban buat blokir brute force otomatis. Walau begitu, risiko brute force dari sisi jaringan sudah jauh berkurang karena port publik memang tidak pernah dibuka sama sekali.

Penutup

Dengan Cloudflare Tunnel, expose container Docker ke internet jadi jauh lebih aman dibanding cara lama yang mengandalkan port forwarding manual. Setup awalnya memang butuh sedikit langkah ekstra dibanding sekadar buka port di firewall. Tapi hasil akhirnya sepadan, apalagi buat VPS yang isinya banyak service internal sensitif. Di sisi lain, kalau mau baca opsi konfigurasi lanjutan seperti ingress rules atau load balancing antar tunnel, langsung cek dokumentasi resmi Cloudflare Tunnel.

Jundi Husni Mubaraq

Jundi Husni Mubaraq

Saya seorang software engineer yang sejak awal 2026 megang penuh (sendirian) tanggung jawab infrastruktur server di tempat saya kerja: deploy dan maintain server Linux Ubuntu on-premises, bangun keamanan berlapis pakai CrowdSec dan Cloudflare, kelola job scheduling dan monitoring pakai Cronicle, deploy aplikasi containerized pakai Docker, sampai ngurusin mail server korporat dari nol. Sebelumnya saya 3+ tahun jadi Software Engineer/Fullstack Developer di beberapa perusahaan, termasuk proyek skala internasional (EUDR compliance system buat Lindt & Sprungli) dan sistem rumah sakit (SIMRS, rekam medis elektronik, integrasi BPJS Kesehatan) di RS PKU Muhammadiyah Surakarta. jundi.hm ini tempat saya dokumentasiin apa yang beneran saya kerjain dan pelajarin di lapangan, bukan sekadar riset teori, S.Kom dari Universitas Duta Bangsa Surakarta jadi bekal awal, tapi yang nulis di sini adalah pengalaman langsung ngelola server production sehari-hari. Selengkapnya: https://iam.jundi.hm

Lihat Juga Nih

Selanjutnya Nih

Kasih Komentar

Email kamu gak bakal ditampilin ke publik. Kalau ada tanda ini artinya wajib diisi ya *

Rekomendasi.

Lagi Viral.