ช่วงนี้เป็นช่วงขายไอเดียสำหรับผู้ประกอบการธุรกิจ IT ที่ต้องการสร้างสินค้าและบริการจากซอฟต์แวร์โอเพนซอร์ส ซึ่งงาน MICT สร้างคนสร้างชาติก็กำลังใกล้เข้ามาแล้วครับ เอาล่ะก่อนจะเข้าเรื่องการทำมาหากิน มาดูเรื่องของ Drupal กันก่อน Drupal มีคุณสมบัติพิเศษอย่างหนึ่งที่ CMS อื่นๆ ไม่มีคือสามารถใช้ตัวมันเองสร้างเว็บไซต์ได้อีกหลายๆ เว็บ บางคนก็เรียก sub site, minisite ก็แล้วแต่จะเรียกครับ วิธีการนี้ไม่ใช้วิธีการคัดลอกโค้ดไปยังไดเรคทอรีอื่นแล้วติดตั้งนะครับ เอาละเดี๋ยวนึกภาพกันไม่ออก ขอยกตัวอย่างง่ายๆ ดีกว่าครับ เราจะใช้ Drupal ทำเว็บไซต์ให้กับวิทยาลัยแห่งหนึ่งโดยแต่ละคณะแต่ละสาขาวิชามีเว็บไซต์เป็นของตนเอง นั่นหมายความว่าคุณต้องติดตั้ง Drupal ตามจำนวนคณะและสาขาวิชา เช่น

/var/www/college  <= เว็บวิทยาลัย
/var/www/science  <= เว็บคณะวิทยาศาสตร์
/var/www/science_physic  <= เว็บคณะวิทยาศาสตร์ สาขาวิชาฟิสิกส์
/var/www/science_math  <= เว็บคณะวิทยาศาสตร์ สาขาวิชาคณิตศาสตร์
/var/www/nurse  <= เว็บคณะพยาบาล
/var/www/engieering  <= เว็บคณะวิศวกรรม
/var/www/engieering_comp  <= เว็บคณะวิทยาศาสตร์ สาขาวิชาคอมพิวเตอร์
/var/www/techno  <= เว็บคณะเทคโน
/var/www/techno_food  <= เว็บคณะเทคโนโลยี สาขาวิชาการอาหาร

ก็เล่นไปซะ 9 เว็บ 9 Drupal เข้าไปแล้ว หาก Drupal ของคุณมีเวอร์ชั่นไม่เท่ากันอีกก็กุมขมับเวลาอัพเกรดกันได้เลยครับ แต่หากคุณมีผู้ดูแลระบบที่สามารถดูแลเรื่องการจัดการ Drupal ในเรื่องต่างๆ ได้ เช่น อัพเกรด, อัพเดทโมดูล, อัพเดทธีม ฯลฯ จะใช้วิธี virtual host ก็ไม่ว่ากันครับ หากไม่มีละแย่เลย ต้องดูเว็บไซต์อย่างน้อยก็ 9 เว็บเข้าไปแล้ว วิธีนี้แก้ปัญหาจุกจิกนี้ แก้ได้โดยการใช้ multi site ครับ ซึ่ง เราจะติดตั้ง drupal ไว้ที่เดียวคือ /var/www/college จากนั้นทำ muti site จากจุดนี้ไป แล้วทำยังไง? Drupal ออกแบบเรื่อง multi site ไว้เรียบร้อยแล้ว เพียงสร้างไดเรคอรีเก็บ config และใส่ setting.phpให้แต่ละเว็บไซต์เท่านั้น ลองมาดูกันอีกรอบครับ

/var/www/college <= เราติดตั้ง Drupal ไว้ที่นี่สำหรับเว็บวิทยาลัย
/var/www/college/sites/default/setting.php <= ใส่ configของเว็บวิทยาลัย
/var/www/college/sites/science.mycollege.ac.th/setting.php <= ใส่ configของเว็บคณะวิทยาศาสตร์
/var/www/college/sites/physic.science.mycollege.ac.th/setting.php <= ใส่ config ของเว็บคณะวิทยาศาสตร์ สาขาวิชาฟิสิกส์

ไปเรื่อยๆ จนครบ สำหรับฐานข้อมูลเราสามารถสร้างฐานข้อมูลแยกออกตามคณะและสาขาวิชาได้ จะทำให้การบริการจัดการฐานข้อมูลได้ง่ายขึ้น คิดว่าน่าจะเข้าในในแนวคิดกันแล้วมาดู how-to แบบเต็มๆ ครับ ก่อนลงมือทำเรามาดูว่ามีอะไรกันบ้าง  เรามีโดเมนวิทยาลัยชื่อ mycolledge.ac.th, เรามีเว็บ 9 เว็บไซต์ที่ต้องติดตั้ง drupal แบบ multisite, ใช้ /var/www เป็นที่เก็บเว็บไซต์ เรา config DNS และ Apache Virtual Hostไว้แล้ว ใครยังงงๆ อ่านตอนเก่าๆ ได้ครับ เอาล่ะมาเริ่มกันเลย

