ติดตั้ง wordpress ลงใน LXD container บน ubuntu 18.04 server

จาก Wiki Opensource

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

  • เป็นเรื่องราวที่ทำเพิ่มหลังจากที่ได้ทำเรื่อง ติดตั้ง LXD บน ubuntu 18.04 server มาก่อนแล้ว
  • เราจะติดตั้ง wordpress ลงใน server ชื่อ tblog1.example.com
  • เราได้สร้าง container ชื่อ tblog1 จาก local image ชื่อ apache2.4php7.2 ไว้แล้ว


ขั้นตอน
1. เข้าทำงานใน container ชื่อ tblog1

lxc exec tblog1 bash

2. ติดตั้ง mysql server ใน container

apt install mysql-server

พิมพ์คำสั่ง

mysql -u root -p

กดปุ่ม Enter ไม่ต้องใส่ password ได้

Enter password: Press Enter key
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.23-0ubuntu0.18.04.1 (Ubuntu)
mysql> 

3. สร้าง database สำหรับ wordpress

CREATE DATABASE tblog1db;
CREATE USER 'tblog1user'@'%' IDENTIFIED BY 'tblog1password';
GRANT ALL PRIVILEGES ON tblog1db.* TO 'tblog1user'@'%';
FLUSH PRIVILEGES;
EXIT

4. ต่อไปก็ติดตั้ง wordpress blog ใน container

cd /tmp
wget https://wordpress.org/latest.zip
unzip -q latest.zip -d /var/www/html/
chown -R www-data:www-data /var/www/html/wordpress
chmod -R 755 /var/www/html/wordpress
mkdir -p /var/www/html/wordpress/wp-content/uploads
chown -R www-data:www-data /var/www/html/wordpress/wp-content/uploads
systemctl restart apache2
exit

5. เข้า browser เพื่อไปยัง http://tblog1.example.com/wordpress ใส่ค่าในการติดตั้งครั้งแรก และทำตามหน้าเว็บแนะนำ
Database Name: tblog1db
Username: tblog1user
Password: tblog1password
Database Host: localhost
คลิก Submit
คลิก Run the installation
Site Title: TBlog1
Username: myadmin
Password: 123456 (ตั้งง่าย ๆ ต้องเลือก Confirm use of weak password ด้วย)
Your Email: myadmin@localhost.localdomain
คลิก Install Wordpress
คลิก Login
ทดสอบการเข้าใช้ด้วย user myadmin แล้ว Logout ออก
เข้า browser เพื่อไปยัง http://tblog1.example.com/wordpress
ได้หน้า blog ตัวอย่าง

6. แก้ไข wordpress config file ใน container
เข้าทำงานใน container

lxc exec tblog1 bash

แก้ไขโดยใช้ vi หรือ nano ก็ได้

nano /var/www/html/wordpress/wp-config.php

เพิ่มท่อนนี้ก่อนบรรทัด /* That's all, stop editing! Happy blogging. */

if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}
/* That's all, stop editing! Happy blogging. */

exit

7. ทดสอบ
เข้า browser เพื่อไปยัง http://tblog1.example.com/wordpress
เข้า browser เพื่อไปยัง https://tblog1.example.com/wordpress

8. แก้ไข LogFormat ของ apache2 ให้รับ X-Forwarded-For
เข้าไปทำงานใน LXD container ชื่อ tblog1

lxc exec tblog1 bash

แก้ไข LogFormat ของ apache2 ให้รับ X-Forwarded-For ด้วยเอดิเตอร์ vi หรือ nano ก็ได้

vi /etc/apache2/apache2.conf

แก้ไขดังนี้

#LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

สร้างไฟล์ remoteip.conf (ชื่อเดียวกันกับชื่อ module)

vi /etc/apache2/mods-available/remoteip.conf

ใส่ 2 บรรทัดนี้ เลข IP คือ IP ของ haproxy ในตัวอย่างคือ IP ของ lxdbr0 10.25.51.1

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 10.25.51.1

สั่ง enable module ดังนี้

a2enmod remoteip

ตรวจสอบด้วยคำสั่ง ls -l

ls -l  /etc/apache2/mods-enabled/remoteip*

จะได้ link file เกิดขึ้นแสดงว่า enable module remoteip แล้ว

lrwxrwxrwx 1 root root 31 Oct 16 06:32 /etc/apache2/mods-enabled/remoteip.conf -> ../mods-available/remoteip.conf
lrwxrwxrwx 1 root root 31 Oct 16 06:32 /etc/apache2/mods-enabled/remoteip.load -> ../mods-available/remoteip.load

สั่ง restart service apache2 ดังนี้

systemctl restart apache2

เข้า browser เปิดเว็บไซต์ เพื่อทดสอบ จากนั้น ดู log file ว่าได้ client IP หรือไม่

tail  /var/log/apache2/access.log

ตัวอย่าง log แสดง client IP 10.0.100.251 และ 10.0.100.1

10.0.100.251 - - [16/Oct/2018:06:46:43 +0000] "GET /wp-includes/js/wp-emoji-release.min.js?ver=4.9.8 HTTP/1.1" 200 4678 "https://tblog1.example.com/index.php/2018/10/04/try-me/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/69.0.3497.81 Chrome/69.0.3497.81 Safari/537.36"
10.0.100.1 - - [16/Oct/2018:06:46:59 +0000] "GET / HTTP/1.1" 200 54745 "-" "Wget/1.19.4 (linux-gnu)"

ออกจาก LXD container

exit


แบบฝึกหัด สร้าง LXD container ชื่อ tblog2 บน ubuntu 18.04 server


หมายเหตุ
การเปลี่ยน WP_SITEURL (ไม่จำเป็น แต่หากต้องการทำก็ทำได้)
เข้าทำงานใน container ชื่อ tblog1

lxc exec tblog1 bash

แก้ไข 2 จุด
จุดแรกคือเพิ่ม site tblog1.conf

cd /etc/apache2/sites-available/
cp 000-default.conf tblog1.conf

เปิดไฟล์ tblog1.conf ด้วยเอดิเตอร์ vi หรือ nano ก็ได้

nano  tblog1.conf 

แก้ไข 2 บรรทัดนี้

        ServerName tblog1.example.com
        DocumentRoot /var/www/html/wordpress

สั่ง enable site ใหม่

a2ensite tblog1.conf
systemctl reload apache2

จุดที่ 2 แก้ไขไฟล์ wp-config.php
เปิดไฟล์ด้วยเอดิเตอร์ vi หรือ nano ก็ได้

nano /var/www/html/wordpress/wp-config.php

เพิ่ม 2 บรรทัดนี้ ก่อนชุด MySQL settings ประมาณบรรทัดที่ 20

define('WP_SITEURL', 'http://tblog1.example.com/');
define('WP_HOME', 'http://tblog1.example.com/');

ทดสอบ
เข้า browser เพื่อไปยัง http://tblog1.example.com
เข้า browser เพื่อไปยัง https://tblog1.example.com