คู่มือ Workshop สำหรับนำ Laravel ขึ้น Production ด้วย Laravel Cloud ตั้งแต่ Git Repository, Database, Environment Variables, Deployment, Auto Deploy จนถึง Custom Domain

#เป้าหมายการเรียนรู้

เมื่อจบ Workshop ผู้เรียนจะสามารถสร้าง Laravel Application, เชื่อม Source Code กับ Laravel Cloud, เพิ่ม Managed Database, ตั้งค่า Environment Variables/Secrets, กำหนด Build และ Deploy Commands, เปิด Push-to-Deploy และเชื่อม Custom Domain ได้

#1. Laravel Cloud คืออะไร

Laravel Cloud คือ Managed Application Platform จากทีม Laravel ที่ออกแบบมาสำหรับการ deploy, run และ scale แอปพลิเคชัน โดยลดภาระการดูแล Server, Web Server, TLS และ infrastructure หลายส่วน

Developer
   |
   | git push
   v
GitHub / GitLab / Bitbucket
   |
   v
+----------------------------------+
|          Laravel Cloud           |
| Build -> Deploy -> Application   |
|                 |                |
|     Database / Cache / Queue     |
|     Storage / WebSockets         |
+----------------------------------+
   |
   v
HTTPS / Custom Domain -> Users

#2. สิ่งที่ต้องเตรียม

  • PHP และ Composer
  • Node.js / npm หากมี Frontend Assets
  • Git
  • บัญชี GitHub, GitLab หรือ Bitbucket
  • บัญชี Laravel Cloud

ตรวจสอบเครื่องมือ:

php -v
composer --version
node -v
npm -v
git --version

#3. สร้าง Laravel Project

composer create-project laravel/laravel laravel-cloud-demo
cd laravel-cloud-demo
php artisan serve

เปิด http://127.0.0.1:8000

#4. สร้าง Demo Endpoint

แก้ routes/web.php:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::get('/cloud', function () {
    return response()->json([
        'application' => 'Laravel Cloud Demo',
        'status' => 'running',
        'framework' => app()->version(),
        'environment' => app()->environment(),
    ]);
});

ทดสอบ http://127.0.0.1:8000/cloud

#5. เตรียม Database Demo

php artisan make:model Product -m

ใน Migration:

Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->decimal('price', 10, 2);
    $table->timestamps();
});

ใน app/Models/Product.php:

protected $fillable = ['name', 'price'];

เพิ่ม Route:

use App\Models\Product;

Route::get('/products', function () {
    return Product::all();
});

#6. Push Source Code ขึ้น Git

git init
git add .
git commit -m "Initial Laravel Cloud workshop"
git branch -M main
git remote add origin <YOUR_REPOSITORY_URL>
git push -u origin main

อย่า Commit .env หรือ secrets ขึ้น Repository

#7. สร้าง Application บน Laravel Cloud

Workflow หลัก:

New Application
      |
Connect Git Provider
      |
Select Repository + Branch
      |
Select Region
      |
Create Application

Laravel Cloud รองรับ GitHub, GitLab และ Bitbucket และตรวจจับ Laravel Application จาก Repository ได้

#8. เลือก Runtime

ใน Environment Settings ตรวจสอบ Runtime เป็น PHP และเลือกรุ่นที่เข้ากันได้กับ Application

composer check-platform-reqs

Laravel Cloud ปัจจุบันรองรับ PHP 8.2–8.5 สำหรับ Laravel Cloud applications ที่เข้าเงื่อนไขของแพลตฟอร์ม

#9. เพิ่ม Managed Database

จาก Infrastructure Canvas/Resources เลือกเพิ่ม Database เช่น Serverless PostgreSQL หรือ Laravel MySQL

เมื่อ attach Database แล้ว Cloud จะ inject credentials เช่น:

DB_HOST=...
DB_PORT=...
DB_DATABASE=...
DB_USERNAME=...
DB_PASSWORD=...

จึงไม่ควร hard-code credentials ใน Source Code