แปลงร่างเป็น root ก่อนครับ

sudo -s

จากนั้นย้ายตัวเองไปที่ /var/www

cd /var/www

ดาวน์โหลด Drupal

wget http://ftp.drupal.org/files/projects/drupal-6.12.tar.gz

คลี่ไฟล์

tar zxvf drupal-6.12.tar.gz

เปลี่ยนชื่อไดเรคทอรีจาก  drupal-6.12 เป็น college เพื่อใช้เป็นเว็บหลัก อ้อ อย่าลืมแก้ไข document root ของ default virtual host นะครับ

mv  drupal-6.12  college

สร้างไดเรคทอรีสำหรับเก็บ config ของแต่ละเว็บไซต์

cd college/sites
mkdir science.mycolledge.ac.th
mkdir physic.science.mycolledge.ac.th
mkdir math.science.mycolledge.ac.th
mkdir nurse.mycolledge.ac.th
mkdir engineer.mycolledge.ac.th
mkdir comp.engineer.mycolledge.ac.th
mkdir techno.mycolledge.ac.th
mkdir food.techno.mycolledge.ac.th

สร้าง ฐานข้อมูล mysql ให้แต่ละเว็บครับ

mysql -u root -pmy-root-password -e “create database college”
mysql -u root -pmy-root-password -e “create database science”
mysql -u root -pmy-root-password -e “create database science_physic”
mysql -u root -pmy-root-password -e “create database science_math”
mysql -u root -pmy-root-password -e “create database nurse”
mysql -u root -pmy-root-password -e “create database engineer”
mysql -u root -pmy-root-password -e “create database engineer_comp”
mysql -u root -pmy-root-password -e “create database techno”
mysql -u root -pmy-root-password -e “create database techno_food”

จากนั้น browse เว็บไปที่ mycolledge.ac.th ติดตั้ง drupal สำหรับเว็บหลักให้เรียบร้อย แล้วจึงคัดลอก setting.php ไปยังไดเรคทอรีสำหรับเก็บ config ของแต่ละเว็บไซต์ ดังนี้

cp default/setting.php science.mycolledge.ac.th
cp default/setting.php physic.science.mycolledge.ac.th
cp default/setting.php math.science.mycolledge.ac.th
cp default/setting.php nurse.mycolledge.ac.th
cp default/setting.php engineer.mycolledge.ac.th
cp default/setting.php comp.engineer.mycolledge.ac.th
cp default/setting.php techno.mycolledge.ac.th
cp default/setting.php food.techno.mycolledge.ac.th

แก้ไขชื่อฐานข้อมูลใน setting.php ของแต่ละเว็บให้ถูกต้อง

$db_url = ‘mysqli://username:password@localhost/databasename’;

จากนั้นทะยอยติดตั้งทีละเว็บไซต์โดยเบราส์ไปที่ URL ดังนี้

http://science.mycolledge.ac.th/install.php
http://physic.science.mycolledge.ac.th/install.php
http://math.science.mycolledge.ac.th/install.php
http://nurse.mycolledge.ac.th/install.php
http://engineer.mycolledge.ac.th/install.php
http://comp.engineer.mycolledge.ac.th/install.php
http://techno.mycolledge.ac.th/install.php
http://food.techno.mycolledge.ac.th/install.php

เท่านี้ก็ได้ Drupal ในแบบฉบับ Multi Site แล้ว อ้อลืมไปนิดนึง หากคุณมี module หรือ theme ที่ต้องใช้ร่วมกัน ให้คุณคัดลอก module, หรือ theme ไปยัง sites/all/modules และ sites/all/themes ครับ เอาละ มาดูวิธีการประยุกต์ให้ได้ธุรกิจบริการกันบ้าง จากตัวอย่างข้างต้นคุณสามารถรับจ้างทำเว็บไซต์ได้ง่ายๆ แต่หากเป็นการประยุกต์ในธุรกิจบริการ คุณสามารถใช้ Drupal ติดตั้งแบบ Multi Site นี้ทำอะไรได้บ้าง ?

เว็บบล็อก
เว็บไซต์
เว็บอีคอมเมิร์ซ
เว็บฐานข้อมูลความรู้
ฯลฯ

