Platform-as-a-Service (PaaS)

DigitalOcean App Platform

Deploy แอปพลิเคชันจาก GitHub, GitLab หรือ Docker ขึ้น Production ในไม่กี่คลิก ไม่ต้องจัดการ Server

เนื้อหาในบทความนี้

สถานะบทความ

อัปเดตล่าสุด: กุมภาพันธ์ 2026 | ระดับความยาก: ระดับเริ่มต้น (Beginner) | เวลาอ่าน: 25 นาที

แหล่งข้อมูลอ้างอิง: DigitalOcean Documentation, DigitalOcean Official

1. DigitalOcean App Platform คืออะไร?

DigitalOcean App Platform เป็นบริการ Platform-as-a-Service (PaaS) ที่ช่วยให้นักพัฒนาสามารถ Deploy แอปพลิเคชันจาก Source Code ไปยัง Cloud ได้โดยตรง โดยไม่ต้องกังวลเรื่องการจัดการ Infrastructure หรือ Server ใดๆ

ทำไมต้องใช้ App Platform?

  • ไม่ต้องจัดการ Server - DigitalOcean จัดการ Infrastructure ให้หมด
  • Deploy จาก Git - เชื่อมต่อ GitHub, GitLab หรือ Public Git Repository
  • Auto SSL/TLS - ใบ Certificate ฟรีอัตโนมัติ
  • Global CDN - เพิ่มความเร็วในการโหลดทั่วโลก
  • Scaling อัตโนมัติ - Scale ขึ้น/ลงตามความต้องการ
  • ราคาถูก - เริ่มต้น $0/เดือน สำหรับ Static Sites

Architecture Overview

Developer git push GitHub/GitLab Source Code DigitalOcean App Platform Build Deploy Scale Monitor Global CDN Users 🇹🇭 🌍 Database Managed DB

2. คุณสมบัติหลัก (Key Features)

Git Integration

เชื่อมต่อกับ GitHub, GitLab หรือ Public Git Repository ได้ทันที รองรับ Push-to-Deploy อัตโนมัติ

Docker Support

Deploy จาก Docker Image ที่อยู่บน Docker Hub หรือ DigitalOcean Container Registry

Auto SSL/TLS

ใบ Certificate HTTPS ฟรีอัตโนมัติ ไม่ต้องตั้งค่าเพิ่มเติม รองรับ Custom Domain

Auto Scaling

Scale จำนวน Instance ขึ้น/ลงอัตโนมัติตาม CPU หรือ Memory Usage (Dedicated CPU Plans)

Global CDN

Static Assets ถูกกระจายไปยัง CDN ทั่วโลก ทำให้โหลดเร็วขึ้นสำหรับผู้ใช้ทุกภูมิภาค

Managed Database

เชื่อมต่อกับ Managed Database (PostgreSQL, MySQL, MongoDB, Redis) ได้ง่าย

Rollback

ย้อนกลับไปยัง Version ก่อนหน้าได้ 10 ครั้งล่าสุด ช่วยลดความเสี่ยงจากการ Deploy

Monitoring

Dashboard แสดง Metrics แบบ Real-time เช่น CPU, Memory, Bandwidth และ Request Count

คุณสมบัติเพิ่มเติม:

HTTP/2 และ gRPC Support
HTTP/3 ที่ Edge Servers
DDoS Mitigation ในตัว
Dedicated Egress IP
Git LFS Support
GitHub Actions Integration
Serverless Functions
Unlimited Team Members

3. ราคาและแผนบริการ (Pricing)

Free Tier: Static Sites ฟรี! สามารถ Deploy ได้ถึง 3 แอป พร้อม 1 GiB outbound data ต่อแอปต่อเดือน

Free
$0 /เดือน
  • Static Sites สูงสุด 3 แอป
  • 1 GiB Outbound Data/แอป/เดือน
  • Auto SSL/TLS
  • Global CDN
เหมาะสำหรับ: Portfolio, Blog, Landing Page
Shared CPU
$5 /เดือน
  • 512 MiB RAM / 1 Shared CPU
  • 50 GiB Bandwidth/เดือน
  • Web Services & Workers
  • ไม่รองรับ Auto Scaling
เหมาะสำหรับ: Development, Testing

