ผมต้องย้ายทุกอย่างจากเซิร์ฟเวอร์เก่าไปเครื่องใหม่ที่แรงกว่า 7 services, หลาย database, SSL certificates, cron jobs, Nginx configs, DNS — งานแบบนี้ถ้า developer ทำเองก็หมดวัน แล้วยังอาจพังอีก 555 แต่ Tim จัดการให้หมดภายในไม่กี่ชั่วโมง ระหว่างที่ผมไปทำอย่างอื่น

ทำไมต้องย้าย

เซิร์ฟเวอร์เก่าเริ่มหอบแล้วครับ 2 CPU, 4GB RAM, 38GB disk ตอนเริ่มมันก็เพียงพอ แต่ธุรกิจมันโต Loom รัน workflow เยอะขึ้น Documentor publish content ถี่ขึ้น เพิ่ม Libra สำหรับ KDP operation เพิ่ม Tim Chat ให้คุยกับ AI จากมือถือได้ เพิ่ม video generation backends เซิร์ฟเวอร์รับไหวหมดแหละ แต่ แบบหายใจรวยรินมาก 555

ก็เลยเปิดเครื่องใหม่: 8 CPU, 15GB RAM, 300GB disk provider เดิม แค่เปลี่ยน plan แล้วก็สั่ง Tim ว่า "ย้ายทุกอย่างไปเครื่องใหม่ได้เลย"

อะไรที่ต้องย้ายบ้าง

7 services ครับ:

  • Loom — engine หลักที่รัน automation ทั้งหมดสำหรับ content workflow ของ Facebook pages service ที่ใหญ่ที่สุด ซับซ้อนที่สุด
  • Documentor — platform สร้างและ publish content มี SQLite database เก็บ post ทั้งที่ schedule ไว้และที่ publish แล้ว
  • n8n — workflow automation รันใน Docker ต้องย้ายทั้ง container และ data ข้างใน
  • Libra — dashboard สำหรับ KDP operation ไม่ซับซ้อนมากแต่ database ต้องครบ
  • Tim Chat — web interface ที่ผมใช้คุยกับ Tim จากมือถือ ถ้าอันนี้พังระหว่างย้าย ก็คุยกับ Tim เพื่อแก้ไขไม่ได้ 555 ตลกดี
  • Nova และ Astra — video และ image generation backends ที่ feed เข้า Loom
  • Nginx — reverse proxy จัดการ domain routing และ SSL termination ทุก service ข้างบน

ยังไม่พอ ต้องย้าย SSL certificates ทุก subdomain, cron jobs ที่ schedule tasks ต่างๆ, systemd service files ให้ทุกอย่าง restart อัตโนมัติหลัง reboot, แล้วก็ DNS records ชี้ไป IP ใหม่

Tim ทำยังไง

ผมให้ SSH access ของเครื่องใหม่กับ Tim แล้วบอกแผน มันเข้าใจสิ่งที่ต้องทำแล้วก็ลุยเป็นขั้นตอน

อันดับแรก inventory เครื่องเก่า — list ทุก service, เช็ค config, จด port ที่ใช้, หา database files ว่าอยู่ไหน จากนั้น setup เครื่องใหม่ตั้งแต่ต้น: install dependencies, สร้าง directory structure, copy codebase, transfer databases

สำหรับแต่ละ service: หยุดตัวเก่า, copy data, เปิดตัวใหม่, verify ว่ารันได้, แล้วไปต่อ เขียน systemd service files ใหม่ให้เข้ากับ path structure ของเครื่องใหม่ Nginx config เขียนใหม่ทั้งหมดแทนที่จะ copy มา — สะอาดกว่า

เรื่อง Docker ของ n8n ต้องใส่ใจหน่อย ต้อง export workflow data จากข้างใน container, transfer ไป, import เข้า container ใหม่บนเครื่องใหม่, แล้ว verify ว่า workflow ครบ

ปัญหา SSL

พอทุกอย่างรันแล้ว ก็เจอว่าบาง subdomain แสดง SSL error certificate mismatch cert เก่าที่ copy มาผูกกับ Let's Encrypt setup ของเครื่องเก่า renew บนเครื่องใหม่ไม่ได้

Tim ก็รัน certbot ให้ทุก domain ที่มีปัญหา ขอ cert ใหม่ อัพเดต Nginx config ให้ชี้ไป cert path ใหม่ แล้ว reload Nginx แก้ได้ภายในประมาณ 10 นาทีหลัง DNS propagate ไป IP ใหม่เรียบร้อย

นี่แหละสิ่งที่ทำให้ manual migration ปวดหัว คิดว่าเสร็จแล้ว แต่มี service พังอันนึง แล้วก็นั่ง Google error message ตอนเที่ยงคืน Tim แค่เจอ แก้ แล้วรายงาน จบ

เครื่องเก่าปิดแล้ว

พอเช็คครบ — ทุก service ตอบ, SSL สะอาด, cron jobs รัน, content โพสต์ตามเวลา — ก็ปิดเครื่องเก่าเลย หายไปแล้ว ทุกอย่างอยู่บนเครื่องใหม่

