Loạt bài “Phát triển Web trên máy ảo với VirtualBox” giới thiệu cách sử dụng và cấu hình để tạo máy ảo trong VirtualBox để phục vụ cho phát triển web. Ở phần hai này, chúng ta cùng tìm hiểu cách sử dụng VirtualBox để tạo một máy chủ LAMP có cấu hình tối thiểu.

LAMP là viết tắt của Linux - Apache - MySQL - PHP (và đôi khi là Perl, Python...), đây là 4 thành phần cơ bản trong một máy chủ web phổ biến. Linux là HĐH mã nguồn mở được ưa chuộng, Apache là máy chủ web phổ biến nhất, MySQL là hệ quản trị cơ sở dữ liệu (CSDL) được dùng nhiều nhất còn PHP là ngôn ngữ lập trình máy chủ nền tảng của rất nhiều ứng dụng web.

Xác định cấu hình cho máy ảo

Đầu tiên, bạn cần tạo một máy ảo trong VirtualBox. Cấu hình máy ảo tùy bạn chọn lựa và tùy thuộc vào phần cứng bạn đang có. Nói chung, bạn nên có 512 MB RAM trở lên nếu ứng dụng web của bạn ngốn nhiều bộ nhớ và CSDL phức tạp. Về đĩa cứng, cũng tùy thuộc vào ứng dụng bạn định phát triển, cộng thêm khoảng 1 GB cho HĐH.

Trên máy tính của tôi, trong tổng số 4 GB bộ nhớ, 768 MB được dùng cho máy ảo cùng 2 GB đĩa cứng.

Nếu bạn thường xuyên sao lưu máy tính của mình lên một máy chủ từ xa, và dung lượng lại giới hạn, không cho phép sao lưu toàn bộ máy ảo, bạn có thể chỉ sao lưu nội dung website và CSDL. Để làm điều này, bạn cần chia sẻ một vài thư mục trên máy chủ, cho phép máy ảo truy xuất đến các thư mục này. Nội dung website và CSDL sẽ lưu ở đây. Thông tin cụ thể sẽ được đề cập trong phần 3.

Lợi ích của việc chia sẻ là bạn có thể dùng các công cụ có sẵn trên máy chủ, thao tác trực tiếp với các tập tin trên máy chủ, nhưng lại tác động đến máy ảo. Thí dụ trong hình trên, bạn làm việc với các tập tin trong thư mục www, thư mục này được chia sẻ cho máy ảo và được cấu hình là thư mục chứa các website của máy ảo.

Đôi khi bạn cảm thấy việc sao lưu toàn bộ máy ảo lại thuận tiện hơn. Khi đó việc chia sẻ được thực hiện theo chiều ngược lại, bằng sshfs hoặc Samba, không đề cập trong bài viết này. Một số ứng dụng cũng cho phép soạn thảo trực tiếp qua ssh.

Thiết lập mạng

VirtualBox hỗ trợ 4 cấu hình mạng khác nhau:

  • NAT: là cấu hình mặc định, cho phép máy khách kết nối ra bên ngoài thông qua NAT
  • Cầu: chế độ cho phép máy khách hoạt động như một thực thể trong mạng hiện tại
  • Mạng nội bộ: mạng riêng giữa các máy khách
  • Mạng riêng chủ: mạng riêng giữa các máy khách và máy chủ

Cấu hình mạng nội bộ và mạng riêng chủ không cho phép máy khách kết nối vào Internet. Cấu hình cầu bắt buộc phải cấp phát thêm địa chỉ IP của mạng hiện tại cho máy khách, điều này không phải luôn thực hiện được, nhất là với các quản trị mạng khó tính.

Chế độ NAT không cần cấu hình phức tạp và phù hợp với chúng ta. Trong chế độ này, máy khách kết nối với thế giới bên ngoài thông qua một giao diện mạng của VirtualBox, có vai trò như một định tuyến. Đây cũng là khuyết điểm của NAT: không thể kết nối từ ngoài vào máy khách.

Tuy nhiên, bạn lại muốn truy cập vào máy chủ web trên máy khách, hoặc thậm chí cho phép các máy khác trong mạng cục bộ truy cập vào trang web trên máy khách. Để khắc phục vấn đề này, cần phải dùng đến chuyển tiếp cổng (port forwarding) - điều bạn thường làm khi lập một máy chủ đằng sau bộ định tuyến.