ตารางราคาแบบเต็ม (Shared CPU Plans)

Plan CPU RAM Bandwidth ราคา/เดือน Scaling
Basic XXS 1 Shared 512 MiB 50 GiB $5 No
Basic XS 1 Shared 1 GiB 100 GiB $10 No
Basic S 1 Shared 2 GiB 200 GiB $25 Manual
Basic M 2 Shared 4 GiB 250 GiB $50 Manual

Dedicated CPU Plans (รองรับ Auto Scaling)

Plan CPU RAM Bandwidth ราคา/เดือน Auto Scale
Pro XS 1 Dedicated 512 MiB 100 GiB $29 Yes
Pro S 1 Dedicated 2 GiB 300 GiB $39 Yes
Pro M 2 Dedicated 4 GiB 500 GiB $78 Yes
Pro L 4 Dedicated 8 GiB 700 GiB $156 Yes

4. เปรียบเทียบกับ PaaS อื่นๆ

Feature
DO App Platform
Vercel
Render
Heroku
Free Tier 3 Static Sites Unlimited Limited No
Entry Price (Web Service) $5/เดือน $20/เดือน $7/เดือน $5-7/เดือน
Docker Support Yes Limited Yes Yes
Auto Scaling Yes (Dedicated) Yes Yes Add-on
Managed Database $7/เดือน Partner $7/เดือน Add-on
Bandwidth Generous Limited Limited Extra
Thailand Datacenter Singapore Singapore Singapore Singapore

ข้อสังเกต: DigitalOcean App Platform เหมาะสำหรับทีมที่ต้องการราคาที่คาดเดือนได้ และมี Bandwidth ที่เพียงพอ ในขณะที่ Vercel เหมาะกับ Frontend-heavy applications

5. ภาษาและ Framework ที่รองรับ

App Platform ใช้ Cloud-Native Buildpacks ในการตรวจจับภาษาและ Build แอปพลิเคชันโดยอัตโนมัติ

Node.js

Express, Next.js, Nuxt.js, Gatsby, React, Vue

Python

Django, Flask, FastAPI, Streamlit

Go

Gin, Echo, Fiber, Standard Library

PHP

Laravel, Symfony, WordPress

Ruby

Ruby on Rails, Sinatra

Docker

Any Language with Dockerfile

Static Sites

HTML, CSS, JS, Hugo, Jekyll

Java

Spring Boot (via Docker)

.NET

ASP.NET Core (via Docker)

6. เริ่มต้นใช้งาน DigitalOcean App Platform

สิ่งที่ต้องเตรียม (Prerequisites)

  • DigitalOcean Account - สมัครที่ digitalocean.com
  • GitHub/GitLab Account - สำหรับเชื่อมต่อ Repository
  • Credit Card/PayPal - สำหรับชำระเงิน (จะหักตามการใช้งานจริง)
  • Source Code - พร้อม Deploy ใน Git Repository
1

สร้าง DigitalOcean Account

ไปที่ digitalocean.com และสมัครสมาชิกใหม่ คุณจะได้ $200 Credit ฟรี สำหรับทดลองใช้งาน 60 วัน

https://www.digitalocean.com
2

เข้าสู่ App Platform

หลังจาก Login แล้ว ไปที่ Control Panel → Create → Apps หรือคลิกลิงก์ด้านล่าง

https://cloud.digitalocean.com/apps
3

เชื่อมต่อ Git Repository

เลือก Source ที่ต้องการ:

  • GitHub - เชื่อมต่อและเลือก Repository
  • GitLab - เชื่อมต่อและเลือก Repository
  • Docker Hub - ใส่ Image Name
  • Public Git - ใส่ URL โดยตรง

7. ตัวอย่างการ Deploy แอปพลิเคชัน

ตัวอย่าง: Deploy Node.js + Express

package.json
{
  "name": "my-express-app",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  },
  "engines": {
    "node": "18.x"
  }
}
index.js
const express = require('express');
const app = express();
const port = process.env.PORT || 8080;

app.get('/', (req, res) => {
  res.json({
    message: 'Hello from DigitalOcean App Platform!',
    timestamp: new Date().toISOString()
  });
});

app.get('/health', (req, res) => {
  res.status(200).json({ status: 'healthy' });
});