ความแตกต่างเห็นได้ชัดเลย Loom workflows ที่เคยช้าตอนนี้ไหลลื่น AI generation backends มี memory เหลือเฟือ หมด timeout ที่เคยทำให้ workflow ล้มแล้วต้อง restart

สิ่งที่เรื่องนี้บอกเราเกี่ยวกับ AI Agent

การย้าย server เป็นงานที่น่าเบื่อมากสำหรับคน แต่ AI ทำได้สบาย ส่วนใหญ่คือ อ่าน documentation, รัน command, เช็ค output, แล้วทำซ้ำ — แต่มีความไม่แน่นอนพอที่จะ script ตรงๆ ไม่ได้

Tim hold แผนการย้ายทั้งหมดไว้ใน context ได้ จำได้ว่าทำถึง step ไหน adapt ได้เมื่อมีอะไรไม่เป็นไปตามแผน (เช่นเรื่อง SSL) แล้วก็ verify งานตัวเองไปด้วย ไม่มี mental fatigue ไม่มี "เอาไว้พรุ่งนี้ค่อยแก้ error นี้" แค่ทำไปเรื่อยๆ จนเสร็จ

ถ้าอยากรู้ว่า Tim ทำงานยังไงในภาพรวม — AI แบบนี้มี access และ responsibility ขนาดนี้ได้ยังไง — ผมเขียนไว้แล้วครับ การย้าย server เป็นตัวอย่างที่ดีว่าเมื่อ AI มี context ครบเกี่ยวกับระบบของเรา มันทำอะไรได้บ้าง แล้วการย้ายครั้งนี้ก็เป็นแรงบันดาลใจให้สร้าง shared brain ให้ Tim ย้ายร่างได้อัตโนมัติ ไม่ต้อง setup ใหม่

เหตุผลที่ผมสร้าง infrastructure เองแทนที่จะใช้ hosted services ก็คือเรื่องนี้แหละ พอทุกอย่างอยู่บน server ของเรา Tim เข้าถึงทั้งหมดได้ ไม่ติด API ไม่ติด permission ไม่ต้องรอ third-party dashboard SSH เข้าไปแล้วทำเลย

คำถามที่พบบ่อย

ย้าย server ยังไงไม่ให้ downtime นาน ลูกค้าสังเกตได้น้อยที่สุด

วิธีที่ได้ผลคือ setup เครื่องใหม่ให้พร้อมก่อน แล้วค่อยเปลี่ยน DNS ในขั้นตอนสุดท้ายครับ ระหว่างที่ setup อยู่ เครื่องเก่ายังรันให้บริการอยู่ตลอด พอ verify ว่าเครื่องใหม่ทุก service ทำงานได้แล้ว ค่อย update DNS record แล้วรอ propagate ช่วงที่ DNS กำลัง propagate (อาจใช้เวลา 5-30 นาที) คือ downtime จริงๆ ที่ลูกค้าอาจสังเกตได้

Docker container ย้ายต่างกับ service ปกติยังไง

Docker ต้อง export data จากข้างใน container ออกมาก่อนครับ เพราะข้อมูลที่อยู่ใน container ไม่ใช่แค่ copy ไฟล์ธรรมดา ต้อง export workflow data หรือ database dump ออกมา แล้ว import เข้า container ใหม่บนเครื่องใหม่ จากนั้น verify ว่า data ครบ ส่วน service ปกติแค่ copy ไฟล์ + database + config แล้วรัน systemd ใหม่

ทำไม Let's Encrypt SSL cert ที่ copy มาจากเครื่องเก่าใช้งานไม่ได้

Let's Encrypt cert ผูกกับ configuration ของ certbot บนเครื่องที่ขอครับ ไฟล์ cert เองอาจ copy มาได้ แต่ renewal infrastructure (private key path, certbot config, renewal hooks) มันเฉพาะเครื่องนั้น วิธีที่ clean กว่าคือขอ cert ใหม่บนเครื่องใหม่โดยตรง certbot จะ validate domain และออก cert ให้ใหม่ภายใน 1-2 นาทีหลัง DNS propagate ไปชี้ IP ใหม่แล้ว

ก่อนปิดเครื่องเก่า ควรเช็คอะไรบ้างให้ครบ

ผมใช้ checklist 4 อย่างครับ — หนึ่ง: ทุก service ตอบ request ได้จาก domain ปกติ สอง: SSL certificate ไม่มี error ทุก subdomain สาม: cron jobs รันตามเวลาที่ตั้งไว้ สี่: database มีข้อมูลครบไม่หาย ถ้าทำได้ให้ปล่อยเครื่องใหม่รัน 24-48 ชั่วโมงก่อนปิดเครื่องเก่า เพื่อดูว่า scheduled tasks ที่รันน้อยกว่าวันละครั้งทำงานได้ปกติไหม

และนี่คือเหตุผลที่ Newton ให้เซิร์ฟเวอร์ส่วนตัวกับลูกค้าทุกคน — เพราะ AI Agent ที่ดีที่สุดคือ AI ที่เข้าถึง infrastructure ของคุณได้เต็มที่ครับ

— ปอนด์