วิธีย้ายบล็อก wordpress ไปเครื่องใหม่ชื่อโดเมนเนมใหม่

บันทึกขั้นตอน (ตัวอย่าง) ในการย้ายบล็อก wordpress จากเครื่องเดิม sysadmin.in.psu.ac.th ไปยังเครื่องใหม่ โดเมนเนมใหม่ sysadmin.psu.ac.th เนื่องจากเครื่องเดิมจะมี resources ไม่เพียงพอ และต้องการเปลี่ยนชื่อโดเมนเนมอันใหม่ที่หลายคนว่าดูเหมาะสมและชื่อสั้นกว่า งานนี้บอกได้เลยว่าเล่นเอาเหงื่อตกเลย เพราะคิดว่าย้ายแบบ Joomla! ก็น่าจะได้ ซึ่งเป็นวิธีที่ใช้ไม่ได้ครับ สุดท้ายสำเร็จกับการติดตั้ง Duplicator Plugin ไว้ที่เครื่องเดิมก่อน แล้วสร้าง backup ไว้นำมา restore ลงในเครื่องใหม่

เนื้อหาค่อนข้างยาวสักนิด ผมมีเจตนาอยากให้เห็นว่าการทำเว็บไซต์ขึ้นมาหนึ่งอัน เราต้องใช้ความรู้พอสมควร และที่ทำส่วนใหญ่ก็อ่านจากเว็บไซต์ของพี่วิภัทร นั่นคือ opensource.psu.ac.th นี่แหล่ะครับ

  1. เริ่มต้นจากกำหนดจำนวน resources ที่จำเป็นใช้ เพราะว่าจะไปขอใช้ Virtual Machine ของศูนย์คอมพิวเตอร์ ที่ขอไว้คือ RAM 2 GB, Hard disk 40 GB, OS Ubuntu 12.04.1, TCP Port 80,443
    แล้วกรอกในแบบฟอร์ม
  2. งานบริการเซิร์ฟเวอร์ก็สร้าง VM ให้ที่ทำการอัปเดต OS ให้แล้ว แจ้ง username ให้เข้าใช้งานผ่าน ssh
  3. เมื่อ ssh เข้าได้แล้ว เข้าทำงานในสิทธิ root ด้วยคำสั่ง
    sudo su –
  4. ทำการติดตั้ง Apps ที่จำเป็น ผมเลือก LAMP คือชุดรวมของ Linux, Apache, MySQL และ PHP ที่จำเป็นต้องใช้กับ wordpress ด้วยคำสั่ง
    tasksel
    เลือก LAMP
    จะมีคำถาม รหัสผ่านของ MySQL root ให้ตั้งที่จะจำได้
  5. ติดตั้งส่วนเพิ่มเติมของ php เพิ่มด้วยคำสั่ง
    apt-get install php5-gd php5-imap php5-ldap php5-radius
  6. ติดตั้ง unzip เพิ่มด้วยคำสั่ง
    apt-get install unzip
  7. ปรับแต่ง apache2 ให้ใช้งานแบบ module rewrite
    sudo a2enmod rewrite
  8. ต่อไปก็มาถึงเรื่องการปรับแต่ง 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>
  9. ต่อไปมาถึงเรื่องการปรับแต่ง 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>
  10. ต้องสั่งรีสตาร์ท apache2 ดังนี้
    service apache2 restart

  11. งานถัดไปคือ ผมก็คิดว่า เราจะทำแบบย้ายเว็บไซต์ Joomla!
    คือว่าเราต้องไป backup ข้อมูล มี 2 อย่าง database และ files ที่เครื่องเดิม แล้วนำไป restore ลงเครื่องใหม่
  12. ทำ 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:
  13. กลับไปที่เครื่องใหม่ เราต้องสร้าง database เปล่าๆรอไว้ก่อนที่จะนำ backup file มา restore ลง
  14. ตัวอย่างสร้าง 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’;”
  15. ต่อไปเราต้องทำ 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 .
  16. ผลลัพธ์จากความพยายาม ก็พบว่าเมื่อเริ่มทดสอบใช้ที่เครื่องใหม่ จะใช้งานไม่ได้เพราะมันยังจำ URL เดิม ก็ต้องลบ database ทิ้งด้วยคำสั่ง
    mysql -uroot -p -e “DROP DATABASE xxxxx;”
  17. ผมต้องเริ่มต้นใหม่ เข้าไปหาเครื่องมือช่วยในอินเทอร์เน็ต ก็พบ Duplicator Clone your WordPress ที่ URL http://lifeinthegrid.com/labs/duplicator/ มีวิดีโอคลิปแนะนำการ Clone ดูแล้วก็เข้าใจ แต่ต้องใช้ความรู้ลินุกซ์ในการ scp ไฟล์จากเครื่องเดิม ไปยังเครื่องใหม่นิดนึง
  18. ทำอยู่หลายรอบก็ไม่สำเร็จ ก็อ่านใน help เค้าบอกว่า จะไม่สามารถล้วงเข้าไปแก้ไข URL ภายในของ 3rd party plugin ซึ่งผมใช้ WordPress HTTPS อยู่ อันนี้แหล่ะที่ทำให้ต้องทำหลายรอบ สุดท้ายก็ไป Deactivate แล้วสั่ง Clone ใหม่ ก็ทำสำเร็จ
  19. สรุปว่างานนี้ผมทำการย้ายบล็อก wordpress ไปเครื่องใหม่ได้สำเร็จเพราะใช้ Duplicator Plugin ครับ วิธีทำก็ตามข้างล่างนี้เลย
  20. ติดตั้ง Duplicator Plugin ลงใน WordPress เครื่องเดิม แล้วทำคำสั่ง Create a package จะได้ package (zip file) และ installer.php ในตรงนี้ที่จำเป็นคือต้องเข้าที่ advanced option เพื่อสั่งว่าข้อมูลเราเป็นภาษาไทย
  21. ขั้นตอนการสร้างเครื่องใหม่
    สร้าง 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
  22. ตอนนี้ก็ login ผ่านหน้าเบราว์เซอร์ เพื่อเข้าทำงานในเครื่องใหม่ได้แล้ว
  23. ต่อไปก็แก้ไขการตั้งค่าต่างๆ ของ 3rd party plugin ใน wordpress เครื่องใหม่ คือ
    – Facebook for WordPress เกี่ยวกับ facebook app
    – WordPress HTTPS  เกี่ยวกับเลือก https สำหรับหน้า login
    – Fast Secure Contact Form
  24. ที่เครื่องเดิม ทำ 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
  25. ขั้นตอนสุดท้าย คือ ขอแก้ไขโดเมนเนม sysadmin.in.psu.ac.th เป็น CNAME ของ sysadmin.psu.ac.th
  26. ต่อไปเป็นสิ่งเล็กๆที่ละเลยไม่ได้เหมือนกันคือ หากต้องการให้เครื่องนี้ส่งอีเมลออกได้
    ก็ต้องติดตั้งโปรแกรม 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
  27. ขอขอบคุณทีมงานเซิร์ฟเวอร์ คุณใหญ่ คุณน้อง ที่ช่วยทำ VM และช่วยขอจดโดเมนเนมให้
  28. เสร็จจนได้

ผมจึงขอบันทึกไว้ให้กับแอดมินรุ่นหลังได้ลองใช้เป็นแนวทางครับ ขอบคุณครับที่อ่านมาถึงตรงท้ายเรื่องนี้