Panduan Lengkap Docker Website Deployment untuk VPS dan Hosting

Menghadapi Tantangan dalam Deployment Website

Dalam dunia pengembangan perangkat lunak dan operasi, salah satu tantangan terbesar yang sering dihadapi adalah bagaimana melakukan deployment aplikasi web dengan efisien dan tanpa downtime. Bayangkan Anda sedang menjalankan website kritikal untuk bisnis Anda, dan server mulai mengalami beban tinggi. Pengguna melaporkan waktu loading yang lambat, dan bahkan ada beberapa yang mengalami downtime. Ini adalah skenario yang sering terjadi di lingkungan produksi dan memerlukan solusi yang handal.

Docker hadir sebagai solusi yang memungkinkan kita untuk mengisolasi aplikasi dengan semua dependensinya menjadi satu paket yang disebut kontainer. Dengan Docker, kita bisa melakukan deployment yang lebih cepat dan lebih aman. Di artikel ini, kita akan membahas bagaimana cara melakukan deployment website menggunakan Docker, mulai dari setup lingkungan hingga optimasi dan scaling.

Persiapan Lingkungan Docker

Sebelum kita mulai, pastikan Anda telah menginstal Docker di server Anda. Di bawah ini adalah langkah-langkah untuk menginstal Docker di sistem berbasis Linux seperti Ubuntu.

Instalasi Docker di Ubuntu

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce

Perintah di atas melakukan hal-hal berikut:

  • sudo apt-get update: Memperbarui daftar paket yang tersedia.
  • sudo apt-get install apt-transport-https ca-certificates curl software-properties-common: Menginstal paket yang dibutuhkan untuk menambahkan repositori baru.
  • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -: Menambahkan kunci GPG untuk repositori Docker.
  • sudo add-apt-repository...: Menambahkan repositori Docker ke dalam daftar sumber paket.
  • sudo apt-get install docker-ce: Menginstal Docker Community Edition.

Setelah instalasi, pastikan Docker berjalan dengan perintah berikut:

sudo systemctl start docker
sudo systemctl enable docker

Membuat Dockerfile untuk Website Node.js

Setelah Docker terinstal, langkah berikutnya adalah membuat Dockerfile untuk aplikasi Node.js kita. Dockerfile adalah file teks yang berisi semua instruksi untuk membangun image Docker.

Contoh Dockerfile

FROM node:14

# Set working directory
WORKDIR /usr/src/app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy source files
COPY . .

# Expose the application port
EXPOSE 3000

# Run the application
CMD ["node", "app.js"]

Dalam Dockerfile di atas:

  • FROM node:14: Menggunakan image Node.js versi 14 sebagai basis.
  • WORKDIR /usr/src/app: Menentukan direktori kerja di dalam kontainer.
  • COPY package*.json ./: Menyalin file package.json dan package-lock.json ke dalam kontainer.
  • RUN npm install: Menginstal semua dependensi yang terdaftar di package.json.
  • COPY . .: Menyalin semua file sumber aplikasi ke dalam kontainer.
  • EXPOSE 3000: Memberitahu Docker bahwa kontainer mendengarkan pada port 3000.
  • CMD ["node", "app.js"]: Menjalankan aplikasi Node.js.

Membangun dan Menjalankan Kontainer

Setelah kita memiliki Dockerfile, langkah selanjutnya adalah membangun image dan menjalankan kontainer. Jalankan perintah berikut di terminal Anda di direktori yang sama dengan Dockerfile:

docker build -t my-node-app .

Perintah ini akan membangun image dengan nama my-node-app. Tanda titik di akhir perintah menunjukkan bahwa Docker harus mencari Dockerfile di direktori saat ini.

Menjalankan Kontainer

docker run -d -p 3000:3000 --name node-app my-node-app

Dalam perintah ini:

  • -d: Menjalankan kontainer di latar belakang (detached mode).
  • -p 3000:3000: Memetakan port 3000 di host ke port 3000 di dalam kontainer.
  • --name node-app: Menetapkan nama untuk kontainer yang sedang dijalankan.
  • my-node-app: Menunjukkan nama image yang akan dijalankan.

Menambahkan Database MySQL dengan Docker Compose

Dalam banyak kasus, aplikasi web memerlukan database untuk menyimpan data. Docker Compose memungkinkan kita untuk mendefinisikan dan menjalankan beberapa kontainer sebagai satu aplikasi. Mari kita buat file docker-compose.yml.

Contoh docker-compose.yml

version: '3'
services:
  app:
    build: .
    ports:
      - '3000:3000'
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: my_database
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

Dalam docker-compose.yml ini:

  • version: '3': Menentukan versi Docker Compose yang digunakan.
  • services:: Menentukan layanan yang dijalankan.
  • app:: Layanan untuk aplikasi Node.js.
  • db:: Layanan untuk database MySQL.
  • environment:: Menetapkan variabel lingkungan untuk konfigurasi MySQL.
  • volumes:: Menyimpan data MySQL secara persisten.

Untuk menjalankan semua layanan yang didefinisikan, gunakan perintah:

docker-compose up -d

Optimasi dan Monitoring Kontainer

Setelah aplikasi dan database berjalan, penting untuk memantau performa kontainer. Anda bisa menggunakan tools seperti Prometheus untuk monitoring dan Grafana untuk visualisasi data performa. Selain itu, pastikan Anda memperhatikan penggunaan sumber daya dengan perintah berikut:

docker stats

Perintah ini akan menunjukkan penggunaan CPU dan memori dari semua kontainer yang berjalan.

Scaling Aplikasi dengan Docker

Salah satu keunggulan Docker adalah kemampuannya untuk melakukan scaling dengan mudah. Misalnya, jika Anda memerlukan lebih banyak instance dari aplikasi Node.js, Anda bisa menggunakan perintah:

docker-compose up --scale app=3 -d

Perintah ini akan menjalankan 3 instance dari aplikasi Anda, membantu menangani lebih banyak permintaan pengguna.

Keamanan Kontainer

Saat menggunakan Docker, keamanan adalah hal yang sangat penting. Pastikan Anda tidak menjalankan kontainer dengan hak akses root jika tidak diperlukan. Gunakan user namespace untuk memberikan isolasi tambahan. Anda juga perlu memindai image Docker Anda untuk kerentanan dengan menggunakan alat seperti Clair atau Trivy.

Backup Data Kontainer

Jangan lupa untuk melakukan backup data dari kontainer yang menyimpan informasi penting seperti database. Untuk melakukan backup database MySQL, Anda bisa menggunakan perintah:

docker exec db-container-name mysqldump -u root -p my_database > backup.sql

Di mana db-container-name adalah nama kontainer MySQL Anda. Perintah ini akan mengekspor database ke file backup.sql.

Kesimpulan

Dengan mengikuti langkah-langkah di atas, Anda dapat melakukan deployment website menggunakan Docker dengan lebih efisien dan aman. Dari instalasi Docker, pembuatan Dockerfile, hingga pengaturan database MySQL dan monitoring, semua aspek penting sudah dibahas untuk membantu Anda mengelola lingkungan produksi dengan lebih baik. Ingatlah untuk selalu memperhatikan aspek keamanan dan melakukan backup data untuk menjaga integritas aplikasi Anda.