ทดลองเชื่อม Laravel กับ MySQL ด้วย Heroku / ClearDB
สิ่งที่จะได้จากบทความนี้ คือ เว็บแอปพลิเคชันที่พัฒนาด้วย 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 ใครอยากลองเล่นก็ไปศึกษาเพิ่มเติมได้เลยครับ