Tutorial Setup Docker Compose MySQL Node JS Redis VPS: Panduan Deployment Skalabel

Mengelola aplikasi web modern di lingkungan produksi seringkali menjadi tantangan teknis yang rumit, terutama ketika Anda harus memastikan sinkronisasi antara berbagai layanan seperti database, cache, dan runtime aplikasi. Dalam artikel ini, kita akan membahas secara mendalam mengenai tutorial setup docker compose mysql node js redis vps untuk membantu Anda membangun infrastruktur yang tangguh, efisien, dan mudah dikelola.

Banyak pengembang terjebak dalam masalah “it works on my machine” (berjalan di laptop saya tapi tidak di server). Dengan menggunakan Docker dan Docker Compose, Anda dapat mengemas seluruh lingkungan aplikasi ke dalam kontainer yang konsisten. Mari kita mulai perjalanan teknis ini untuk mengoptimalkan performa aplikasi Anda di Virtual Private Server (VPS).

Mengapa Menggunakan Docker Compose untuk Stack Node.js?

Sebelum masuk ke teknis tutorial setup docker compose mysql node js redis vps, penting untuk memahami nilai strategis dari teknologi ini. Berdasarkan data industri, penggunaan kontainerisasi dapat meningkatkan kecepatan deployment hingga 3 kali lipat dibandingkan metode tradisional.

Docker Compose memungkinkan Anda mendefinisikan seluruh stack aplikasi dalam satu file YAML. Anda tidak perlu lagi menginstal MySQL atau Redis secara manual di OS VPS Anda, yang seringkali mengotori sistem dengan dependensi yang tidak perlu. Dengan Docker, setiap layanan berjalan di lingkungan terisolasi namun tetap dapat berkomunikasi melalui jaringan internal virtual yang aman.

Keuntungan utama mencakup portabilitas tinggi, skalabilitas yang mudah, dan manajemen resource yang lebih baik. Jika Anda ingin pindah provider VPS, Anda cukup memindahkan file konfigurasi dan data volume Anda, dan aplikasi akan berjalan identik di server baru.

Persiapan Awal: Memilih dan Mengonfigurasi VPS

Untuk menjalankan stack Node.js, MySQL, dan Redis, Anda memerlukan VPS dengan spesifikasi minimal tertentu. Meskipun Node.js cukup ringan, MySQL dan Redis memerlukan RAM yang cukup untuk caching dan indexing.

Rekomendasi Spesifikasi Minimum:

  • CPU: 1 Core (2 Core lebih baik untuk traffic tinggi)
  • RAM: 2 GB (Redis sangat bergantung pada RAM)
  • Storage: 20 GB SSD
  • OS: Ubuntu 22.04 LTS atau Ubuntu 24.04 LTS

Pastikan Anda sudah memiliki akses SSH ke VPS Anda. Gunakan perintah ssh root@ip-address-vps untuk masuk ke terminal server Anda. Selalu lakukan update paket sistem sebelum memulai dengan menjalankan sudo apt update && sudo apt upgrade -y.

Langkah 1: Instalasi Docker dan Docker Compose

Langkah pertama dalam tutorial setup docker compose mysql node js redis vps adalah memasang mesin Docker di server Anda. Ikuti perintah berikut untuk instalasi pada Ubuntu:

Catatan: Pastikan Anda menjalankan perintah ini dengan hak akses sudo.

# Install dependensi awal
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

# Tambahkan GPG key resmi Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Tambahkan repository Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y

Setelah Docker terinstal, cek versinya dengan docker --version. Selanjutnya, instal Docker Compose (plugin modern):

sudo apt install docker-compose-plugin -y
docker compose version

Langkah 2: Mengatur Struktur Direktori Proyek

Struktur direktori yang rapi adalah kunci dari manajemen kontainer yang sukses. Kita akan memisahkan kode aplikasi dari konfigurasi database.

my-awesome-app/
├── app/
│   ├── Dockerfile
│   ├── index.js
│   └── package.json
├── mysql-data/ (akan dibuat otomatis)
├── redis-data/ (akan dibuat otomatis)
├── .env
└── docker-compose.yml

Buat folder utama dengan perintah mkdir my-awesome-app && cd my-awesome-app. Kemudian buat subfolder app untuk kode Node.js Anda.

Langkah 3: Membuat Dockerfile untuk Node.js

Dockerfile adalah instruksi untuk membangun image aplikasi Anda. Di dalam folder app/, buat file bernama Dockerfile:

# Gunakan image Node.js versi LTS
FROM node:20-alpine

# Set direktori kerja
WORKDIR /usr/src/app

# Copy package file dan install dependensi
COPY package*.json ./
RUN npm install --production

# Copy sisa kode aplikasi
COPY . .

# Ekspos port aplikasi
EXPOSE 3000

# Jalankan aplikasi
CMD ["node", "index.js"]

Penggunaan node:20-alpine sangat direkomendasikan karena ukurannya yang sangat kecil (kurang dari 50MB), yang akan menghemat ruang disk di VPS Anda dan mempercepat proses build.

Langkah 4: Konfigurasi MySQL dan Redis

Dalam tutorial setup docker compose mysql node js redis vps ini, kita tidak perlu membuat Dockerfile khusus untuk MySQL atau Redis. Kita akan menggunakan image resmi dari Docker Hub langsung di dalam file Compose.

