Jakhoster.blog

Edukasi 26 May 2026

Membangun Arsitektur High-Availability dengan Laravel Docker untuk Lingkungan Produksi Multi-Container

Advertisement

Membangun Arsitektur High-Availability dengan Laravel Docker

Di era digital saat ini, kebutuhan akan aplikasi yang selalu tersedia dan responsif sangatlah penting. Saya ingin berbagi pengalaman nyata tentang bagaimana kita membangun arsitektur high-availability untuk aplikasi Laravel menggunakan Docker dalam lingkungan multi-container. Skenario ini sangat relevan bagi perusahaan yang menghadapi lonjakan traffic yang tak terduga, dan kebutuhan akan penanganan downtime yang minimal.

Pentingnya Arsitektur High-Availability

Arsitektur high-availability (HA) dirancang untuk memastikan bahwa sistem tetap berjalan meskipun ada kegagalan pada sebagian komponen. Dalam konteks Laravel, ini mencakup berbagai elemen, seperti server aplikasi, database, dan layanan cache. Dengan memanfaatkan Docker, kita dapat dengan mudah mengelola dan mengisolasi tiap elemen dalam kontainer terpisah, sehingga mempermudah deployment dan pengelolaan.

Prasyarat

  • Docker dan Docker Compose terinstal di server Anda.
  • Server VPS dengan spesifikasi yang memadai, misalnya 4GB RAM dan 2 vCPU, untuk menangani beban aplikasi.
  • Keahlian dasar dalam menggunakan terminal Linux dan pengetahuan tentang Laravel.
  • Database MySQL dan Redis untuk caching.

Opsi Pengaturan

Untuk melanjutkan, kita akan mengatur lingkungan produksi dengan beberapa kontainer:

Advertisement
  • Web Server: Nginx sebagai reverse proxy.
  • Application Server: Laravel dalam kontainer PHP-FPM.
  • Database: MySQL untuk penyimpanan data.
  • Cache: Redis untuk mempercepat performa.

Langkah 1: Membangun Dockerfile untuk Laravel

Untuk menjalankan aplikasi Laravel dalam kontainer, kita perlu membuat Dockerfile.

FROM php:8.0-fpm

# Set working directory
WORKDIR /var/www

# Install dependencies
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev libzip-dev && \
    docker-php-ext-configure gd --with-freetype --with-jpeg && \
    docker-php-ext-install gd zip && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# Copy existing application directory permissions
COPY --chown=www-data:www-data . /var/www

# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Install application dependencies
RUN composer install --no-dev --optimize-autoloader

Pada Dockerfile di atas:

  • FROM php:8.0-fpm mendefinisikan image dasar PHP-FPM versi 8.0.
  • WORKDIR /var/www menetapkan direktori kerja dalam kontainer.
  • Perintah RUN digunakan untuk memperbarui apt-get dan memasang beberapa dependensi yang diperlukan untuk aplikasi Laravel.
  • Salin aplikasi Laravel ke dalam kontainer dan install Composer untuk mengelola paket.

Langkah 2: Konfigurasi Docker Compose

Docker Compose memungkinkan kita untuk mendefinisikan dan menjalankan multi-container Docker apps.

version: '3.8'

services:
  app:
    build:
      context: .
    volumes:
      - .:/var/www
    networks:
      - app-network

  web:
    image: nginx:alpine
    ports:
      - '80:80'
    volumes:
      - ./nginx:/etc/nginx/conf.d
    networks:
      - app-network

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: laravel_db
      MYSQL_USER: user
      MYSQL_PASSWORD: userpassword
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - app-network

  redis:
    image: redis:alpine
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  db_data:

Dalam docker-compose.yml ini:

  • Service app di-build dari Dockerfile yang sudah kita buat.
  • Service web menggunakan Nginx dengan port 80 dipetakan ke host.
  • Service db menggunakan MySQL, di-set dengan variabel lingkungan untuk password dan nama database.
  • Service redis digunakan untuk caching.
  • Kita juga membuat app-network untuk komunikasi internal antar kontainer.

Langkah 3: Nginx Configuration

Selanjutnya, kita perlu mengonfigurasi Nginx untuk berfungsi sebagai reverse proxy. Buatlah file konfigurasi di ./nginx/default.conf:

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        try_files $uri /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Pada konfigurasi ini:

  • Kita mendengarkan di port 80 dan mengarahkan permintaan ke service Laravel.
  • Perintah try_files $uri /index.php?$query_string; membantu untuk menangani permintaan yang tidak sesuai dengan file statis.
  • FastCGI configuration memfasilitasi komunikasi antara Nginx dan aplikasi Laravel yang berjalan di kontainer PHP-FPM.

Langkah 4: Menjalankan Kontainer

Setelah semua konfigurasi selesai, jalankan perintah berikut untuk memulai kontainer:

docker-compose up -d

Flag -d menjalankan kontainer di background. Setelah ini, Anda dapat memeriksa status kontainer dengan:

docker ps

Ini akan menampilkan semua kontainer yang aktif. Pastikan tidak ada kesalahan yang muncul.

Langkah 5: Mengatur Monitoring dan Maintenance

Untuk memastikan aplikasi Anda berjalan optimal, monitoring adalah langkah penting. Anda bisa menggunakan tools seperti Prometheus dan Grafana untuk monitoring performa. Untuk mengintegrasikannya, Anda bisa menambahkan service dalam docker-compose.yml:

  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus:/etc/prometheus
    ports:
      - '9090:9090'

Setelah mengatur Prometheus, Anda perlu mengonfigurasinya untuk menampilkan metrik dari aplikasi Laravel dan kontainer Docker lainnya.

Common Mistakes dan Penanganannya

Saat menerapkan arsitektur ini, Anda mungkin menghadapi beberapa kesalahan umum. Salah satunya adalah masalah dengan pengaturan docker-compose.yml. Pastikan Anda memeriksa indentasi YAML dengan benar, karena kesalahan ini dapat menyebabkan kegagalan kontainer untuk dijalankan. Selain itu, pastikan service app dapat terhubung ke service db dan redis.

Optimasi dan Best Practices

  • Backup Data: Selalu buat backup database secara terjadwal untuk menghindari kehilangan data.
  • Scaling: Manfaatkan Docker Swarm atau Kubernetes untuk melakukan scaling otomatis jika traffic meningkat.
  • Security: Selalu perbarui image Docker dan gunakan prinsip dasar keamanan seperti least privilege.
  • Logging: Implementasikan logging untuk memantau aktivitas dan performa aplikasi.

Dengan mengikuti langkah-langkah dan praktik terbaik ini, Anda dapat membangun arsitektur aplikasi Laravel yang handal dan siap menghadapi tantangan beban tinggi di lingkungan produksi.

Rekomendasi Sponsor