การกำหนด shared folder ให้กับ Apache ใน Ubuntu VirtualBox

หากคุณใช้ 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

VirtualBox shared foldersกำหนด shared folders ใน VirtualBox โดยไม่ต้องติ๊ก Read-only เนื่องจากจะอนุญาตให้พวกฟังก์ชั่นอัพโหลดหรือจัดการไฟล์สามารถทำงานได้. ติ๊ก Auto-mount และ Make Permanent

กำหนด host only network

ubuntu network interfacesหลังติดตั้ง 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 เท่านั้น.

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

คุณอาจใช้แท็กHTMLและแอททริบิวต์เหล่านี้: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>