หากคุณใช้ VirtualBox ในการทดลองเว็บไซต์ที่คุณทำ ถ้าเอาตามแบบเดิมๆคุณจะต้องติดตั้ง ftp server แล้วเวลาจะทดสอบก็ต้องอัพโหลดไฟล์ขึ้นไปบน VBox นั้นๆ ซึ่งวิธีนั้นก็ดีแต่ค่อนข้างจะเสียเวลาตรงขั้นตอนอัพโหลด และบางครั้งแก้ไขไฟล์จำนวนมากก็คือต้องอัพโหลดมาก. แต่ถ้าหากกำหนดให้ shared folder ของ VBox เป็น web root ได้ก็สบายขึ้นมาหน่อย เพราะแก้ไขบนเครื่องของเราเอง ทดสอบก็เรียกดูได้เลยไม่ต้อง ftp ไปที่ตัว VBox.
การกำหนดให้ web root หรือ document root ของ Apache เป็นตำแหน่ง shared folder นั้นไม่ยาก แต่ยากตรงที่มันจะติด permission ซึ่งจะได้ผลลัพธ์เป็น error 403 forbidden ประมาณนี้. บทความนี้จึงจะอธิบายขั้นตอนที่ทำให้มันสามารถทำงานได้ โดยจะใช้ OS เป็น Ubuntu เป็นหลัก. ทั้งนี้หากเป็น guest OS อื่นๆก็น่าจะสามารถใช้หลักการเดียวกันทำไปได้เลย.
Ubuntu 14 คือ OS ของเครื่อง guest (VBox) ที่ขอแนะนำให้ใช้ เนื่องจากมันยังรองรับ PHP 5 ได้มากกว่าและสะดวกกว่า.
เตรียมพร้อม guest OS (Ubuntu)
กำหนด shared folder
กำหนด shared folders ใน VirtualBox โดยไม่ต้องติ๊ก Read-only เนื่องจากจะอนุญาตให้พวกฟังก์ชั่นอัพโหลดหรือจัดการไฟล์สามารถทำงานได้. ติ๊ก Auto-mount และ Make Permanent
กำหนด host only network
หลังติดตั้ง Ubuntu แล้วให้เปิดไฟล์ /etc/network/interfaces ด้วยคำสั่ง sudo nano /etc/network/interfaces
แล้วทำการแก้ไขหรือเพิ่มเติม network สำหรับ host only เข้าไป ทั้งนี้ขึ้นอยู่กับการ์ด network host only ที่คุณติดตั้งไว้ สำหรับตัวอย่างติดตั้งไว้เป็นตัวที่ 2 ดังนั้นมันจึงใช้ eth1. การกำหนด IP address ก็ต้องสัมพันธ์กับค่าที่ตั้งไว้บน VirtualBox ของ host OS ด้วย. จากตัวอย่างใช้ IP กลุ่ม 192.168.50.xxx จึงกำหนด IP host only สำหรับเครื่องนี้ไว้ที่ 192.168.50.51
แก้ไขแล้วกด Ctrl+O เพื่อบันทึกแล้วกด Ctrl+X เพื่อออกจากโปรแกรม nano. Reboot Ubuntu 1 ครั้งด้วยคำสั่ง sudo reboot
เพื่อให้ได้ค่า IP ใหม่นี้ จากนั้นทดสอบโดยการ login โดยใช้โปรแกรมบน host OS เช่น Putty, WinSCP. (ทั้งนี้โปรดตรวจสอบให้แน่ใจว่าได้ติดตั้งโปรแกรมประเภท ssh server แล้ว).
ติดตั้ง VirtualBox guest addition ด้วย command line
การติดตั้ง VBox guest addition แบบธรรมดานั้นเป็นของง่าย แต่กรณีที่ใช้ Ubuntu แบบ command line เท่านั้น มันต้องการคำสั่งพิเศษเล็กน้อยในการติดตั้ง. อ้างอิงจาก askubuntu.com
sudo apt-get install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
จากนั้นสั่ง reboot 1 ครั้ง
Mount shared folder
หลังจากติดตั้ง VirtualBox guest addition เสร็จแล้วและสั่ง reboot แล้วก็น่าจะได้ shared folder เข้ามาอยู่ในเครื่อง Ubuntu (guest OS) แล้ว โดยมันควรจะอยู่ที่ /media/sf_mysites ตาม shared folder ที่กำหนดเป็นตัวอย่างด้านบนนี้.
อ้างอิงจาก askubuntu.com และ ubuntu.com
เตรียมพร้อม Apache
ติดตั้ง Apache 2
เริ่มต้นติดตั้งด้วยคำสั่งต่อไปนี้ตามลำดับ
sudo apt-get update
sudo apt-get install apache2
ทดสอบการติดตั้งโดยการเรียกดูที่ host OS ไปยัง IP ที่กำหนดใน guest OS เช่น http://192.168.50.51 ควรจะได้หน้าต้อนรับของ Apache. เมื่อสั่งใน guest OS (Ubuntu) ไปยังตำแหน่ง /var/www/html ควรจะพบไฟล์ index.html อยู่ 1 ไฟล์ในกรณีที่เพิ่งติดตั้งสำเร็จจริงๆ. ถ้าเป็นไปตามนี้ถือว่าติดตั้ง Apache 2 สำเร็จแล้ว.
ย้าย document root (web root) ของ Apache2
ขั้นตอนนี้จะย้าย web root จาก /var/www/html ไปใช้งานกับ shared folder จาก host OS. สร้าง link เชื่อมโยงจาก /media/sf_mysites ไปยัง /var/www.
sudo ln -s /media/sf_mysites/ /var/www
แก้ไขไฟล์ apache.conf ด้วยคำสั่ง
sudo nano /etc/apache2/apache.conf
มองหาบรรทัดที่มีโค้ดต่อไปนี้
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
จากนั้นแทนที่ AllowOverride None
ด้วย AllowOverride All
เพื่ออนุญาตให้ทำการตั้งค่าผ่าน .htaccess ได้ในทีเดียวเลย ไม่ต้องย้อนกลับมาทำอีก.
แก้ไขไฟล์ sites-available/000-default.conf ด้วยคำสั่ง
sudo nano /etc/apache2/sites-available/000-default.conf
มองหาบรรทัดที่มี DocumentRoot /var/www/html
โดยแก้ไขเป็น DocumentRoot /var/www/sf_mysites
แก้ปัญหา error 403 forbidden
เมื่อทำการย้าย document root หรือ web root ของ Apache ไปยัง shared folder แล้วจะพบว่ามันจะมี error 403 ปรากฏขึ้น ให้กำหนดการอนุญาตให้กับ shared folder เสียใหม่ด้วยคำสั่ง
sudo usermod -a -G vboxsf www-data
จากนั้นสั่ง restart apache ด้วยคำสั่ง
sudo service apache2 restart
เมื่อทดลองเรียกดูบน host OS ผ่าน IP เช่น http://192.168.50.51 ก็น่าจะพบรายการ folder ของเว็บที่ทำหรือหน้าเว็บที่ทำอยู่บนเครื่องแล้ว. ขั้นตอนเหล่านี้ยังไม่รวมการติดตั้ง PHP, MySQL ใดๆ เพียงแค่แก้ปัญหา error 403 forbidden จากการใช้ shared folder เป็น web root ของ Apache เท่านั้น.