Checklist ก่อน Deploy เว็บขึ้น Production
ตรวจ configuration, secrets, HTTPS, database migration, logging, monitoring, backup และ rollback ก่อนเปิดรับผู้ใช้จริง เพื่อให้ระบบไม่ได้แค่รันได้แต่ดูแลต่อได้

ภาพรวม
ก่อนกด Deploy เว็บขึ้น Production อย่าเชื่อความรู้สึกว่า น่าจะปลอดภัย ให้เชื่อ Checklist ที่ติ๊กได้จริง 🔐
ข้อแรกคือปิดของที่มีไว้ตอน dev debug=false ไม่โชว์ stack trace ไม่เปิด phpinfo ไม่ทิ้ง route /test, /debug, /seed error message ควรบอกผู้ใช้เท่าที่จำเป็น แต่ log ฝั่ง server ต้องละเอียดพอให้ไล่ปัญหาได้
ต่อมาคือ secret ทั้งหมด ห้ามอยู่ใน git ห้าม hardcode ใน frontend ห้ามแปะ API key ใน JavaScript แล้วหวังว่าไม่มีใครเห็น ใช้ env หรือ secret manager แยก key ของ dev, staging, production และลอง rotate key ก่อน deploy จริงสักรอบ เพื่อให้รู้ว่าถ้าหลุดแล้วเปลี่ยนได้ทัน
ฐานข้อมูลต้องล็อกให้แน่น user ของเว็บไม่ควรเป็น root ให้สิทธิ์เท่าที่ใช้ เช่น select, insert, update ถ้าเว็บไม่ต้อง drop table ก็อย่าให้ drop เปิด backup อัตโนมัติ และที่สำคัญกว่าการมี backup คือลอง restore แล้วจริง ๆ backup ที่กู้ไม่ได้คือของตกแต่ง
ตรวจ input ทุกทางเข้า form, query string, header, upload, webhook อย่าตรวจแค่หน้าเว็บ เพราะ attacker ไม่ได้ใช้ UI ของเราเสมอ SQL ต้องใช้ prepared statement HTML ที่แสดงจาก user ต้อง escape ไฟล์ upload ต้องจำกัดชนิด ขนาด และตำแหน่งเก็บ อย่าให้ upload .php แล้วเรียกผ่าน browser ได้
เช็ก authentication และ session cookie ควรมี HttpOnly, Secure, SameSite session id ต้องเปลี่ยนหลัง login logout แล้ว token ต้องใช้ต่อไม่ได้ หน้า admin ต้องมี auth ทุก route ไม่ใช่แค่ซ่อนปุ่มในหน้าเว็บ ถ้ามี reset password link ต้องหมดอายุ และใช้ได้ครั้งเดียว
เปิด HTTPS ให้ครบ บังคับ redirect จาก HTTP ไป HTTPS ตั้ง HSTS ถ้าพร้อม เช็ก certificate ไม่หมดอายุ และอย่าเรียก resource แบบ http ปนในหน้า https mixed content เล็ก ๆ ก็ทำให้ระบบดูไม่น่าเชื่อถือ
ตั้ง security headers พื้นฐาน Content-Security-Policy เพื่อลด XSS X-Frame-Options หรือ frame-ancestors กัน clickjacking X-Content-Type-Options: nosniff Referrer-Policy ให้เหมาะกับข้อมูลที่ส่งออก ไม่ต้องเริ่มแบบโหดจนเว็บพัง แต่ต้องเริ่มจาก policy ที่วัดผลได้
ตรวจ dependency ก่อนขึ้นจริง รัน npm audit, composer audit หรือเครื่องมือของ stack ที่ใช้ ลบ package ที่ไม่ได้ใช้ ล็อก version ด้วย lock file อย่า deploy ด้วย dependency ลอย ๆ เพราะวันนี้ผ่าน พรุ่งนี้อาจดึงของคนละชุด
ตั้ง rate limit จุดเสี่ยง login register forgot password ส่ง OTP ค้นหาหนัก ๆ และ API ที่เรียกแพง ใส่ limit ตาม IP, user, token พร้อม log เหตุการณ์ผิดปกติ ไม่ใช่รอให้ database ล้มแล้วค่อยรู้ตัว
ตรวจ config ของ production CORS ต้องระบุ origin จริง ไม่ใช่ * คู่กับ credential admin panel ไม่ควรเปิดทั้งโลกถ้าไม่จำเป็น port ที่ไม่ใช้ต้องปิด storage bucket ต้องไม่ public โดยบังเอิญ ไฟล์ .env, backup.zip, dump.sql ต้องเข้าไม่ได้จาก web root
สุดท้าย ทำ dry run ก่อน deploy ใช้ checklist เดียวกันกับทุก release ให้คนอื่นช่วย review อย่างน้อยหนึ่งรอบ หลัง deploy ให้เช็ก log, health check, error rate, login, payment หรือ flow สำคัญ Security ไม่ใช่งานวันสุดท้าย แต่มันคือประตูสุดท้ายก่อนส่งเว็บไปเจอโลกจริง 🙂
แนวทางนำไปใช้
- นำแนวคิดจากโพสต์นี้ไปทดลองกับงานจริงของคุณ
- แยกเป็นขั้นตอนเล็ก ๆ แล้วทำทีละส่วน
- บันทึกผลลัพธ์และสิ่งที่เรียนรู้เพื่อต่อยอด
สรุป
ตรวจ configuration, secrets, HTTPS, database migration, logging, monitoring, backup และ rollback ก่อนเปิดรับผู้ใช้จริง เพื่อให้ระบบไม่ได้แค่รันได้แต่ดูแลต่อได้