Skip to content
Creating an Article

Creating an Article

;;;### สรุป หากไม่ต้องการอ่านมาก

# ขั้นที่ 1: สร้างไฟล์เปล่า (แค่มี front matter ยังไม่มีเนื้อหา)
hugo new content/it/linux/fix-copy-paste-in-nvim.md

# ขั้นที่ 2: เปิดไฟล์ เขียน/paste เนื้อหาเข้าไป
nvim content/it/linux/fix-copy-paste-in-nvim.md
# (เขียนเนื้อหา, บันทึกด้วย :wq)

# ขั้นที่ 3: หลังเขียนเสร็จจริงๆ แล้ว ค่อย deploy
./deploy.sh

``

หลักการ: Archetype ทำงานเฉพาะตอน hugo new เท่านั้น

hugo new content/it/security/xxx.md   ← ตรงนี้ archetype ทำงาน ใส่ front matter ให้อัตโนมัติ
        ↓
เปิดไฟล์นี้ (ที่มี front matter อยู่แล้ว) ด้วย nvim
        ↓
เอาแค่ "เนื้อหา" จาก Obsidian มา paste ต่อท้าย (ไม่เอา front matter ของ Obsidian ถ้ามี)

เขียนใน Obsidian แล้วจะ copy มาใช้ — ทำแบบนี้

  1. สร้างไฟล์ปลายทางก่อนด้วย hugo new (front matter มาเองแล้ว ไม่ต้องพิมพ์)
  2. ใน Obsidian เขียนเนื้อหาตามปกติ (ไม่ต้องสนใจ front matter ของ Obsidian เอง ถ้ามันมี — เพราะจะไม่เอามาด้วย)
  3. Copy เฉพาะเนื้อหา (ไม่รวมส่วน frontmatter ของ Obsidian ถ้ามี --- คร่อมอยู่บนสุด)
  4. เปิดไฟล์ปลายทาง (ที่สร้างจาก hugo new) ด้วย nvim → ไปที่บรรทัดล่างสุด (หลัง --- ปิดท้าย) → paste

ตัวอย่างให้เห็นภาพ

ไฟล์ที่ hugo new สร้างให้ (มี front matter แล้ว):

---
title: "Xxx"
date: 2026-08-29T10:00:00Z
type: docs
---

เนื้อหาจาก Obsidian ที่จะ paste ต่อท้าย (ตรงบรรทัดว่างหลัง --- สุดท้าย):

เนื้อหาบทความทั้งหมด...

วิธีเขียนบทความใหม่ — ใช้อ้างอิงทุกครั้ง

Workflow มาตรฐาน (ไม่มีรูปภาพ)

1. เขียน/ร่างใน Obsidian ตามปกติ (เครื่องไหนก็ได้ — notebook/Pi/desktop)
2. SSH เข้า droplet
3. เปิดไฟล์ใหม่ใน content/<หมวด>/<english-filename>.md
4. เติม front matter 3 บรรทัดที่จำเป็น (ดูด้านล่าง)
5. Paste เนื้อหาจาก Obsidian ต่อท้าย
6. เช็คว่ามี [[wiki-link]] ไหม → ถ้ามีต้องแก้เป็น markdown link ปกติ
7. รัน ./deploy.sh

Front Matter ที่ต้องมีทุกไฟล์ ในกรณีที่ยังไม่ Archetype

---
title: "ชื่อบทความ"
date: 2026-08-27
type: docs
---

เนื้อหาบทความ...
fieldทำไมต้องมี
titleชื่อที่โชว์บนเว็บและ sidebar
dateต้องเป็นวันนี้หรือย้อนหลังเท่านั้น ถ้าเป็นอนาคต Hugo จะไม่ publish บทความนั้นเงียบๆ (ไม่มี error แจ้ง)
type: docsบังคับ ถ้าไม่ใส่ หน้านั้นจะไม่มี sidebar/search ให้

