Tìm hiểu cách triển khai laravel + docker qua laradock

Trước tiên là chúng ta cần biết chút về docker.

Docker là một nền tảng để cung cấp cách để building, deploying và running ứng dụng dễ dàng hơn bằng cách sử dụng các containers.

Vậy containers là gì?

Các containers cho phép đóng gói một ứng dụng với tất cả các phần cần thiết, như là thư viện và các phụ thuộc khác, và gói tất cả ra dưới dạng một package. Nhờ vào container, ứng dụng sẽ chạy trên mọi máy khác bất kể mọi cài đặt tùy chỉnh mà máy có thể có khác với máy được sử dụng để viết code.

Trong bài này tôi sẽ sử dụng Laradock là laravel + docker - một môi trường phát triển dành cho PHP trên Docker và nó bao gồm các Docker Images được cấu hình sẵn giúp cho việc tích hợp Docker vào các dự án PHP một cách nhanh chóng và thuận tiện hơn.

Các bước dưới đây mình sẽ hướng dẫn thiết lập chạy laravel project trên docker

1. Download và install docker là công việc cần trước tiên.
Công việc này khá nhanh, chỉ cần tải và cài đặt theo:

2. Tiếp theo là clone laradock

Tôi sẽ dự định thiết kế tree folder như sau:

main-workspace
     → laradock
     → laradock-workspace
          → laravel-project

với laradock-workspace là thư mục chứa các laravel project

với laradock là thư mục laradock chứa các docker-image cần thiết

3. Sau đó là clone project có sẵn hoặc generate laravel project trong folder laradock-workspace.

Ví dụ trong laradock-workspace tôi tạo 1 laravel project là blog-site

4. Tiếp theo là tạo các thư mục cần thiết

$ mkdir your_workspace_path/main-workspace && cd your_workspace_path/main-workspace

và clone laradock

$ git clone https://github.com/Laradock/laradock.git

5. Sau khi clone xong là config laradock environment:

$ cd laradock/
$ cp .env.example .env

Chỉnh sửa trong file .env:

DB_HOST=mysql
APP_CODE_PATH_HOST=../laradock-workspace/
DATA_PATH_HOST=../data/
COMPOSE_PROJECT_NAME=nghia
PHP_IDE_CONFIG=serverName=nghia
WORKSPACE_TIMEZONE=Asia/Tokyo
MYSQL_VERSION=5.7
MYSQL_DATABASE=blog_site
MYSQL_USER=blog_site
MYSQL_PASSWORD=blog@123
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=admin@123

APP_CODE_PATH_HOST=../laradock-workspace/ là đường dẫn đặt thư mục laravel như đã config ở trên. Các option khác các bạn có thể tùy chọn.

6. Bước tiếp theo: Nginx config

Ở thư mục laradock, tạo file conf:

$ nano nginx/sites/blog-site.test.conf

ví dụ ở đây là mình tạo 1 file blog-site.test để trỏ đến blog-site laravel project ở trên.

server {
    listen 80;
    listen [::]:80;

    server_name blog-site.test;
    root /var/www/blog-site/public;
    index index.php;
    
    # For https
    # listen 443 ssl;
    # listen [::]:443 ssl ipv6only=on;
    # ssl_certificate /etc/nginx/ssl/default.crt;
    # ssl_certificate_key /etc/nginx/ssl/default.key;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }


    error_log /var/log/nginx/blog-site_error.log;
    access_log /var/log/nginx/blog-site_access.log;
}

7. Setup crontab

Vẫn tại thư mục laradock chỉnh sửa file laradock theo đường dẫn dưới

$ nano workspace/crontab/laradock

add thêm nội dung dưới vào file:

* * * * * laradock /usr/bin/php /var/www/blog-site/artisan schedule:run >> /dev/null 2>&1

8. Run containers ở thư mục laradock

Vẫn tại thư mục laradock, run command:

$ docker-compose up -d nginx mysql

Với lần up đầu tiên của docker sẽ mất chút thời gian để pull các image về và build.
Kết quả như ảnh:

9. Thiết lập .env cho laravel project

Sau khi up docker hoàn thành, các bạn enter workspace container(ở đây cũng giống bạn ssh vào server trên thực tế)

$ docker-compose exec --user=laradock workspace bash

Lúc này các bạn đã ở trong môi trường ảo của docker , mình gọi là d-workspace và đã ở trong thư mục /var/www chứa blog-site

d-workspace$ cd blog-site
d-workspace$ cp .env.example .env

Chỉnh sửa file .env(nếu cần)

DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=blog_site
DB_USERNAME=blog_site
DB_PASSWORD=blog@123

10. Install Laravel & vendor
Trong thư mục project laravel, các bạn thực composer install, generate key... như bình thường.

11. Edit file etc/hosts
Sau khi setup laravel project xong, các bạn thoát ra khỏi docker-workspace (bằng command Control + D).
Tại local env của mình, các bạn thêm đoạn sau vào file /etc/hosts

$ sudo nano /etc/hosts
127.0.0.1 blog-site.test

Sau đó mở browser và enter http://blog-site.test

Trên đây mình vừa hướng dẫn các bạn thiết lập chạy laravel project của mình trên docker thông qua laradock.

P/s: Nếu có vẫn gặp vướng mắc trong khi thực hành hoặc có bất kì thắc mắc về PHP, Laravel hay muốn tìm hiểu thêm các thông tin hữu ích, các bạn hãy tham gia group Laravel VietNam để được các admin và thành viên support trực tiếp vấn đề mà bạn gặp phải nhé.