Cách cài Apache, PHP 5, MySQL trên Ubuntu (LAMP)

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:

Đăng nhập vào SSH

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ì.

Cập nhật Package

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

I. Cài đặt Apache

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:

ubuntu-apache-welcome

Ở 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.

I.1) Cấu trúc thư mục cấu hình Apache trên Ubuntu

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:

  • conf-available/ – Thư mục này sẽ chứa các file thiết lập cấu hình sẵn của Apache trên Ubuntu, nhưng các thiết lập trong đây sẽ chưa được áp dụng vì Ubuntu không load thiết lập cấu hình trong thư mục này.
  • conf-enabled/ – Thư mục chứa các file thiết lập cấu hình của Apache trên Ubuntu đang được bật. Hãy hiểu là nếu thư mục này có một liên kết tượng trưng (symlink) qua một file module nào đó bên thư mục conf-available thì nó sẽ được bật.
  • mods-available/ – Thư mục chứa các file từng module của Apache trên Ubuntu nhưng chưa được bật.
  • mods-enabled/ – Thư mục chứa các file từng module của Apache trên Ubuntu đang được bật.
  • site-available/ – Thư mục chứa file cấu hình VirtualHost của Apache trên Ubuntu nhưng chưa được bật.
  • site-enabled/ – Thư mục chứa file cấu hình VirtualHost của Apache trên Ubuntu đang được bật.
  • apache2.conf – File cấu hình Apache trên Ubuntu.
  • envvars – File thiết lập các biến với giá trị sẵn để sử dụng trong các file cấu hình.
  • magic – File thiết lập của module mod_mime_magic trên Apache.
  • ports.conf – File cấu hình cổng mạng của Apache (mặc định là port 80).

I.2) Thư mục gốc chứa dữ liệu website của Apache trên Ubuntu

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.

I.3) Thêm VirtualHost (thêm domain) vào Apache trên Ubuntu

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:

  • SererName – Domain website cần thêm vào.
  • ServerAlias – Sử dụng một tên domain khác thay thế, hay còn gọi là Parked Domain nếu bạn đã từng sử dụng qua cPanel đó.
  • DocumentRoot – Đường dẫn tới thư mục chứa dữ liệu website của domain này mà ta đã tạo ở trên.
  • ErrorLog – Đường dẫn tới thư mục log đã tạo ở trên cho domain này.
  • CustomLog – Tương tự ErrorLog nhưng sẽ lưu log lại các lượt truy cập với file là access.log.

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ả:

ubuntu-apache-testvirtualhost

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

I.4) Bật module mod_rewrite

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

II. Cài đặt PHP

Để 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.

ubuntu-phpinfo

II.1) Cài thêm module cho PHP

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?

III. Cài đặt MySQL Server

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.

ubuntu-mysql-rootpass

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

III.1) Cài đặt phpMyAdmin

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.

ubuntu-phpmyadmin

Và hãy chọn Yes để thiết lập các cấu hình ban đầu cho phpMyAdmin.

ubuntu-phpmyadmin2

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.

Phân quyền thư mục/tập tin cho Apache và PHP

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

Lời kết

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.

Leave your comment