- เป้าหมายการเรียนรู้
- 1. Laravel Cloud คืออะไร
- 2. สิ่งที่ต้องเตรียม
- 3. สร้าง Laravel Project
- 4. สร้าง Demo Endpoint
- 5. เตรียม Database Demo
- 6. Push Source Code ขึ้น Git
- 7. สร้าง Application บน Laravel Cloud
- 8. เลือก Runtime
- 9. เพิ่ม Managed Database
- 10. Environment Variables และ Secrets
- 11. Build Command
- 12. Deploy Command
- 13. Deploy Application
- 14. ทดสอบ Database
- 15. Auto Deploy ด้วย Git Push
- 16. Custom Domain และ HTTPS
- 17. Cache
- 18. Queue
- 19. Scheduler
- 20. Object Storage
- 21. WebSockets / Reverb
- 22. Logs และ Monitoring
- 23. Production Checklist
- 24. Laravel Cloud vs VPS
- 25. Laravel Cloud vs Forge vs Vapor
- 26. Workshop Challenge
- 27. สรุป
- แหล่งศึกษาเพิ่มเติม
คู่มือ 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: https://laravel.com/cloud
- Deploy a Laravel App: https://laravel.com/cloud/deploy-a-laravel-app
- Application Resources: https://laravel.com/cloud/app-resources
- Laravel Deployment Documentation: https://laravel.com/docs/deployment
หมายเหตุ: Laravel Cloud พัฒนาอย่างต่อเนื่อง Runtime, Resources, Limits, UI และราคาอาจเปลี่ยนแปลง ควรตรวจสอบเอกสารทางการก่อนนำไปใช้ Production