Namun, sangat penting untuk menangani persistensi data. Tanpa volume, data database Anda akan hilang setiap kali kontainer dihentikan. Kita akan mendefinisikan volume di langkah berikutnya agar data tetap aman di dalam storage VPS.

Selain itu, buatlah file .env di root direktori untuk menyimpan informasi sensitif:

MYSQL_ROOT_PASSWORD=password_super_rahasia
MYSQL_DATABASE=mydb
MYSQL_USER=userapp
MYSQL_PASSWORD=userpassword
REDIS_PASSWORD=redispassword
NODE_ENV=production

Langkah 5: Menyusun File docker-compose.yml

Ini adalah inti dari tutorial ini. File ini akan menghubungkan semua komponen. Buat file docker-compose.yml di direktori utama proyek:

version: '3.8'

services:
  # Service Node.js
  app:
    build: ./app
    container_name: nodejs_app
    restart: always
    ports:
      - "3000:3000"
    environment:
      - DB_HOST=db
      - DB_USER=${MYSQL_USER}
      - DB_PASSWORD=${MYSQL_PASSWORD}
      - DB_NAME=${MYSQL_DATABASE}
      - REDIS_HOST=redis
    depends_on:
      - db
      - redis

  # Service MySQL
  db:
    image: mysql:8.0
    container_name: mysql_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql

  # Service Redis
  redis:
    image: redis:7-alpine
    container_name: redis_cache
    restart: always
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data

volumes:
  mysql_data:
  redis_data:

Penjelasan Singkat: depends_on memastikan MySQL dan Redis berjalan sebelum Node.js memulai. volumes memastikan data Anda tetap ada meskipun kontainer dihapus.

Langkah 6: Menjalankan Deployment di VPS

Setelah semua file siap, saatnya melakukan deployment. Pastikan Anda berada di direktori tempat file docker-compose.yml berada, lalu jalankan:

docker compose up -d --build

Flag -d berarti “detached mode”, yang menjalankan kontainer di latar belakang. Perintah --build memastikan Docker membangun ulang image jika ada perubahan pada kode Node.js Anda.

Untuk memverifikasi bahwa semuanya berjalan lancar, jalankan perintah docker compose ps. Anda seharusnya melihat ketiga layanan (app, db, redis) dengan status “Up” atau “Running”.

Tips Optimasi Keamanan dan Performa

Menjalankan tutorial setup docker compose mysql node js redis vps hanyalah langkah awal. Untuk lingkungan produksi yang nyata, pertimbangkan hal berikut:

  1. Gunakan Reverse Proxy: Jangan ekspos port 3000 langsung ke internet. Gunakan Nginx sebagai reverse proxy untuk menangani SSL (HTTPS) menggunakan Let’s Encrypt.
  2. UFW Firewall: Aktifkan firewall di VPS Anda. Hanya buka port 80, 443, dan 22 (SSH). Port 3306 (MySQL) dan 6379 (Redis) harus tetap tertutup dari akses luar.
  3. Resource Limits: Batasi penggunaan CPU dan RAM untuk setiap kontainer di file Compose agar satu layanan tidak menghabiskan seluruh resource VPS.
  4. Logging: Gunakan driver logging Docker yang efisien untuk mencegah file log memenuhi kapasitas disk server.

Troubleshooting Masalah Umum

Seringkali terjadi kendala saat pertama kali melakukan setup. Berikut adalah beberapa solusi untuk masalah yang sering muncul:

1. Kontainer Node.js Error Saat Menghubungkan ke DB

Biasanya terjadi karena MySQL belum siap menerima koneksi meskipun kontainer sudah berjalan. Gunakan script “wait-for-it” atau tambahkan logika retry di aplikasi Node.js Anda untuk mencoba koneksi ulang setiap 5 detik.

2. Masalah Izin (Permission Denied)

Jika Anda mendapatkan error saat Docker mencoba menulis ke volume, pastikan user yang menjalankan Docker memiliki izin yang cukup atau jalankan dengan sudo jika perlu (meskipun disarankan menambahkan user ke grup docker).

3. RAM VPS Habis

Jika MySQL tiba-tiba mati (killed), kemungkinan besar VPS kehabisan RAM. Anda bisa menambahkan Swap Space di Ubuntu untuk memberikan ruang napas tambahan bagi sistem.

Kesimpulan dan Langkah Selanjutnya

Selamat! Anda telah berhasil mengikuti tutorial setup docker compose mysql node js redis vps. Dengan infrastruktur ini, aplikasi Node.js Anda sekarang didukung oleh database relasional MySQL yang stabil dan sistem caching Redis yang super cepat, semuanya dikelola secara rapi di dalam kontainer Docker.

Takeaways Utama:

  • Docker Compose menyederhanakan orkestrasi multi-kontainer.
  • Persistensi data melalui volume sangat krusial untuk database.
  • Keamanan harus menjadi prioritas utama dengan menutup port yang tidak perlu.

Langkah selanjutnya yang bisa Anda ambil adalah mengintegrasikan CI/CD (seperti GitHub Actions) agar setiap kali Anda melakukan push kode, VPS Anda secara otomatis melakukan build dan update kontainer. Teruslah bereksplorasi dan selamat coding!

Tinggalkan komentar