บริการในรูปแบบธุรกิจบริการได้อย่างสบายๆ สำหรับโมเดลด้านธุรกิจไม่ขอพูดถึง เดี๋ยวโดนดุครับ

Drupal เป็น Bloging System ที่พัฒนาอย่างซับซ้อน ด้วยความซับซ้อน ความซับซ้อนที่ว่าคือการเป็น CMF ในตัว ดังนั้นการทำงานจึงใช้ทรัพยากรของเครื่องพอสมควร (ในกรณีที่มีโหลดมากๆๆๆๆ) เนื่องจาก

1. Drupal ไม่มีการทำ caching โดย default ประมวลผลหน้าทุกครั้งที่โหลดหน้านั้นๆ ไม่เก็บ caching เอาไว้
2. ตารางเก็บข้อมูลของ Drupal ออกแบบมาให้รองรับ Tag และ blog item ทำให้การกสร้าง view ในการนำไปแสดงผลต้องการการประมวลผลสักน่อย
3. การเชื่อมต่อฐานข้อมูล MySQL ของ Drupal เชื่อมต่อแบบปกติไม่ได้เป็นแบบ persistent
4. การทำ Query Cache ใน MySQL ยังไม่ดีพอ
5. ไม่ค่อยได้ Maintenance Database
6. MySQL ใช้ MYISAM หากยังใช้ MyISAM อยู่ก้อต้องจูนดีๆ

จะจูน MySQL ยังไง?

ให้พิจาณา option file ของ MySQL เช่น my.cnf ในนั้นจะมีส่วนการกำหนด caching จำนวน connection และอื่นๆ นึกไม่ออกดูที่ http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html แล้วจะใส่ตัวเลข connection ได้ยังไง?

ให้ดู log ของ Apache คำนวนให้ได้ว่าจำนวน connection จริงๆ ที่ใช้ในการเชื่อมต่อมีจำนวนเท่าไรกันแน่ เช่น 256 client จำนวน databae ที่เชื่อมต่อได้สัดส่วนคร่าวๆ คือ 1/8 เท่ากับ 32 database connections ถ้าคิดในทางเข้าข้างตัวเองไว้ก่อน ก้อ คูณด้วย 2 เข้าไป คือได้ประมาณ 64 connections (ค่อยดูมากหน่อย)

set-variable = max_connections = 60
set-variable = max_user_connections = 60

จากนั้นค่อยๆ เพิ่มตัวแปรอื่นๆ

set-variable = max_allowed_packet=1M
set-variable = max_connect_errors=999999
set-variable = table_cache=1200

แล้วดูอาการว่าจะเดี้ยงมากน้อยเพียงใด

นอกจากการปรับแต่ง MySQL แล้วการทำ caching ให้กับ Drupal ก้อเป็นเรื่องที่ดี เช่นการใช้ module สนับสนุนการทำ caching แบบต่างๆ เช่น boots เป็นต้น อ้อเพิ่มการ Maintenance Database สักหน่อยโดยการทำ Optimize ด้วยคำสั่ง mysqlcheck -o -A -p

ใครสนใจศึกษาการปรับแต่งระบบอ่านเพิ่มเติมได้ที่
http://rudd-o.com/archives/2006/03/01/tuning-an-apache-server-in-5-minutes/
http://rudd-o.com/archives/2006/03/02/tuning-a-mysql-server-in-5-minutes/
http://genomewiki.ucsc.edu/index.php/Tuning-primer.sh

หมายเหตุ การปรับแต่งต้องอาศัยระยะเวลาและการดูแลอย่างเอาใจใส่ ควรนั่งดูและปรับแต่งอย่างน้อย 1-2 สัปดาห์

ข่าวฝากประชาสัมพันธ์ครับ ทางมูลนิธิศักดิ์พรทรัพย์เปิดอบรมหลักสูตรการสร้างเว็บไซต์ด้วย Drupal โดยเป็นการอบรมตั้งแต่ขั้นพื้นฐาน เริ่มตั้งแต่การติดตั้ง การใช้งาน ไปจนถึงการติดตั้งส่วนเสริมความสามารถต่างๆ สำหรับครั้งนี้เป็นหลักสูตรสองวันครับ โดยอบรมในวันที่ 8-9 ตุลาคมนี้

ท่านที่สนใจลงเบียนได้ด้วยตนเองที่ http://register.ssup.homelinux.org/register/register2.php

