Menerapkan Aplikasi PHP-Laravel di Kubernetes Secara Efektif

Laravel adalah framework PHP open-source untuk mengembangkan aplikasi web. Framework ini mengikuti pola arsitektur model-view-controller (MVC). Laravel menyediakan sintaks yang ekspresif dan serangkaian alat serta fitur yang tangguh yang dirancang untuk membuat pengembangan lebih cepat dan mudah sekaligus mengurangi tugas-tugas umum yang digunakan dalam banyak proyek web.

Saat ini di mana kecepatan dan keandalan harus berjalan beriringan, lingkungan produksi membutuhkan kemampuan yang tangguh, termasuk penanganan kegagalan otomatis, mekanisme perbaikan mandiri, dan penskalaan dinamis untuk memenuhi beban kerja yang bervariasi. Fitur-fitur ini sangat penting untuk mempertahankan aplikasi yang andal dan berkinerja tinggi dalam skenario dunia nyata.

Mengemas aplikasi PHP-Laravel lama Anda ke dalam kontainer membuatnya portabel dan tidak bergantung pada infrastruktur. Kontainer mengemas aplikasi, dependensinya, dan lingkungan runtime-nya ke dalam unit standar. Ketika dikombinasikan dengan kemampuan orkestrasi Kubernetes, pendekatan kontainerisasi ini memungkinkan penyebaran, penskalaan, dan pengelolaan aplikasi Laravel yang efisien di infrastruktur cloud modern.

Melalui perjalanan modernisasi aplikasi PHP-Laravel Anda untuk penerapan Kubernetes. Baik Anda menjalankan layanan API dengan trafik tinggi, arsitektur microservices, atau aplikasi web tradisional, Anda akan mempelajari cara memanfaatkan Kubernetes untuk memastikan aplikasi Laravel Anda dapat diskalakan, andal, dan mudah dipelihara.

Mengeksplorasi dua metode untuk menyebarkan aplikasi Express.js:
– Menggunakan Devtron untuk Penyebaran Otomatis
– Menggunakan Kubernetes Secara Manual

Menerapkan Aplikasi PHP-Laravel di Kubernetes

Menerapkan aplikasi PHP-Laravel ke Kubernetes melibatkan beberapa langkah. Mari kita tinjau terlebih dahulu keseluruhan prosesnya, kemudian kita bahas berbagai langkah tersebut secara mendalam.

Langkah Implementasi:
– Menulis dan membangun aplikasi PHP-Laravel.
– Mengontainerisasi Aplikasi PHP-Laravel
– Unggah kontainer ke Container Registry seperti DockerHub.
– Buat Manifest YAML yang diperlukan untuk Sumber Daya Kubernetes.
– Terapkan manifes YAML ke klaster Kubernetes.

Prasyarat
Sebelum melanjutkan proses penyebaran, pastikan Anda telah memenuhi prasyarat berikut.
– Aplikasi PHP-Laravel
– Buruh pelabuhan
– Kubectl
– Klaster Kubernetes seperti ini

Metode 1. Menerapkan Aplikasi PHP-Laravel Menggunakan Devtron

Devtron adalah platform manajemen Kubernetes yang menyederhanakan seluruh siklus hidup DevOps. Platform ini mengotomatiskan pembuatan Dockerfile dan manifest Kubernetes, membangun aplikasi, dan mengelola penyebaran melalui antarmuka pengguna yang intuitif.

1. Buat Aplikasi Devtron dan Tambahkan Repositori Git
– Dari halaman utama Devtron, buat aplikasi Devtron baru.
– Tambahkan repositori Git yang berisi kode aplikasi PHP-Laravel.
devtron-1

Baca Juga: 
Menggunakan Headless WordPress dengan Next.js dan Vercel

2. Konfigurasi Build
– Devtron akan mengambil kode dari repositori dan membangun kontainer Docker.
– Anda perlu mengkonfigurasi OCI Container Registry.
– Pilih dari tiga opsi pembuatan:
— Gunakan Dockerfile yang sudah ada.
— Buat Dockerfile (menggunakan templat Devtron untuk aplikasi Go)
— Gunakan Buildpack
devtron-2

3. Konfigurasi Penyebaran
– Devtron menyediakan templat YAML yang telah dikonfigurasi sebelumnya untuk penyebaran Kubernetes.
– Konfigurasikan ingress, autoscaler, dan pengaturan deployment lainnya.
devtron-3

