บันทึกขั้นตอน (ตัวอย่าง) ในการย้ายบล็อก wordpress จากเครื่องเดิม sysadmin.in.psu.ac.th ไปยังเครื่องใหม่ โดเมนเนมใหม่ sysadmin.psu.ac.th เนื่องจากเครื่องเดิมจะมี resources ไม่เพียงพอ และต้องการเปลี่ยนชื่อโดเมนเนมอันใหม่ที่หลายคนว่าดูเหมาะสมและชื่อสั้นกว่า งานนี้บอกได้เลยว่าเล่นเอาเหงื่อตกเลย เพราะคิดว่าย้ายแบบ Joomla! ก็น่าจะได้ ซึ่งเป็นวิธีที่ใช้ไม่ได้ครับ สุดท้ายสำเร็จกับการติดตั้ง Duplicator Plugin ไว้ที่เครื่องเดิมก่อน แล้วสร้าง backup ไว้นำมา restore ลงในเครื่องใหม่
เนื้อหาค่อนข้างยาวสักนิด ผมมีเจตนาอยากให้เห็นว่าการทำเว็บไซต์ขึ้นมาหนึ่งอัน เราต้องใช้ความรู้พอสมควร และที่ทำส่วนใหญ่ก็อ่านจากเว็บไซต์ของพี่วิภัทร นั่นคือ opensource.psu.ac.th นี่แหล่ะครับ
- เริ่มต้นจากกำหนดจำนวน resources ที่จำเป็นใช้ เพราะว่าจะไปขอใช้ Virtual Machine ของศูนย์คอมพิวเตอร์ ที่ขอไว้คือ RAM 2 GB, Hard disk 40 GB, OS Ubuntu 12.04.1, TCP Port 80,443
แล้วกรอกในแบบฟอร์ม - งานบริการเซิร์ฟเวอร์ก็สร้าง VM ให้ที่ทำการอัปเดต OS ให้แล้ว แจ้ง username ให้เข้าใช้งานผ่าน ssh
- เมื่อ ssh เข้าได้แล้ว เข้าทำงานในสิทธิ root ด้วยคำสั่ง
sudo su – - ทำการติดตั้ง Apps ที่จำเป็น ผมเลือก LAMP คือชุดรวมของ Linux, Apache, MySQL และ PHP ที่จำเป็นต้องใช้กับ wordpress ด้วยคำสั่ง
tasksel
เลือก LAMP
จะมีคำถาม รหัสผ่านของ MySQL root ให้ตั้งที่จะจำได้ - ติดตั้งส่วนเพิ่มเติมของ php เพิ่มด้วยคำสั่ง
apt-get install php5-gd php5-imap php5-ldap php5-radius - ติดตั้ง unzip เพิ่มด้วยคำสั่ง
apt-get install unzip - ปรับแต่ง apache2 ให้ใช้งานแบบ module rewrite
sudo a2enmod rewrite - ต่อไปก็มาถึงเรื่องการปรับแต่ง apache2 ให้มี Virtual host แบบเปิด port สำหรับ http และ redirect http โดยแก้ไขไฟล์ /etc/apache2/sites-available/default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName sysadmin.psu.ac.th <==== เพิ่มบรรทัดนี้
DocumentRoot /var/www/wordpress
…
<Directory /var/www/wordpress>
Options Indexes FollowSymLinks MultiViews
AllowOverride All <==== แก้ไขบรรทัดนี้จาก None เป็น All
Order allow,deny
allow from all
</Directory>
… ที่เหลือเหมือนเดิม
</VirtualHost>
เพิ่มบรรทัดข้างล่างนี้ เพื่อให้ยังคงมีการ redirect ไปยังที่ใหม่หากใช้ชื่อเก่า
<VirtualHost *:80>
ServerName sysadmin.in.psu.ac.th
Redirect / http://sysadmin.psu.ac.th/
</VirtualHost> - ต่อไปมาถึงเรื่องการปรับแต่ง apache2 ให้มี Virtual host แบบเปิด port สำหรับ https
สั่งเปิด module ssl ด้วยคำสั่ง
a2enmod ssl
คัดลอกแฟ้ม PSU SSL certificates (file_a.crt, file_b.key และ file_c.ca-bundle) มาเก็บไว้ในไดเรกทอรีที่สร้างนี้
mkdir -p /etc/apache2/ssl
mv /home/username/file_* /etc/apache2/ssl/
แล้วปรับเปลี่ยนสิทธิของแฟ้มด้วยคำสั่ง
chown -R root:root /etc/apache2/ssl/file_*.*
chmod 600 /etc/apache2/ssl/file_*.*
แล้วแก้ไขไฟล์ /etc/apache2/sites-available/default เพื่อจัดการเกี่ยวกับ https และ Certificates
เพิ่มบรรทัดต่อท้ายไฟล์
NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /var/www/wordpress
ServerName sysadmin.psu.ac.th
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/file_a.crt
SSLCertificateKeyFile /etc/apache2/ssl/file_b.key
SSLCertificateChainFile /etc/apache2/ssl/file_c.ca-bundle
</VirtualHost> - ต้องสั่งรีสตาร์ท apache2 ดังนี้
service apache2 restart
- งานถัดไปคือ ผมก็คิดว่า เราจะทำแบบย้ายเว็บไซต์ Joomla!
คือว่าเราต้องไป backup ข้อมูล มี 2 อย่าง database และ files ที่เครื่องเดิม แล้วนำไป restore ลงเครื่องใหม่ - ทำ backup database ที่เครื่องเดิม ตัวอย่าง database ชื่อ xxxxx ใช้คำสั่งดังนี้
mysqldump -u yyyyy -p xxxxx > wordpress-sysadmin_20121114.sql
ทำ backup files ใช้คำสั่งดังนี้
sudo tar -zcp -f wordpress-sysadmin_20121114.tgz -C /var/www/wordpress .
แล้วเอาไปไว้ในเครื่องใหม่ผ่านคำสั่ง scp
scp wordpress-sysadmin_20121114.* username@nn.nn.nn.nn: - กลับไปที่เครื่องใหม่ เราต้องสร้าง database เปล่าๆรอไว้ก่อนที่จะนำ backup file มา restore ลง
- ตัวอย่างสร้าง database ชื่อ xxxxx ใช้คำสั่ง
mysql -uroot -p -e “CREATE DATABASE xxxxx CHARACTER SET ‘UTF8’;”
แล้วกำหนดสิทธิ์การใช้ database xxxxx ให้แก่ user
ตัวอย่างสร้าง user ชื่อ yyyyy โดยมีรหัสผ่านว่า zzzzz ใช้คำสั่งคือ
mysql -uroot -p -e “grant all privileges on xxxx.* to ‘yyyyy’@’localhost’ identified by ‘zzzzz’;” - ต่อไปเราต้องทำ restore database ที่เครื่องใหม่
ทำ restore database ใช้คำสั่งดังนี้
mysql -u root -p xxxxx < /home/username/wordpress-sysadmin_20121114.sql
ทำ restore files ใช้คำสั่งดังนี้
สร้างไดเรกทอรีชื่อ wordpress ก่อน เพราะตอน tar ขึ้นใช้คำสั่งแบบนั้น
mkdir /var/www/wordpress
แล้วทำ restore
tar -zxvf /home/username/wordpress-sysadmin_20121114.tgz -C /var/www/wordpress . - ผลลัพธ์จากความพยายาม ก็พบว่าเมื่อเริ่มทดสอบใช้ที่เครื่องใหม่ จะใช้งานไม่ได้เพราะมันยังจำ URL เดิม ก็ต้องลบ database ทิ้งด้วยคำสั่ง
mysql -uroot -p -e “DROP DATABASE xxxxx;” - ผมต้องเริ่มต้นใหม่ เข้าไปหาเครื่องมือช่วยในอินเทอร์เน็ต ก็พบ Duplicator Clone your WordPress ที่ URL http://lifeinthegrid.com/labs/duplicator/ มีวิดีโอคลิปแนะนำการ Clone ดูแล้วก็เข้าใจ แต่ต้องใช้ความรู้ลินุกซ์ในการ scp ไฟล์จากเครื่องเดิม ไปยังเครื่องใหม่นิดนึง
- ทำอยู่หลายรอบก็ไม่สำเร็จ ก็อ่านใน help เค้าบอกว่า จะไม่สามารถล้วงเข้าไปแก้ไข URL ภายในของ 3rd party plugin ซึ่งผมใช้ WordPress HTTPS อยู่ อันนี้แหล่ะที่ทำให้ต้องทำหลายรอบ สุดท้ายก็ไป Deactivate แล้วสั่ง Clone ใหม่ ก็ทำสำเร็จ
- สรุปว่างานนี้ผมทำการย้ายบล็อก wordpress ไปเครื่องใหม่ได้สำเร็จเพราะใช้ Duplicator Plugin ครับ วิธีทำก็ตามข้างล่างนี้เลย
- ติดตั้ง Duplicator Plugin ลงใน WordPress เครื่องเดิม แล้วทำคำสั่ง Create a package จะได้ package (zip file) และ installer.php ในตรงนี้ที่จำเป็นคือต้องเข้าที่ advanced option เพื่อสั่งว่าข้อมูลเราเป็นภาษาไทย
- ขั้นตอนการสร้างเครื่องใหม่
สร้าง database ใหม่ชื่อ xxxxx ใช้คำสั่ง
mysql -uroot -p -e “CREATE DATABASE xxxxx CHARACTER SET ‘UTF8’;”
คัดลอกไฟล์ไปวางไว้
cp /home/username/installer.php /var/www/wordpress/
cp /home/username/50a454db05a5e5271_20121115_coppsusysadminblog_package.zip /var/www/wordpress/
เข้าเบราว์เซอร์ไปยัง URL ของเครื่องใหม่ แล้วใส่ path ต่อด้วย installer.php
เลือกตัวเลือกใน advanced เกี่ยวกับ character set
คลิก resave permalink - ตอนนี้ก็ login ผ่านหน้าเบราว์เซอร์ เพื่อเข้าทำงานในเครื่องใหม่ได้แล้ว
- ต่อไปก็แก้ไขการตั้งค่าต่างๆ ของ 3rd party plugin ใน wordpress เครื่องใหม่ คือ
– Facebook for WordPress เกี่ยวกับ facebook app
– WordPress HTTPS เกี่ยวกับเลือก https สำหรับหน้า login
– Fast Secure Contact Form - ที่เครื่องเดิม ทำ redirect ไปเครื่องใหม่ด้วย จนกว่าโดเมนเนม ที่ caching ไว้ในที่ต่างๆจะ timeout
เพิ่มบรรทัดข้างล่างนี้ เพื่อให้ยังคงมีการ redirect ไปยังที่ใหม่หากใช้ชื่อเก่า
แก้ไขไฟล์ /etc/apache2/sites-available/default
<VirtualHost *:80>
ServerName sysadmin.in.psu.ac.th
Redirect / http://sysadmin.psu.ac.th/
</VirtualHost>
แล้วรีสตาร์ท apache2 - ขั้นตอนสุดท้าย คือ ขอแก้ไขโดเมนเนม sysadmin.in.psu.ac.th เป็น CNAME ของ sysadmin.psu.ac.th
- ต่อไปเป็นสิ่งเล็กๆที่ละเลยไม่ได้เหมือนกันคือ หากต้องการให้เครื่องนี้ส่งอีเมลออกได้
ก็ต้องติดตั้งโปรแกรม postfix ดังนี้
apt-get install postfix
เลือกแบบ Local Only
แก้ไขไฟล์ /etc/postfix/main.cf เพื่อปรับปรุงค่าตัวแปรดังนี้คือ
relayhost = smtp.psu.ac.th <==== ชื่อ MTA ของม.อ.
default_transport = smtp <==== เปลี่ยนจาก error เป็น smtp
relay_transport = smtp
inet_interfaces = loopback-only
เสร็จแล้วสั่งให้ posftix ทำงานใหม่ด้วยคำสั่ง
/etc/init.d/postfix force-reload
ลองส่งอีเมลด้วยคำสั่งประมาณว่า
echo hello | sendmail user@server.domain - ขอขอบคุณทีมงานเซิร์ฟเวอร์ คุณใหญ่ คุณน้อง ที่ช่วยทำ VM และช่วยขอจดโดเมนเนมให้
- เสร็จจนได้
ผมจึงขอบันทึกไว้ให้กับแอดมินรุ่นหลังได้ลองใช้เป็นแนวทางครับ ขอบคุณครับที่อ่านมาถึงตรงท้ายเรื่องนี้