วันจันทร์ที่ 2 กรกฎาคม พ.ศ. 2550

การติดตั้ง OAMP (OpenBSD, Apache, MySQL, PHP) บน OpenBSD 4.1

อยู่ปี 4 แล้วครับ ก็ต้องทำโปรเจ็คจบ คิดอยู่นานว่าจะทำอะไรดี ไม่ชอบโปรแกรมมิงเอาซะเลยแต่ก็หนีมันไม่พ้น เป็นแอดมินนี่ครับ เลยอยากทำอะไรที่ช่วยให้เราทำงานง่ายขึ้น เลยคิดว่าจะเขียนเว็บสำหรับควบคุมเซอร์วิสของเซิฟเวอร์ ที่จริงก็มีรุ่นพี่เคยทำไว้แล้วละครับ เขาทำไว้บน Linux แต่ผมคิดว่าจะทำบนระบบปฏิบัติการที่ไม่ค่อยมีใครใช้กัน พอดีได้คุยกับ อ.วิริยะ (ว.ณ.สุราษฎร์ธานี) พี่เขาเก่ง OpenBSD ไอ้ผมเองก็ไม่เคยใช้ได้ข่าวว่ามันมีความปลอดภัยสูงและค่อนข้างใช้งานยาก ด้วยเหตุนี้ผมก็เลยคิดว่าจะใช้มันทำโปรเจ็คซะเลย

ก่อนจะใช้งานมันได้ก็ต้องศึกษาการทำงานของมันก่อนละครับ ก็ได้เว็ป อ.วิริยะ นี่แหละครับเป็นเว็บสำหรับศึกษาในเบื้องต้น (http://viriya.sru.ac.th/) ก็ลองติดตั้งตามที่เว็ปพี่เขาแนะนำละครับ แต่วันนี้อยากเอามาเขียนอีกทีในแบบสไตท์ของผมเองมาเริ่มกันเลยดีกว่า


การติดตั้ง Apache

1.) OpenBSD ได้มี Apache ให้เราใช้งานตั้งแต่ติดตั้งอยู่แล้วครับโดยเวอร์ชั่นที่ติดมากับ Openbsd เป็นเวอร์ชั่น 1.3 ซึ่งเราสามารถสั่งให้ Apache ทำงานได้โดยใช้คำสั่ง

#apachectl start #สำหรับ start http ธรรมดา

#apachectl startssl #สำหรับ start http และ https


สำหรับการสั่ง apachectl startssl นั้นเราต้องทำการสร้างไฟล์ Certificates server.crt และ server.key ก่อน


2.) การสร้างไฟล์ Certificates server.crt และ server.key

#cd /etc/ssl

#openssl genrsa -out server.key 1024

#openssl req -new -days 365 \
>-key server.key \
>-out server.csr


#openssl x509 -in server.csr \
>-out server.crt -req \
>-signkey server.key \
>-days 365

#chmod 400 server.*

#mv server.key private/

เมื่อมีไฟล์ Certificates แล้วก็มา startssl กัน

#apachectl startssl

3.) การกำหนดให้ Apache ทำงานเองทุกครั้งเมื่อมีการเปิดเครื่อง

โดยแก้ไขไฟล์ /etc/rc.conf

ตรงส่วนของ httpd_flages=NO แก้เป็น

httpd_flages=""

หรือถ้าต้องการ start https ด้วยให้แก้ไขดังนี้

httpd_flages="-DSSL" #ใส่ "-DSSL" สำหรับให้เริ่มการทำงาน HTTPS ด้วย

4.) ทดสอบโดย reboot

เปิด Browser จากนั้นเรียก http://your_server_ip/ และ https://your_server_ip/

สำหรับ Directory การทำงานของ Apache ที่ติดมากับ OpenBSD นั้นจะอยู่ที่ /var/www โดยได้มีการ chroot (jail)ไว้เพื่อความปลอดภัย ซึ่งการใช้งานค่อนข้างยุ่งยากนิดหน่อยน่ะครับถ้าไม่ต้องการใช้ chroot ก็สามารถสำหนด httpd_flages="-u" ในไฟล์ /etc/rc.conf ได้

ตามความเข้าใจของผมน่ะครับ chroot /var/www = / ทำให้ระบบมอง /var/www เหมือน / ซึ่งข้อมูลที่อยู่ใน /var/www จะไม่สามารถเรียกไฟล์หรือโฟลเดอร์ที่อยู่นอก /var/www ได้เดี๋ยวจะอธิบายต่อในการติดตั้ง PHP น่ะครับ


