ติดตั้ง wordpress บน ubuntu 16.04 server

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 13-06-2560
ดูแลโดย WIBOON

1. ติดตั้งโปรแกรมที่จำเป็น

mama@ubuntu:~$ sudo apt install php php-mysql php-xml
mama@ubuntu:~$ sudo apt install wget
mama@ubuntu:~$ sudo apt install unzip
mama@ubuntu:~$ sudo apt install apache2
mama@ubuntu:~$ sudo apt install libapache2-mod-php7.0
mama@ubuntu:~$ sudo service apache2 restart


2. เตรียม database ซึ่งเราจะใช้ MySQL server
ดูวิธีทำจากเรื่อง ติดตั้ง mysql server บน ubuntu 16.04 server
สมมติ
ชื่อ database คือ mydb
ชื่อ user คือ myuser
รหัสผ่านของ myuser คือ mypassword

3. ติดตั้ง wordpress จาก latest.zip

mama@ubuntu:~$ cd /tmp
mama@ubuntu:~$ wget http://wordpress.org/latest.zip
mama@ubuntu:~$ sudo unzip -q latest.zip -d /var/www/html/
mama@ubuntu:~$ sudo chown -R www-data:www-data /var/www/html/wordpress 
mama@ubuntu:~$ sudo chmod -R 755 /var/www/html/wordpress  
mama@ubuntu:~$ sudo mkdir -p /var/www/html/wordpress/wp-content/uploads 
mama@ubuntu:~$ sudo chown -R www-data:www-data /var/www/html/wordpress/wp-content/uploads


4. เข้าหน้าเว็บไซต์ เพื่อติดตั้ง wordpress ครั้งแรก

5. จำกัดสิทธิในการแก้ไขไฟล์ใน /var/www/html/wordpress
สมมติว่ามี user ที่ใช้ในการทำงานแอดมินชื่อว่า mama และมีโฟลเดอร์ใน wp-content จำนวนหนึ่ง

sudo chown -R mama:mama /var/www/html/wordpress
sudo chown -R mama:mama /var/www/html/wordpress/wp-content/
sudo chown -R mama:www-data /var/www/html/wordpress/wp-content/plugins
sudo chown -R mama:www-data /var/www/html/wordpress/wp-content/themes
sudo chown -R mama:www-data /var/www/html/wordpress/wp-content/upgrade
sudo chown -R mama:www-data /var/www/html/wordpress/wp-content/uploads
sudo chown -R mama:www-data /var/www/html/wordpress/wp-content/languages/
chmod -R 775 /var/www/html/wordpress/wp-content/plugins/
chmod -R 775 /var/www/html/wordpress/wp-content/themes/
chmod -R 775 /var/www/html/wordpress/wp-content/upgrade/
chmod -R 775 /var/www/html/wordpress/wp-content/uploads
chmod -R 775 /var/www/html/wordpress/wp-content/languages


6. การ backup wordpress site
จะใช้เทคนิคตั้งค่า backup ทุกวันด้วย cron ด้วยสิทธิ root
ส่วนใหญ่แล้วเราจะ backup database คู่ไปกับ files เช่น wordpress เป็นต้น รวมทั้งไม่เปิดเผย password ไว้ในบรรทัดคำสั่ง mysqldump แต่นำ password ไปเขียนไว้ในไฟล์ mypw.cnf
มี server อีกเครื่องเป็นที่เก็บไฟล์สำรอง ซี่งเราได้จัดการเรื่อง ssh-keygen แล้ว ก็เพิ่มคำสั่ง scp อีก 2 บรรทัดเข้าไปใน mybackup.sh ได้ เช่น server ชื่อ server.psu.ac.th และมี user ชื่อ mama
ทั้งหมดนี้จะเขียนเป็น shell script ไว้

ขั้นตอนดังนี้
ก่อนอื่นให้สร้างโฟลเดอร์ไว้ใน home ของ root