app.listen(port, '0.0.0.0', () => {
  console.log(`Server running on port ${port}`);
});

ข้อสำคัญ:

  • • ต้อง Listen ที่ 0.0.0.0 ไม่ใช่ localhost
  • • ใช้ Port จาก Environment Variable: process.env.PORT
  • • Default Port คือ 8080

ตัวอย่าง: Deploy Python + Flask

requirements.txt
Flask==3.0.0
gunicorn==21.2.0
python-dotenv==1.0.0
app.py
import os
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def home():
    return jsonify({
        'message': 'Hello from DigitalOcean App Platform!',
        'framework': 'Flask'
    })

@app.route('/health')
def health():
    return jsonify({'status': 'healthy'}), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
runtime.txt (Optional)
python-3.11.0

ตัวอย่าง: Deploy ด้วย Dockerfile

Dockerfile
# Build stage
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

# Production stage
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .

# Create non-root user
RUN addgroup -g 1001 -S appuser && \
    adduser -S -D -H -u 1001 -s /sbin/nologin -G appuser appuser && \
    chown -R appuser:appuser /app
USER appuser

EXPOSE 8080
CMD ["node", "index.js"]

ข้อดีของ Docker:

  • • ควบคุม Environment ได้เต็มที่
  • • รองรับภาษาอะไรก็ได้
  • • Consistent ระหว่าง Development และ Production

App Spec File (.do/app.yaml)

สามารถกำหนด Configuration ในไฟล์ YAML เพื่อให้ Deploy แบบ Reproducible ได้:

.do/app.yaml
name: my-awesome-app
region: sgp  # Singapore - ใกล้ไทย
services:
  - name: web
    github:
      repo: username/my-app
      branch: main
    build_command: npm run build
    run_command: npm start
    environment_slug: node-js
    instance_count: 1
    instance_size_slug: apps-s-1vcpu-1gb
    env:
      - key: NODE_ENV
        value: production
      - key: DATABASE_URL
        value: ${db.DATABASE_URL}
    http_port: 8080
    health_check:
      http_path: /health

databases:
  - name: db
    engine: PG
    production: false
    cluster_name: my-postgres

8. Environment Variables

Environment Variables เป็นวิธีที่ปลอดภัยในการจัดการ Configuration และ Secrets โดยไม่ต้อง Hardcode ใน Source Code

App-level Variables

ใช้ได้กับทุก Component ในแอป

  • APP_URL - URL ของแอป
  • PORT - Port ที่แอปทำงาน
  • REGION - Datacenter Region

Dynamic Variables

อ้างอิงค่าจาก Resource อื่นๆ อัตโนมัติ

  • ${db.DATABASE_URL} - จาก Database
  • ${app.ASSETS_URL} - จาก Static Site
  • ${component.HOSTNAME} - จาก Component

วิธีตั้งค่า Environment Variables

ผ่าน doctl CLI
# ตั้งค่า Environment Variable
doctl apps update <app-id> --spec .do/app.yaml

# หรือใช้ API
curl -X PUT "https://api.digitalocean.com/v2/apps/{app_id}" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "spec": {
      "services": [{
        "name": "web",
        "env": [
          {"key": "API_KEY", "value": "secret123"}
        ]
      }]
    }
  }'

Secrets Management

สำหรับข้อมูลที่ sensitive เช่น API Keys, Database Passwords ให้เลือก "Encrypt" เพื่อซ่อนค่าจาก Logs

  • Encrypted variables จะไม่แสดงใน Build/Deploy Logs
  • เข้าถึงได้เฉพาะที่ Runtime เท่านั้น
  • แนะนำให้หมุนเวียน Secrets เป็นประจำ

9. Scaling แอปพลิเคชัน

Vertical Scaling

เพิ่ม CPU และ RAM ให้กับ Instance ที่มีอยู่

  • เปลี่ยน Plan ได้ทุกเมื่อ
  • มี Downtime สั้นๆ
  • เหมาะกับแอปที่ใช้ RAM มาก

Horizontal Scaling

เพิ่มจำนวน Instance เพื่อกระจายโหลด

  • ไม่มี Downtime
  • รองรับ High Availability
  • ต้องใช้ Plan ที่รองรับ

Auto Scaling (Dedicated CPU Plans เท่านั้น)

