Skip to content

Kor's blog Posts

บันทึกการย้ายบล็อกและใช้งาน HTTPS จาก Let’s encrypt โดยใช้ Docker

บล็อกนี้ผมใช้ WordPress และ MySQL การ Dockerize เลยง่ายหน่อยเพราะมี official image ให้ใช้เลย ส่วนการทำ HTTPS ด้วย Let’s encrypt ก็ง่ายเช่นกันเพราะมี docker-letsencrypt-nginx-proxy-companion ให้ใช้ การสร้าง virtual host และ issue domain/sub-domain ที่ต้องการใช้งาน HTTPS ก็ทำได้ง่ายโดยการกำหนด env variable ตอนสั่ง docker run

Backup the database

เดิมผมติดตั้ง MySQL ผ่าน apt-get  โดยปกติ data ทั้งหมดของ MySQL จะอยู่ /var/lib/mysql  ก็ compress เป็น tar.gz แล้ว scp ไปที่เครื่องใหม่

ถ้ากลัวไม่ชัวร์ก็ใช้ phpmyadmin หรือ MySQL client dump เป็นไฟล์ .sql ออกมาด้วยก็ได้

Backup WordPress files

เนื่องจากบล็อกเก่าผมมีรูปภาพที่อัปโหลดไว้และติดตั้ง plugin ไว้หลายตัว ขี้เกียจติดตั้งและ config ที่เครื่องใหม่อีกเลย copy ออกมาทั้งเว็บ โดย compress เป็น tar.gz เสร็จแล้วก็ scp ไปที่เครื่องใหม่เหมือนเดิม

ย้ายบล็อกจาก DigitalOcean มา Vultr

ตอนนี้ผมย้ายบล็อกมาจาก DigitalOcean มาที่ Vultr แล้ว เหตุผลก็เรื่องราคาต่อ resource ล้วนๆ เพราะบล็อกผมเป็นเว็บเล็กๆ traffic ไม่เยอะและไม่ต้องมี availability สูงขนาดนั้น เลยตัดสินใจง่ายหน่อย

โดยส่วนตัว DigitalOcean ก็เป็นผู้ให้บริการที่ดี support ตอนมีปัญหาได้ค่อนข้างรวดเร็ว (สำหรับ free support น่ะนะ) ขยันออกผลิตภัณฑ์มาให้บริการเรื่อยๆ และราคาก็ถูก แต่ด้วยราคาที่เท่ากันแล้ว Vultr ให้ resource มากกว่า ตัวอย่างเช่นตอนนี้ผมใช้ package เล็กสุดคือ $5/month DigitalOcean นั้นให้ RAM แค่ 512MB ส่วน Vultr ให้ 1024MB มากกว่าเท่าตัว ถึง RAM 1024MB จะไม่ได้มากมายแล้วสำหรับทุกวันนี้แต่มีมากกว่าก็น่าจะดีกว่า

จากที่บอกไปข้างต้นว่าผมมองเรื่องราคาต่อ resource เป็นหลักการย้ายบล็อกครั้งนี้ผมเลยใช้ Docker เข้ามาช่วยเผื่อเวลาย้ายจะได้ทำได้สะดวก เริ่มตั้งแต่ proxy, database และตัวเว็บที่สร้างด้วย WordPress รวมไปถึงการทำ HTTPS ด้วย Let’s encrypt ทุกอย่างใช้ Docker หมด ซึ่งก็สะดวกมากเพราะมีคนทำไว้ให้หมดแล้ว

หลังจากย้ายมาตอนนี้ก็ยังไม่มีอะไรผิดปกติ ยังใช้ได้ราบรื่น ไว้คราวหลังจะเขียนถึงขั้นตอนการย้ายและการใช้ Docker ครับ

 

Stub JavaScript ES6 Class method ด้วย Sinon

ใครที่เขียน Unit test สำหรับ JavaScript, Node.js น่าจะรู้จัก Sinon เป็นอย่างดี เพราะเป็นไลบรารี่สำหรับสร้าง mock, stub จำลองการทำงานของ service ภายนอกที่นิยมมากตัวหนึ่ง

เดิมที JavaScript นั้นไม่มีแนวคิดเรื่อง class เป็นแค่ function หนึ่งเท่านั้น แต่นับตั้งแต่ ES2015 หรือ ES6 เป็นต้นมานั้นมี class ให้ใช้แล้ว (ถึงจะแบบถูๆ ไถๆ ก็เถอะ) แต่ปัญหาที่พบคือ Sinon รุ่นเก่าๆ มันใช้กับ class ไม่ได้เพราะไม่ได้อัปเดตตามมาตรฐาน ES6

แต่ตอนนี้ Sinon v2.4.1 (ณ วันที่เขียนวันนี้นะ จริงๆ ตั้งแต่รุ่น 2 เป็นต้นมาอาจจะใช้ได้แล้ว) นั้นใช้กับ class ได้แล้ว! จะว่ารองรับตรงๆ เลยก็ไม่เชิง คือมันเป็น work around ที่หน้าตา JavaScript มากๆ

แก้ปัญหาแบตเตอรี่หมดเร็ว (battery leaks) สำหรับ Linux desktop

Ubuntu ตั้งแต่ 16.04 packages ต่างๆ ของ TLP มีใน official repository แล้วครับไม่ต้องติดตั้งจาก PPA แล้ว

ผมใช้ Linux desktop กับ Thinkpad x220 ซึ่งก็ใช้งานได้ดีไม่มีปัญหา ถ้าถามผม ผมว่าเป็นยี่ห้อและรุ่นโน้ตบุ๊กที่เป็นมิตรกับ Linux ที่สุดละ เพราะอุปกรณ์ต่างๆ ใช้ได้ครบถ้วนตั้งแต่ติดตั้งเลย

ปัญหากวนใจอย่างนึงคือแบตเตอรี่หมดเร็วมากปัญหานี้ไม่ได้เกิดแค่ Thinkpad อย่างเดียวครับแต่เป็นกับโน้ตบุ๊กทั่วไปด้วย เนื่องจาก firmware ที่ใช้ในการจัดการพลังงานใน kernel ไม่ดีและยังไม่ได้รับการแก้ไขเท่าที่ควร

แต่โชคดีที่มีนักพัฒนาพยายามแก้ปัญหานี้นั่นคือโปรเจกต์ TLP(http://linrunner.de/en/tlp/docs/tlp-linux-advanced-power-management.html)  ขึ้นมาซึ่งเป็น Advanced Power Management ที่สำคัญใช้ได้กับ Linux หลักๆ ได้หลาย distro

แม้ว่าจะยังไม่เข้า repo หลักก็ไม่มีปัญหาเพราะติดตั้งผ่าน PPA ได้ง่ายๆ และไม่ต้อง config อะไรยุ่งยากด้วย ติดตั้งแล้วใช้ default configuration ก็ยืดเวลาการใช้งานแบตเตอรี่ได้มากขึ้นกว่าเดิมอย่างเห็นได้ชัด