acme.sh ติดตั้งและทำความรู้จักโครงสร้างไฟล์



บทที่แล้วเรารู้จักว่า acme.sh คืออะไรและต่างจาก certbot ตรงไหน บทนี้ลงมือติดตั้งจริงบนเซิร์ฟเวอร์ Linux แล้วเปิดฝากระโปรงดูว่ามันทำงานยังไง

ตัวอย่างทั้งหมดในซีรีส์นี้รันบน Ubuntu / Debian แต่ acme.sh ใช้ได้กับทุกดิสโทรที่มี shell กับ curl หรือ wget

เตรียมเครื่องก่อน

ต้องมี curl (หรือ wget), openssl และ socat (ใช้ตอนโหมด standalone ในบทหลัง) ติดตั้งให้ครบ

sudo apt update
sudo apt install -y curl openssl socat cron ca-certificates

git ไม่จำเป็น แต่ถ้ามีจะช่วยตอนอัปเดต

ติดตั้ง acme.sh

คำสั่งเดียวจบ ใส่อีเมลของคุณแทน you@example.com (ใช้สำหรับลงทะเบียนบัญชีกับ CA และรับอีเมลเตือนใบรับรองใกล้หมดอายุ)

curl https://get.acme.sh | sh -s email=you@example.com

ถ้าเครื่องไม่มี curl ใช้ wget แทน

wget -O - https://get.acme.sh | sh -s email=you@example.com

ผลลัพธ์ประมาณนี้

[Sat Sep  6 10:00:00 +07 2026] Installing from online archive.
[Sat Sep  6 10:00:02 +07 2026] Installing to /root/.acme.sh
[Sat Sep  6 10:00:02 +07 2026] Installed to /root/.acme.sh/acme.sh
[Sat Sep  6 10:00:02 +07 2026] Installing alias to '/root/.bashrc'
[Sat Sep  6 10:00:02 +07 2026] OK, Close and reopen your terminal to start using acme.sh
[Sat Sep  6 10:00:02 +07 2026] Installing cron job
[Sat Sep  6 10:00:03 +07 2026] Good, bash is found, so change the shell to bash for cron.
[Sat Sep  6 10:00:03 +07 2026] Install success!

เรื่อง curl | sh: การดึงสคริปต์จากเน็ตมารันทันทีมีความเสี่ยงเสมอ ถ้าอยากตรวจก่อน ให้ git clone https://github.com/acmesh-official/acme.sh.git แล้วอ่านโค้ด จากนั้น cd acme.sh && ./acme.sh --install -m you@example.com

ปิดแล้วเปิดเทอร์มินัลใหม่ หรือสั่ง source ~/.bashrc เพื่อให้ alias acme.sh ใช้งานได้ เช็คเวอร์ชัน

acme.sh --version
https://github.com/acmesh-official/acme.sh
v3.1.0

การติดตั้งทำอะไรให้บ้าง 3 อย่าง

  1. คัดลอกตัวเองไป ~/.acme.sh/ — โฟลเดอร์นี้คือบ้านของ acme.sh ทั้งสคริปต์ ใบรับรองทุกใบ บัญชี และไฟล์ตั้งค่า อยู่ในนี้หมด
  2. เพิ่ม alias ใน ~/.bashrc — ให้พิมพ์ acme.sh สั้น ๆ ได้จากทุกที่ แทนที่จะพิมพ์ path เต็ม
  3. ติดตั้ง cron job — บรรทัดเดียวใน crontab ที่รันทุกวันเพื่อต่ออายุใบที่ใกล้หมด ดูได้ด้วย crontab -l
crontab -l
19 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

(เลขนาที/ชั่วโมงสุ่มตอนติดตั้ง จึงไม่ตรงกันทุกเครื่อง)

โครงสร้างใน ~/.acme.sh/

