Cara Install 3X-UI VPN Pakai Docker Compose di Ubuntu VPS

Kalau kamu butuh VPN/proxy server sendiri, 3X-UI ini panel web buat ngatur Xray-core yang support banyak protokol kayak VLESS, VMESS, Trojan, Reality, sampai WireGuard. Kelebihannya, semua bisa diatur lewat dashboard web, gak perlu edit config file manual satu-satu.

Di tutorial ini kita install pakai Docker Compose biar prosesnya lebih rapi, gampang di-backup, dan gampang di-update ke versi baru tanpa ribet.

Persiapan

Pastiin VPS kamu udah memenuhi ini:

  • Ubuntu 22.04 atau 24.04
  • Akses root atau sudo
  • Public IP
  • Docker dan Docker Compose
  • Port-port di bawah ini kebuka di firewall VPS maupun cloud provider
PortProtokolFungsi
2053TCPPanel 3X-UI
80TCPHTTP
443TCPHTTPS, VLESS, Trojan
443UDPQUIC
8443TCPPort tambahan VPN
51820UDPWireGuard

1. Install Docker

Update sistem dulu:

sudo apt update && sudo apt upgrade -y

Install Docker:

curl -fsSL https://get.docker.com | sh

Cek udah kepasang belum:

docker --version
docker compose version

2. Bikin Direktori 3X-UI

Bikin folder kerja buat nyimpen config dan database-nya:

mkdir -p ~/3x-ui
cd ~/3x-ui
mkdir -p db cert

Struktur foldernya bakal jadi kayak gini:

3x-ui/
├── docker-compose.yml
├── db/
└── cert/

Folder db buat nyimpen database dan config 3X-UI, sedangkan cert buat nyimpen sertifikat SSL kalau nanti kamu pakai.

3. Bikin File Docker Compose

nano docker-compose.yml

Isi kayak gini:

services:
  3xui:
    image: ghcr.io/mhsanaei/3x-ui:latest
    container_name: 3xui
    restart: unless-stopped

    cap_add:
      - NET_ADMIN
      - NET_RAW

    ports:
      # Port Panel
      - "2053:2053"

      # Port VPN TCP
      - "80:80"
      - "443:443"
      - "8443:8443"

      # Port VPN UDP
      - "443:443/udp"
      - "51820:51820/udp"

    environment:
      XRAY_VMESS_AEAD_FORCED: "false"
      XUI_ENABLE_FAIL2BAN: "true"

    volumes:
      - ./db:/etc/x-ui
      - ./cert:/root/cert

    tty: true

Simpan filenya dengan CTRL + X, terus Y, lalu ENTER.

4. Jalankan 3X-UI

Download image dan jalanin container-nya:

docker compose up -d

Cek apakah containernya jalan:

docker ps

Contoh hasilnya:

CONTAINER ID   IMAGE                          STATUS
xxxxxxx        ghcr.io/mhsanaei/3x-ui:latest  Up

5. Lihat Info Login

Cek log container-nya:

docker logs 3xui

Biasanya bakal muncul info login default:

Username: admin
Password: admin

Penting: langsung ganti username/password default ini begitu berhasil login pertama kali, jangan dibiarin default karena itu celah keamanan yang gampang banget ditebak orang.

Kalau info login gak muncul di log, masuk manual ke dalam container:

docker exec -it 3xui x-ui

Jalanin x-ui, terus pilih menu Reset Username & Password.

6. Buka Panel 3X-UI

Akses panelnya lewat browser:

http://IP-VPS:2053

Contoh:

http://140.245.108.12:2053

Login pakai akun admin yang tadi kamu buat/reset.

7. Buka Firewall Ubuntu

Kalau pakai UFW:

sudo ufw allow 2053/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8443/tcp
sudo ufw allow 443/udp
sudo ufw allow 51820/udp

sudo ufw reload

Kalau VPS kamu gak pakai UFW, langkah ini bisa dilewatin.

8. Buka Port di Oracle Cloud (Kalau Pakai OCI)

Buat kamu yang pakai Oracle Cloud, buka port di VPS aja gak cukup. Kamu juga harus buka port di Security List atau Network Security Group (NSG) level cloud-nya.

Tambahin rule TCP buat port: 2053, 80, 443, 8443

Dan rule UDP buat port: 443, 51820

Setelah rule ditambahin, tunggu beberapa menit sampai perubahannya kepake.

9. Bikin Inbound VPN

Masuk ke menu Inbounds → Add Inbound. Ini beberapa protokol yang direkomendasikan tergantung kebutuhan kamu:

VLESS Reality

  • Gak butuh domain
  • Susah diblokir
  • Performa tinggi

Trojan

  • Cocok buat iPhone
  • Didukung hampir semua aplikasi VPN client

WireGuard

  • Sangat cepat
  • Cocok buat gaming dan streaming

Kendala yang Sering Muncul

  • Panel gak bisa diakses meski container jalan
    Cek lagi firewall UFW dan security list cloud provider, pastiin port 2053 beneran kebuka dari kedua sisi.
  • Client gak bisa connect walau inbound udah dibuat
    Cek lagi apakah port yang dipakai inbound itu sama dengan yang udah dibuka di firewall, dan pastiin client config (link/QR) udah sesuai server terbaru.
  • Container restart terus (crash loop)
    Cek log dengan docker logs 3xui, biasanya ada konflik port atau folder db/cert yang permission-nya salah.
  • Lupa password admin setelah reset manual pun gagal
    Cara paling aman: stop container, hapus isi folder db, lalu jalanin ulang docker compose up -d (ini bakal reset semua config ke default, jadi semua inbound yang udah dibuat ikut hilang).

Penutup

Dengan Docker Compose, install 3X-UI jadi lebih rapi dan aman. Semua config kesimpen persisten di volume Docker, jadi proses update atau migrasi server bisa dilakuin tanpa kehilangan data. Buat pemakaian sehari-hari, VLESS Reality biasanya jadi pilihan paling praktis karena gak butuh domain dan tingkat keberhasilan koneksinya tinggi. Kalau ada yang error atau nyangkut, drop komentar aja bro.

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.