#10. Environment Variables และ Secrets

ตัวอย่างค่าของ Application:

APP_NAME="Laravel Cloud Demo"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-app.laravel.cloud
LOG_LEVEL=error

Production ต้องใช้:

APP_DEBUG=false

Laravel Cloud สามารถสร้าง/inject APP_KEY ใน deployment แรกได้ หากต้องการสร้างเอง:

php artisan key:generate --show

API keys และข้อมูลลับควรเก็บเป็น Secrets ของแพลตฟอร์ม

#11. Build Command

Laravel Cloud มีค่าเริ่มต้นให้เมื่อ detect Laravel แต่สามารถปรับได้ ตัวอย่าง:

composer install --no-dev --optimize-autoloader && npm ci && npm run build

หากไม่มี Frontend Build:

composer install --no-dev --optimize-autoloader

สามารถเพิ่ม optimization:

php artisan optimize

#12. Deploy Command

ตัวอย่าง:

php artisan migrate --force

--force ใช้ยืนยันการรัน migration ใน Production ควรออกแบบ migration ให้รองรับ deployment ที่ลด downtime และหลีกเลี่ยง destructive schema changes แบบฉับพลัน

#13. Deploy Application

กด Deploy แล้ว Cloud จะดึง source, build image, รัน build/deploy command, เปิด deployment ใหม่ควบคู่กับของเดิม และสลับ traffic เมื่อพร้อม

Git Repository
      |
Fetch Source
      |
Build
      |
Deploy Command
      |
New Deployment
      |
Switch Traffic
      |
Production

เมื่อสำเร็จจะได้ URL ลักษณะ:

https://your-app.laravel.cloud

ทดสอบ /, /cloud และ /products

#14. ทดสอบ Database

หลัง migration สามารถสร้างข้อมูลด้วย Tinker/Artisan ตามวิธีที่ Environment รองรับ เช่น:

App\Models\Product::create([
    'name' => 'Laravel Cloud Workshop',
    'price' => 990.00,
]);

เรียก /products เพื่อตรวจสอบข้อมูล

#15. Auto Deploy ด้วย Git Push

เพิ่ม endpoint:

Route::get('/version', function () {
    return [
        'version' => '1.1.0',
        'deployed_at' => now()->toIso8601String(),
    ];
});

จากนั้น:

git add .
git commit -m "Add version endpoint"
git push origin main

Push-to-deploy เปิดเป็นค่าเริ่มต้นใน Laravel Cloud จึงสามารถ trigger deployment ใหม่จาก connected branch ได้โดยอัตโนมัติ

#16. Custom Domain และ HTTPS

ในเมนู Domains เพิ่ม เช่น:

app.example.com

นำ DNS record ที่ Laravel Cloud กำหนดไปตั้งกับ DNS Provider เมื่อ DNS propagate ระบบจะ provision และต่ออายุ TLS certificate ให้โดยอัตโนมัติ

app.example.com -> DNS -> Laravel Cloud -> Laravel App

#17. Cache

สามารถ attach Managed Cache/Valkey และใช้ Laravel Cache API ได้ตามปกติ:

use Illuminate\Support\Facades\Cache;

Route::get('/cache-demo', function () {
    return Cache::remember('workshop', 60, fn () => now()->toDateTimeString());
});

#18. Queue

เหมาะกับงาน Email, Image Processing, Import, Reports หรือ External API/AI jobs

php artisan make:job ProcessReport
ProcessReport::dispatch();
HTTP Request -> Laravel -> Queue -> Managed Worker -> Job

Laravel Cloud มี Managed Queues ที่ scale workers ตาม backlog และสามารถลด resource เมื่อ idle

#19. Scheduler

ตัวอย่างใน routes/console.php:

use Illuminate\Support\Facades\Schedule;

Schedule::command('app:daily-report')->dailyAt('01:00');

Scheduled tasks สามารถทำงานผ่าน Cloud โดยไม่ต้องดูแล cron server แบบ VPS ด้วยตนเอง

#20. Object Storage

