KM-container-2

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 12-9-2561
อัปเดตโดย วิบูลย์ วราสิทธิชัย

KM Open Source Technology ตอน container

ในตอนที่แล้ว เราเรียนรู้พื้นฐาน LXD แล้ว มาในตอนนี้เราจะนำเสนอตัวอย่างการปรับแต่ง server ให้เป็น load balance wordpress blog server อย่างง่าย

เทคนิคที่จะทำ load balance wordpress blog server แบบง่าย ๆ คือ

  • มี database 1 เครื่อง และ มี web server หลายตัว
  • โดยกำหนดค่า DNS ตายตัวแบบ DNS round-robin สำหรับชื่อ lxd.example.com

มีขั้นตอนดังนี้
1. ติดตั้ง MySQL server ลงใน host server
2. ติดตั้ง wordpress ลงใน LXC server ชื่อ myxenial64
3. รัน script ที่เตรียมไว้เพื่อเพิ่ม web server
4. นำหมายเลขไอพีไปใส่ใน DNS Server
5. ใช้งานด้วยชื่อ lxd.example.com

มาลงรายละเอียดกัน
1. ติดตั้ง MySQL server ลงใน host server
1.1 ติดตั้งโปรแกรม

mama@ubuntu:~$ sudo apt-get install mysql-server

1.2 สร้าง database

mama@ubuntu:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.12-0ubuntu1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE wordpressdb;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'lxduser1'@'%' IDENTIFIED BY 'lxdpassword';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wordpressdb.* TO 'lxduser1'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

1.3 ปรับแต่งค่า bind address ที่ mysqld.cnf

mama@ubuntu:~$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address            = 10.0.100.214

ต้อง restart mysql ด้วย
sudo service mysql restart

2. ติดตั้ง wordpress ลงใน LXC server ชื่อ myxenial64
2.1 สร้าง LXC server

mama@ubuntu:~$ lxc launch images:ubuntu/xenial/amd64 myxenial64
Creating myxenial64
Retrieving image: 100%
Starting myxenial64
mama@ubuntu:~$ lxc image list
+-------+--------------+--------+----------------------------------------+--------+---------+-----------------------------+
| ALIAS | FINGERPRINT  | PUBLIC |              DESCRIPTION               |  ARCH  |  SIZE   |         UPLOAD DATE         |
+-------+--------------+--------+----------------------------------------+--------+---------+-----------------------------+
|       | 3bf9f6bd23a9 | no     | Ubuntu xenial (amd64) (20160606_03:49) | x86_64 | 78.58MB | Jun 7, 2016 at 3:43am (UTC) |
+-------+--------------+--------+----------------------------------------+--------+---------+-----------------------------+

2.2 เตรียม /var/www ของ LXC server ใหม่ เพื่อให้ชี้ออกไปที่ /sharewww ของ host
(แก้ไขเอกสาร ให้ทำตั้งแต่ตรงนี้เลย)
ที่ host server สร้าง /sharewww

mama@ubuntu:~$ sudo mkdir /sharewww
mama@ubuntu:~$ sudo chmod 777 /sharewww
mama@ubuntu:~$ lxc config device add myxenial64 sharewww disk source=/sharewww path=/var/www

2.3 เข้าไปใน LXC server

mama@ubuntu:~$ lxc start myxenial64
mama@ubuntu:~$ lxc exec myxenial64 bash

2.4 ปรับแต่ง repository

root@myxenial64:~#
root@myxenial64:~# vi /etc/apt/sources.list
deb http://th.archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://th.archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse

2.5 อัปเดต server

root@myxenial64:~# apt update && apt upgrade

2.6 ติดตั้งซอฟต์แวร์

root@myxenial64:~# apt install php php-mysql
root@myxenial64:~# apt install wget unzip
root@myxenial64:~# apt install apache2
Reference: http://www.geekyboy.com/archives/1268
root@myxenial64:~# apt-get install libapache2-mod-php7.0

2.7 ติดตั้ง wordpress

