Docker

Tutorial Lengkap Deploy Aplikasi Web dengan Docker, Nginx, dan Let's Encrypt di VPS untuk Pemula

Tutorial Lengkap Deploy Aplikasi Web dengan Docker, Nginx, dan Let's Encrypt di VPS untuk Pemula

Buat kamu yang baru pertama kali mendengar istilah Docker dan langsung membayangkan sesuatu yang rumit: tenang, konsep intinya sederhana. Docker itu seperti kotak kemasan standar — aplikasi kamu, lengkap dengan semua dependensinya, dibungkus ke dalam satu unit bernama container yang bisa dijalankan di mana saja: di laptop, di VPS, atau di server produksi, dengan hasil yang sama persis.

Artikel ini khusus untuk pemula — dimulai dari nol tanpa asumsi pengetahuan sebelumnya. Kamu akan belajar apa itu Docker, cara menginstal Docker Engine di Ubuntu, membuat Dockerfile dan docker-compose.yml pertama, lalu men-deploy aplikasi ke VPS dengan Nginx sebagai reverse proxy dan sertifikat HTTPS gratis dari Let's Encrypt. Versi software yang disebut mengacu pada rilis 2026 dan diverifikasi dari dokumentasi resmi.

Apa itu Docker dan kenapa penting untuk pemula?

Tanpa Docker, masalah klasik "jalan di laptop-ku, kok error di server" adalah mimpi buruk yang nyata: aplikasi yang berjalan mulus di mesin development tiba-tiba gagal di server karena versi Node.js beda, library hilang, atau konfigurasi sistem tidak sama. Docker menghilangkan kelas masalah ini dengan mengemas aplikasi beserta environment-nya dalam satu image.

Pembeda utama container dibanding virtual machine (VM): container berbagi kernel OS dengan host, sedangkan setiap VM menjalankan OS-nya sendiri. Itulah kenapa container jauh lebih ringan dan start dalam hitungan detik.

AspekContainer (Docker)Virtual Machine
OSBerbagi kernel hostOS penuh per VM
Ukuran imageMegabyteGigabyte
Waktu startDetikMenit
Pemakaian RAMRinganBoros
IsolasiCukup untuk satu aplikasiPenuh

Untuk skala VPS murah dengan RAM terbatas, Docker memungkinkan menjalankan beberapa aplikasi di satu server tanpa perlu beberapa VM — hemat biaya dan mudah dikelola.

Instalasi Docker Engine di Ubuntu (rilis 2026)

Rilis stabil Docker Engine saat artikel ini ditulis adalah seri 29.x (2026). Docker mendukung Ubuntu LTS secara native, termasuk Ubuntu 26.04 LTS (Resolute Raccoon) yang rilis April 2026 — tidak perlu kompilasi manual atau PPA pihak ketiga. Langkah di bawah memakai Ubuntu 24.04 LTS, versi yang paling umum dipakai di VPS.

# 1. Paket pendukung
sudo apt update
sudo apt install -y ca-certificates curl

# 2. GPG key resmi Docker
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 3. Repository resmi Docker (codename diambil otomatis dari OS)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null

# 4. Install Docker Engine, containerd, dan plugin compose
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 5. Verifikasi
sudo docker --version
sudo docker run hello-world

Alternatif cepat: paket bawaan Ubuntu docker.io — versinya sedikit lebih lama dari rilis resmi, tapi langsung bisa dipakai dengan sudo apt install docker.io. Untuk mengikuti pembaruan terbaru dan fitur compose bawaan, repositori resmi Docker lebih disarankan.

Image, Container, dan Dockerfile — tiga konsep kunci

Ada tiga istilah yang wajib dipahami sejak awal:

  • Image — cetak biru (blueprint) aplikasi: sistem file, kode, dependensi, dan perintah yang akan dijalankan. Image bersifat read-only.
  • Container — instance berjalan dari sebuah image. Kamu bisa membuat banyak container dari satu image, masing-masing terisolasi.
  • Dockerfile — file teks berisi instruksi untuk membangun image.

Image didistribusikan lewat registry — yang paling terkenal adalah Docker Hub. Base image seperti node:24-alpine atau nginx:alpine tinggal di-pull, lalu kamu menambahkan lapisan aplikasi di atasnya.

Dockerfile pertama: aplikasi Node.js 24 LTS

Versi Node.js dengan status Active LTS pada 2026 adalah Node.js 24 (codename Krypton); versi 22 (Jod) sudah masuk fase maintenance. Untuk aplikasi baru, gunakan base image Node 24 LTS. Contoh Dockerfile minimal untuk aplikasi Express:

FROM node:24-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --omit=dev
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

Bangun image, lalu jalankan containernya:

docker build -t aplikasi-pertama .
docker run -d -p 3000:3000 --name app1 aplikasi-pertama
curl http://localhost:3000

Penjelasan singkat: -d menjalankan container di background, -p 3000:3000 memetakan port 3000 host ke port 3000 container, dan --name memberi nama agar mudah dikelola. Untuk melihat log dan menghentikan container: docker logs app1 dan docker stop app1.

docker-compose.yml: banyak service, satu perintah