อย่าพึ่ง local filesystem ของ compute สำหรับไฟล์ที่ต้อง persistent ใช้ Object Storage เช่น:

use Illuminate\Support\Facades\Storage;

Storage::disk('s3')->put(
    'documents/example.txt',
    'Laravel Cloud Workshop'
);

Laravel Cloud Object Storage เป็น S3-compatible resource

#21. WebSockets / Reverb

สำหรับ Chat, Notifications และ Live Dashboard สามารถเพิ่ม Managed WebSockets ที่ใช้ Laravel Reverb

Laravel App -> Broadcast Event -> Reverb/WebSocket -> Browsers

Cloud สามารถ inject server-side และ frontend variables ที่จำเป็นให้ Environment

#22. Logs และ Monitoring

ตรวจสอบอย่างน้อย:

  • Application Logs
  • Deployment Logs
  • HTTP Errors
  • CPU / Memory
  • Database
  • Queue Failures

ตัวอย่าง:

use Illuminate\Support\Facades\Log;

Log::info('Laravel Cloud workshop', [
    'status' => 'running',
]);

ห้าม log password, API key, access token หรือข้อมูลอ่อนไหว

#23. Production Checklist

  • [ ] APP_ENV=production
  • [ ] APP_DEBUG=false
  • [ ] HTTPS ทำงาน
  • [ ] Database เชื่อมต่อได้
  • [ ] Migration สำเร็จ
  • [ ] Secrets ไม่อยู่ใน Git
  • [ ] Persistent uploads ใช้ Object Storage
  • [ ] Queue ทำงาน
  • [ ] Scheduler ทำงาน
  • [ ] Logs ไม่มีข้อมูลลับ
  • [ ] Custom Domain ทำงาน
  • [ ] Backup strategy พร้อม
  • [ ] Monitoring/Alerting พร้อม
  • [ ] มี rollback/recovery plan

#24. Laravel Cloud vs VPS

หัวข้อ Laravel Cloud VPS จัดการเอง
Provision Server Managed ทำเอง
OS Patch Managed ทำเอง
Web Server Managed ติดตั้งเอง
TLS Managed ตั้งค่าเอง
Deployment Integrated สร้าง pipeline เอง
Scaling Platform รองรับ ออกแบบเอง
Database Managed resource ดูแล/ซื้อแยก
Queue Managed option ดูแล worker เอง
OS-level control ต่ำกว่า สูงกว่า

#25. Laravel Cloud vs Forge vs Vapor

Laravel Cloud
  Managed Application Platform
  -> Deploy + Managed Resources + Scaling

Laravel Forge
  Server Management / Provisioning
  -> VPS / Cloud VM

Laravel Vapor
  Laravel Serverless Platform
  -> AWS Serverless Architecture

#26. Workshop Challenge

สร้าง CRUD API:

GET    /api/products
POST   /api/products
GET    /api/products/{id}
PUT    /api/products/{id}
DELETE /api/products/{id}

แล้วทำภารกิจ: Push → Deploy → Attach Database → Migration → Test API → แก้ Code → Push ใหม่ → ตรวจ Auto Deploy → Custom Domain → ตรวจ HTTPS และ Logs

#27. สรุป

Laravel Cloud ทำให้ workflow เน้น Application มากกว่า Infrastructure:

Code -> Git -> Laravel Cloud
                 |
                 +-> Compute
                 +-> Database
                 +-> Cache
                 +-> Queue
                 +-> Storage
                 +-> WebSockets
                 |
                 v
             Production

จุดสำคัญคือการลดงาน provisioning, credentials, TLS, scaling และการเชื่อม managed resources เพื่อให้ทีมใช้เวลากับ Application และ Business Logic มากขึ้น

#แหล่งศึกษาเพิ่มเติม

หมายเหตุ: Laravel Cloud พัฒนาอย่างต่อเนื่อง Runtime, Resources, Limits, UI และราคาอาจเปลี่ยนแปลง ควรตรวจสอบเอกสารทางการก่อนนำไปใช้ Production