การติดตั้ง MySQL
การติดตั้งโปรแกรมต่างๆ บน OpenBSD สามารถติดตั้งได้หลายแบบ เช่น ติดตั้งผ่าน Ports, pkg_add, หรือดาวน์โหลดมา Compile เอง แต่วิธีที่ผมจะได้คือ pkg_add เพราะว่าสะดวกและรวดเร็วว่าวิธีอื่นๆ โดยขั้นแรกต้องกำหนดตัวแปร PKG_PATH ก่อนด้วยคำสั่ง

export PKG_PATH=http://ftp.gillclub.com/pub/OpenBSD/4.1/packages

#2บรรทัดด้านบนอยู่บรรทัดเดียวกัน export PKG_PATH

ซึ่ง URL ดังกว่าผมได้สร้างขึ้นมาเองโดยดาวน์โหลด Packages มาจากเว็บของ OpenBSD มาไว้บนเซิฟเวอร์ของผมเองเพื่อความเร็ว ถ้ามีเวลาผมแนะนำว่าให้ดาวน์โหลดมากับไว้น่ะครับเวลาติดตั้งโปรแกรมจะเร็วมากๆ เนื้อที่ก็ประมาณ 5 GB กว่าๆ ครับ

จากนั้น echo $PKG_PATH จะได้ http://ftp.gillclub.com/pub/OpenBSD/4.1/packages
มี tip สำหรับการกำหนด PKG_PATH นิดนึงครับถ้าหากเรา reboot เครื่อง PKG_PATH ที่เราเคยกำหนดไว้จะหายไป วิธีแก้ปัญหานี้ทำได้โดยแก้ไขไฟล์ ~/.profile โดยเพิ่งบรรทัดต่อไปนี้เข้าไปน่คะรับ

export PKG_PATH=http://ftp.gillclub.com/pub/OpenBSD/4.1/packages

#2บรรทัดด้านบนอยู่บรรทัดเดียวกัน export PKG_PATH

ทีนี้ทุกครั้งที่เรา login เข้ามาในระบบ PKG_PATH ก็จะถูกกำหนดให้เราโดยอัตโนมัติครับ

***หมายเหตุ PKG_PATH สามารถเปลี่ยนแปลงได้ตามความเหมาะสมของท่านนะครับสะดวกใช้ mirror ที่ไหนก็เปลี่ยนแปลงตามชอบนะครับ

มาติดตั้ง MySQL ก่อนต่อหลังจากเรากำหนด PKG_PATH แล้วก็มาเริ่มกันเลย

1.) pkg_add mysql-server

2.) จากนั้นสั่ง

#mysql_install_db

...
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local/bin/mysqladmin -u root password 'new-password'
/usr/local/bin/mysqladmin -u root -h bsd.gillclub.com password 'new-password'
See the manual for more instructions.

สั่งให้ MySQL ทำงาน

#mysqld_safe &


จากนั้นกำหนดรหัสผ่านสำหรับ root ของ mysql


#mysqladmin -u root password 'new-password' #แก้ไขเป็น 'new-password' เป็น Password ที่ต้องการ

#mysqladmin -u root -h bsd.gillclub.com password 'new-password' #แก้ไขเช่นกัน

3.) แก้ไขไฟล์ /etc/sysctl.conf เพิ่มบรรทัดต่อไปนี้เข้าไป

# Increase for MySQL
kern.maxfiles=4096

ค่าปกติของ kern.maxfiles คือ 1772 ซึ่งดูได้จาก

sysctl kern.maxfiles

ค่าปกติของ kern.maxfiles ถูกจำกัดไว้ที่ 1772 ซึ่งถ้าหากเราต้องการเรียก table ของ mysql หลายๆ table พร้อมกันอาจเกิดปัญหาได้จึงได้เพิ่มให้เป็น 4046 เพื่อที่จะได้เรียก table ได้มากขึ้น

สั่งให้เปลี่ยนค่า kern.maxfiles โดยไม่ต้อง reboot โดย

# sysctl kern.maxfiles=4096
kern.maxfiles: 1772 -> 4096

4.) แก้ไขไฟล์ /etc/login.conf โดยเพิ่มบรรทัดต่อไปนี้เข้าไป

# Setting used by MySQL daemon
_mysql:\
:datasize=infinity:\
:maxproc=infinity:\
:openfiles-cur=2048:\
:openfiles-max=4096:\
:stacksize-cur=8M:\
:localcipher=blowfish,8:\
:tc=default:

5.) ทำการเพิ่ม script สำหรับให้ MySQL ทำงานเมื่อเปิดเครื่องโดยแก้ไขไฟล์ /etc/rc.local ดังนี้

# Start MySQL server

if [ -x /usr/local/bin/mysqld_safe ] ; then

su -c _mysql root -c '/usr/local/bin/mysqld_safe &' > /dev/null & echo -n ' mysql'

