Skip to content

ทำ cronjob ล้างไฟล์รูปบน ghost cms

Published
 at 07:00 AM

By : Parinya T. | 2 min read

จากความเดิมตอนที่แล้ว ที่ผมทำการย้ายมาใช้ Ghost CMS ซึ่งมีความง่ายในการเขียนบล็อกมาก การแทรกรูปก็สามารถลากรูปลงมาใส่ได้เลย ซึ่งรูปจะถูกอัพโหลดเก็บขึ้น server ให้อัตโนมัติ และมีการย่อไฟล์เป็นหลายๆขนาดให้พร้อมแสดงผลบนหลายๆอุปกรณ์พร้อมใช้งาน

เจ้า docs ของ ghost เองก็บอกว่าเราสามารถเขียน adapters หรือเราจะเรียก plugin, add-on อะไรก็แล้วแต่ถนัด ขึ้นมาเพื่อแปลงสถานที่เก็บของไฟล์ที่อัพโหลดพวกนี้ไปไว้ที่อื่นได้ด้วยนะ มีคนเขียนไว้เยอะมากเลย

ผมทดลองหยิบมาเล่นหลายตัว จากลิสต์ที่พบว่าหลายตัวก็ค่อนข้างเก่า ที่ใช้ได้จริงก็จะมีตัวที่เก็บไฟล์รูปบน github แต่ก็มีข้อเสียอยู่ว่า github เนี่ยมันก็จะหยิบ cdn ไหนมาโหลดรูปให้เราก็ไม่รู้ มันช้ามากในบางครั้ง แถมรูปก็ไม่ได้ถูกย่อให้ด้วยนะ โหลดเต็มๆ เปลือง bandwidth พอสมควร สรุปว่าไม่เวิร์ค (ส่วนพวก S3 GCP อะไรพวกนี้ไม่ได้ลองนะครับ ถ้าต้องเสียตังค์เพิ่ม กลับมาเก็บบน server เหมือนเดิมดีกว่า)

ลองซนจนพอใจก็กลับมาใช้ internal storage เก็บไฟล์รูปเหมือนเดิม แต่ว่าคราวนี้ลองคิดเล่นๆว่า ทุกๆครั้งที่มีการลากรูปลงส่วน text editor ผมสังเกตว่าไฟล์จะถูกอัพโหลดขึ้นไปที่ server ทันที และ เมื่อเราไม่ใช้รูปนั้น แล้วลบออก ไฟล์รูปที่ถูกอัพโหลดขึ้นไป ก็อยู่แบบนั้นอยู่ดี

ก็เลยไปลองหาข้อมูลเพื่อความแน่ใจว่า ตกลงแล้ว Ghost มันไม่มีฟังค์ชั่นในการบริหารไฟล์รูปพวกนี้จริงๆใช่ไหม ยังไม่ทันได้เจอคำตอบ ก็ไปเจอโปรเจ็คต์บน github อันหนึ่งตอบโจทย์ที่ต้องการเลยทีเดียว

คำเตือน : ก่อนติดตั้งและใช้งาน ก็อย่าลืม backup ข้อมูล และยอมรับความเสี่ยงกันเองนะ

ลิงค์ repository สคริปต์ดังกล่าว

GitHub - ghostboard/ghost-purge-images

ซึ่งเขาเขียนเป็น node package สามารถติดตั้งได้ง่ายๆ แถมมีรองรับ Ghost หลายเวอร์ชั่นด้วยนะ แต่ในกรณีของผมเป็น ghost เวอร์ชัน 5 แล้ว แต่เขาไม่ได้เขียนอัพเดทว่าใช้ได้ไหม ผมก็เลยลองติดตั้งด้วยเวอร์ชั่นล่าสุดของเขาแทน

ไม่รอช้า connect ssh เข้าเซิร์ฟเวอร์ แล้วติดตั้งด้วยคำสั่ง แบบ global เพื่อเรียกใช้ที่ไหนก็ได้

npm install -g ghost-purge-images

แค่นี้ครับ ติดตั้งเสร็จแล้ว ง่ายๆ เวลาจะใช้ก็ cd เข้าไปที่โฟลเดอร์ที่ ghost ถูกติดตั้งอยู่ เช่น

cd /var/www/ghost

ผมข้ามขั้นตอนไปนิดหน่อย อย่าลืมไปสร้าง custom intergation ที่ Setting > Integrations ของ admin section ฝั่ง Ghost cms ก่อนด้วยนะ ต้องใช้ Admin key กับ content key

โดยคำสั่งมีสองตัว ตัวแรกเป็นการ list เพื่อดูว่าไฟล์รูปไฟล์ไหนบ้างที่ไม่ได้ถูกใช้งานในส่วนใดๆเลย ทั้ง content, favicon, cover, etc.

ghost-purge-images display --content-key=CONTENT_KEY --admin-key=ADMIN_KEY

อย่าลืมเปลี่ยน ADMIN_KEY กับ CONTENT_KEY เป็นของเราเอง

Blog Image

result แบบนี้แปลว่ามาถูกทางแล้ว

และคำสั่งอีกตัว เป็นการลบไฟล์ที่ไม่ถูกใช้งานทั้งหมด (โดยเราสามารถสั่งให้ลบเลย โดยไม่ต้อง display ขึ้นมาก่อนก็ได้)

ghost-purge-images purge --content-key=CONTENT_KEY --admin-key=ADMIN_KEY

ย้ำ อย่าลืมเปลี่ยน ADMIN_KEY กับ CONTENT_KEY

Blog Image

result ตอนสั่ง purge รูปที่ไม่ใช้

จริงๆจะ ssh เข้ามาทำนานๆครั้งก็ได้ แต่ด้วยความขี้เกียจอีกเหมือนเดิมครับ ต้องไปให้สุด เราสามารถนำคำสั่งลบพวกนนี้ไปใส่ใน crontab ด้วยคำสั่ง

crontab -e

โดยอย่าลืมสั่งให้ cron เข้าไปรันที่ directory ของ ghost ด้วยนะ เพราะฉะนั้นต้องบังคับ cd ก่อน คำสั่งก็จะประมาณนี้

* * * * * cd /var/www/ghost && ghost-purge-images purge --content-key=CONTENT_KEY --admin-key=ADMIN_KEY

เปลี่ยนเวลา กับ คีย์ทั้งสองด้วยนะอย่าลืม

เพื่อให้ cron สั่ง run คำสั่งข้างบนได้เลย โดยจะสั่งให้รันด้วยความถี่บ่อยแค่ไหนก็แล้วแต่เราจะกำหนด เสร็จแล้วก็อย่าลืมตรวจงานด้วยคำสั่ง crontab -l ด้วยว่าคำสั่งของเรามีอยู่ใน crontab รอรันแล้ว หรือจะ sudo service cron reload ดูเพื่อความมั่นในก็ได้ แต่ไม่ค่อยจำเป็นเท่าไร

เสร็จแล้วครับ เพียงเท่านี้ก็เอาเวลาที่เหลือไป ซักผ้า ตัดหญ้า ว่ายน้ำ ปลูกป่า ได้แล้ว