ใช้ DirectAdmin API สำหรับ Automate การจัดการ Hosting

DirectAdmin API เป็นชุดคำสั่งที่ปล่อยให้คุณควบคุม hosting account ผ่าน code หรือ script แทนที่จะเข้า control panel คลิกเองทีละขั้น เหมาะสำหรับผู้ดูแลเซิร์ฟเวอร์ หรือใครที่ต้อง automate งานบน hosting บทความนี้สอนวิธีใช้ DirectAdmin API ทีละขั้น พร้อมตัวอย่าง script PHP และ cURL ที่ใช้งานได้จริง

DirectAdmin API คืออะไร

DirectAdmin API เป็นอินเตอร์เฟส (interface) ที่ให้สื่อสารกับ DirectAdmin control panel ผ่าน HTTP/HTTPS request โดยไม่ต้องเข้าหน้า web interface เอง ทำให้คุณสามารถเขียน script ทำงานซ้ำๆ ลดความผิดพลาด หรือ integrate กับ application ที่สร้างเอง

ตัวอย่างงานที่ใช้ DirectAdmin API: สร้าง subdomain อัตโนมัติสำหรับลูกค้าใหม่ สำรองข้อมูล database ตามเวลา บัญชี email เพิ่มเติม สั่งรีสตาร์ท PHP หรือ service อื่น โดยไม่เข้า control panel ด้วยมือ

DirectAdmin API Base URL และการ Authenticate

DirectAdmin API endpoint ทั้งหมด ใช้ base URL ร่วมกันดังนี้:

https://[hostname]:[port]/api/[endpoint]

โดยทั่วไป port คือ 2222 (HTTPS) แต่บาง hosting provider ใช้ port อื่น เช่น 2087, 8443 หรือ 443

การ authenticate เข้า API ทำได้ 2 วิธี: ใช้ username/password หรือ login key (token) ซึ่งปลอดภัยกว่า

ตัวอย่าง Base URL: ถ้าชื่อ server คือ `hosting.example.com` port 2222 และต้องการ create user → URL จะเป็น `https://hosting.example.com:2222/api/admin?action=user_create`

ขั้นตอนเตรียม: ได้ Login Key (API Token) จาก DirectAdmin

