Laravel-Sail có hỗ trợ Mongodb không?
Như các bạn đã biết Laravel-Sail không hỗ trợ hỗ trợ Mongodb, hôm này mình sẽ hướng dẫn các bạn cách thêm Service Mongodb vào Laravel-Sail và cài đặt các thành phần cần thiết để có thể Laravel có thể kết nối được với Service Laravel
Khởi tạo dữ án với Laravel Sail
Chúng ta thống nhất tên dự án sẽ là "laravel-sail-mongodb" và tiến hành cài đặt theo lệnh sau
curl -s "https://laravel.build/laravel-sail-mongodb" | bash
Truy cập thư mục dự án và khởi chạy Docker
cd laravel-sail-mongodb
./vendor/bin/sail up -d
Thêm mới Service Mongodb
Trước khi có thể điều chỉnh thêm service mongodb chúng ta cần public sail bằng cách thực thi lệnh sau
./vendor/bin/sail artisan sail:publish
- Lưu ý: trước khi thực hiện điều chỉnh file docker-compose.yml bạn cần down docker-composer để không gây lỗi sau khi điều chỉnh và start lại
./vendor/bin/sail down
Tiếp tục mở file docker-compose.yml sau khi thấy nó được copy ra ngoài thư mục góc, và thêm service mongodb
# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./docker/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mongo
mongo:
image: 'mongo:5.0'
restart: always
ports:
- '${DB_PORT:-27017}:27017'
environment:
MONGO_INITDB_ROOT_USERNAME: '${DB_USERNAME}'
MONGO_INITDB_ROOT_PASSWORD: '${DB_PASSWORD}'
MONGO_INITDB_DATABASE: '${DB_DATABASE}'
volumes:
- 'sailmongo:/data/db/sail'
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sailmongo:
driver: local
Tới bước này, xem như Docker của bạn đã cài đặt thành công một service mongodb mới
Cập nhật thành phần cần thiết để PHP có thể tương tác với Mongodb
Trong file docker/8.0/Dockerfile chúng ****ta cần thêm các thành phần để giúp PHP có thể kết nối được với Mongodb
Củ thể ở đây, chúng ta sẽ cài đặt thêm php8.0-mongodb trên Ubuntu
php8.0-mongodb
Thêm vào sau php8.0-redis như hình dưới
Tiền hành build lại Service này để có được cập nhật
./vendor/bin/sail build
Kiểm tra kết quả Docker
Sau khi bạn thực hiện các bước ở trên, xem như các bước cập nhật docker và thành phần cần thiết để đảm bảo PHP có thể kết nối được với mongodb đã xong
Chạy lệnh để khởi động lại tất cả service
./vendor/bin/sail up -d
Như vậy chúng ta đã thấy trong dự án này có 2 service gồm ( Web và mongodb )
Điều chỉnh cài đặt Laravel đế kết nối được với Service Mongodb setup ở trên
Trong file .env điều chỉnh lại thông tin như dưới
DB_CONNECTION=mongodb#Thành phần này sẽ được định nghĩa trong config
DB_HOST=mongo#Tên này là tên service khi chúng ta điều chỉnh docker-compose
DB_PORT=27017#Lưu ý là vì bên trong các docker gọi cho nhau nên port sẽ là 27017
DB_DATABASE=laravel_sail_mongodb
DB_USERNAME=sail
DB_PASSWORD=password
Trong file config/database.php thêm config dành cho connection mongodb
'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'options' => [
'database' => env('DB_AUTHENTICATION_DATABASE', 'admin'),
],
],
Cài đặt Package hỗ trợ Mongodb
./vendor/bin/sail composer require jenssegers/mongodb
Sau khi cài đặt Package xong tiến hành chạy migration
./vendor/bin/sail artisan migrate
Nếu kết quả được như hình trên, thì mọi thứ cài đặt của chúng ta đã hoạt động
Từ giờ Code của các bạn có thể hoạt động được với Mongodb
Do nội dung bài viết cũng khá dài, mình xin kết thúc tại đây xem như chung ta đã xong vấn đề cài đặt để đảm bảo hoạt động giữa Laravel & Mongodb
Qua bài kế tiếp trong mình sẽ giới thiệu các bạn về các thao tác cở bản khi làm việc với Mongodb
Repository: https://github.com/qt91/laravel-sail-mongodb