Membuat Web Server dengan Docker Compose

Membuat Web Server dengan Docker Compose

Membuat Web Server dengan Docker Compose

Pendahuluan

Web server modern biasanya dibangun dengan stack yang kompleks: aplikasi backend, database, cache, dan load balancer. Mengelola semua komponen ini secara manual memakan waktu dan rentan terhadap kesalahan. Docker Compose menyediakan cara deklaratif untuk mendefinisikan dan menjalankan multi‑container Docker, sehingga Anda dapat men-deploy web server lengkap hanya dengan satu perintah.

Prasyarat & Persiapan

Item Versi Minimum Catatan
Docker Engine 20.10+ Instalasi resmi: https://docs.docker.com/engine/install/
Docker Compose 2.20+ Dapat diinstal via docker compose (CLI plugin)
Git 2.30+ Untuk kloning repositori contoh
Editor teks VS Code / Sublime Opsional, namun disarankan
Akun Cloud Opsional Untuk deployment ke VPS (DigitalOcean, Linode, AWS)
Tools AI - Gunakan ChatGPT Plus (https://tools.jartekindo.com/tool/chatgpt-plus/) atau Claude Pro (https://tools.jartekindo.com/tool/claude-pro/) untuk membantu menulis skrip atau memecahkan masalah.

Catatan: Pastikan Docker dapat dijalankan tanpa sudo dengan menambahkan user Anda ke grup docker.

Langkah Demi Langkah

1. Buat Struktur Proyek

mkdir webserver-docker && cd webserver-docker
mkdir app

2. Tulis Aplikasi Sederhana

Buat file app/app.py (Python Flask) sebagai contoh:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, Docker Compose!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

3. Buat requirements.txt

Flask==2.2.5

4. Buat Dockerfile

# Dockerfile
FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "app.py"]

5. Buat docker-compose.yml

# docker-compose.yml
version: "3.9"

services:
  web:
    build: .
    ports:
      - "8080:5000"
    environment:
      - FLASK_ENV=development
    volumes:
      - .:/app
    restart: unless-stopped
    networks:
      - webnet

networks:
  webnet:
    driver: bridge

6. Jalankan

docker compose up --build

Buka http://localhost:8080 → Anda akan melihat pesan “Hello, Docker Compose!”.

7. Deploy ke VPS (Opsional)

  1. Push image ke Docker Hub
    bash docker tag webserver-docker:latest <username>/webserver-docker:latest docker push <username>/webserver-docker:latest
  2. SSH ke VPS
    bash ssh root@<ip-vps>
  3. Install Docker & Compose
    bash curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh sudo apt-get install docker-compose-plugin
  4. Pull & Run
    bash docker compose pull docker compose up -d

Tips Optimasi & Keamanan

Praktik Penjelasan
Gunakan User Non‑Root Tambahkan RUN adduser --disabled-password appuser && chown -R appuser /app di Dockerfile dan jalankan USER appuser.
Jangan expose port publik Jika hanya internal, gunakan expose alih‑alih ports.
Gunakan .env Simpan variabel sensitif di file .env dan referensikan di docker-compose.yml.
Healthcheck Tambahkan healthcheck di service web untuk memastikan container sehat.
Limit resource Tetapkan mem_limit dan cpus untuk mencegah over‑consumption.
Network Isolation Buat network custom (webnet) agar hanya container yang perlu saling berkomunikasi.
Update Image Jadwalkan docker compose pull secara berkala dan rebuild.

Tools AI: Gunakan Notion AI (https://tools.jartekindo.com/tool/notion-ai/) untuk menulis dokumentasi teknis atau Jasper (https://tools.jartekindo.com/tool/jasper-ai/) untuk membuat konten promosi.

Troubleshooting Error Umum

Error Penyebab Solusi
Cannot connect to the Docker daemon Docker tidak berjalan atau user tidak memiliki hak akses Jalankan sudo systemctl start docker dan tambahkan user ke grup docker.
port 8080 is already in use Port sudah dipakai oleh aplikasi lain Gunakan port lain atau hentikan aplikasi yang memblokir.
service web not found docker-compose.yml tidak terdeteksi atau typo Pastikan file berada di root proyek dan jalankan docker compose up.
Connection refused Container belum boot atau healthcheck gagal Periksa log dengan docker compose logs web.
image not found Tag tidak ada di registry Pastikan push ke registry berhasil dan gunakan tag yang tepat.

Kesimpulan

Docker Compose memudahkan pembuatan, pengujian, dan deployment web server multi‑container dengan deklaratif. Dengan mengikuti panduan ini, Anda dapat men‑deploy aplikasi Flask (atau stack lain) secara konsisten di lingkungan lokal maupun cloud. Terapkan praktik keamanan dan optimasi yang disarankan untuk menjaga produksi tetap stabil dan aman. Selamat mencoba!

🏷️ Topik Terkait: