Triển khai Laravel, Ngnix, mysql với docker-compose

Xem lại bài viết: Triển khai website PHP thuần, Apache2, MySQL với docker compose Trong bài viết trước mình đã giới thiệu build một website PHP thuần, Apache2, MySql với docker. Trong bài viết này chúng ta cùng tìm hiểu cách cách build một website xây dựng bằng Laravel trên docker với máy chủ Nginx

Xem lại bài viết: Triển khai website PHP thuần, Apache2, MySQL với docker compose

Trong bài viết trước mình đã giới thiệu build một website PHP thuần, Apache2, MySql với docker. Trong bài viết này chúng ta cùng tìm hiểu cách cách build một website xây dựng bằng Laravel trên docker với máy chủ Nginx và MySQL.

Project được xây dựng hoàn chỉnh tại repository https://github.com/trannguyenhan/photo-gallery-laravel, các bạn ghé qua cho mình một star repo nha. Và để cho dễ hình dung mình sẽ giới thiệu cách cài đặt và triển khai thông qua repo này, mọi người clone về và làm theo nha.

Tạo file docker-compose.yml

Tạo file docker-compose.yml với 3 service app, nginxmysql như sau:

version:'3.8'services:app:build:args:user: trannguyenhan
        uid:1000context: .
      dockerfile: Dockerfile
    image: laravel-app
    restart: unless-stopped
    working_dir: /var/www/html/
    volumes:- ./:/var/www/html/
    networks:- photos
  nginx:image: nginx:stable-alpine
    restart: unless-stopped
    ports:- 8005:80volumes:- ./:/var/www/html
      - ./nginx/conf.d:/etc/nginx/conf.d/
    networks:- photos
  db:image: mysql
    restart: unless-stopped
    environment:MYSQL_DATABASE: photo_gallery_laravel
      MYSQL_ROOT_PASSWORD: mysql12345
      MYSQL_USER: trannguyenhan
      MYSQL_PASSWORD: mysql12345
    ports:-"9906:3306"volumes:- ./database/photo-gallery-laravel-database.sql:/docker-entrypoint-initdb.d/dump.sql
    networks:- photos

#Docker Networksnetworks:photos:driver: bridge
  • Phần nginxmysql chúng ta không cần cấu hình nhiều nên sẽ pull trực tiếp image và thêm vào 1 số tham số.
  • Còn service app chạy php có nhiều thứ cần chạy và cài đặt nên sẽ viết ra một con Dockerfile riêng để tiện cho việc cấu hình.
  • Chúng ta ánh xạ cổng 80 của máy chủ nginx trong con docker ra phía ngoài cổng 8005 của máy gốc.
  • Ánh xạ thư mục project vào phía trong Document Root của nginx thông qua câu lệnh: ./:/var/www/html
  • Cuối cùng là giống với bài viết trước, chúng ta ánh xạ port của mysql mặc định là 3306 từ container trong docker ra ngoài máy gốc là 9906, điều này giúp bạn có thể truy cập vào cơ sở dữ liệu của project từ ngoài máy gốc thông qua cổng 9906.

Với máy chủ nginx chúng ta cần 1 file cấu hình máy chủ nginx nếu không thì cổng nó sẽ nhảy loạn xạ và app sẽ không chạy được, chúng ta tạo ra một thư mục nginx/conf.d và tạo một file laravel.conf có nội dung như sau:

server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/public;
    location ~ .php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass app: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;
    }
}

Cuối cùng, tạo file Dockerfile để cài đặt cho service app như sau:

FROM php:7.4-fpm# Arguments defined in docker-compose.ymlARG userARG uid# Install system dependenciesRUN apt-get update && apt-get install -y 
    git 
    curl 
    libpng-dev 
    libonig-dev 
    libxml2-dev 
    zip 
    unzip# Clear cacheRUN apt-get clean && rm -rf /var/lib/apt/lists/*# Install PHP extensionsRUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd# Get latest ComposerCOPY--from=composer:latest /usr/bin/composer /usr/bin/composer# Create system user to run Composer and Artisan CommandsRUN useradd -G www-data,root -u $uid -d /home/$user$userRUN mkdir -p /home/$user/.composer && 
    chown -R $user:$user /home/$user# Set working directoryWORKDIR /var/wwwUSER$user

Chạy ứng dụng

Chúng ta cùng sang những bước cuối cùng để chạy ứng dụng, đầu tiên là tạo 1 file .env từ .env.example với câu lệnh:

cp .env.example .env

Thay đổi cấu hình của cơ sở dữ liệu giống với những biến môi trường của mysql docker đã được cấu hình trong file docker-compose.yml:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306DB_DATABASE=photo_gallery_laravel
DB_USERNAME=trannguyenhan
DB_PASSWORD=mysql12345

Chạy ứng dụng với docker-compose:

docker-compose up -d

Cài đặt các phụ thuộc cho ứng dụng Laravel:

docker-compose exec app composerinstall

Tạo key cho ứng dụng Laravel:

docker-compose exec app php artisan key:generate

Truy cập vào http://localhost:8005/ để xem thành quả:

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