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) และพร้อมสำหรับการขยายตัวในอนาคต

Exit mobile version