Học cách dựng môi trường bằng Laradock phần 1: Apache2 và MySql

3rd Aug 2022
Học cách dựng môi trường bằng Laradock phần 1: Apache2 và MySql
Table of contents

Hello everyone, hôm nay mình xin hướng dẫn các bạn dựng một môi trường phát triên Laravel với Apache2 và MySql bằng Laradock. Để sử dụng Laradock các bạn cần cài đặt docker và docker-compose, cách cài đặt có thể tham khảo tại đây.

Đầu tiên, các bạn nên có một project Laravel, nếu chưa có thì có thể clone project laravel mẫu tại đường dẫn https://github.com/laravel/laravel. Đây là cấu trúc thư mục của project laravel mẫu mà mình clone về.

git clone https://github.com/laravel/laravel.git laravel_example

Tiếp theo là vào project laravel_example clone laradock tại https://github.com/Laradock/laradock

cd laravel_example
git clone https://github.com/Laradock/laradock.git
Laravel

Bước tiếp theo, di chuyển đến thư mục laradock, copy file env-example để tạo file .env cho laradock.

Laravel

Vậy là xong bước cơ bản để cài đặt laradock rồi.

Các biến môi trường cơ bản của Laradock

Để thiết đặt các môi trường sử dụng trong laradock các bạn vào file .env được tạo ở phía trên. Để tiện sử dụng các container của các laradock trong các project khác mình thường setting các biến môi trường sau:

# Choose storage path on your machine. For all storage systems

DATA_PATH_HOST=~/.laradock/data_laravel_example

Đây là biến môi trường chỉ ra vị trí lưu trữ cơ sở dữ liệu của project trên máy thật của bạn để map với cơ sở dữ liệu trong laradock.

# Define the prefix of container names. This is useful if you have multiple projects that use laradock to have seperate containers per project.

COMPOSE_PROJECT_NAME=laradock_laravel_example

Biến môi trường này dùng để phân biệt các laradock khác nhau của các project khác nhau. Ví dụ, bạn có 2 project mà cùng muốn dựng laradock lên trong một lúc, khi đó bạn cần có tên để phân biệt laradock này của project nào, biến môi trường COMPOSE_PROJECT_NAME có tác dụng như vậy.

Tiếp theo là biến môi trường để setting version của PHP sử dụng trong project:

### PHP Version ###########################################

# Select a PHP version of the Workspace and PHP-FPM containers (Does not apply to HHVM). Accepted values: 7.3 - 7.2 - 7.1 - 7.0 - 5.6
PHP_VERSION=7.3

Dựng môi trường sử dụng Apache2 và MySql

Trong ví dụ đầu tiên, mình sẽ dựng một server sử dụng Apache2 và MySql version 8.0.

### APACHE ################################################

APACHE_HOST_HTTP_PORT=80
APACHE_HOST_HTTPS_PORT=443
APACHE_HOST_LOG_PATH=./logs/apache2
APACHE_SITES_PATH=./apache2/sites
APACHE_PHP_UPSTREAM_CONTAINER=php-fpm
APACHE_PHP_UPSTREAM_PORT=9000
APACHE_PHP_UPSTREAM_TIMEOUT=60
APACHE_DOCUMENT_ROOT=/var/www/public

Đây là biến môi trường của apache2, ở đây mình chỉ lưu ý đến các biến môi trường sau:

  1. APACHE_HOST_HTTP_PORT: dùng để setting cổng cho protocol HTTP của apache (mặc định để là 80)
  2. APACHE_HOST__HTTPS_PORT: dùng để setting cổng cho protocol HTTPS của apache (mặc định để là 443)
  3. APACHE_DOCUMENT_ROOT: dùng để setting thư mục gốc của project (thư mục gốc của một project laravel luôn là /var/www/public)

Các biến môi trường của MYSQL như sau:

### MYSQL #################################################

MYSQL_VERSION=8.0
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

Như ở ví dụ, mình sẽ sử dụng mysql version 8.0, rồi tạo một database có tên là my_database, tạo user linh có password là password có quyền truy cập đến database my_database này. Một điểm lưu ý nữa là mình có thể setting mật khẩu cho user root, điều này có rất nhiều hữu ích cho sau này.

Sau khi setting xong như vậy, các bạn chạy command:

docker-compose build apache2 mysql
Laravel

Khi đó docker sẽ build các image apache2 và mysql, tại đây tiến trình có thể kéo dài mất khoảng 30 phút hoặc lâu hơn, nên các bạn chờ nhé 

Sau khi hoàn thành bước build, chạy command để dựng môi trường lên:

docker-compose up -d apache2 mysql
LaravelLaravel

Sau khi dựng được các services apache2 và mysql như hình trên, các bạn tiến hành install compose của Laravel theo cách sau đây:

Sử dụng command sau để vào workspace của apache2:

docker-compose exec workspace bash

hoặc

docker-compose exec -ularadock workspace bash
  • Khi sử dụng lệnh với option -ularadock thì khi thao tác với file trong workspace (ví dụ: tạo file, copy file) các bạn sẽ không cần phải phân quyền để có thể edit đươc file như khi sử dụng lệnh thứ nhất.
  • Tuy nhiên, khi install composer lại cần đến quyền root, do đó nếu muốn thao tác với composer bắt buộc phải sử dụng lệnh thứ nhất hoặc option 
Laravel

Rồi sau đó tiến hành install composer:

composer install
Laravel

OK, gõ lệnh xong thì đi đâu đó chơi đi ạ, bởi vì việc install composer có thể mất đến 10-15 phút. Sau khi đi chơi về các bạn gõ tiếp lệnh.

cp .env.example .env
Laravel

Chạy tạm cái lệnh:

php artisan key:generate

Rồi sau đó vào file .env của laravel và setting kết nối đến MySql. Các bạn chỉ cần tập trung đến các tham số sau:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=root
DB_PASSWORD=root

Trong đó có DB_HOST thì mình luôn để là mysql vì đó là tên service mysql của laradock. Tiếp theo là DB_DATABASE là tên database các bạn setup trong file .env của laradock (trong trường hợp này là default). User để kết nối đến database mình để là root/root cho dễ nhớ :D.

Rồi xong, giờ thử chạy migrate, nếu chạy thành công thì OK xong xuôi.

Laravel

Còn không thì bạn quá đen, xin mời tìm hiểu các lỗi khi chạy migrate của laravel.

Sau đó thì tận hưởng thành quả thui

Laravel

Ở bài viết tiếp theo mình sẽ trình bày về Cách cài đặt môi trường Laravel sử dụng Nginx và MongoDB, các bạn hãy đón đọc nhé.

Bạn thấy bài viết này như thế nào?
1 reaction

Add new comment

Image CAPTCHA
Enter the characters shown in the image.

Related Articles

Mỗi kết nối cơ sở dữ liệu được định nghĩa trong một mảng, với tên kết nối là khóa của mảng

Eager Loading là một kỹ thuật tối ưu hóa truy vấn cơ sở dữ liệu trong Laravel, giúp tăng tốc độ truy vấn và giảm số lượng truy vấn cần thiết để lấy dữ liệu liên quan đến một bản ghi.

Để sử dụng Eager Loading với điều kiện trong Laravel, bạn có thể sử dụng phương thức whereHas hoặc orWhereHas trong Eloquent Builder.

E hiểu đơn giản vầy nha. auth() hay Auth trong laravel là những function global hay class, nó cũng chỉ là 1 thôi

Xin chào các bạn, tuần này mình sẽ viết một bài về cách xử lý Real Time(thời gian thực) với Laravel và Pusher