for i in 1 2 3 4 5 6;
do if [ -S /var/run/mysql/mysql.sock ]; then

break

else sleep 1 echo -n 00.00

fi done

#

sleep 5

#

ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock

#2บรรทัดด้านบนอยู่บรรทัดเดียวกัน ln -f /var/run/...

fi

# End MySQL Setting

6.) อย่างที่บอกไปแล้วในตอนติดตั้ง Apache ว่า Apache ที่ติดมากับ OpenBSD นั้นได้มีการ chroot ไว้ ดังนั้นถ้าหากต้องการให้ Apache ใช้งานร่วมกับ MySQL ได้จะต้องมีการสร้าง symbolic link ให้ mysql.sock ให้กับ Apache โดยการสร้างโฟลเดอร์สำหรับเก็บ mysql.sock

#mkdir -p /var/www/var/run/mysql/

ซึ่ง symbolic link ของ mysql.sock จะถูกสร้างโดยคำสั่งใน /etc/rc.conf บรรทัดที่

ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock

#2บรรทัดด้านบนอยู่บรรทัดเดียวกัน ln -f /var/run/...

7.) สุดท้ายแก้ไขไฟล์ /etc/my.cnf ค้นหาบรรทัด

#skip-networking #เอา # หน้าบรรทัดออกเป็น

skip-networking


การติดตั้ง PHP

1.) pkg_add php5-core

/usr/local/sbin/phpxs -s

จากนั้นให้แก้ไขไฟล์ /var/www/conf/httpd.conf โดยค้นหาบรรทัดต่อไปนี้

#AddType application/x-httpd-php .php เอา # หน้าบรรทัดนี้ออกเป็น

AddType application/x-httpd-php .php

DirectoryIndex index.php index.html #เพิ่ม index.php เข้าไป

จากนั้น

cp /usr/local/share/examples/php5/php.ini-recommended /var/www/conf/php.ini

จากนั้นเพื่อความปลอดภัยให้ทำการแก้ไขไฟล์ /var/www/conf/php.ini โดยเพิ่มบรรทัดต่อไปนี้เข้าไป

disable_functions = escapeshellarg, escapeshellcmd, exec, passthru, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, shell_exec, system, apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_lookup_uri,apache_note, apache_request_headers, apache_reset_timeout, apache_response_headers, apache_setenv, getallheaders, virtual, popen, pclose

*** หมายเหตุ ทำให้อยู่บรรทัดเดียวกันน่ะครับ

ต่อไปก็มาติดตั้ง Extension ของ PHP กันเลย

#pkg_add php5-mysql

#/usr/local/sbin/phpxs -a mysql

#pkg_add php5-gd-5.1.6-no_x11p2

#/usr/local/sbin/phpxs -a gd

#pkg_add php5-imap

#/usr/local/sbin/phpxs -a imap

#pkg_add php5-pear

#/usr/local/sbin/phpxs -a pear

#pkg_add php5-soap

#/usr/local/sbin/phpxs -a soap

#pkg_add php5-bz2

#/usr/local/sbin/phpxs -a bz2

#pkg_add php5-mhash

#/usr/local/sbin/phpxs -a mhash

#pkg_add php5-mbstring

#/usr/local/sbin/phpxs -a mbstring

#pkg_add php5-mcrypt

#/usr/local/sbin/phpxs -a mcrypt

#pkg_add php5-ldap

#/usr/local/sbin/phpxs -a ldap

#pkg_add php5-snmp

#/usr/local/sbin/phpxs -a snmp

สำหรับปัญหาที่พบบ่อยหลังการติดตั้ง PHP ก็คือ ไม่เจอโฟลเดอร์สำหรับเก็บ session เพราะว่าปกติของ php จะเก็บ session ไว้ที่ /tmp แต่เมื่อมีการ chroot ไว้ php จึงไม่สามารถสร้างไฟล์ใน /tmp ปกติได้จึงต้องสร้าง /var/www/tmp สำหรับเก็บ session โดยการ

#mkdir /var/www/tmp
#chmod 777 /var/www/tmp

และฟังค์ชันเน็ตเวิร์คบางตัวต้องการไฟล์ /etc/resolf.conf และ /etc/services ก็ควร copy ไฟล์เหล่านี้ไปไว้ใน /var/www/etc เช่นกัน โดย

#mkdir /var/www/etc
#cp /etc/resolv.conf /var/www/etc
#cp /etc/services /var/www/etc

เสร็จแล้วครับ OAMP ของเรา

ทำการ reboot สัก 1 รอบแล้วมาดูผลกัน...

1 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...

ที่ 1 เอาไปเลย
จบไวไว มีงานทำดีดีนะเพื่อน Love