Ketika aplikasi butuh lebih dari satu service (misalnya web + database), menulis perintah docker run berulang-ulang jadi rawan salah. Docker Compose menyelesaikannya dengan mendefinisikan semua service dalam satu file YAML:

services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:17
    environment:
      POSTGRES_PASSWORD: ganti-dengan-password
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

Jalankan semuanya dengan satu perintah:

docker compose up -d
docker compose ps
docker compose logs -f web

volumes memastikan data database tetap tersimpan meskipun container dihapus — tanpa volume, data hilang saat container di-rm.

Deploy ke VPS: Nginx sebagai reverse proxy

Container yang jalan di port 3000 tidak langsung bisa diakses publik dengan rapi — butuh reverse proxy. Nginx duduk di depan aplikasi, menerima request dari port 80/443 dan meneruskannya ke container. Ini memungkinkan satu VPS melayani banyak aplikasi, plus terminasi TLS dan cache file statis.

sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx

Buat konfigurasi site untuk domain kamu:

sudo tee /etc/nginx/sites-available/aplikasi-kamu >/dev/null <<'EOF'
server {
    listen 80;
    server_name contoh.domain.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF
sudo ln -s /etc/nginx/sites-available/aplikasi-kamu /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Jangan lupa arahkan DNS domain kamu ke IP VPS (record A) sebelum lanjut ke langkah HTTPS.

HTTPS gratis dengan Let's Encrypt + Certbot

HTTP polos membuat data (termasuk password login) dikirim tanpa enkripsi. Let's Encrypt menyediakan sertifikat SSL/TLS gratis yang dipercaya browser, dan Certbot mengurus penerbitan serta perpanjangan otomatisnya. Versi Certbot yang berlaku saat artikel ini ditulis adalah 5.6.0.

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d contoh.domain.com

Ikuti wizard-nya, pilih opsi redirect HTTP ke HTTPS, dan selesai — Nginx langsung dikonfigurasi otomatis oleh plugin --nginx. Sertifikat Let's Encrypt berlaku 90 hari dan diperpanjang otomatis lewat timer bawaan Certbot; uji dulu dengan:

sudo certbot renew --dry-run

Troubleshooting umum untuk pemula

  • Error "port is already allocated" — port host sudah dipakai proses lain. Ganti port host (-p 3001:3000) atau matikan proses yang menempatinya.
  • Image terlalu besar — pakai base image ringan seperti alpine, dan gunakan multi-stage build agar binary build tidak ikut tersalin ke image final.
  • Container langsung berhenti — aplikasi di dalamnya crash. Cek penyebabnya dengan docker logs nama-container.
  • Perubahan kode tidak muncul — image tidak otomatis ter-rebuild. Jalankan docker compose up -d --build setelah mengubah kode.
  • Container tidak bisa akses internet — pastikan container dijalankan dengan network default bridge dan DNS host berfungsi.

Ekspektasi vs Realita

EkspektasiRealita
Docker cuma untuk developer seniorKonsep dasarnya bisa dipelajari dalam satu sore — mulai dari hello-world lalu naik bertahap
Docker = VM yang lebih ringanContainer berbagi kernel host; isolasinya cukup untuk satu aplikasi, bukan pengganti VM untuk isolasi penuh
Sekali build, selamanya jalanImage perlu di-rebuild setiap kode berubah, dan container butuh volume agar data tidak hilang
HTTPS itu mahal dan ribetLet's Encrypt gratis dan Certbot mengotomatiskan semuanya — termasuk perpanjangan

Sumber & Validasi

Fakta dalam artikel ini diverifikasi dari sumber resmi pada 3 Agustus 2026:

Nomor versi (Docker 29.x, Node.js 24 LTS, Certbot 5.6.0) bisa berubah — cek halaman sumber untuk rilis terbaru.

Penutup

Mulai dari langkah paling kecil: install Docker, jalankan hello-world, buat Dockerfile untuk satu aplikasi sederhana, lalu naik ke docker-compose dan reverse proxy. Setiap tahap memberi pemahaman yang menumpuk — dan dalam beberapa hari, deploy aplikasi ke VPS bukan lagi hal yang menakutkan.

Panduan ini bagian dari seri persiapan server: setelah container jalan, jangan lupa hardening SSH server Ubuntu dan konfigurasi firewall UFW + Fail2ban. Untuk memahami cara kerja Docker lebih dalam, baca penjelasan Docker untuk developer. Kalau aplikasimu berupa situs statis, deploy static site dengan Nginx HTTP/3 adalah jalur yang lebih ringan. Jangan lupa pasang backup otomatis dengan restic sebelum data berharga masuk.

Belum punya VPS? Baca perbandingan RackNerd vs IDCloudHost untuk VPS murah dan panduan memilih VPS murah untuk developer — atau langsung cek penawaran RackNerd lewat link ini.

Langkah selanjutnya: amankan server yang baru kamu deploy dengan hardening SSH server Ubuntu, pasang backup VPS otomatis dengan restic supaya data tidak hilang, dan pertimbangkan VPS murah untuk developer Indonesia kalau mau pindah provider.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.