การเพิ่มและตั้งค่าเว็บไซต์บน Docker Container ใน ServBay
ServBay คือสภาพแวดล้อมสำหรับการพัฒนาเว็บบนเครื่องที่รองรับทั้ง macOS และ Windows โดยสนับสนุนหลายภาษาและเทคโนโลยีต่างๆ นอกจากการรันแพ็กเกจที่ติดตั้งมากับ ServBay (เช่น PHP, Node.js, Python, Go, Java, ฐานข้อมูล ฯลฯ) เพื่อโฮสต์เว็บไซต์แล้ว คุณยังสามารถใช้ Docker Container เพื่อจัดการและรันเว็บไซต์หรือบริการของคุณ วิธีนี้ช่วยเพิ่มความยืดหยุ่น แยกสภาพแวดล้อม และความสม่ำเสมอ เหมาะสำหรับโปรเจกต์ที่มีข้อกำหนดเฉพาะด้าน environment หรือ dependency
บทความนี้จะแนะนำวิธีการเพิ่มเว็บไซต์ที่รันบน Docker Container ใน ServBay และการใช้งาน Reverse Proxy เพื่อเชื่อมต่อกับกระบวนการพัฒนาบนเครื่องของคุณ
ภาพรวม
ด้วยการตั้งค่า ServBay ให้เป็น Reverse Proxy คุณสามารถส่งต่อคำขอโดเมนที่กำหนดไปยังบริการใน Docker Container ที่เปิดพอร์ตไว้บนเครื่องหลัก (host) โดย ServBay จะจัดการ traffic ขาเข้า เช่น ใบรับรอง HTTPS และการแก้ไขโดเมนขณะที่ Docker Container มีหน้าที่รันแอปพลิเคชัน วิธีนี้รวมความสะดวกจาก ServBay UI และความแข็งแกร่งของ Docker containerization
มีขั้นตอนต่อไปนี้ เพื่อนำคุณไปตั้งค่าเว็บไซต์ที่รันบน Docker Container ใน ServBay ได้อย่างครบถ้วน
เงื่อนไขเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบว่าคุณได้เตรียมสิ่งต่อไปนี้แล้ว:
- ติดตั้งและรัน ServBay แล้ว: คุณได้ติดตั้งและเปิดใช้งาน ServBay บน macOS เรียบร้อย
- ติดตั้งและรัน Docker แล้ว: ติดตั้ง Docker Desktop หรือสิ่งแวดล้อม Docker อื่นๆ บน macOS และบริการ Docker ทำงานอยู่
- เตรียม Docker Image และ Container แล้ว: เตรียมหรือดึง Docker Image ที่มีเว็บไซต์หรือแอปของคุณ และสามารถรัน Image เพื่อสร้าง Container ได้
ขั้นตอนการเพิ่มเว็บไซต์
ขั้นตอนที่ 1: เตรียมและรัน Docker Container
ก่อนอื่น ตรวจสอบให้แน่ใจว่า Docker Container ของคุณกำลังรันอยู่ และบริการภายใน (เช่น เซิร์ฟเวอร์เว็บ) กำลังฟังพอร์ตที่ถูกเผยพอร์ตผ่าน host (macOS) ด้วยฟีเจอร์ port mapping ของ Docker
เช่น ถ้าคุณมี Nginx Container ที่ฟังพอร์ต 80 คุณสามารถใช้คำสั่งนี้เพื่อ map พอร์ต 8080 ของ host กับพอร์ต 80 ของ container:
bash
docker run -d --name my-nginx-servbay -p 8080:80 nginx1
ในตัวอย่างนี้ Nginx ภายใน container my-nginx-servbay ใช้พอร์ต 80 โดยมี -p 8080:80 เพื่อ map พอร์ต 80 ของ container กับพอร์ต 8080 ของ host ServBay จะเชื่อมต่อกับพอร์ต 8080 ของ host
ปรับตาม application และการตั้งค่า Dockerfile ของคุณ ตรวจสอบให้แน่ใจว่าบริการภายใน container ฟังที่พอร์ตที่ถูกต้อง และ map กับพอร์ตบน host ที่ต้องการแล้ว
ขั้นตอนที่ 2: เปิดส่วนจัดการของ ServBay
ไปที่โฟลเดอร์ Applications บน macOS ของคุณ หาไอคอนแอป ServBay แล้วดับเบิลคลิกเพื่อเปิดหน้าต่างจัดการ ServBay
ขั้นตอนที่ 3: ไปที่หน้าจัดการเว็บไซต์
เมื่อเปิด ServBay คุณจะพบกับหน้าเมนหลัก ด้านซ้ายในเมนูนำทาง เลือก เว็บไซต์ หน้านี้คือการจัดการเว็บไซต์ทั้งหมดที่คุณเพิ่มในระบบ
ภาพประกอบ: คลิก "เว็บไซต์" ที่แถบด้านซ้ายเพื่อเข้าสู่หน้าจัดการ
ขั้นตอนที่ 4: เพิ่มเว็บไซต์ใหม่
ที่ด้านล่างของหน้าจัดการเว็บไซต์ จะมีปุ่ม + กดที่ปุ่มนี้ จะมีฟอร์มใหม่ปรากฏที่แถบขวาเพื่อกรอกข้อมูลสำหรับการตั้งค่าเว็บไซต์ใหม่ของคุณ
ภาพประกอบ: กดปุ่ม "+" ด้านล่างเพื่อเพิ่มเว็บไซต์ใหม่
ขั้นตอนที่ 5: ตั้งค่าข้อมูลเว็บไซต์
ในฟอร์มสำหรับการตั้งค่าเว็บไซต์ใหม่ ให้กรอกข้อมูลสำคัญต่าง ๆ ดังนี้:
- ชื่อ (Name): ตั้งชื่อที่เข้าใจง่ายสำหรับเว็บไซต์ เช่น
Docker Nginx Demoใช้เพื่อการจัดการภายใน ServBay เท่านั้น - โดเมน (Domain): ระบุโดเมน local ที่ต้องการใช้เข้าถึงเว็บไซต์บน Docker Container ในเบราว์เซอร์ แนะนำให้ใช้
.servbay.demoเป็น suffix เพื่อหลีกเลี่ยงการชนกับโดเมนสาธารณะ เช่นdocker.servbay.demoServBay จะตั้งค่าระบบ hosts ให้อัตโนมัติเพื่อชี้โดเมนไปที่ local (127.0.0.1) - โปรโตคอล (Protocol): เลือกโปรโตคอลที่เว็บไซต์รองรับ โดยทั่วไปใช้ค่าเริ่มต้น
HTTP/HTTPSServBay จะเปิดพอร์ต HTTP (80) และ HTTPS (443) และจัดการ SSL ให้อัตโนมัติ - วิธีการขอใบรับรอง SSL (SSL Certificate Request Method): แนะนำเลือก
ServBay CAServBay จะสร้างและจัดการ SSL certificate ที่เชื่อถือโดย ServBay User CA หากติดตั้ง ServBay Public CA ใน keychain ระบบ เบราว์เซอร์จะเชื่อถือ certificate เหล่านี้ ช่วยให้พัฒนาและทดสอบ HTTPS บนเครื่องสะดวกขึ้น หากต้องการอื่น ๆ เลือกACME(เช่น Let's Encrypt) หรือCustom(ใช้ certificate ของตัวเอง) - ประเภทเว็บไซต์ (Website Type): 【สำคัญ】 เลือก
Reverse Proxy (การส่งต่อแบบย้อนกลับ)หมายถึง ServBay จะทำหน้าที่เสมือนเกตเวย์สำหรับโดเมน และส่งต่อ request ไปยัง back-end address ที่กำหนด - ที่อยู่ IP (IP Address): ใส่ IP ของบริการ Docker Container ที่เปิดบน host สำหรับ Docker แบบ local ส่วนมากจะใช้ loopback address คือ
127.0.0.1 - พอร์ต (Port): ระบุพอร์ตบน host ที่ Docker Container เปิดไว้ ตรงกับที่ใช้ใน
docker run -p <host port>:<container port>หากใช้-p 8080:80ให้กรอก8080
ภาพประกอบ: กรอกข้อมูลตั้งค่า Reverse Proxy สำหรับเว็บไซต์ Docker
ขั้นตอนที่ 6: บันทึกการตั้งค่า
หลังกรอกข้อมูลทั้งหมดแล้ว กดปุ่ม เพิ่ม (Add) ที่ด้านล่างฟอร์ม
ServBay จะประมวลผลคำขอของคุณ โดยเพิ่มกฎ Reverse Proxy ในเซิร์ฟเวอร์เว็บ (Caddy หรือ Nginx) และปรับ hosts file ในระบบให้ชี้โดเมนไปที่ local
หลังบันทึกสำเร็จ อาจใช้เวลาเล็กน้อยสำหรับสลับ config หลังจากนั้นคุณสามารถลองเข้าถึงโดเมนที่เพิ่มไปแล้วได้ทันที
ขั้นตอนที่ 7: เข้าเว็บไซต์และใช้เมนูด่วน
หลังบันทึกสำเร็จ กลับสู่หน้ารายการเว็บไซต์ คุณจะเห็นแถบเว็บไซต์ใหม่ที่เพิ่มไปให้แน่ใจว่าสถานะเป็น "กำลังทำงาน"
ตอนนี้สามารถเข้าโดเมนที่ตั้งค่าไว้ในเบราว์เซอร์ (เช่น http://docker.servbay.demo หรือ https://docker.servbay.demo) หากตั้งค่าทุกอย่างถูกต้อง ServBay จะส่ง request ไปยังบริการของ Docker Container และแสดงหน้าเว็บจาก container
ในบรรทัดรายการเว็บไซต์ ServBay มีปุ่มเมนูด่วนให้ใช้งานได้สะดวก ได้แก่:
- เปิดโฟลเดอร์รากใน IDE: (สำหรับเว็บไซต์ประเภท reverse proxy ปุ่มนี้อาจไม่ใช้งานหรือเปิดไปที่โฟลเดอร์ config ของ ServBay แล้วแต่ configuration และเวอร์ชั่น)
- เปิดเว็บไซต์ในเบราว์เซอร์: คลิกเข้าเว็บ URL ได้อย่างรวดเร็ว
- ดู log เว็บไซต์: ดู access log และ error log ที่ ServBay เก็บไว้ ช่วยสำหรับ debug
- หยุด/เปิดใช้งานเว็บไซต์: ปิดชั่วคราวหรือเปิดใช้งานการกำหนดค่า reverse proxy
- ลบเว็บไซต์: เอาการตั้งค่านี้ออกจาก ServBay
ภาพประกอบ: ปุ่มเมนูด่วนจากรายการเว็บไซต์ใน ServBay
ข้อควรระวังและแนวทางปฏิบัติที่ดี
- สถานะของ Docker Container: ตรวจสอบให้แน่ใจว่า container เป้าหมายกำลังทำงาน มิฉะนั้น ServBay จะไม่สามารถส่งต่อ request ได้
- การตั้งค่า port mapping: ตรวจสอบคำสั่ง
-pตอน run Docker และพอร์ตที่กรอกใน ServBay ให้ตรงกัน และมั่นใจว่าพอร์ตนั้นไม่ถูกโปรแกรมอื่นใช้บน host - Firewall: ตรวจสอบ firewall บน macOS ของคุณ ให้เปิดพอร์ตที่ ServBay ใช้งาน (ปกติ 80, 443) รวมถึงพอร์ตที่ Docker เปิดบน host
- โหมดเครือข่ายของ Docker: ส่วนใหญ่ใช้ mode
bridgeและ mapping พอร์ตด้วย-pจะง่ายสุด หากใช้ modehostServBay จะเข้าถึงพอร์ตภายใน container ได้โดยตรง (ถ้า container ฟังที่ 80 ก็กรอก 80) แต่โมดนี้อาจมีปัญหาพอร์ตชนได้ - ServBay CA: เพื่อการทดสอบ HTTPS ที่สะดวก แนะนำให้ติดตั้ง ServBay Public CA เพื่อให้เบราว์เซอร์เชื่อถือ certificate ที่สร้างโดย ServBay จะไม่พบแจ้งเตือน "ไม่ปลอดภัย"
คำถามที่พบบ่อยและการแก้ไขปัญหา (FAQ)
ถาม: หลังเพิ่มเว็บไซต์เข้าไม่ได้ เบราว์เซอร์แจ้งว่าเชื่อมต่อไม่ได้หรือหมดเวลา?
ตอบ: ตรวจสอบตามนี้:
- เช็คสถานะเว็บไซต์ใน ServBay: หน้าเว็บจัดการเว็บไซต์ให้ items เป็น "กำลังทำงาน"
- เช็คสถานะ container ใน Docker: ใช้
docker psเพื่อดูว่ามี container ที่ต้องการกำลังรันอยู่ - ตรวจสอบ port mapping ของ Docker: ใช้
docker psดูข้อมูล mapping พอร์ตใน columnPORTSว่าพอร์ต host ที่ใช้ (เช่น0.0.0.0:8080->80/tcpหรือ127.0.0.1:8080->80/tcpและเลข8080) ตรงกับที่ตั้งค่าบน ServBay - เช็คบริการภายใน container: ตรวจสอบว่า web service ภายใน container (Nginx, Apache, Node ฯลฯ) เปิดฟังพอร์ตและไม่มี error ภายใน ดู log ด้วย
docker logs <container id หรือชื่อ> - เช็ค log ของ ServBay: กดไอคอน log ในแถบเว็บไซต์ใน ServBay ดู access/error log สำหรับรายละเอียดของการส่งต่อที่ล้มเหลว
- ตรวจสอบ hosts file ในระบบ: แม้ ServBay จะจัดการโดยอัตโนมัติ แต่ตรวจสอบ
/etc/hostsว่าโดเมนชี้ไปที่127.0.0.1แล้วจริงหรือไม่ - เช็ค firewall: ให้แน่ใจไม่ได้ block พอร์ตที่ ServBay หรือ Docker ใช้งาน
ถาม: สามารถใช้ ServBay เพื่อจัดการ container ใน Docker เองได้ไหม?
ตอบ: ServBay มีหน้าที่จัดการบริการบน localhost ฐานข้อมูล environment ภาษาโปรแกรม และRouting traffic ไป back-end (รวม Docker container) โดยตรง ServBay ไม่ได้จัดการ lifecycle ของ Docker Container (อย่าง start/stop/build ภาพ) ดังนั้นยังต้องใช้ Docker CLI หรือ Docker Desktop ตามเดิม
ถาม: ServBay CA คืออะไร? จำเป็นต้องติดตั้งไหม?
ตอบ: ServBay CA (Certificate Authority) เป็นระบบบริหาร certificate เพื่อความสะดวกในการพัฒนา HTTPS บนเครื่อง ServBay User CA จะออก SSL certificate สำหรับเว็บ local ของคุณ ส่วน ServBay Public CA คือ root ของ User CA การติดตั้ง ServBay Public CA ใน keychain ของระบบ จะทำให้ OS และ browser เชื่อถือ certificate เว็บที่สร้างโดย ServBay ส่งผลให้ไม่มี pop-up "connection not secure" ขณะทดสอบเว็บ HTTPS บนเครื่อง จำเป็นต่อการพัฒนาและจำลอง production environment แบบ HTTPS
สรุป
การเพิ่มเว็บไซต์ที่ใช้ Docker Container ใน ServBay เป็นวิธีที่ยืดหยุ่นและมีประสิทธิภาพ ให้ ServBay เป็นศูนย์กลางสำหรับบริหาร traffic และโดเมนบน local ส่วน Docker จัดการ environment ของแอปและการแยก container ด้วยการตั้งค่า Reverse Proxy ที่เรียบง่าย คุณสามารถผสานโปรเจกต์ที่ใช้ Docker เข้า workflow บน ServBay ได้ง่ายดาย เพียงปฏิบัติตามขั้นตอนและข้อควรระวังที่แนะนำในบทความนี้ ก็สามารถตั้งค่าและใช้งานเว็บไซต์ local ที่รันใน Docker ได้อย่างไร้ปัญหา