ก่อนใช้ API ต้องมี login key ซึ่งเป็น token ปลอดภัยแทนรหัสผ่าน Login key คือ string ยาว ๆ ที่ DirectAdmin สร้างขึ้นแทนการส่ง username/password ทุกครั้ง ข้อดีคือ token นี้สามารถหมดอายุ หรือยกเลิกได้ โดยไม่ต้องเปลี่ยน password จริง วิธีหา login key:

  1. เข้า DirectAdmin control panel บัญชี admin (โดยปกติ URL เป็น https://hostname:2222)
  2. ไปที่ Administrator → Settings (หรือบางระบบเป็น Admin → View Settings)
  3. ค้นหา Login Keys หรือ API Token section ในหน้านั้น
  4. ถ้ามี key อยู่แล้วให้คัดลอก หรือกำหนด key ใหม่โดยกด "Generate" button
  5. เก็บ key นี้ไว้ที่ปลอดภัย ห้ามแชร์กับคนอื่น อย่าใส่ใน email หรือ chat ธรรมดา ถ้าหาก key นี้หลุดออกไป ใครก็สามารถควบคุม account ได้
  6. ถ้า key หลุดแล้ว ให้มาสร้าง key ใหม่ และลบ key เก่าออกทันที

ต้องการข้อมูลอะไรบ้างก่อน Call API

ก่อนเขียน script ต้องรวบรวมข้อมูล:

ตัวอย่าง API Endpoint และการใช้งานพื้นฐาน

DirectAdmin API มี endpoint หลายตัว ต่อไปนี้คือ endpoint ที่ใช้บ่อยที่สุด:

ทำอะไร Endpoint Method
ได้ข้อมูล user /api/user?action=list POST
สร้าง subdomain /api/admin?action=domain_add POST
สร้าง email account /api/admin?action=email_add POST
แก้ password /api/admin?action=user_modify POST
ลบ user /api/admin?action=user_delete POST
สำรองข้อมูล (backup) /api/admin?action=backup POST

ตัวอย่าง Script PHP: ใช้ API ติดต่อ DirectAdmin

ตัวอย่าง script ที่สอน สร้าง subdomain โดยใช้ DirectAdmin API:

<?php
// ข้อมูล DirectAdmin
$hostname = 'hosting.example.com';
$port = 2222;
$admin_user = 'admin';
$login_key = 'YOUR_API_KEY_HERE'; // แทนด้วย login key จริง
$username = 'mysite1'; // user account ที่ต้องการสั่ง

// URL endpoint
$url = "https://$hostname:$port/api/admin?action=domain_add";

// ข้อมูล parameter
$data = http_build_query([
    'user' => $username,
    'domain' => 'blog.mysite.com',  // subdomain ที่ต้องการสร้าง
    'ip' => '1.2.3.4',              // IP address (optional)
]);

// เตรียม cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$admin_user:$login_key");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // only for testing!
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// ส่ง request
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// แสดงผล
if ($http_code === 200) {
    echo "✅ สร้าง subdomain สำเร็จ\n";
    echo $response;
} else {
    echo "❌ เกิดข้อผิดพลาด HTTP $http_code\n";
    echo $response;
}
?>

⚠️ สำคัญ: ในตัวอย่างมี `CURLOPT_SSL_VERIFYPEER => false` ซึ่งเป็น test mode ที่ไม่ปลอดภัย สำหรับ production ต้องให้ true หรือใช้ certificate ที่ถูกต้อง

ตัวอย่าง cURL Command จากเทอร์มินัล

ถ้าต้องการทดสอบ API โดยตรงจากเทอร์มินัล (SSH) ใช้คำสั่ง cURL:

curl -X POST https://admin:[email protected]:2222/api/admin?action=domain_add \
  -d "user=mysite1&domain=blog.mysite.com"

สำเร็จจะได้ response ที่บอกว่า subdomain ถูกสร้างแล้ว เช่น:

output=success
text=Domain Added

สร้าง Email Account อัตโนมัติ

ตัวอย่างการสร้าง email account ใหม่ผ่าน API:

<?php
$hostname = 'hosting.example.com';
$port = 2222;
$admin_user = 'admin';
$login_key = 'YOUR_API_KEY_HERE';
$username = 'mysite1';

$url = "https://$hostname:$port/api/admin?action=email_add";

$data = http_build_query([
    'user' => $username,
    'domain' => 'mysite.com',
    'email' => '[email protected]',    // email ที่ต้องการสร้าง
    'passwd' => 'StrongPass@123',       // password
    'passwd2' => 'StrongPass@123',      // ยืนยัน password
    'quota' => '100M',                  // quota (เช่น 100MB)
]);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$admin_user:$login_key");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>

ความผิดพลาดที่พบบ่อยและวิธีแก้

เมื่อใช้ DirectAdmin API อาจเจอ error ต่างๆ ต่อไปนี้คือสิ่งที่พบบ่อยที่สุด:

Error Message สาเหตุ วิธีแก้
Invalid login Username/password/key ผิด ตรวจสอบ username, login key, port ว่าถูกต้อง
User already exists ชื่อ user ที่สร้างมีอยู่แล้ว เปลี่ยนชื่อ user เป็นอันใหม่
Domain already exists Subdomain นี้มีอยู่แล้ว ใช้ชื่อ subdomain อื่น
Connection refused ไม่สามารถติดต่อ server ได้ ตรวจสอบ hostname, port, firewall
SSL verification failed Certificate ไม่ถูกต้อง ตั้ง SSL_VERIFYPEER เป็น false (แค่ test) หรือใช้ cert ที่ถูกต้อง

Best Practice ใช้ DirectAdmin API ปลอดภัย

เพื่อให้ API ใช้งานปลอดภัยและเสถียร ต้องปฏิบัติตามสิ่งต่อไปนี้:

ดู DirectAdmin API Documentation

ตรวจสอบและ Debug DirectAdmin API Response

เมื่อ API call ได้ response ต้องรู้วิธีอ่าน error message เพื่อหาสาเหตุ DirectAdmin API ส่ง response ในรูปแบบ key-value text หรือ JSON ดังนี้:

output=success
text=Domain Added

หรือถ้าเกิดข้อผิดพลาด จะได้:

output=error
text=Domain already exists on this account

กรณีนี้ต้องตรวจสอบชื่อ domain ว่ามีอยู่แล้วหรือไม่ เปลี่ยนชื่อหรือลบ domain เก่าออกก่อน นอกจากนี้ DirectAdmin API บาง endpoint ส่ง response ในรูป JSON ให้ตรวจดู `success` field เสมอ

เคล็ดลับ Debug: เพิ่ม print_r() หรือ var_dump() ของ response ในตัว script ช่วง development เพื่อเห็น exact response ที่ API ส่งมา ตรวจสอบว่า HTTP status code กับ response message ตรงกัน

DirectAdmin API Documentation ดูเพิ่มเติม

DirectAdmin มี official documentation ครบถ้วน ที่ `https://www.directadmin.com/features.php?id=228` และ `https://docs.directadmin.com/` โดยเฉพาะส่วน API ครอบคลุม endpoint ทั้งหมด parameter ที่รองรับ ตัวอย่าง response และข้อจำกัดต่างๆ เช่น user quota limit, file upload size limit, subdomain limit ทั้งหมดเป็นข้อมูลจากเจ้าของตัว DirectAdmin เองเชื่อถือได้

Hosting รองรับ DirectAdmin API เต็มรูปแบบ

AsiaGB Hosting ใช้ DirectAdmin control panel ทำให้รองรับ API ได้เต็ม พร้อม login key มีพื้นที่ SSD ขนาดใหญ่ Uptime 99% เริ่มต้น 500 บาท/ปี

ดูแพ็กเกจ Hosting