Hướng dẫn chi tiết cài đặt Laravel 9 với Sail trên Windows và MacOS

Laravel 9 đã ra mắt vào tháng 2/2022 với nhiều tính năng mới, tuy nhiên khi tìm kiếm thì mình chưa thấy bài viết nào hướng dẫn chi tiết cho anh em cách cài đặt bằng Sail như trên trang chủ Laravel đề cập. Để đỡ tốn thời gian cho các anh em mới cài thì vooclaptrinh sẽ hướng dẫn chi tiết cách cài đặt Laravel với Sail cả trên Windows 10.

1. Laravel Sail là gì?

Laravel Sail là một giao diện dòng lệnh nhẹ để tương tác với môi trường phát triển Docker mặc định của Laravel. Sail cung cấp một điểm khởi đầu tuyệt vời để xây dựng ứng dụng Laravel bằng PHP, MySQL và Redis mà không yêu cầu kinh nghiệm Docker trước đó.

Để chạy Laravel bằng Sail đầu tiên chúng ta cần tạo file docker-compose tại thư mục gốc của dự án Laravel.

Các lệnh tạo như sau:

composer require laravel/sail --dev
php artisan sail:install

Sau đó nó sẽ hỏi DB mà bạn đang muốn dùng trong project, ở đây mình dùng MySQL thì điền 0

 Which services would you like to install? [mysql]:
  [0] mysql
  [1] pgsql
  [2] mariadb
  [3] redis
  [4] memcached
  [5] meilisearch
  [6] minio
  [7] mailhog
  [8] selenium
 > 0

Lúc này trong project sẽ sinh ra một file docker-compose.xml

Để tìm hiểu rõ hơn về thao tác sử dụng sail thì bạn có thể tham khảo: https://v1study.com/laravel-packages-sail.html

2. Cài đặt Docker Desktop cho Windows 10

Chúng ta bắt đầu cài đặt môi trường.

Để dùng được Sail thì đầu tiên máy tính của bạn phải cài đặt docker desktop: https://www.docker.com/products/docker-desktop/

Ở bước này lưu ý khi tải Docker Desktop về cần chạy file cài đặt của Docker với quyền Adminstrator nhé.

Tiếp theo cần cài đặt WLS trên Windows 10

WSL là gì?

WSL (Windows Subsystem for Linux) là một trình dòng lệnh trên Windows 10, giúp bạn có thể chạy những dòng lệnh của Linux trên Windows .

Trước kia để chạy được Docker trên Windows chúng ta thường cài đặt thông qua máy ảo Hyper-V hoặc dùng phần mềm thứ ba là VirtualBox. Tuy nhiên, hiện giờ nếu bạn đã cài đặt WSL 2 bạn có thể chạy các Container Linux mà không cần những máy ảo trên . Docker lúc này ổn định và nhanh hơn sử dụng Hyper-V.

Để cài đặt WSL với các máy ảo khác anh em có thể tham khảo : https://docs.microsoft.com/en-us/windows/wsl/install.

3. Cài đặt WSL Ubuntu 20.04

Để cài đặt Ubuntu 20.04 thực hiện gõ command sau ở PowerShell của Windows 10

wsl --install -d Ubuntu-20.04

Cập nhật WSL version WSL 1 thành WSL 2 và cài đặt wls mặc định gọi máy ảo Ubuntu 20.04

wsl --set-default-version 2, replacing 1
wsl --setdefault Ubuntu-20.04 2
wsl --set-version Ubuntu-20.04 2

Cài đặt Windows Terminal tại Microsoft Store nếu chưa có: https://www.microsoft.com/en-us/p/windows-terminal/

Sau khi cài đặt xong WSL thì mở Start Menu lên sẽ thấy WSL ubutu 20.04.

wsl windows 10
wsl windows 10

Khi mở WSL trên thì chúng ta đã có thể thao tác với Ubuntu 20.04 trên Windows 10 một cách bình thường.

  • Cập nhật Ubuntu 20.04
