Mengintegrasikan PHP dengan Docker untuk Workflow Modern

Mengintegrasikan PHP dengan Docker untuk Workflow Modern

Mengintegrasikan PHP dengan Docker adalah cara modern untuk mengelola aplikasi secara portabel dan efisien. Docker memungkinkan Anda membuat lingkungan yang terisolasi, menjadikannya ideal untuk pengembangan, pengujian, dan deployment. Berikut panduan langkah demi langkah untuk integrasi PHP dengan Docker:

1. Persiapan Lingkungan

Pastikan Anda sudah menginstal:

2. Struktur Proyek

Buat struktur direktori proyek sebagai berikut:

php-docker-project/

├── src/                  // Folder kode PHP
│   └── index.php         // File utama PHP
├── Dockerfile            // File untuk mendefinisikan image Docker
├── docker-compose.yml    // File untuk konfigurasi layanan Docker
└── .env                  // File untuk variabel lingkungan (opsional)
SCSS

3. Membuat File Dockerfile

Dockerfile mendefinisikan lingkungan PHP untuk proyek Anda. Berikut contoh Dockerfile untuk PHP:

# Menggunakan image PHP resmi
FROM php:8.2-apache

# Menyalin file proyek ke direktori kerja container
COPY src/ /var/www/html/

# Memberikan izin pada folder
RUN chown -R www-data:www-data /var/www/html \
    && chmod -R 755 /var/www/html

# Install ekstensi PHP tambahan (opsional)
RUN docker-php-ext-install pdo_mysql

# Ekspos port 80 untuk HTTP
EXPOSE 80
Dockerfile

4. Membuat File docker-compose.yml

Gunakan Docker Compose untuk mengelola beberapa layanan (misalnya PHP dan database). Berikut contoh file docker-compose.yml:

version: '3.8'

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:80"  # Akses aplikasi pada http://localhost:8080
    volumes:
      - ./src:/var/www/html
    environment:
      - APP_ENV=local

  db:
    image: mysql:8.0
    container_name: mysql_db
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: exampledb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
YAML

5. Membuat File PHP (src/index.php)

Buat file PHP untuk memverifikasi apakah server Docker bekerja dengan benar:

<?php
phpinfo();
?>
Haskell

6. Menjalankan Proyek

  • Build Image dan Jalankan Container: Jalankan perintah berikut di terminal pada direktori proyek:
docker-compose up --build
Bash

7. Kustomisasi Lingkungan

Menggunakan Variabel Lingkungan (.env)

Gunakan file .env untuk menyimpan variabel sensitif:

MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=exampledb
MYSQL_USER=user
MYSQL_PASSWORD=password
Haskell

Modifikasi docker-compose.yml:

    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
YAML

8. Menambahkan Tools Tambahan

Composer

Untuk menginstal Composer, tambahkan perintah berikut pada Dockerfile:

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
Dockerfile

Xdebug

Untuk debugging dengan Xdebug, tambahkan ke Dockerfile:

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug
Dockerfile

Tambahkan konfigurasi Xdebug di php.ini:

[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
INI

9. Workflow Modern

  • Hot Reloading: Gunakan volumes untuk menyinkronkan perubahan kode tanpa perlu membangun ulang container:
volumes: - ./src:/var/www/html
YAML
  • CI/CD:
    • Gunakan Docker image untuk pipeline CI/CD (misalnya GitHub Actions atau GitLab CI).
    • Deploy container ke layanan seperti AWS ECS, Google Cloud Run, atau Kubernetes.
  • Scaling: Gunakan Docker Swarm atau Kubernetes untuk deployment skala besar.

10. Membersihkan Container

Untuk menghentikan dan menghapus semua container dan network terkait:

docker-compose down
Bash

Dengan setup ini, Anda memiliki workflow modern yang memanfaatkan Docker untuk PHP. Workflow ini memastikan aplikasi Anda dapat dijalankan di mana saja tanpa khawatir tentang perbedaan lingkungan! 🎉

Leave a Reply

Your email address will not be published. Required fields are marked *