[How To] Migrate Web Infrastructure on Ubuntu

GOAL : เซิร์ฟเวอร์ใหม่ที่สามารถให้ผู้ใช้งานเก่าใช้งาน virtual host ของตัวเองรวมถึงฐานข้อมูล Mysql ที่ยังเชื่อมต่อกับไฟล์ใน Virtual Host ตามที่ได้ตั้งค่าไว้จากเครื่องเดิม

ขั้นตอน
1.ย้าย User account 
2.ย้าย Virtual host ของ Apache ทั้งหมด
3.ย้ายฐานข้อมูล Mysql รวมถึง user account และ Privileges

Environment

dev1 [old server] :                                                  dev2 [new server] : 


eth0 : 192.168.1.37 eth0:0 192.168.1.221             eth0 : 192.168.1.197 
Ubuntu 10.04                                                         Ubuntu 12.10

จากไดอะแกรมจะเห็นได้ว่าเครื่อง dev1 มีการใช้ interfaces อยู่ 2 ตัวในการใช้งาน Virtual Host ซึ่งไม่สามารถเปลี่ยนได้ ดังนั้นเราจำเป็นต้องวางไอพีให้แต่ละ interfaces ใหม่เพื่อป้องกันการเข้ามาใช้งาน server ของผู้ใช้ด้วยโดยทำการ down interface ที่ใช้งานทั้งหมดในเครื่อง dev1 แต่ต้องหาไอพีมาทดแทนให้สามารถรีโมทเข้ามาใช้งานได้ interfaces ที่วางใหม่ทั้งสองเครื่องจะมีลักษณะดังนี้


dev1 [old server]                                                    dev2 [new server]
eth0 : 192.168.1.196                                              eth0 : 192.168.1.197

1.ย้าย User account                                                 
ก่อนอื่นเลยคือทำการติดตั้ง Ubuntu server 12.10 ให้เสร็จเรียบร้อยในเครื่องใหม่พร้อมทั้งตั้งค่า interfaces ตามที่วางแผนไว้ รวมถึงทำการติดตั้ง apache2 , mysql และ php ไว้ให้เรียบร้อย
ขั้นตอนต่อมาให้ทำการย้าย User account ของผู้ใช้งานซึ่งถูกเก็บไว้ในไฟล์เหล่านี้
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow

[dev1]
โดยทำการสร้าง directory /root/move ขึ้นมาไว้เก็บสำเนาของไฟล์เหล่านี้
# mkdir /root/move/

จากนั้นทำการคัดลอกไฟล์ทั้งหมด
# awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd > /root/move/passwd.mig

# awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/group > /root/move/group.mig

# awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/passwd | tee - |egrep -f - /etc/shadow > /root/move/shadow.mig

# cp /etc/gshadow /root/move/gshadow.mig


ทำการ backup directory home ของผู้ใช้
# tar -zcvpf /root/move/home.tar.gz /home

ทำการคัดลอกไฟล์ที่สำรองไว้ทั้งหมดไปไว้เครื่องใหม่
# scp -r /root/move/* user@dev2:/path/to/location

[dev2]
ทำการสำรองไฟล์ User account เดิม
# mkdir /root/newsusers.bak

จากนั้นทำการเพิ่ม (Append ) User account ของเครื่องเก่าไปใส่ไว้ในไฟล์ของเครื่องใหม่
# cd /path/to/location
# cat passwd.mig >> /etc/passwd
# cat group.mig >> /etc/group
# cat shadow.mig >> /etc/shadow
# /bin/cp gshadow.mig /etc/gshadow


ต่อมาทำการแตกไฟล์ home.tar.gz ที่ได้สำรองไว้จากเครื่องเก่า
# cd /
# tar -zxcf home.tar.gz

สุดท้ายทำการรีบูตเครื่อง dev2 เพื่อโหลดไฟล์ User account ต่างๆ ขึ้นมาใหม่
# reboot

2.ย้าย Virtual Host ของ Apache
[dev1]
ทำการสร้าง script เพื่อใช้ในการเก็บไฟล์ Virtual Host แต่ละตัวใน /var/www โดย script นี้จะทำการเก็บ directory ของ virtual host แต่ละตัวแยกจากกันในกรณีที่ในการย้าย ไม่ต้องการย้าย host ทั้งหมด


##### tar dir #####
#!/bin/bash
for i in *
    do echo $i
    tar czf $i.tar.gz $i
done


เมื่อทำการรัน Script นี้แล้วจะได้ไฟล์ virtual host แต่ละตัวเช่น vh1.tar.gz, vh2.tar.gz เป็นต้น
ต่อมาให้ทำการสำรองไฟล์ Virtual Host Configuration ด้วยคำสั่ง
# cd /etc/apache2/sites-available
# tar -zcvf default.tar.gz default

[dev2]
ทำการอัพโหลดไฟล์ virtual host แต่ละตัวที่ได้ทำไว้ในเครื่อง dev1 มาไว้ที่ /var/www จากนั้นทำการสร้าง script เพื่อใช้ในการแตกไฟล์


##### untar #####
#!/bin/bash

for f in *.tar.gz
do
  tar zxvf "$f" -C /path/to/dir
done


ตัว script จะทำการแตกไฟล์ virtual host แต่ละตัวออกมารวมถึงสิทธิในการเข้าถึงและผู้ใช้งานจะยังคงเหมือนกับการใช้งานในเครื่อง [dev1]

ขั้นตอนต่อมาคือทำการเพิ่มการตั้งค่า Virtualhost ที่เคยทำไว้ในเครื่อง [dev1] ไปไว้ในเครื่อง [dev2]
#tar -zxvf default.tar.gz
# cat default >> /etc/apache2


ในส่วนของการย้ายฐานข้อมูล MySQL รวมถึง user account และ privileges ผมจะพูดถึงในโอกาสต่อไปนะครับ




ref : http://www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/

Comments