ทดลองเชื่อม Laravel กับ MySQL ด้วย Heroku / ClearDB

Thanainan Khamthaen
I GEAR GEEK
Published in
5 min readApr 25, 2019

สิ่งที่จะได้จากบทความนี้ คือ เว็บแอปพลิเคชันที่พัฒนาด้วย Laravel มีฐานข้อมูล MySQL โดยใช้ ClearDB และ Deploy เว็บแอปพลิเคชันนี้ขึ้นบน Heroku

Heroku คืออะไร ?

Heroku คือ บริการคลาวด์แบบ PaaS (Platform as Service) ที่ใช้ทำเว็บแอปพลิเคชั่น สามารถ deploy เว็บได้แบบง่าย ๆ สำหรับเวอร์ชันฟรีสามารถใช้ได้สูงสุด 5 แอปพลิเคชันเท่านั้น

ClearDB คืออะไร ?

ClearDB คือ MySQL บนคลาวด์ ซึ่งเป็น add-on ของ heroku สำหรับเวอร์ชันฟรีมีขนาดฐานข้อมูล 5 MB แต่ก็เพียงพอสำหรับทดลองทำโปรเจคเล็ก ๆ

สิ่งที่ต้องมีในเครื่อง

  • Composer ใช้สำหรับลง Package ของ php
  • Code editor เช่น Visual Studio Code
  • MySQL Workbench ใช้ทดสอบการเชื่อมต่อกับฐานข้อมูล MySQL และใช้ตรวจสอบว่ามี Table นี้จริงตามที่ migration จาก laravel

Step 1: Setup Laravel

ติดตั้ง laravel ลงเครื่อง ส่วนใครที่มีโปรเจค laravel อยู่แล้ว ก็ใช้ของเดิมได้เลย

Step 2: Login to heroku

เข้าไปที่ https://id.heroku.com/login

จากนั้น ทำการกรอก email และ password เพื่อ Log In ส่วนใครที่ยังไม่เคยสมัคร heroku ก็กด Sign Up เพื่อสมัครสมาชิกได้เลย

Step 3: Create heroku app

เมื่อเข้าสู่ระบบแล้วจะเจอหน้านี้ กดปุ่ม new ด้านขวาบน

กด Create new App

กรอก App name และให้มีเช็คถูก เพราะชื่อไม่สามารถซ้ำกันได้ จากนั้นกดปุ่ม create app ได้เลย

Step 4: Add ClearDB add-on

เข้าไปที่ tab Resources จากนั้นกรอก cleardb เพื่อค้นหา add-ons จะเจอ ClearDB MySQL แล้วกดคลิก

ตรงนี้ Plan ใช้แบบ Free อยู่แล้ว กด Provision ได้เลย

Step 5: ClearDB Connect to MySQL Workbench

เข้าไปที่ tab Settings แล้วกดไปที่ปุ่ม Revel Config Vars

จะได้ค่า config ของ cleardb ตามด้านล่างนี้

mysql://{Username}:{Password}@{Hostname}/{Database}?reconnect=true

ทำการเปิดโปรแกรม MySQL Workbench จากนั้นกดปุ่ม บวก เพื่อสร้าง Connection

กรอก Connection Name (ชื่ออะไรก็ได้) กรอก Hostname และ Username ที่ได้จากค่า config ของ cleardb และกดปุ่ม Store in Keychain … แล้วจะมี dialog ให้กรอก password จากนั้นกรอก password จากค่า config ของ cleardb

กดปุ่ม Test Connection จากนั้น จะขึ้นข้อความ Successfully made the MySQL connection แสดงว่าสามารถเชื่อมต่อ MySQL ได้

กดปุ่ม OK

เข้าไปที่ connection ที่เพิ่งสร้าง

จะเจอฐานข้อมูลที่ชื่อตาม config ของ cleardb

Step 6: ClearDB connect to Laravel

จาก Step 5 คักลอกค่า config ที่ได้จาก clearDB ไปใส่ในไฟล์ .env

DB_HOST=YOUR_DB_HOST
DB_DATABASE=YOUR_DATABASE
DB_USERNAME=YOUR_DB_USERNAME
DB_PASSWORD=YOUR_DB_PASSWORD

Step 7: Migrate database

เปิด Terminal ที่โปรเจค Laravel แล้วพิมพ์คำสั่งตามด้านล่างเพื่อ migrate database

