Sử dụng CSDL PostpreSQL với Laravel trên Heroku

Trong bài viết Cài đặt Laravel trên Heroku, các bạn đã được làm quen với các bước đưa một ứng dụng Laravel lên hệ thống dịch vụ đám mây của Heroku, tuy nhiên mới chỉ dừng lại ở một ứng dụng mẫu chưa có cơ sở dữ liệu. Tôi cũng rất hay sử dụng Heroku cho những ứng dụng cần demo bởi Heroku có một gói miễn phí cho phép bạn tạo và triển khai không giới hạn số lượng các ứng dụng.

Các ứng dụng web của chúng ta luôn phải làm việc với CSDL và đa phần chúng ta sử dụng MySQL bởi nó là mã nguồn mở miễn phí với một cộng đồng lớn. Tuy nhiên, Heroku lại không cung cấp MySQL miễn phí, thay vào đó bạn có thể sử dụng hệ cơ sở dữ liệu PostpreSQL. Miễn phí ở đây cũng có giới hạn với 10 nghìn bản ghi trong CSDL, quá là bạn phải trả tiền nhé.

Trong quá trình cài đặt Laravel trên Heroku, bạn cũng đã được làm việc với Heroku CLI (trên trước đây là Heroku Toolbelt) một công cụ dòng lệnh rất hữu ích, bài viết này cũng sẽ tiếp tục sử dụng Heroku CLI cho các cài đặt.

Cài đặt add-on Heroku Postgres

Sử dụng lệnh heroku addons:add để thêm gói PostgreSQL cho ứng dụng của bạn:

c:\xampp\htdocs\spa-forum>heroku addons:add heroku-postgresql:hobby-dev
Adding heroku-postgresql:hobby-dev on lit-retreat-6653... done, v8 (free)
Attached as HEROKU_POSTGRESQL_NAVY_URL
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pgbackups:restore.
Use `heroku addons:docs heroku-postgresql` to view documentation.

Cấu hình kết nối đến database

Ok, sau khi cài đặt xong, bạn cần các thông số để đưa vào config/database.php trong ứng dụng Laravel. Lệnh heroku config sẽ list ra các config, và tìm đến DATABASE_URL

c:\xampp\htdocs\spa-forum>heroku config
DATABASE_URL: postgres://nyxaz2lfopyrra:0b1e81091f4fdf46c7d3d2d130osb6613070ec251965179d4acc817f2efbc2a4@ec2-54-235-120-39.compute-1.amazonaws.com:5432/dsi1o2b50m41f

DATABASE_URL có cấu trúc như sau postpres://USERNAME:PASSWORD@HOSTNAME:POST/DATABASE, với thông tin này chúng ta cấu hình lại config/database như sau:

'default' => env('DB_CONNECTION', 'pgsql'),
...
'connections' => [
...
        'pgsql' => [
            'driver' => 'pgsql',
            'host' => 'ec2-54-235-120-39.compute-1.amazonaws.com',
            'port' => '5432',
            'database' => 'dsi1o2b50m41f',
            'username' => 'nyxaz2lfopyrra',
            'password' => '0b1e81091f4fdf46c7d3d2d130osb6613070ec251965179d4acc817f2efbc2a4',
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],

Tiếp đó, chúng ta commit và push lên Heroku

c:\xampp\htdocs\spa-forum> git add .
c:\xampp\htdocs\spa-forum> git commit -m "Updated database configuration"
c:\xampp\htdocs\spa-forum> git push heroku master
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 3.16 KiB | 0 bytes/s, done.
Total 6 (delta 3), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> PHP app detected
remote: -----> Bootstrapping...
remote: -----> Installing platform packages...
...

Sử dụng Laravel Artisan trên Heroku

Các lệnh artisan chạy trên Heroku sẽ được thực hiện như sau:

heroku run php /app/artisan

Ví dụ: thực hiện migrate database

heroku run php /app/artisan migrate

Thực hiện Seeding trên Heroku

heroku run php /app/artisan db:seed

Hay thiết lập key mã hóa để sinh access token cho Laravel Passport

heroku run php /app/artisan passport:install

Lời kết

Với PostgreSQL bạn tha hồ thực hiện các dự án demo miễn phí trên Heroku, với 10 nghìn bản ghi, bạn thoải mái tạo được một ứng dụng cỡ vừa. Một chú ý nữa là các dyno của Heroku sẽ chuyển sang trạng thái ngủ đông trong vòng 30 phút nếu không có truy cập, nhưng cũng không vấn đề vì chúng ta chỉ dùng để demo thôi.

5 thoughts on “Sử dụng CSDL PostpreSQL với Laravel trên Heroku

  1. chạy seeding lỗi [Symfony\Component\Debug\Exception\FatalThrowableError] Class ‘Faker\Factory’ not found, xử lý thế nào các bác

  2. Bạn chuyển gói “fzaninotto/faker”: “~1.4” từ require-dev lên require trong composer.json rồi push lại lên Heroku

  3. Mình sử dụng gói Laratrust, khi thực hiện lệnh heroku run php /app/artisan db:seed bị lỗi:
    SQLSTATE[42P01]: Undefined table: 7 ERROR: relation “permission_role” does
    not exist (SQL: truncate “permission_role” restart identity)

    SQLSTATE[42P01]: Undefined table: 7 ERROR: relation “permission_role” does
    not exist

    Các bạn vui lòng hướng dẫn mình cách khắc phục! Xin cảm ơn!

  4. If you want to host Laravel using a PaaS, I would suggest you to try out Cloudways. With this platform, you can host Laravel on cloud in just a single click. There is no need to spend time on manually hosting the app on a server.

Add Comment