กฎการตั้งชื่อไฟล์

  • ชื่อไฟล์ (filename) ควรเป็นภาษาอังกฤษ ไม่มีเว้นวรรค เช่น tcp-handshake-basics.md
  • เหตุผล: Hugo ใช้ชื่อไฟล์เป็นส่วนหนึ่งของ URL เว็บ ถ้าใช้ภาษาไทย/เว้นวรรค URL จะถูก encode เป็นอักขระประหลาด
  • title: ในเนื้อหาใส่ภาษาไทยได้ปกติ (อันนี้คือสิ่งที่โชว์บนหน้าเว็บจริง)

คำสั่ง Deploy (ทำทุกครั้งหลังแก้ไฟล์)

cd ~/blog-content
./deploy.sh

สคริปต์นี้ทำ 2 อย่างให้อัตโนมัติ:

  1. hugo --minify --cleanDestinationDir — build content/ เป็น HTML
  2. rsync -av --delete public/ /var/www/blog/ — copy ไปที่ Apache เสิร์ฟจริง

เพิ่มหมวดใหม่ (section ใหญ่ระดับเดียวกับ it/nature/thoughts)

mkdir -p content/<ชื่อ-section>
cat > content/<ชื่อ-section>/_index.md << 'EOF'
---
title: "ชื่อที่จะโชว์"
type: docs
---
EOF

เพิ่มหมวดย่อย (เหมือน it/network, it/security)

mkdir -p content/it/<ชื่อหมวดย่อย>
cat > content/it/<ชื่อหมวดย่อย>/_index.md << 'EOF'
---
title: "ชื่อที่จะโชว์"
type: docs
---
EOF

กฎสำคัญ: ทุกโฟลเดอร์ใน content/ ต้องมีไฟล์ _index.md เป็น “ป้ายหมวด” เสมอ ไม่มีข้อยกเว้น — ถ้าขาด Hugo จะไม่รู้จักโฟลเดอร์นั้นเป็นหมวดหมู่

เรื่อง wiki-link จาก Obsidian

Obsidian ใช้ [[ชื่อบทความ]] แต่ Hugo ไม่เข้าใจ syntax นี้ ต้องแปลงเป็น markdown link ปกติก่อน paste:

[ข้อความที่จะโชว์](/หมวด/ชื่อไฟล์/)

ตัวอย่าง: ถ้าจะลิงก์ไปบทความ content/it/network/tcp-handshake-basics.md

[อ่านเรื่อง TCP Handshake](/it/network/tcp-handshake-basics/)

Git Backup (ทางเลือก ไม่บังคับ แต่แนะนำ)

cd ~/blog-content
git add .
git commit -m "เพิ่มบทความ: ชื่อบทความ"
git push

ถ้าไม่อยากยุ่งกับ git ทุกครั้ง ข้ามได้ — ใช้แค่ ./deploy.sh เว็บก็อัปเดตแล้ว (git เป็นแค่ safety net เก็บประวัติ ไม่ใช่ requirement ของการ publish)

Repo: git@github.com:green-912/blog-content.git

ดีครับ ฝึกทำเองดีที่สุด — จำแม่นกว่าเยอะ

สิ่งที่ต้องทำ (ทวนสั้นๆ)

hugo new content/it/security/<ชื่อไฟล์เป็นอังกฤษ>.md
nvim ~/knupan-blog/content/it/security/<ชื่อไฟล์>.md

เขียนตามสรุป 8 ขั้นตอนที่ให้ไปด้านบน ใส่เป็นเนื้อหาของคุณเอง — ใช้ nvim copy-paste ที จบแล้วอย่าลืม:

./deploy.sh

ยกตัวอย่าง สร้างหมวดใหม่

ชื่อหมวด = setup

mkdir -p ~/blog-content/content/setup

cat > ~/blog-content/content/setup/_index.md << 'EOF'
---
title: "Setup & Sysadmin"
type: docs
---
EOF

mkdir -p ~/blog-content/content/setup คือสร้าง เฟาเดอร์ชื่อ setup ==คำสั่ง mkdir -p== ที่เดิมออฟชั่น p เพื่อสร้างในกรณีที่สร้างในเฟาเดอร์หลัก

กรณีสร้างบทความใหม่ ไว้ในที่สร้างเฟาเดอร์ใหม่

hugo new content/setup/hugo-blog-setup-from-scratch.md