Trong các bài hướng dẫn webserver của mình, bao gồm cả serie học VPS căn bản thì mình đã hướng dẫn qua khá chi tiết cho các bạn về cách tạo được một webserver trên nền tảng hệ điều hành CentOS. Nhưng cũng có nhiều người thích Ubuntu hơn vì dễ cài đặt các software mà không cần phải nạp quá nhiều repo như CentOS, thân thiện hơn nên ở đây mình sẽ hướng dẫn các bạn cách cài đặt được một LAMP Webserver (Linux + Apache + MySQL + PHP) trên một máy chủ Ubuntu, bạn có thể thực hành trên cả phiên bản Ubuntu 12.04 hoặc Ubuntu 14.04.
Thực ra Ubuntu và CentOS cũng không quá khác nhau, nó chỉ khác một số lệnh đặc biệt (như lệnh cài đặt phần mềm) nhưng với Ubuntu, nó sẽ hơi khác một chút về đường dẫn lưu các file cấu hình.
Nên tham khảo:
I.1) Cấu trúc thư mục cấu hình Apache trên Ubuntu
I.2) Thư mục gốc chứa dữ liệu website của Apache trên Ubuntu
I.3) Thêm VirtualHost (thêm domain) vào Apache trên Ubuntu
Tất cả máy chủ hệ điều hành nhân Linux cũng sẽ đều cần bạn đăng nhập vào SSH để tiến hành làm việc nhé. Cái này mình chỉ nhắc lại thôi vì chắc ai cũng biết rồi.
Và mình cũng nói thêm là ở đây mình sẽ chỉ hướng dẫn trên một máy chủ chưa cài đặt bất cứ cái gì.
Trước khi làm việc ở Ubuntu, bạn nên tiến hành cập nhật gói phần mềm của Ubuntu lên phiên bản mới nhất với lệnh:
apt-get update
Tên phần mềm Apache trên Ubuntu sẽ là apache2 nên chúng ta sẽ cài đặt với lệnh sau:
apt-get install apache2
Nó có hỏi Y/N thì cứ ấn Y rồi Enter nha.
Cài đặt xong thì truy cập vào địa chỉ IP của máy chủ, bạn sẽ thấy trang chào mừng của Apache như thế này:
Ở trang chào mừng này, bạn nên đọc qua để biết đường dẫn và cấu trúc các thư mục cấu hình Apache trên Ubuntu. Còn nếu đọc khó hiểu thì ở dưới đây mình sẽ có giải thích.
Mặc định trên Ubuntu, thư mục chứa các thiết lập của Apache sẽ nằm trong thư mục /etc/apache2. Trong thư mục đó, nó có một số thư mục và file cấu hình như sau:
Mặc định, Apache trên Ubuntu sẽ sử dụng thư mục /var/www/html để chứa dữ liệu website gốc (load bằng IP hoặc hostname). Khi bạn vào đây sẽ thấy một file index.html, đó chính là file giao diện chào mừng mà bạn đã thấy ở trên.
Cách thêm VirtualHost của Apache trên Ubuntu có sẽ hơi khác một chút với cách thêm VirtualHost trên CentOS.
Trước tiên, chúng ta cũng cần tạo cho nó một thư mụ
c chứa dữ liệu cho domain cần thêm vào.
mkdir -p /home/cddos.net/public_html mkdir -p /home/cddos.net/log
Sau đó chúng ta cần copy file /etc/apache2/sites-available/000-default.conf ra một file mới chứa cấu hình của domain cần thêm vào (cddos.net) ở /etc/apache2/sites-available/cddos.net.conf.
cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/cddos.net.conf
Lưu ý: Có thể file cấu hình mặc định của bạn không phải tên là default mà là “000-default.conf” nên tốt nhất bạn nên vào thư mục /etc/apache2/sites-available/ để xem rồi copy cho đúng.
Bây giờ hãy mở file /etc/apache2/sites-available/cddos.net.conf lên và sửa nội dung trong đó cho nó gọn hơn như thế này:
<VirtualHost *:80> ServerName cddos.net ServerAlias www.cddos.net ServerAdmin [email protected] DocumentRoot /home/cddos.net/public_html <Directory /home/cddos.net/public_html> Options FollowSymLinks AllowOverride All
Order allow,deny
Allow from all
Require all granted </Directory>
# Available loglevels: trace8, …, trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. LogLevel error ErrorLog /home/cddos.net/log/error.log CustomLog /home/cddos.net/log/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with “a2disconf”. #Include conf-available/serve-cgi-bin.conf </VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Nhớ thay:
Sau đó chúng ta gõ lệnh sau để nó tự động tạo ra một symlink của file này vào thư mục sites-enabled để bật nó lên.
a2ensite cddos.net
Hãy nhớ rằng, cddos.net.conf là tên file cấu hình trong thư mục sites-available đã bỏ đuôi .conf.
Kết quả trả về:
root@vps103534:~# a2ensite cddos.net Enabling site cddos.net. To activate the new configuration, you need to run: service apache2 reload
Gõ lệnh sau để khởi động lại Apache.
service apache2 restart
Bây giờ nếu bạn truy cập domain vừa thêm vào nó sẽ hiển thị ra lỗi 403 do thư mục của domain chứa có tập tin index để nó load. Hãy tạo ra một file index.html với nội dung sau và upload vào thư mục public_html của domain vừa thêm.
<html> <head></head> <body><h1>Tao VirtualHost Thanh Cong! </h1></body> </html>
Kết quả:
Nếu bị lỗi 500
Nếu bạn vào website mà bị lỗi 500 (dễ gặp ở Ubuntu 10.04 32-bits), hãy mở lại file cấu hình virtualhost của bạn và xóa đoạn này đi:
Order allow,deny
Allow from all
Require all granted
Nếu bạn sử dụng WordPress sau này hay các website khác có sử dụng mod_rewrite để ghi lại đường dẫn thì phải bật module này lên. Ở phần thêm VirtualHost, chúng ta đã thêm AllowOverride All vào thiết lập thư mục gốc của domain rồi, nhưng chúng ta cũng cần bật module rewrite lên nữa. Hãy gõ lệnh sau:
a2enmod rewrite
Và khởi động lại Apache
service apache2 restart
Để cài đặt PHP và các module PHP cho Apache trên Ubuntu, hãy gõ lệnh sau:
sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt
Và thiết lập cấu hình để nó ưu tiên index file index.php thay vì index.html bằng cách sửa file /etc/apache2/mods-enabled/dir.conf thành dưới đây (thêm index.php):
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.php index.xhtml index.htm </IfModule>
Nhớ khởi động lại Apache.
service apache2 restart
Bạn hãy kiểm tra bằng cách tạo một file info.php trong thư mục domain với nội dung:
<?php phpinfo(); ?>
Chạy nó thì nếu hiển thị như dưới đây là ok.
Nếu bạn muốn cài thêm các module khác cho PHP thì có thể tìm tên các module trong gói cài đặt bằng lệnh sau:
apt-cache search php5-
Kết quả sẽ trả về danh sách các module mà bạn có thể cài đặt vào, ví dụ:
php5-cgi - server-side, HTML-embedded scripting language (CGI binary) php5-cli - command-line interpreter for the php5 scripting language php5-common - Common files for packages built from the php5 source php5-curl - CURL module for php5 php5-dbg - Debug symbols for PHP5 php5-dev - Files for PHP5 module development php5-gd - GD module for php5 php5-gmp - GMP module for php5 php5-json - JSON module for php5 php5-ldap - LDAP module for php5 php5-mysql - MySQL module for php5 php5-odbc - ODBC module for php5 php5-pgsql - PostgreSQL module for php5 php5-pspell - pspell module for php5 php5-readline - Readline module for php5 php5-recode - recode module for php5 php5-snmp - SNMP module for php5 php5-sqlite - SQLite module for php5 php5-tidy - tidy module for php5 php5-xmlrpc - XML-RPC module for php5 php5-xsl - XSL module for php5 libphp5-embed - HTML-embedded scripting language (Embedded SAPI library) php5-adodb - Extension optimising the ADOdb database abstraction library php5-apcu - APC User Cache for PHP 5 php5-enchant - Enchant module for php5 php5-exactimage - fast image manipulation library (PHP bindings) php5-fpm - serve r-side, HTML-embedded scripting language (FPM-CGI binary) php5-gdcm - Grassroots DICOM PHP5 bindings php5-gearman - PHP wrapper to libgearman php5-geoip - GeoIP module for php5 php5-gnupg - wrapper around the gpgme library php5-imagick - ImageMagick module for php5 php5-imap - IMAP module for php5 php5-interbase - interbase/firebird module for php5 php5-intl - internationalisation module for php5 php5-lasso - Library for Liberty Alliance and SAML protocols - PHP 5 bindings php5-librdf - PHP5 language bindings for the Redland RDF library php5-mapscript - php5-cgi module for MapServer php5-mcrypt - MCrypt module for php5 php5-memcache - memcache extension module for PHP5 php5-memcached - memcached extension module for PHP5, uses libmemcached php5-midgard2 - Midgard2 Content Repository - PHP5 language bindings and module php5-ming - Ming module for php5 php5-mongo - MongoDB database driver php5-msgpack - PHP extension for interfacing with MessagePack php5-mysqlnd - MySQL module for php5 (Native Driver) php5-mysqlnd-ms - MySQL replication and load balancing module for PHP php5-oauth - OAuth 1.0 consumer and provider extension php5-pinba - Pinba module for PHP 5 php5-ps - ps module for PHP 5 php5-radius - PECL radius module for PHP 5 php5-redis - PHP extension for interfacing with Redis php5-remctl - PECL module for Kerberos-authenticated command execution php5-rrd - PHP bindings to rrd tool system php5-sasl - Cyrus SASL Extension php5-stomp - Streaming Text Oriented Messaging Protocol (STOMP) client module for PHP 5 php5-svn - PHP Bindings for the Subversion Revision control system php5-sybase - Sybase / MS SQL Server module for php5 php5-tokyo-tyrant - PHP interface to Tokyo Cabinet's network interface, Tokyo Tyrant php5-vtkgdcm - Grassroots DICOM VTK PHP bindings php5-xcache - Fast, stable PHP opcode cacher php5-xdebug - Xdebug Module for PHP 5 php5-xhprof - Hierarchical Profiler for PHP5
Ví dụ mình muốn cài thêm xCache thì gõ:
apt-get install php5-xcache
Cài xong nhớ khởi động lại Apache. Rất dễ phải không?
Hãy gõ lệnh dưới đây để cài đặt MySQL Server và module MySQL cho PHP.
apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql
Trong khi cài đặt, MySQL sẽ hiển thị một giao diện để bạn thiết lập mật khẩu root cho MySQL.
Cài xong, hãy kích hoạt nó bằng lệnh sau:
mysql_install_db
Sau đó chạy thêm lệnh này để cài đặt bảo mật cho MySQL Server và có thể đổi lại mật khẩu root.
/usr/bin/mysql_secure_installation
Nếu bạn muốn có thêm phpMyAdmin thì cài thêm bằng cách gõ lệnh:
Bật module mcrypt
php5enmod mcrypt
Và cài đặt phpMyAdmin
apt-get install phpMyAdmin
Sau đó chọn apache2 và Enter.
Và hãy chọn Yes để thiết lập các cấu hình ban đầu cho phpMyAdmin.
Sau đó hãy nhập mật khẩu root của MySQL Server vào và Enter. Nếu nó có hỏi tạo mật khẩu phpmyadmin application thì cứ dùng cái mật khẩu root của MySQL Server luôn nhé.
Tiếp theo là mở file /etc/apache2/apache2.conf và chèn đoạn sau vào dưới cuối cùng:
Include /etc/phpmyadmin/apache.conf
Cài xong nhớ khởi động lại Apache.
service apache2 restart
Bây giờ bạn có thể truy cập vào phpMyAdmin với đường dẫn http://IP/phpmyadmin hoặc http://domain/phpmyadmin.
Mặc định trên Ubuntu, Apache và PHP sẽ sử dụng user www-data để truy cập và sử dụng các tập tin. Do vậy bạn hãy tiến hành cấp quyền sở hữu cho thư mục chứa website của bạn thành của www-data nhé.
chown -R www-data:www-data /home/cddos.net
Như vậy là bây giờ bạn đã có một LAMP Webserver đầy đủ trên máy chủ Ubuntu rồi đó. Và bạn có nhận ra là khi làm việc trên Ubuntu như cài các software, cài module sẽ thấy dễ hơn trên các hệ điều hành RHEL/CentOS không? Nếu bạn muốn sử dụng NGINX Webserver (LEMP) trên Ubuntu thì có thể xem tại đây.