Deploy Laravel 10 + PHP 8.1 + MySQL + phpMyAdmin dengan Docker & Nginx
- Caution
🚀 Panduan hands-on buat deploy Laravel 10 di server Linux Ubuntu 22.04 pakai Docker, lengkap dengan PHP-FPM, MySQL, phpMyAdmin, dan Nginx Reverse Proxy.
📦 Stack yang Digunakan
Section titled “📦 Stack yang Digunakan”- Laravel 10
- PHP-FPM 8.1
- MySQL 8
- phpMyAdmin
- Nginx (Reverse Proxy)
🐳 Step 1 — Install Docker Engine
Section titled “🐳 Step 1 — Install Docker Engine”sudo apt-get update -ysudo apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-releaseTambahkan GPG key Docker & repo:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update -yInstall Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -ysudo docker run hello-world🧰 Step 2 — Install docker-compose & Service Pendukung
Section titled “🧰 Step 2 — Install docker-compose & Service Pendukung”sudo curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-composedocker-compose -v
sudo apt-get install nginx wget curl links nano unzip net-tools git -y🛠️ Step 3 — Setup docker-compose.yml & Dockerfile
Section titled “🛠️ Step 3 — Setup docker-compose.yml & Dockerfile”Clone repo:
git clone https://github.com/fadharpra/docker.gitBuat file docker-compose.yml:
version: "3.9"services: laravel: image: php:8.1-fpm container_name: laravel-demo hostname: laravel-demo restart: always build: context: . dockerfile: Dockerfile volumes: - /var/www/apps-demo:/var/www/apps-demo - ./config/apps/php.ini:/usr/local/etc/php/php.ini - ./config/apps/conf.d:/usr/local/etc/php/conf.d - ./config/apps/conf.d/zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf entrypoint: ["php-fpm"] tty: true ports: - 9000:9000 networks: net1: ipv4_address: 10.10.0.10
networks: net1: name: Laravel-net driver: bridge ipam: config: - subnet: 10.10.0.0/24 gateway: 10.10.0.254Buat file Dockerfile:
FROM php:8.1-fpmRUN apt-get update && apt-get upgrade -y \ && apt-get install -y net-tools libfreetype6-dev libjpeg62-turbo-dev libpng-dev libzip-dev libicu-dev g++ nano curl \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd mysqli pdo pdo_mysql iconv zip bcmath \ && docker-php-ext-enable mysqli pdo pdo_mysql iconv zip bcmath
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composerRUN apt install software-properties-common -y && apt update -y && apt-get install -y libreoffice imagemagick ttf* libmagickwand-dev --no-install-recommends \ && rm -rf /var/lib/apt/lists/* && pecl install imagick && docker-php-ext-enable imagick
RUN echo 'alias ll="ls -a"' >> ~/.bashrcWORKDIR /var/www/apps01EXPOSE 9002 9000🚦 Step 4 — Build & Run
Section titled “🚦 Step 4 — Build & Run”docker-compose builddocker-compose up -ddocker ps -a🌐 Step 5 — Konfigurasi Nginx (di Host, bukan Container)
Section titled “🌐 Step 5 — Konfigurasi Nginx (di Host, bukan Container)”Buat /etc/nginx/sites-available/laravel.conf:
server { listen 80; index index.php index.html; error_log /var/log/nginx/laravel-error.log; access_log /var/log/nginx/laravel-access.log; root /var/www/apps-demo/public;
location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass localhost:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }
location / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; }}Aktifkan config & restart:
ln -s /etc/nginx/sites-available/laravel.conf /etc/nginx/sites-enabled/systemctl restart nginxCek: http://[IP-ADDRESS]
🛢️ Step 6 — Tambah MySQL & phpMyAdmin ke docker-compose
Section titled “🛢️ Step 6 — Tambah MySQL & phpMyAdmin ke docker-compose”Tambahkan ke docker-compose.yml:
database: image: mysql:8.0 container_name: mysql-database hostname: database restart: always command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_general_ci environment: MYSQL_ROOT_PASSWORD: admin MYSQL_USER: user MYSQL_PASSWORD: user MYSQL_ROOT_HOST: '%' volumes: - mysqldata:/var/lib/mysql tty: true ports: - 3306:3306 networks: net1: ipv4_address: 10.10.0.2
phpmyadmin: image: phpmyadmin container_name: phpmyadmin hostname: phpmyadmin depends_on: - database restart: always ports: - 8090:80 environment: PMA_HOST: database MYSQL_ROOT_PASSWORD: admin networks: net1: ipv4_address: 10.10.0.3
volumes: mysqldata:Update service:
docker-compose up -dCek phpMyAdmin: http://[IP-ADDRESS]:8090
📁 Struktur Direktori Ideal
Section titled “📁 Struktur Direktori Ideal”Directoryconfig/
Directoryapps/
- php.ini
Directoryconf.d/
- docker-php-ext-bcmath.ini
- docker-php-ext-gd.ini
- docker-php-ext-mysqli.ini
- docker-php-ext-pdo_mysql.ini
- docker-php-ext-zip.ini
- zz-docker.conf
- Dockerfile
- docker-compose.yml
🎉 Selesai! Sekarang lo punya stack Laravel + MySQL + phpMyAdmin yang running mulus pakai Docker Compose. Nginx juga udah siap serve request.