Reference: https://www.howtoforge.com/tutorial/how-to-install-wordpress-on-ubuntu-16.04-lamp/
cd /tmp
root@myxenial64:/tmp# wget http://wordpress.org/latest.zip
root@myxenial64:/tmp# unzip -q latest.zip -d /var/www/html/
root@myxenial64:/tmp# chown -R www-data:www-data /var/www/html/wordpress
root@myxenial64:/tmp# chmod -R 755 /var/www/html/wordpress
root@myxenial64:/tmp# mkdir -p /var/www/html/wordpress/wp-content/uploads
root@myxenial64:/tmp# chown -R www-data:www-data /var/www/html/wordpress/wp-content/uploads
root@myxenial64:/tmp# service apache2 restart
root@myxenial64:/tmp# exit

2.8 เข้า browser ไปที่ http://10.0.100.x/wordpress
ใส่ค่าในการติดตั้งครั้งแรก และทำตามหน้าเว็บแนะนำ

2.9 เข้าไปแก้ไข apache2 default page

mama@ubuntu:~$ lxc exec myxenial64 bash

สร้างไฟล์ index.php แทน index.html เพื่อใช้ตรวจสอบ IP server

root@myxenial64:~# cd /var/www/html
root@myxenial64:/var/www# mv index.html old
root@myxenial64:/var/www# vi index.php
<?php echo $_SERVER['SERVER_ADDR']; ?> It works!

ออกจาก LXC server

root@myxenial64:~/var/www# exit

ผลลัพธ์ wordpress site ที่ host

mama@ubuntu:~$ ls -l /sharewww/
total 4
drwxr-xr-x 3 100000 100000 4096 Jun  7 13:12 html
mama@ubuntu:~$ ls -l /sharewww/html
total 28
-rw-rw-r-- 1 101000 101000 11715 Jun  7 13:11 index.php
-rw-r--r-- 1 100000 100000 11321 Jun  7 10:54 old
drwxr-xr-x 5 100033 100033  4096 Jul 22 11:30 wordpress

3. รัน script ที่เตรียมไว้เพื่อเพิ่ม web server
3.1. สร้าง image ชื่อ mywordpress จาก container

mama@ubuntu:~$ lxc stop myxenial64
mama@ubuntu:~$ lxc publish myxenial64 --alias mywordpress

3.2 สร้างไฟล์ webserver_interfaces

mama@ubuntu:~$ vi webserver_interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.0.100.lxdip
netmask 255.255.255.0
gateway 10.0.100.1
dns-nameservers 10.0.100.1

3.3 สร้างไฟล์ restart_one

mama@ubuntu:~$ vi restart_one
#!/bin/bash

if [ $# -eq 0 ]; then
   echo Usage: $0 arg1
   exit 1
else
   i=$1
fi
template_file="webserver_interfaces"
servername="webserver"
imagename="mywordpress"

        sed "s/lxdip/$i/g" $template_file > /tmp/template_interface.$$
        if [ ! -z "$(lxc list | grep $servername$i)" ]; then
           lxc stop $servername$i
           lxc delete $servername$i
        fi
        lxc launch $imagename $servername$i
        if [ $? -eq 0 ]; then
           lxc file push /tmp/template_interface.$$ $servername$i/etc/network/interfaces
           lxc config device add $servername$i sharewww disk source=/sharewww path=/var/www

           lxc restart $servername$i
        fi
rm -f /tmp/template_interface.$$

#results
lxc list $servername

3.4 รันเพื่อสร้าง server IP 10.0.100.11 และ 10.0.100.12

mama@ubuntu:~$ bash restart_one 11
mama@ubuntu:~$ bash restart_one 12

4. นำหมายเลขไอพีไปใส่ใน DNS Server
4.1 แก้ไขข้อมูล dns ตามต้องการ

mama@myrouter:~$ sudo vi /var/cache/bind/db.example.com
2016072601 ; Serial
lxd.example.com.        IN A 10.0.100.11
                        IN A 10.0.100.12

4.2 restart dns server

mama@myrouter:~$ sudo service bind9 restart

4.3 เพิ่มข้อมูลใน wp-config.conf ด้วย editor เช่น vi

mama@ubuntu:~$ vi /sharewww/html/wordpress/wp-config.php

เพิ่ม
define('WP_SITEURL', 'http://lxd.example.com/wordpress');
define('WP_HOME', 'http://lxd.example.com/wordpress');
ก่อน
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpressdb');

5. ใช้งานด้วยชื่อ lxd.example.com ทดสอบการใช้งาน เข้า browser ไปที่ http://lxd.example.com/wordpress