/ server

ลองใช้ Caddy server

เมื่อเดือนที่แล้วผมย้าย server ใหม่เนื่องจากปัญหา docker-letsencrypt-nginx-proxy-companion ที่ config ไว้มันไม่ renew certificate ให้สองครั้งแล้ว รวมไปถึงปัญหาของ CoreOS บน DigitalOcean ที่ไม่เสถียรเอาเสียเลย ก็เลยตัดสินใจสร้าง Droplet ใหม่เป็น Ubuntu แทน

หลังจากสร้างเสร็จก็ทำการ config nginx บน docker อีกครั้ง แต่คราวนี้มันไม่ขอ certificate ให้ พยายามแก้อยู่นานก็ไม่ได้ สุดท้ายเลยถือโอกาสนี้ลองใช้ Caddy ที่มี feature ขอ certificate ให้อัตโนมัติ

ตัว Caddy เองไม่มี Official Docker Image ครับ ผมเลยไปหาใน Hub แล้วก็เลือก habiosoft/caddy-docker เพราะคนใช้เยอะดี

เริ่มจากการสร้าง docker-compose.yml ตามปกติครับ

ตรงนี้เราต้อง expose port ที่จะใช้ครับ ซึ่งก็คือ 80 และ 443 สำหรับ HTTP และ HTTPS ตามลำดับ ในตัวอย่างผมจะสร้าง Caddyfile เอาไว้ข้างนอกครับ เลย map volume ออกมา ส่วนอีกอันนึงคือ directory .caddy ที่ใช้เก็บ certificate ครับ

ต่อมาก็ทำส่วนของ app ครับ

ตรงนี้ใส่กันตามอัธยาศัย ของผมเป็น Custom image ครับ เป็นแค่ static HTML server เล็กๆ

สุดท้ายต้องไม่ลืมครับว่า Container จะสื่อสารกันไม่ได้ถ้าไม่กำหนดให้อยู่ใน Network เดียวกัน

ผมสร้าง Network ชื่อ ff แล้วแล้วใส่ให้ทุก Container ครับ ส่วน docker-compose.yml เป็นอันเสร็จ

ต่อไปเราจะต้องสร้าง Caddyfile ซึ่งเป็น file ที่ใช้ config Caddy ครับ ปกติผมใช้แค่ proxy ครับ เพื่อ map domain เข้ากับ Container แค่นั้น ก็จะเขียนได้แบบนี้ครับ

ความหมายคร่าวๆ ก็ประมาณ domain furyform.com** และ www.furyform.com ให้ขอ certificate ด้วย email varavut@vable.me แล้วก็ถ้ามี request มาที่ / ให้ เรียก furyform.com:3000 ขึ้นมาทำงาน โดย furyform.com:3000 คือ container_name:port ครับ (ผมกำหนดชื่อ container ใน docker-compose.yml ไว้) ส่วน transparent ข้างในสุดคือบอกให้ Caddy ส่ง Header ของจริงไปให้ app ครับ ถ้ามีหลายเว็บก็ใส่ต่อไปข้างล่างเรื่อยๆ ครับ

หลังจากนั้นก็รัน

docker-compose up 

ได้เลยยยย

จบแล้วครับ