Giao diện của WSL ubuntu 20.04
Giao diện của WSL ubuntu 20.04

4. Cài đặt môi trường PHP 8.1 cho Laravel 9

Mặc định Ubuntu 20.04 chỉ có sẵn PHP đến version 7.4, do vậy để cài đặt PHP 8.1 ta thực hiện các bước.

  • Cài đặt PHP trên unbuntu 20.04 ta chạy các lệnh sau:
sudo apt install lsb-release ca-certificates apt-transport-https software-properties-common -y
sudo add-apt-repository ppa:ondrej/php
  • Sau khi đã thêm reponsitory cho ubuntu 20.04 thì ta có thể cài đặt php 8.1
sudo apt install php8.1
  • Cài đặt các pakage PHP cần thiết cho dự án
sudo apt install -y php8.1-{cli,gd,curl,mysql,ldap,zip,fileinfo,fpm,xml,mbstring,exif,pspell,imagick,bcmath}
  • Đối với các dự án có dùng Laravel-mix anh em cài thêm NodeJs và npm
sudo apt install nodejs
sudo apt install npm
  • Tiếp theo cd vào thư mục home trên Ubuntu và clone source Laravel.
cd ~
curl -s https://laravel.build/example-app | bash
cd ./example-app

Hoặc project đã tồn tại thì cài git và clone

Chạy lệnh cài đặt các pagekage cho dự án Laravel

npm install
composer install

Copy file .env cho dự án Laraevel

cp .env.example .env

Ở bước này cần chỉnh file docker-compose cho chính xác nhé. Lưu ý DB_HOST trong file .env cần thay đổi thành services name trong file docker-compose chứ không phải là 127.0.0.1 nhé.

Bước cuối cùng là căng buồm thôi. Option -d cho phép sail chạy trong nền mà không hiện log lên cmd.

./vendor/bin/sail up -d

Tuy nhiên, thay vì gõ liên tục command trên thì để thực hiện các lệnh Sail, bạn có thể cấu hình bí danh Bash cho phép bạn thực hiện các lệnh của Sail dễ dàng hơn:

alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'

Sau này chỉ cần chạy sail up là thay thế command ./vendor/bin/sai up

Để tắt container đang chạy ngầm có thể dùng Ctrl +C hoặc dùng lệnh

./vendor/bin/sail stop

Trường hợp muốn xóa container đã tạo thì chạy command. Option -v cho phép xóa luôn volume của container tránh trường hợp lưu data cũ bị sai.

./vendor/bin/sail down -v

Để code trong máy ảo ubuntu thì máy Windows 10 cần cài đặt sẵn Visual Code khi đang ở wsl thư mục source thì gõ lệnh dưới là code được.

code .

Chạy một số lệnh artisan xóa cache:

php artisan config:clear
php artisan cache:clear
php artisan key:generate

Chạy lệnh set up DB

./vendor/bin/sail artisan migrate.
./vendor/bin/sail artisan db:seed

Cuối cùng chạy http://localhost trong trình duyệt.

Trường hợp project có dùng các pakage của NodeJs thì chạy thêm

sudo npm install
sudo npm run dev

5. Một số lỗi thường gặp

Laravel: file_put_contents() failed to open stream: Permission denied for Session folder

Chạy lại 2 command

php artisan config:clear
php artisan cache:clear

Không kết nối được vào database

Thử login với username = root và password rỗng ở file .env. Tại file docker-compose.yml thêm constant MYSQL_ALLOW_EMPTY_PASSWORD

    mysql:
        image: 'mysql/mysql-server:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: "%"
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 1

Truy cập vào docker container để kiểm tra xem đã có db chưa.

Từ WSL command gõ lệnh: docker ps

docker ps
docker exec -it {id-container} bash

Tiếp theo gõ mysql > show databases

Trên đây mình đã ghi chú chi tiết các bước khởi tạo ứng dụng Laravel với Laravel sail trên Windows 10. Trong quá trình cài đặt nếu xảy ra một số lỗi anh em có thể search thêm google nhé.

Viết một bình luận