4. Membuat Pipeline CI/CD
– Pipeline CI akan membangun aplikasi dan mengirimkan image ke registry.
– Pipeline CD akan memicu deployment di cluster Kubernetes.
– Konfigurasikan Tahap Pra dan Pasca (misalnya, pemindaian keamanan, pengujian unit).
devtron-4

5. Memicu Pipeline Build dan Deploy
– Pilih cabang Git dan picu tahap build.
– Setelah proses build selesai, picu tahap deployment.
– Devtron akan menyebarkan aplikasi dan menampilkan:
— Status penyebaran
— Kesehatan aplikasi
— Detail sumber daya Kubernetes
— Kerentanan keamanan
— Opsi pengembalian (rollback) jika terjadi kesalahan
devtron-5
Setelah aplikasi di-deploy, Anda akan dapat melihat kesehatan aplikasi, status deployment, kerentanan keamanan, sumber daya Kubernetes aplikasi, dan banyak lagi.
devtron-5.1

Metode 2. Menerapkan Aplikasi PHP-Laravel Secara Manual Menggunakan Kubernetes

1. Buat Dockerfile (Debian 13, composer:2.8.8, nginx-extras, php8.4-fpm dan php-laravel)
Dockerfile adalah serangkaian instruksi untuk membangun citra kontainer. Berikut adalah Dockerfile untuk mengkontainerisasi aplikasi Express.js:

# Stage 1: Build dependencies & install Composer
FROM debian:13 AS build

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive \
    COMPOSER_ALLOW_SUPERUSER=1 \
    COMPOSER_HOME=/composer

