Dalam tutorial ini, kita akan membuat lingkungan pengembangan Laravel dengan 3 container Docker (phpmyadmin, mysql, nginx) di Rocky Linux dengan struktur pengembangan sebagai berikut:
1 2 3 4 5 6 7 8 |
laravel-project/ ├── app/ ├── docker/ │ ├── nginx/ │ │ └── default.conf │ └── php/ │ └── Dockerfile └── docker-compose.yml |
Sebelum memulai, pastikan Docker dan Docker Compose sudah terinstal di Rocky Linux. Tahap ini ikuti tutorial berikut: Cara Instalasi Docker di Rocky Linux
Selanjutnya buat struktur folder diatas dengan printah:
1 |
mkdir -p laravel-project/{app,docker/{nginx,php}} |
Masuk ke directory/folder laravel-project
1 |
cd laravel-project |
Buat file Dockerfile ke dalam folder docker dengan perintah:
1 |
nano docker/Dockerfile |
Kemudian isi dengan bari kode berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# Menggunakan image dasar PHP 8.3 FPM (FastCGI Process Manager) dengan Alpine Linux. # Alpine dipilih karena ukurannya yang kecil, ideal untuk lingkungan Docker. FROM php:8.3-fpm-alpine # Mengatur working directory di dalam kontainer WORKDIR /var/www/html # Menginstal dependensi sistem yang diperlukan untuk PHP dan Laravel # Termasuk git, curl, zip, unzip, dan dependensi untuk ekstensi PHP RUN apk add --no-cache \ git \ curl \ nodejs \ npm \ libzip-dev \ libpng-dev \ jpeg-dev \ freetype-dev \ icu-dev \ libxml2-dev # Menginstal ekstensi PHP yang dibutuhkan oleh Laravel # Ini adalah ekstensi umum yang sering digunakan dalam aplikasi Laravel RUN docker-php-ext-install -j$(nproc) \ pdo_mysql \ exif \ pcntl \ bcmath \ gd \ zip \ intl \ soap # Menginstal Composer secara global # Composer adalah manajer dependensi untuk PHP COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Menambahkan user 'laradock' dan grup 'laradock' # Ini membantu menghindari menjalankan proses sebagai root di dalam kontainer # dan meningkatkan keamanan RUN addgroup -S laradock && adduser -S laradock -G laradock # Mengatur user kontainer menjadi 'laradock' # Ini memastikan semua perintah selanjutnya dijalankan oleh user ini USER laradock # Menjalankan perintah 'npm install' untuk menginstal dependensi JavaScript # Jika kita tidak menggunakan npm, baris ini dapat dihapus RUN npm install # Mengatur user kembali ke root untuk membersihkan USER root # Menghapus cache RUN rm -rf /var/cache/apk/* # Menjalankan PHP-FPM di port 9000 EXPOSE 9000 # Perintah default untuk menjalankan PHP-FPM CMD ["php-fpm"] |
Simpan dan keluar dari editor nano dengan menekan Ctrl+x dan pilih Y untuk menyimpan perubahan file Dockerfile diatas.
Kemudian buat file default.conf untuk konfigurasi webserver nginx
1 |
nano docker/nginx/default.conf |
Masukkan baris kode berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# Blok server utama untuk Nginx server { # Nginx akan mendengarkan di port 80 listen 80; # Mengatur root direktori aplikasi, di mana file public Laravel berada root /var/www/html/public; # Mengatur file indeks yang akan dicari index index.php index.html; # Mengatur nama server server_name _; # Blok lokasi untuk root (/) location / { # Jika file atau direktori tidak ditemukan, # Nginx akan meneruskan permintaan ke index.php try_files $uri $uri/ /index.php?$query_string; } # Blok lokasi untuk menangani file PHP location ~ \.php$ { # Tidak ada batasan pada ukuran file body client_max_body_size 0; # Meneruskan permintaan ke kontainer PHP-FPM # 'app' adalah nama service kontainer PHP di docker-compose.yml fastcgi_pass app:9000; # Mengatur path skrip fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # Menyertakan parameter FastCGI default include fastcgi_params; } # Blok lokasi untuk mencegah akses ke file .env location ~ /\.env { deny all; } } |
Simpan dan keluar dari editor nano dengan menekan Ctrl+x dan pilih Y untuk menyimpan perubahan file default.conf diatas.
Kemudian buat file docker-compose.yml
1 |
nano docker-compose.yml |
Kemudian isikan dengan bari kode berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# Menggunakan versi 3.8 untuk docker-compose version: "3.8" # Mendefinisikan semua services (kontainer) yang diperlukan services: # Service untuk aplikasi PHP (laravel) app: # Membangun image dari Dockerfile yang ada di direktori ./docker/php build: context: ./docker/php # Menghubungkan volume lokal ke dalam kontainer # Ini memungkinkan perubahan kode langsung terlihat tanpa membangun ulang image volumes: - ./app:/var/www/html # Mengekspos port 9000 untuk PHP-FPM, tidak bisa diakses dari host expose: - 9000 # Service untuk web server Nginx nginx: # Menggunakan image Nginx versi stabil dengan Alpine image: nginx:stable-alpine # Menghubungkan port 80 di host ke port 80 di kontainer ports: - "80:80" # Menghubungkan volume lokal ke dalam kontainer # Volume pertama untuk kode aplikasi # Volume kedua untuk konfigurasi Nginx volumes: - ./app:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf # Memastikan kontainer 'app' (PHP) sudah berjalan sebelum memulai Nginx depends_on: - app # Service untuk database MySQL mysql: # Menggunakan image MySQL versi 8.0 image: mysql:8.0 # Mengatur port untuk koneksi dari host ports: - "3306:3306" # Mengatur volume untuk penyimpanan data persisten # Ini memastikan data database tidak hilang saat kontainer dihentikan volumes: - dbdata:/var/lib/mysql # Mengatur variabel lingkungan untuk konfigurasi MySQL environment: # Password root database - MYSQL_ROOT_PASSWORD=secret # Nama database yang akan dibuat secara otomatis - MYSQL_DATABASE=laravel_db # Nama user untuk database - MYSQL_USER=user # Password untuk user database - MYSQL_PASSWORD=password # Service untuk PHPMyAdmin phpmyadmin: # Menggunakan image PHPMyAdmin image: phpmyadmin # Menghubungkan port 8080 di host ke port 80 di kontainer ports: - "8080:80" # Mengatur variabel lingkungan untuk menghubungkan ke kontainer MySQL environment: # Menggunakan nama service 'mysql' untuk hostname - PMA_HOST=mysql # Mengatur port MySQL - PMA_PORT=3306 # Memastikan kontainer 'mysql' sudah berjalan sebelum memulai PHPMyAdmin depends_on: - mysql # Mendefinisikan volume yang akan digunakan volumes: # Volume untuk data MySQL yang persisten dbdata: |
Jalankan perintah berikut di direktori laravel-docker/ untuk membangun dan memulai semua kontainer:
1 |
docker compose up -d --build |
Setelah semuanya berjalan, kita dapat menginstal proyek Laravel baru dengan menjalankan perintah di dalam kontainer app:
1 |
docker compose exec app composer create-project laravel/laravel . |
Lingkungan kita sekarang sudah siap. Kita dapat mengakses:
Aplikasi Laravel di: http://localhost
PHPMyAdmin di: http://localhost:8080
Semoga ini membantu!