พอดีว่ามีเหตุให้ต้องสอน CMS ด้วยเวลาอันจำกัด(จำเขี่ย) ประมาณ 6 ช.ม. ซึ่งพอสอนจริงแล้ว คาดว่า คงจะได้สอนแค่ 5ช.ม. เต็มที่ ซึ่งมันค่อนข้างโหดมากสำหรับการสอนใช้ CMS ให้มันออกมาเป็นเว็บไซต์ที่สามารถใช้งานได้จริง

สิ่งที่ผมทำคื ไล่หา CMS ที่น่าจะเหมาะสำหรับสอนในระยะเวลาเท่านี้ ก็ไล่ดูไปหลายตัว ตัวที่ดูเข้าท่าๆหน่อยก็

  • Concrete5 แต่อันนี้หน้า Admin โหดไป
  • WordPress อันนี้โอเลย แต่ผมไม่คุ้น แค่จะหาทางทำ Horizontal Menu ผมยังทำไม่ได้ เลย เลยคิดว่าตัดไปดีกว่า เพราะถ้าไปเจอปัญหาจริงหน้างานล่ะก็ ปิดคอร์สก่อนจบแน่

ก็เลยมาจบที่ Drupal เพราะคุ้นเคยสุด เกิดปัญหาไรก็น่าจะแก้ได้ล่ะ

ทีนี้ก็มาจบที่ปัญหาว่า Drupal สำหรับ 5ชม. นั้น มันไม่พอ ผมก็เลยใช้วิธี แพคโมดูลที่ควรมีใน Drupal พร้อมกับ Theme บางส่วนไว้เลย เพื่อลดขั้นตอนในการสอนเรื่องติดตั้ง Module และ Theme ไป แล้วไปเน้นที่เรื่อง Content เอา

ทีนี้ Module ทีแนะนำก็มีดังนี้

  • admin-menu ใช้สำหรับสร้างเมนูของผู้ดูแล เพื่อให้ใช้งานหน้า Admin ได้ง่ายขึ้น
  • advanced-forum ปรับปรุงให้หน้าตาในส่วนของ Forum สวยงาม และดูใกล้เคียง Web Forum เช่น PhpBB มากขึ้น
  • author-pane ใช้ร่วมกับ Advanced Forum เพื่อแสดงข้อมูลผู้ตั้งกระทู้ และตอบกระทู้
  • ctools ใช้ร่วมกับ Advanced Forum
  • FCKeditor เพื่อให้จัดข้อความในเนื้อหาได้ง่ายขึ้น
  • imce สำหรับอัพโหลดภาพ ใช้ร่วมกับ FCKeditor
  • vertical-tabs เพื่อให้ การตั้งค่าของ Node Property เวลาเราสร้างเนื้อหา แสดงหน้าตาเป็นแบบ Tab ซึ่งดูแล้วจะงงน้อยกว่า

ทั้งหมดนี้ก็เป็น Module สำหรับ Drupal ที่จะช่วยให้การเรียนรู้และใช้งาน Drupal สามารถทำได้ง่ายขึ้นครับ ยังไงก็ถ้าใช้ Drupal อยู่ ลองนำไปใช้ดูนะครับ

หลายคนมักบอกว่าหนังสือ Drupal ที่ @markpeak และ @sugree เป็นหนังสือ Drupal ภาษาไทยเล่มแรกที่วางตลาด แต่คงไม่ใช่ครับเพราะมันเป็นเล่มที่ 2 เล่ม ซึ่งเล่มแรกออกโดยสำนักพิมพ์ Se-Ed ออกมาเป็นหนังสือแปลครับ สำหรับหนังสือ สร้างเว็บไซต์ให้ครบสูตร ด้วย Drupal เล่มนี้จัดพิมพ์โดย สำนักพิมพ์วิตตี้กรุ๊ป ซึ่งดูจากชื่อผู้เขียนทั้ง 2 ท่านแล้วก็คงต้องรีบพลิกไปดูสารบัญกันเลยทันที รับรองว่ามีอะไรที่น่าสนสนใจมากครับ (ผมเห็นสารบัญหนังสือเล่มนี้แล้ว) ไม่ว่าจะเป็นเนื้อหาที่แหวกแนวและตอบโจทธ์และปัญหาต่างๆ ของคนที่ใช้ Drupal ได้เป็นอย่างดี ใครได้อ่านหนังสือเล่มนี้แล้วยังบอกว่า Drupal ใช้งานยาก และทำเว็บไซต์ด้วย Drupal ยากอีกละก็คงไม่ต้องไปหาซื้อหนังสือเล่มไหนมาอ่านกันอีกแล้วล่ะครับ หน้าปกเป็นแบบนี้ครับ

** ภาพหนังสือได้มาจาก Twitpic ของ @sugree ครับ :)