ls ~/.acme.sh
account.conf   acme.sh   acme.sh.env   ca/   http.header
  • acme.sh — ตัวสคริปต์
  • account.conf — ค่าตั้งส่วนกลาง เช่น อีเมล, CA เริ่มต้น, และ ตัวแปร API ของ DNS ที่เคยใช้ (บทที่ 8)
  • ca/ — เก็บ *account key* ของแต่ละ CA ไฟล์นี้สำคัญมาก ถ้าหายต้องลงทะเบียนบัญชีใหม่ (บทที่ 25 เรื่องสำรอง)
  • พอออกใบรับรองใบแรก จะมีโฟลเดอร์ example.com/ เพิ่มมา เก็บคีย์กับใบของโดเมนนั้น

ตั้ง CA เริ่มต้น

ตั้งแต่เวอร์ชัน 3.0 acme.sh ใช้ ZeroSSL เป็น CA เริ่มต้น ซึ่งต้องลงทะเบียนบัญชีก่อนใช้ครั้งแรก ถ้าคุณอยากใช้ Let’s Encrypt (ไม่ต้องลงทะเบียนแยก) ให้ตั้งเป็นค่าเริ่มต้นไปเลย

acme.sh --set-default-ca --server letsencrypt
[Sat Sep  6 10:01:00 +07 2026] Changed default CA to: https://acme-v02.api.letsencrypt.org/directory

อยากกลับไปใช้ ZeroSSL เมื่อไหร่ก็ได้

acme.sh --register-account -m you@example.com --server zerossl
acme.sh --set-default-ca --server zerossl

รายละเอียดการเลือก CA อยู่ในบทที่ 16

ถอนการติดตั้ง

acme.sh --uninstall      # ลบ alias + cron
rm -rf ~/.acme.sh         # ลบไฟล์ทั้งหมด (ใบรับรองหายด้วย ระวัง)

เรื่องที่คนมักพลาด

  • พิมพ์ acme.sh แล้ว command not found ยังไม่ได้เปิดเทอร์มินัลใหม่ หรือ shell ไม่ใช่ bash — สั่ง source ~/.bashrc หรือเรียกเต็ม ๆ ~/.acme.sh/acme.sh --version
  • ติดตั้งด้วย sudo แต่ใช้งานด้วย user ธรรมดา acme.sh จะไปอยู่ที่ /root/.acme.sh ซึ่ง user ธรรมดาเข้าไม่ได้ — เลือกให้ชัดว่าจะใช้ user ไหนแล้วติดตั้งด้วย user นั้น
  • ลืมติดตั้ง cron/cronie cron job ที่ acme.sh เพิ่มให้จะไม่ทำงาน ใบรับรองก็ไม่ต่ออายุ
  • ไม่ใส่อีเมลตอนติดตั้ง ใช้งานได้ แต่ Let’s Encrypt จะไม่ส่งเมลเตือนตอนใบใกล้หมด และ ZeroSSL จะออกใบไม่ได้จนกว่าจะลงทะเบียน — ใส่ไปเถอะ
  • เข้าใจว่า ~/.acme.sh/ เป็นแค่ไฟล์ชั่วคราว ไม่ใช่ นี่คือฐานข้อมูลใบรับรองทั้งหมดของคุณ อย่าลบเล่น และควรสำรอง

สรุป

  • ติดตั้งด้วย curl https://get.acme.sh | sh -s email=you@example.com
  • ได้มา 3 อย่าง: โฟลเดอร์ ~/.acme.sh/, alias acme.sh, และ cron job ต่ออายุอัตโนมัติ
  • account.conf เก็บค่าตั้งส่วนกลาง, ca/ เก็บ account key ที่ห้ามทำหาย
  • CA เริ่มต้นคือ ZeroSSL (ต้องลงทะเบียน) — สั่ง --set-default-ca --server letsencrypt ถ้าอยากใช้ Let’s Encrypt

บทถัดไปก่อนออกใบรับรองจริง เราจะทำความเข้าใจว่าโปรโตคอล ACME พิสูจน์ “ความเป็นเจ้าของโดเมน” ยังไง และ challenge ทั้ง 3 แบบต่างกันตรงไหน