[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 ทั้งหมด
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 เพื่อใช้ในการแตกไฟล์
ตัว 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/
ขั้นตอน
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/bashfor 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
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