root@ubuntu:~# mkdir /root/backup
root@ubuntu:~# mkdir /root/cron

ต่อไปเขียน shell script ตั้งชื่อไว้ว่า mybackup.sh ไว้ใน /root/cron

root@ubuntu:~# vi /root/cron/mybackup.sh

ภายในมีดังนี้

#!/bin/bash
TODAY=$(date "+%Y%m%d%H%M")
mysqldump --defaults-extra-file=/root/cron/mypw.cnf mydb > /root/backup/mysite_${TODAY}.sql
tar -zcp -f /root/backup/mysite_${TODAY}.tgz -C /var/www/html/wordpress .
scp -i /root/.ssh/id_rsa /root/backup/mysite_${TODAY}.sql  mama@10.0.2.4:/home/mama/backup/wordpress
scp -i /root/.ssh/id_rsa /root/backup/mysite_${TODAY}.tgz mama@10.0.2.4:/home/mama/backup/wordpress


สร้างไฟล์ mypw.cnf ไว้ใน /root/cron

root@ubuntu:~# vi /root/cron/mypw.cnf

ภายในไฟล์จะมีข้อมูล username และ password เช่น

[mysqldump]
user=myuser
password=mypassword


ทดสอบ shell script mybackup.sh ว่าใช้งานได้ยัง

root@ubuntu:~# bash /root/cron/mybackup.sh


ต่อไปสร้างไฟล์ cron-mybackup ไว้ใน /etc/cron.d/

root@ubuntu:~# vi /etc/cron.d/cron-mybackup

ภายในไฟล์จะมีข้อมูลการตั้งเวลาที่ cron ทำงาน เวลา 4.00 น. ทุกคืน

0 4 * * * root sh /root/cron/mybackup.sh


ตรวจสอบที่เครื่อง 10.0.2.4 ว่าได้รับไฟล์หรือไม่

root@ubuntu:~# ssh mama@10.0.2.4 "ls -l backup/wordpress"

ผลลัพธ์ประมาณนี้

total 35472
-rw-r--r-- 1 mama mama  550856 Jun  7 10:43 mysite_201706071043.sql
-rw-r--r-- 1 mama mama 8525340 Jun  7 10:43 mysite_201706071043.tgz


7. เขียน shell script ไว้ลบ backup files ที่จำนวนวันเกิน n วันตามต้องการ
สร้างไฟล์ clean-backup.sh ไว้ใน /root/cron/

root@ubuntu:~# vi /root/cron/clean-backup.sh

ภายในไฟล์จะมีคำสั่งกำหนดจำนวนวันที่จะเก็บไว้ และแสดงรายการล่าสุด 2 บรรทัด

#!/bin/bash
echo "Clean wordpress backup file 10 days"
find /root/backup/ -type f -not -ctime -10 -delete
echo "Check wordpress backup file latest"
ls -l /root/backup/ | tail -2

ทดสอบ shell script clean-backup ว่าใช้งานได้หรือไม่

root@ubuntu:~# bash /root/cron/clean-backup.sh


8. หากต้องการให้ทำคำสั่ง clean-backup.sh ทุกคืนหลังจาก backup ก็นำคำสั่ง
bash /root/cron/clean-backup.sh
ไปต่อท้ายไฟล์ /root/cron/mybackup.sh

9. ติดตั้ง mail transport agent เพื่อส่งผลลัพธ์ของการทำงานคำสั่ง cron ไปยังอีเมล root หรือ อีเมลภายนอก ก็ได้
โดย default เมื่อติดตั้ง Ubuntu server จะไม่มีการติดตั้ง MTA โดยทันที
เมื่อ cron ทำงานตามกำหนดเวลาแล้วมี output เกิดขึ้น output นั้นจะถูกส่งเป็นอีเมลไปยัง mailbox ของ user ที่รัน cron นั้น เช่น user root เป็นต้น ดูเพิ่มเติมที่เรื่อง ติดตั้ง postfix บน ubuntu 16.04