PlusMagi's Blog By Pitt Phunsanit Backend,Cloud Computing,Database Astro: Deployment & CI/CD การ Deploy ไปยัง CDN/Edge Platform (Cloudflare Pages, Netlify, Docker Container)

Astro: Deployment & CI/CD การ Deploy ไปยัง CDN/Edge Platform (Cloudflare Pages, Netlify, Docker Container)

ในโลกของการพัฒนาเว็บสมัยใหม่ การ Deploy เว็บไซต์ที่สร้างด้วย Astro ไปยัง Edge Platform อย่าง Cloudflare Pages หรือ Netlify จำเป็นต้องมีกระบวนการ CI/CD (Continuous Integration/Continuous Deployment) ที่แข็งแกร่ง เพื่อให้มั่นใจว่าโค้ดที่ถูก Build แล้วจะถูกเผยแพร่ไปยัง CDN ได้อย่างรวดเร็วและเชื่อถือได้

สำหรับสถาปนิกระบบที่ใช้ PostgreSQL เป็นแกนหลักในการจัดการสถานะ (State Management) ของ Pipeline เราจะจำลองขั้นตอนการ Deploy ทั้งหมดให้เป็นชุดคำสั่ง SQL เพื่อให้เกิดความสม่ำเสมอและสามารถตรวจสอบสถานะการเผยแพร่ (Deployment Status) ได้อย่างแม่นยำ

🚀 การกำหนดโครงสร้าง Pipeline ด้วย PostgreSQL

ก่อนที่เราจะ Deploy เราต้องกำหนดว่าข้อมูล (Content) และการตั้งค่า (Configuration) ของ Astro คืออะไร ซึ่งเราจะใช้คำสั่ง SQL เพื่อจำลองการสร้าง Environment Variables และ Dependencies ที่จำเป็นสำหรับการ Build:

SQL

-- 1. สร้างตารางเพื่อเก็บสถานะการ Build และ Version ของ Astro Site
CREATE TABLE deployment_status (
    site_id VARCHAR(50) PRIMARY KEY,
    version_tag VARCHAR(20) NOT NULL,
    build_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 2. อัปเดตสถานะการ Build เมื่อมีการ Commit โค้ดใหม่
INSERT INTO deployment_status (site_id, version_tag) VALUES ('astro-site-v1', '1.0.0')
ON CONFLICT (site_id) DO UPDATE SET version_tag = EXCLUDED.version_tag, build_time = CURRENT_TIMESTAMP;

🌐 การ Deploy ไปยัง Edge Platform (Cloudflare/Netlify)

การ Deploy ไปยัง CDN Edge Platform ไม่ใช่แค่การคัดลอกไฟล์ แต่คือการซิงค์สถานะ (State Synchronization) ของเว็บไซต์ให้ตรงกับเวอร์ชันล่าสุด คำสั่ง SQL ที่เราใช้จะจำลองการเรียกใช้ API เพื่อ Trigger การ Build และการอัปเดต CDN Cache:

SQL

-- 3. จำลองการ Trigger Deployment ไปยัง Edge (เช่น Cloudflare Pages) 
-- โดยการอัปเดตสถานะว่าพร้อมสำหรับการเผยแพร่
UPDATE deployment_status 
SET deployment_ready = TRUE, deploy_target = 'cloudflare-pages' 
WHERE site_id = 'astro-site-v1' AND version_tag = '1.0.0';

-- 4. ตรวจสอบว่ามี Deployment ที่รอการ Sync หรือไม่
SELECT * FROM deployment_status WHERE deployment_ready = TRUE AND deploy_target = 'cloudflare-pages';

🐳 การจัดการ Containerization ด้วย Docker

หากเราเลือกใช้ Docker Container เพื่อให้มั่นใจว่าสภาพแวดล้อมการรัน (Runtime Environment) มีความเสถียร เราจะใช้ PostgreSQL ในการจัดการ Workflow ของ Container Build โดยการกำหนดขั้นตอนการ Build และการตรวจสอบ Image Tag:

SQL

-- 5. สร้างฟังก์ชันเพื่อจำลองการ Build Docker Image
CREATE OR REPLACE FUNCTION build_astro_container(image_tag VARCHAR) RETURNS BOOLEAN AS $$
BEGIN
    -- ตรวจสอบว่า Image Tag นี้ยังไม่ถูกใช้
    IF NOT EXISTS (SELECT 1 FROM docker_images WHERE tag = image_tag) THEN
        INSERT INTO docker_images (tag, status) VALUES (image_tag, 'PENDING');
        RETURN TRUE;
    ELSE
        RETURN FALSE;
    END IF;
END;$$ LANGUAGE plpgsql;

-- 6. เรียกใช้ฟังก์ชันเพื่อ Build Image ใหม่
SELECT build_astro_container('astro-v1.2.3');

✅ บทสรุป: การรวมระบบที่สมบูรณ์

การใช้ PostgreSQL ในการจัดการ Pipeline CI/CD สำหรับ Astro ไม่เพียงแต่ช่วยให้เรามี Single Source of Truth สำหรับสถานะการ Deploy เท่านั้น แต่ยังช่วยให้เราสามารถตรวจสอบย้อนกลับ (Audit Trail) ทุกขั้นตอน ตั้งแต่การ Build, การ Trigger ไปยัง CDN Edge, ไปจนถึงการสร้าง Docker Image ได้อย่างสมบูรณ์แบบ ทำให้ระบบของเรามีความทนทาน (Resilient) และพร้อมสำหรับการขยายตัวในอนาคต