php artisan migrate:fresh

สำหรับใครที่เจอ error แบบนี้ เนื่องจาก mysql เป็น version 5.5.56 ซึ่งเป็น version เก่า วิธีแก้ปัญหา คือ

เข้าไปที่ไฟล์ App\Providers\AppServiceProvider.php จากนั้น แก้ไขโค้ดตามด้านล่าง

use Illuminate\Support\Facades\Schema;  public function boot() 
{
Schema::defaultStringLength(191);
}

จากนั้นพิมพ์คำสั่ง php artisan migrate:freshอีกครั้ง

ในฐานข้อมูลของเราก็จะมี Table ตามที่ Migration

Step 8: Seed database

พิมพ์คำสั่งตามด้านล่างเพื่อสร้าง seed database

php artisan make:seeder UsersTableSeeder

เข้าไปที่ไฟล์ database\seeds\UsersTableSeeder.php จากนั้น แก้ไขโค้ดตามด้านล่าง

use App\User;public function run() 
{
User::create([
'name' => 'test',
'email' => 'test@test.com',
'password' => '1234567890'
]);
}

เข้าไปที่ไฟล์ database\seeds\DatabaseSeeder.php จากนั้น แก้ไขโค้ดตามด้านล่าง

public function run() 
{
$this->call(UsersTableSeeder::class);
}

พิมพ์คำสั่งตามด้านล่างเพื่อ seed database

composer dump-autoloadphp artisan db:seed

Step 9: Create API

พิมพ์คำสั่งตามด้านล่างเพื่อสร้าง controller

php artisan make:controller API/UserController --api

เข้าไปที่ไฟล์ app\Http\Controllers\API\UserController.php จากนั้น แก้ไขโค้ดตามด้านล่าง

use App\User;public function index() 
{
return User::get();
}

เข้าไปที่ไฟล์ routes\api.php จากนั้น เพิ่มโค้ดตามด้านล่าง

Route::get('users', 'API\Controller@index');

Step 10: Run Laravel

พิมพ์คำสั่งตามด้านล่างเพื่อ run laravel

php artisan serve 

เข้าไปที่ 127.0.0.1:8000/api/users

จะได้ API รายชื่อ users

Step 11: Deploy Laravel to Heroku

เข้าไปที่ไฟล์ .gitignore แล้วลบ หรือ comment .env เพื่อให้ deploy .env เนื่องจากค่า config db อยู่ในไฟล์ .env ต้องเอา .env deploy ขึ้นไปด้วย

เพื่อให้ apache รันที่ public/ ด้วยคำสั่งด้านล่างนี้

echo "web: vendor/bin/heroku-php-apache2 public/" > Procfile

ในการ deploy heroku จำเป็นต้องมี Heroku CLI สำหรับใครที่ยังไม่มีสามารถดาวน์โหลดได้ที่ลิ้งด้านล่าง

ทำการเข้าสู่ระบบ heroku

heroku login

สร้างและ remote git

git init
heroku git:remote -a test-heroku-cleardb

add ไฟล์ทั้งหมด, commit message, และ push ผ่าน heroku

git add .
git commit -am "make it better"
git push heroku master

ทำการเปิดแอพ heroku

heroku open

จะได้แอพ heroku ของเราที่สร้างไว้ จากนั้น เข้าไปที่ path /api/users

เรียบร้อย แค่นี้ก็ได้ api แบบง่าย ๆ ที่ deploy ผ่าน heroku และใช้ cleardb ที่ใช้ add-on ของ heroku

จุดสังเกต

สำหรับ MySQL Workbench version ปัจจุบัน (8.0.15) ถ้าเชื่อมต่อกับ ClearDB บาง feature ไม่สามารถใช้งานได้ ต้องใช้ MySQL Workbench version 6.3 ถึงจะใช้งานfeatureทั้งหมดได้

สรุป

ฐานข้อมูลของ ClearDB ที่มีขนาด 5 MB และการ Deploy เว็บขึ้น Heroku ก็เพียงพอ ที่จะทำเว็บแอปพลิเคชันเล็ก ๆ เป็นของตัวเองได้ นอกจาก ClearDB แล้ว Heroku ยังมี Heroku Postgres ใครอยากลองเล่นก็ไปศึกษาเพิ่มเติมได้เลยครับ

--

--