# Install system dependencies
RUN apt-get update && apt-get install -y \
    curl \
    unzip \
    git \
    ca-certificates \
    php8.4-cli \
    php8.4-common \
    php8.4-mbstring \
    php8.4-xml \
    php8.4-bcmath \
    php8.4-curl \
    php8.4-zip \
    && rm -rf /var/lib/apt/lists/*

# Install Composer 2.8.8
RUN curl -sS https://getcomposer.org/download/2.8.8/composer.phar -o /usr/local/bin/composer \
    && chmod +x /usr/local/bin/composer

# Copy Laravel project files
WORKDIR /var/www/html
COPY . .

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

# Stage 2: Production image with PHP-FPM & Nginx
FROM debian:13

# Install PHP-FPM, Nginx Extras, and required extensions
RUN apt-get update && apt-get install -y \
    nginx-extras \
    php8.4-fpm \
    php8.4-mysql \
    php8.4-Aapcu \
    php8.4-exif \
    php8.4-pcntl \    
    php8.4-bcmath \
    php8.4-bz2 \
    php8.4-cgi \
    php8.4-cli \
    php8.4-common \
    php8.4-bcmath \
    php8.4-gd \
    php8.4-igbinary \
    php8.4-imagick \
    php8.4-imap \
    php8.4-intl \
    php8.4-ssh2 \
    php8.4-ldap \
    php8.4-mbstring \
    php8.4-memcache \
    php8.4-mysql \
    php8.4-opcache \
    php8.4-pgsql \
    php8.4-redis \
    php8.4-soap \
    php8.4-xml \
    php8.4-xmlrpc \
    php8.4-zip \
    php8.4-curl \
    supervisor \
    && rm -rf /var/lib/apt/lists/*

# Copy application from build stage
WORKDIR /var/www/saksenengku
COPY --from=build /var/www/saksenengku /var/www/saksenengku

# Configure Nginx
COPY ./docker/nginx.conf /etc/nginx/nginx.conf

# Configure PHP-FPM
RUN sed -i 's|listen = /run/php/php8.4-fpm.sock|listen = 9000|' /etc/php/8.4/fpm/pool.d/www.conf

# Configure Supervisor to run both PHP-FPM and Nginx
COPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# Set permissions for Laravel storage & bootstrap cache
RUN chown -R www-data:www-data /var/www/saksenengku/storage /var/www/saksenengku/bootstrap/cache

EXPOSE 80
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

docker/nginx.conf

user www-data;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 100000;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;

events {
worker_connections 4000;
  use epoll;
multi_accept on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 80;
        server_name _;
        root /var/www/saksenengku/public;

        index index.php index.html;

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

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

2. Build dan Push images Docker
– Jalankan perintah berikut untuk membuat image Docker:

docker build -t saksenengku/php-laravel-app:v1

– Push image ke DockerHub:

docker push saksenengku/php-laravel-app

3. Membuat Deployment Kubernetes dan Manifest Layanan
– Buat file deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: laravel-kubernetes-saksenengku
spec:
  selector:
    matchLabels:
      run: laravel-kubernetes-saksenengku
  template:
    metadata:
      labels:
        run: laravel-kubernetes-saksenengku
    spec:
      containers:
        - name: saksenengku
          image: bhushannemade/laravel-kubernetes-saksenengku
          ports:
            - containerPort: 80
          env:
            - name: APP_KEY
              value: base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY=

– Buat file service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: laravel-kubernetes-saksenengku
spec:
  type: NodePort
  selector:
    run: laravel-kubernetes-saksenengku
  ports:
    - port: 80
      targetPort: 80
      nodePort: 3000

4. Lakukan deployment ke Kubernetes
Jalankan perintah berikut untuk menerapkan manifest:

kubectl apply -f deployment.yaml service.yaml

Aplikasi Express.js Anda kini telah berhasil di-deploy ke Kubernetes

Baca Juga: 
Cara Memasang Rust dan Cargo di Debian/Ubuntu dan Distribusi Linux Lainnya

Tantangan dan Solusi Umum

1. Manajemen Ukuran image Kontainer
— Gunakan Multi-Stage Build untuk memisahkan lingkungan build dan runtime.
— Gunakan image dasar yang ringan seperti Alpine atau Distroless untuk mengurangi ukuran.

2. Manajemen Sumber Daya
— Tetapkan Batas Memori dan CPU untuk menghindari penggunaan berlebihan.
— Terapkan Autoscaling (HPA) untuk menangani beban kerja yang bervariasi.

3. Strategi Deployment
— Pembaruan bertahap untuk memastikan penerapan tanpa waktu henti.
— Penanganan Penghentian Sistem yang Baik untuk menghindari terputusnya lalu lintas data yang sedang berjalan.

Setelah membahas dua pendekatan untuk menerapkan aplikasi PHP-Laravel di Kubernetes:
– Deployment Kubernetes secara manual menggunakan Docker dan manifest YAML.
– Deployment Devtron otomatis dengan pipeline CI/CD bawaan dan konfigurasi tingkat lanjut.

Menggunakan Devtron menyederhanakan Deployment Kubernetes, mengurangi upaya manual, dan meningkatkan efisiensi.






Reporter: Agus Rambe Wongkuku

Laravel adalah framework PHP open-source untuk mengembangkan aplikasi web. Framework ini mengikuti pola arsitektur model-view-controller (MVC). Laravel menyediakan sintaks yang ekspresif dan serangkaian alat serta fitur yang tangguh yang dirancang untuk membuat pengembangan lebih cepat dan mudah sekaligus mengurangi tugas-tugas umum yang digunakan dalam banyak proyek web.

Saat ini di mana kecepatan dan keandalan harus berjalan beriringan, lingkungan produksi membutuhkan kemampuan yang tangguh, termasuk penanganan kegagalan otomatis, mekanisme perbaikan mandiri, dan penskalaan dinamis untuk memenuhi beban kerja yang bervariasi. Fitur-fitur ini sangat penting untuk mempertahankan aplikasi yang andal dan berkinerja tinggi dalam skenario dunia nyata.

Mengemas aplikasi PHP-Laravel lama Anda ke dalam kontainer membuatnya portabel dan tidak bergantung pada infrastruktur. Kontainer mengemas aplikasi, dependensinya, dan lingkungan runtime-nya ke dalam unit standar. Ketika dikombinasikan dengan kemampuan orkestrasi Kubernetes, pendekatan kontainerisasi ini memungkinkan penyebaran, penskalaan, dan pengelolaan aplikasi Laravel yang efisien di infrastruktur cloud modern.

Melalui perjalanan modernisasi aplikasi PHP-Laravel Anda untuk penerapan Kubernetes. Baik Anda menjalankan layanan API dengan trafik tinggi, arsitektur microservices, atau aplikasi web tradisional, Anda akan mempelajari cara memanfaatkan Kubernetes untuk memastikan aplikasi Laravel Anda dapat diskalakan, andal, dan mudah dipelihara.

Mengeksplorasi dua metode untuk menyebarkan aplikasi Express.js:
– Menggunakan Devtron untuk Penyebaran Otomatis
– Menggunakan Kubernetes Secara Manual

Menerapkan Aplikasi PHP-Laravel di Kubernetes

Menerapkan aplikasi PHP-Laravel ke Kubernetes melibatkan beberapa langkah. Mari kita tinjau terlebih dahulu keseluruhan prosesnya, kemudian kita bahas berbagai langkah tersebut secara mendalam.

Langkah Implementasi:
– Menulis dan membangun aplikasi PHP-Laravel.
– Mengontainerisasi Aplikasi PHP-Laravel
– Unggah kontainer ke Container Registry seperti DockerHub.
– Buat Manifest YAML yang diperlukan untuk Sumber Daya Kubernetes.
– Terapkan manifes YAML ke klaster Kubernetes.

Prasyarat
Sebelum melanjutkan proses penyebaran, pastikan Anda telah memenuhi prasyarat berikut.
– Aplikasi PHP-Laravel
– Buruh pelabuhan
– Kubectl
– Klaster Kubernetes seperti ini

Metode 1. Menerapkan Aplikasi PHP-Laravel Menggunakan Devtron

Devtron adalah platform manajemen Kubernetes yang menyederhanakan seluruh siklus hidup DevOps. Platform ini mengotomatiskan pembuatan Dockerfile dan manifest Kubernetes, membangun aplikasi, dan mengelola penyebaran melalui antarmuka pengguna yang intuitif.

1. Buat Aplikasi Devtron dan Tambahkan Repositori Git
– Dari halaman utama Devtron, buat aplikasi Devtron baru.
– Tambahkan repositori Git yang berisi kode aplikasi PHP-Laravel.
devtron-1

Baca Juga: 
Tentang Mode Otomatis AWS EKS Kubernetes Cluster

2. Konfigurasi Build
– Devtron akan mengambil kode dari repositori dan membangun kontainer Docker.
– Anda perlu mengkonfigurasi OCI Container Registry.
– Pilih dari tiga opsi pembuatan:
— Gunakan Dockerfile yang sudah ada.
— Buat Dockerfile (menggunakan templat Devtron untuk aplikasi Go)
— Gunakan Buildpack
devtron-2

3. Konfigurasi Penyebaran
– Devtron menyediakan templat YAML yang telah dikonfigurasi sebelumnya untuk penyebaran Kubernetes.
– Konfigurasikan ingress, autoscaler, dan pengaturan deployment lainnya.
devtron-3

4. Membuat Pipeline CI/CD
– Pipeline CI akan membangun aplikasi dan mengirimkan image ke registry.
– Pipeline CD akan memicu deployment di cluster Kubernetes.
– Konfigurasikan Tahap Pra dan Pasca (misalnya, pemindaian keamanan, pengujian unit).
devtron-4

5. Memicu Pipeline Build dan Deploy
– Pilih cabang Git dan picu tahap build.
– Setelah proses build selesai, picu tahap deployment.
– Devtron akan menyebarkan aplikasi dan menampilkan:
— Status penyebaran
— Kesehatan aplikasi
— Detail sumber daya Kubernetes
— Kerentanan keamanan
— Opsi pengembalian (rollback) jika terjadi kesalahan
devtron-5
Setelah aplikasi di-deploy, Anda akan dapat melihat kesehatan aplikasi, status deployment, kerentanan keamanan, sumber daya Kubernetes aplikasi, dan banyak lagi.
devtron-5.1

Metode 2. Menerapkan Aplikasi PHP-Laravel Secara Manual Menggunakan Kubernetes

1. Buat Dockerfile (Debian 13, composer:2.8.8, nginx-extras, php8.4-fpm dan php-laravel)
Dockerfile adalah serangkaian instruksi untuk membangun citra kontainer. Berikut adalah Dockerfile untuk mengkontainerisasi aplikasi Express.js:

# Stage 1: Build dependencies & install Composer
FROM debian:13 AS build

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive \
    COMPOSER_ALLOW_SUPERUSER=1 \
    COMPOSER_HOME=/composer

# Install system dependencies
RUN apt-get update && apt-get install -y \
    curl \
    unzip \
    git \
    ca-certificates \
    php8.4-cli \
    php8.4-common \
    php8.4-mbstring \
    php8.4-xml \
    php8.4-bcmath \
    php8.4-curl \
    php8.4-zip \
    && rm -rf /var/lib/apt/lists/*

# Install Composer 2.8.8
RUN curl -sS https://getcomposer.org/download/2.8.8/composer.phar -o /usr/local/bin/composer \
    && chmod +x /usr/local/bin/composer

# Copy Laravel project files
WORKDIR /var/www/html
COPY . .

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

# Stage 2: Production image with PHP-FPM & Nginx
FROM debian:13

# Install PHP-FPM, Nginx Extras, and required extensions
RUN apt-get update && apt-get install -y \
    nginx-extras \
    php8.4-fpm \
    php8.4-mysql \
    php8.4-Aapcu \
    php8.4-exif \
    php8.4-pcntl \    
    php8.4-bcmath \
    php8.4-bz2 \
    php8.4-cgi \
    php8.4-cli \
    php8.4-common \
    php8.4-bcmath \
    php8.4-gd \
    php8.4-igbinary \
    php8.4-imagick \
    php8.4-imap \
    php8.4-intl \
    php8.4-ssh2 \
    php8.4-ldap \
    php8.4-mbstring \
    php8.4-memcache \
    php8.4-mysql \
    php8.4-opcache \
    php8.4-pgsql \
    php8.4-redis \
    php8.4-soap \
    php8.4-xml \
    php8.4-xmlrpc \
    php8.4-zip \
    php8.4-curl \
    supervisor \
    && rm -rf /var/lib/apt/lists/*

# Copy application from build stage
WORKDIR /var/www/saksenengku
COPY --from=build /var/www/saksenengku /var/www/saksenengku

# Configure Nginx
COPY ./docker/nginx.conf /etc/nginx/nginx.conf

# Configure PHP-FPM
RUN sed -i 's|listen = /run/php/php8.4-fpm.sock|listen = 9000|' /etc/php/8.4/fpm/pool.d/www.conf

# Configure Supervisor to run both PHP-FPM and Nginx
COPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# Set permissions for Laravel storage & bootstrap cache
RUN chown -R www-data:www-data /var/www/saksenengku/storage /var/www/saksenengku/bootstrap/cache

EXPOSE 80
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

docker/nginx.conf

user www-data;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 100000;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;

events {
worker_connections 4000;
  use epoll;
multi_accept on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 80;
        server_name _;
        root /var/www/saksenengku/public;

        index index.php index.html;

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

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

2. Build dan Push images Docker
– Jalankan perintah berikut untuk membuat image Docker:

docker build -t saksenengku/php-laravel-app:v1

– Push image ke DockerHub:

docker push saksenengku/php-laravel-app

3. Membuat Deployment Kubernetes dan Manifest Layanan
– Buat file deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: laravel-kubernetes-saksenengku
spec:
  selector:
    matchLabels:
      run: laravel-kubernetes-saksenengku
  template:
    metadata:
      labels:
        run: laravel-kubernetes-saksenengku
    spec:
      containers:
        - name: saksenengku
          image: bhushannemade/laravel-kubernetes-saksenengku
          ports:
            - containerPort: 80
          env:
            - name: APP_KEY
              value: base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY=

– Buat file service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: laravel-kubernetes-saksenengku
spec:
  type: NodePort
  selector:
    run: laravel-kubernetes-saksenengku
  ports:
    - port: 80
      targetPort: 80
      nodePort: 3000

4. Lakukan deployment ke Kubernetes
Jalankan perintah berikut untuk menerapkan manifest:

kubectl apply -f deployment.yaml service.yaml

Aplikasi Express.js Anda kini telah berhasil di-deploy ke Kubernetes

Baca Juga: 
Cara Install PHP 8 di Ubuntu 22.04

Tantangan dan Solusi Umum

1. Manajemen Ukuran image Kontainer
— Gunakan Multi-Stage Build untuk memisahkan lingkungan build dan runtime.
— Gunakan image dasar yang ringan seperti Alpine atau Distroless untuk mengurangi ukuran.

2. Manajemen Sumber Daya
— Tetapkan Batas Memori dan CPU untuk menghindari penggunaan berlebihan.
— Terapkan Autoscaling (HPA) untuk menangani beban kerja yang bervariasi.

3. Strategi Deployment
— Pembaruan bertahap untuk memastikan penerapan tanpa waktu henti.
— Penanganan Penghentian Sistem yang Baik untuk menghindari terputusnya lalu lintas data yang sedang berjalan.

Setelah membahas dua pendekatan untuk menerapkan aplikasi PHP-Laravel di Kubernetes:
– Deployment Kubernetes secara manual menggunakan Docker dan manifest YAML.
– Deployment Devtron otomatis dengan pipeline CI/CD bawaan dan konfigurasi tingkat lanjut.

Menggunakan Devtron menyederhanakan Deployment Kubernetes, mengurangi upaya manual, dan meningkatkan efisiensi.






Reporter: Agus Rambe Wongkuku

Untuk mendapatkan Berita & Review menarik Saksenengku Network
Google News

Artikel Terkait

Terpopuler