Chuyển tiếp cổng được thực hiện nhờ công cụ VBoxManage. Thí dụ, bạn có máy khách tên là "LAMP web dev" và muốn chuyển tiếp cổng 8080 trên máy chủ (chúng ta sẽ chỉ sử dụng các cổng lớn hơn 1000 trên máy chủ, vì thao tác với cổng thấp hơn có thể đòi hỏi quyền quản trị và gặp một số khó khăn trong cấu hình tự động) đến cổng 80 (web) trên máy khách:

VBoxManage setextradata "LAMP web dev" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" TCP
VBoxManage setextradata "LAMP web dev" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" 80
VBoxManage setextradata "LAMP web dev" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" 8080

Trong câu lệnh trên, bạn chú ý guesthttp là tên của thiết lập này, bạn có thể đặt tên bất kì. Ngoài cổng 80, bạn có thể chuyển tiếp cổng 2222 đến cổng 22 chẳng hạn (và sau đó thực hiện ssh bằng lệnh ssh -p 2222 localhost hoặc thay đổi thiết lập trong ~/.ssh/config). Sau này, bạn truy cập vào máy chủ web trên máy khách theo địa chỉ http://localhost:8080/ nếu thiết lập đúng theo các bước trên.

Để kiểm tra thiết lập hiện tại, bạn dùng lệnh sau:

VBoxManage getextradata "LAMP web dev" enumerate

Cài đặt và cấu hình máy ảo

Sau khi tạo máy ảo và thiết lập xong cấu hình mạng, giờ là lúc bật máy ảo và cài đặt HĐH. Tuy nhiên, trước tiên bạn cần tải bộ cài đặt Ubuntu 9.10 tại đây và gắn vào máy ảo. Đây là bộ cài đặt tối thiểu, kích thước chỉ khoảng 10 MB, các gói cần thiết sẽ được tải về trong quá trình cài đặt.

Sau khi gắn bộ cài đặt vào máy ảo, bật máy lên, khởi động bằng bộ cài đặt (iso) lúc nãy. Đến dấu nhắc, gõ lệnh "cli" để bắt đầu quá trình cài đặt. Việc cài đặt Ubuntu khá đơn giản, nhưng bạn cần có những kiến thức cơ bản về quản trị hệ thống. Ngoài ra, cần lưu ý không chọn LVM trừ khi bạn chắc chắn rằng bạn hiểu rõ mình đang làm gì!

Sau khi cài đặt xong HĐH, bạn cài tiếp phần bổ trợ cho VirtualBox để hỗ trợ máy ảo tốt hơn. Bạn chọn Install the Guest Additions từ menu của VirtualBox, đĩa add-on sẽ được gắn vào. Sau đó bạn thực hiện lệnh sau (cài dkms trước, vì gói này không có sẵn trong bộ cài đặt Ubuntu tối thiểu):

sudo apt-get install dkms
cd /media/cdrom0
sudo sh VBoxLinuxAdditions-x86.run

Nếu cần cấu hình lại bàn phím của máy ảo (thay vì dùng bàn phím US QWERTY chuẩn), thì đây là lệnh cần dùng:

sudo dpkg-reconfigure console-setup

Tiếp theo là gắn các thư mục chia sẻ nếu cần thiết (bạn cũng có thể để toàn bộ dữ liệu trên máy ảo, khi đó hãy bỏ qua bước này). Vẫn là các lệnh Linux thông thường:

sudo mkdir /media/www sudo mount -t vboxsf www /media/www

Nếu không có lỗi nào, thì thêm dòng dưới đây vào fstab để tự động thực hiện gắn kết khi khởi động máy:

wwwww /media/www vboxsf uid=1000,gid=1000 0 0

Lập lại bước trên với tất cả thư mục cần chia sẻ, nếu mọi thứ tốt đẹp, thì đây là lúc cài đặt máy chủ. Chúng ta sẽ cài Apache 2.2, PHP 5.2, MySQL 5.0 và phpMyAdmin. Ngoài ra trong danh sách còn có ssh và vim (thay cho vi được cài mặc định) để sử dụng khi cần thiết. Tất nhiên bạn có thể cài các gói khác, như Python chẳng hạn.

sudo apt-get install ssh vim apache2 php5 php5-mysql php5-gd php5-curl php5-imagick php5-cgi mysql-server phpmyadmin libapache2-mod-fastcgi
Cấu hình Apache