เพิ่ม/ลด Instance อัตโนมัติตาม CPU หรือ Memory Usage

App Spec สำหรับ Auto Scaling
services:
  - name: web
    instance_count: 2
    instance_size_slug: apps-d-1vcpu-2gb  # Dedicated CPU
    autoscaling:
      min_instance_count: 2
      max_instance_count: 10
      metrics:
        cpu:
          percent: 70  # Scale up เมื่อ CPU > 70%
        memory:
          percent: 80  # Scale up เมื่อ Memory > 80%

High Availability

การรัน 2 หรือมากกว่า Instance จะเปิดใช้งาน High Availability อัตโนมัติ โดย Instance จะถูกกระจายไปยัง Host ที่ต่างกัน

10. Database Integration

App Platform รองรับการเชื่อมต่อกับ Managed Database ได้หลายประเภท

PostgreSQL

เริ่มต้น $15/เดือน

MySQL

เริ่มต้น $15/เดือน

MongoDB

เริ่มต้น $15/เดือน

Redis

เริ่มต้น $15/เดือน

Development Database ($7/เดือน)

สำหรับการทดสอบและพัฒนา มีขนาดเล็ก (512 MB) และราคาถูกกว่า Production Database

  • เหมาะสำหรับ Staging/Development
  • No automated backups
  • Limited to 2 concurrent connections
Node.js Database Connection
// ใช้ Environment Variable จาก Database Component
const { Pool } = require('pg');

const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
  // หรือใช้ค่าแยก
  // host: process.env.DATABASE_HOST,
  // port: process.env.DATABASE_PORT,
  // user: process.env.DATABASE_USER,
  // password: process.env.DATABASE_PASSWORD,
  // database: process.env.DATABASE_NAME,
  ssl: {
    rejectUnauthorized: false  // สำหรับ DigitalOcean Managed DB
  }
});

module.exports = pool;

11. การแก้ไขปัญหา (Troubleshooting)

Build Failed: "Port 8080 is already in use"

สาเหตุ: แอปพยายาม Bind Port ที่ซ้ำกัน

แก้ไข: ใช้ process.env.PORT และ Listen ที่ 0.0.0.0

App Crashes: "Cannot find module"

สาเหตุ: Dependencies ไม่ครบหรือ package.json ไม่ถูกต้อง

แก้ไข: ตรวจสอบ package.json และ package-lock.json

Health Check Failed: Timeout

สาเหตุ: แอปใช้เวลาเริ่มต้นนานเกินไป

แก้ไข: เพิ่ม initial_delay_seconds ใน Health Check Config

Database Connection Failed

สาเหตุ: SSL Configuration หรือ Connection String ไม่ถูกต้อง

แก้ไข: ใช้ ${db.DATABASE_URL} และเปิด SSL

การดู Logs

สามารถดู Logs ได้หลายวิธี:

  • Dashboard: ไปที่ App → Insights → Logs
  • CLI: doctl apps logs <app-id> --tail
  • API: GET /v2/apps/{app_id}/logs

12. สรุป (Summary)

ข้อดี

  • • Deploy ง่าย จาก Git Repository โดยตรง
  • • ราคาถูก เริ่มต้น $0 สำหรับ Static Sites
  • • Auto SSL/TLS และ Global CDN ในตัว
  • • Scaling ทั้ง Manual และ Auto
  • • เชื่อมต่อ Managed Database ได้ง่าย
  • • รองรับหลายภาษา: Node.js, Python, Go, PHP, Docker

ข้อจำกัด

  • • Auto Scaling ต้องใช้ Dedicated CPU Plans
  • • ไม่มี Datacenter ในประเทศไทย (ใช้ Singapore)
  • • ไม่เหมาะสำหรับแอปที่ต้องการควบคุม OS มาก
  • • WebSocket มีข้อจำกัดบางอย่าง
  • • Cold Start สำหรับแอปที่ไม่มี traffic

เหมาะสำหรับใคร?

Startups

Deploy MVP ได้เร็ว ไม่ต้องดูแล Infrastructure

Individual Developers

ทำ Side Projects หรือ Portfolio ได้ฟรี

Small Teams

CI/CD ในตัว ไม่ต้องตั้งค่าเอง

บทความที่เกี่ยวข้อง