Tiếp theo là cấu hình Apache. Phần này có lẽ bạn hiểu rõ mình cần làm gì, tuy nhiên tôi cũng xin giới thiệu các lệnh cần thiết (thay vì sửa đổi trực tiếp httpd.conf). Một điều cần chú ý là do sử dụng chuyển tiếp cổng, nên chúng ta không sử dụng vhost theo hostname được. Có thể dùng vhost theo IP, nhưng tốt nhất là không dùng vhost.

Tạo website và cấu hình (ở dòng lệnh thứ ba, bạn có thể thay vi bằng chương trình soạn thảo yêu thích của bạn), chú ý thay đổi nội dung tập tin localhost cho phù hợp (sửa vị trí lưu website thành /media/www và bật AllowOverride nếu muốn dùng .htaccess).

cd /etc/apache2/sites-available
sudo cp default localhost
sudo vi localhost

Bật mod_rewrite và bật website localhost vừa tạo:

sudo a2enmod rewrite suexec
sudo a2dissite default
sudo a2ensite localhost
Cấu hình PHP

Có thể các giới hạn mặc định của PHP hơi nhỏ, vậy thì cần tăng lên. Có thể dùng vi để sửa đổi như bạn đã làm tới tập tin localhost, hoặc cách nhanh nhất là thực hiện lệnh sed dưới đây, và khởi động lại Apache:

sudo sed -i 's/memory_limit = 16M/memory_limit = 64M/;s/.*post_max_size.*/post_max_size = 64M/;s/.*upload_max_filesize.*/upload_max_filesize = 64M/' /etc/php5/apache2/php.ini
sudo /etc/init.d/apache2 restart
Cấu hình MySQL

Hi vọng bạn còn nhớ mật khẩu của PhpMyAdmin khi cài đặt. Giờ truy cập vào địa chỉ sau (từ máy chủ, do đó dùng cổng 8080):

http://localhost:8080/phpmyadmin/

Giờ có thể bạn muốn cấu hình MySQL để đặt thư mục chứa dữ liệu trên máy chủ, nhằm dễ dàng sao lưu. Nếu không muốn cấu hình, có thể sang bước tiếp theo.

Giả sử thư mục chia sẻ nằm ở /media/mysql, bạn cần mở tập tin /etc/mysql/my.cnf để thay đổi thiết lập. Lưu ý rằng Ubuntu dùng AppArmor để bảo vệ, bạn cần cho phép MySQL ghi vào thư mục này. Thực hiện các lệnh sau:

/etc/init.d/mysql stop
cp -rp /var/lib/mysql /media/mysql
vi /etc/apparmor.d/usr.sbin.mysqld

Thêm 2 dòng sau vào cuối cùng

/media/mysql/ r,
/media/mysql/** rwk,

Sau đó khởi động lại AppArmor:

/etc/init.d/apparmor restart

Tiếp đến mở tập tin /etc/mysql/my.cnf và thay đổi giá trị datadir:

#datadir=/var/lib/mysql
datadir=/media/mysql

Cuối cùng là khởi động lại MySQL:

/etc/init.d/mysql restart

Kết luận

Đến đây bạn đã hoàn tất các bước cần thiết để chạy website trên máy ảo. Với cấu hình hiện tại, bạn gần như có thể chạy mọi ứng dụng yêu cầu LAMP từ địa chỉ http://localhost:8080/. Bằng cách chia sẻ thư mục như hướng dẫn trong bài, bạn có thể dùng công cụ và HĐH yêu thích trên máy chủ để thực hiện sửa đổi trực tiếp (ở /Users/hnguyen/web/www), và ngay lập tức thấy được thay đổi trên máy ảo (ở /media/www).

Một lợi thế khác là việc sao lưu và thử nghiệm trên máy chủ rất thuận tiện nhờ công cụ snapshot. Bạn có thể đưa máy ảo quay về thời điểm bất kì đã đánh dấu trước đó nhờ snapshot. Hơn nữa, trong phiên bản 3.1, VirtualBox hỗ trợ chia nhánh cho snapshot, giúp bạn linh hoạt hơn trong thử nghiệm.

Hi vọng bạn tìm thấy sự hữu ích trong bài viết này. Xin bạn vui lòng góp ý để tôi thực hiện tiếp phần 3. Do phần 3 bao gồm các thiết lập cao cấp, tôi sẽ viết theo yêu cầu các bạn. Trước mắt, có thể là cấu hình Bind9, cấu hình máy ảo riêng cho Apache và MySQL, cấu hình máy chủ chia sẻ tập tin băng NFS hoặc sshfs...

Hải Nam.




Bình luận

  • TTCN (0)