Trang chủ / Chuyên đề / Cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.04
Thứ năm, 21/04/2016 | 00:00 GMT+7

Cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.04

LAMP là một bộ phần mềm nguồn mở cài đặt cùng nhau cho phép server chứa các trang web động và ứng dụng web. Thuật ngữ này  viết tắt cho hệ điều hành Linux, với web server Apache. Dữ liệu trang web được chứa trong database MySQL và nội dung web xử lý bởi PHP.

Yêu cầu

Trước khi bắt đầu, bạn cần một account user riêng, không phải root với các quyền sudo được thiết lập trên server . Bạn có thể tìm hiểu cách thực hiện việc này bằng cách hoàn thành các bước 1-4 trong thiết lập server ban đầu cho Ubuntu 16.04 .

Bước 1: Cài đặt Apache và Cho phép trong Firewall

Web server Apache là một trong những web server phổ biến nhất trên thế giới, trở thành lựa chọn mặc định tốt để chứa một trang web.

Ta có thể cài đặt Apache dễ dàng bằng trình quản lý gói của Ubuntu, apt . Một trình quản lý gói cho phép ta cài đặt hầu hết các phần mềm một cách dễ dàng từ một repository (kho chứa) được duy trì bởi Ubuntu. Bạn có thể tìm hiểu thêm về cách sử dụng apt tại đây.

Ta có thể bắt đầu bằng cách nhập các lệnh sau:

  • sudo apt-get update
  • sudo apt-get install apache2

Vì ta đang sử dụng sudo , các thao tác này được thực thi với quyền root, sẽ yêu cầu bạn nhập password của user thường (không phải root) để xác minh.

Khi đã nhập password, apt sẽ cho bạn biết gói nào dự định cài đặt và dung lượng ổ đĩa bổ sung mà chúng sẽ chiếm. Nhấn Y và nhấn Enter để tiếp tục.

Đặt Global ServerName để tránh lỗi cú pháp

Tiếp theo, ta sẽ thêm một dòng vào file /etc/apache2/apache2.conf để ngăn thông báo cảnh báo. Mặc dù vô hại nhưng nếu bạn không đặt ServerName trên phạm vi global, bạn sẽ nhận được cảnh báo sau khi kiểm tra cấu hình Apache để tìm lỗi cú pháp:

  • sudo apache2ctl configtest
Output
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

Mở file cấu hình:

  • sudo nano /etc/apache2/apache2.conf

Cuối file, thêm lệnh ServerName , trỏ đến domain chính . Nếu không có domain được liên kết với server, bạn có thể sử dụng địa chỉ IP công cộng của server:

Ghi chú
Nếu bạn không biết địa chỉ IP của server , hãy bỏ qua phần cách tìm địa chỉ IP công cộng của server để tìm.

/etc/apache2/apache2.conf
. . .
ServerName server_domain_or_IP

Lưu và đóng file khi bạn hoàn tất.

Tiếp theo, kiểm tra lỗi cú pháp:

  • sudo apache2ctl configtest

Vì đã thêm chỉ thị ServerName phạm vi global, ta sẽ thấy:

Output
Syntax OK

Khởi động lại Apache để áp dụng các thay đổi:

  • sudo systemctl restart apache2

Bây giờ ta bắt đầu điều chỉnh Firewall.

Điều chỉnh Firewall cho phép Lưu lượng truy cập Web

Tiếp theo, giả sử rằng ta đã làm theo hướng dẫn thiết lập server ban đầu để kích hoạt Firewall UFW, hãy đảm bảo rằng Firewall cho phép lưu lượng HTTP và HTTPS, có thể xem UFW có profile ứng dụng cho Apache như sau:

  • sudo ufw app list
Output
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Nếu profile Apache Full , cho thấy nó cho phép lưu lượng truy cập đến các cổng 80 và 443:

  • sudo ufw app info "Apache Full"
Output
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp

Cho phép lưu lượng truy cập đến cho profile này:

  • sudo ufw allow in "Apache Full"

Bạn có thể kiểm tra để xác minh mọi thứ diễn ra theo kế hoạch bằng cách truy cập địa chỉ IP công cộng của server trong trình duyệt web :

http://your_server_IP_address

Bạn sẽ thấy trang web Ubuntu 16.04 Apache mặc định, trang này dành cho mục đích thông tin và thử nghiệm. Nó sẽ trông giống như sau:

Ubuntu 16.04 Apache mặc định

Nếu bạn thấy trang này, thì web server đã được cài đặt chính xác và có thể truy cập thông qua Firewall.

Cách Tìm Địa chỉ IP Công cộng của server

Nếu không biết địa chỉ IP công cộng server là gì, có một số cách bạn có thể tìm thấy nó. Thông thường, đây là địa chỉ bạn sử dụng để kết nối với server thông qua SSH.

Có thể tìm thấy điều này theo một vài cách, đầu tiên, bạn có thể sử dụng các công cụ iproute2 để lấy địa chỉ:

  • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Kết quả cho thấy các địa chỉ IP, nhưng máy tính có thể chỉ sử dụng được một trong số chúng, vì vậy hãy thử từng địa chỉ.

Một phương pháp là sử dụng tiện ích curl để liên hệ với bên ngoài để cho bạn biết cách họ nhìn thấy server :

  • sudo apt-get install curl
  • curl http://icanhazip.com

Sẽ cho ra kết quả IP .

Bước 2: Cài đặt MySQL

Bây giờ ta đã thiết lập và chạy web server, đã đến lúc cài đặt MySQL. MySQL là một hệ quản trị database. Về cơ bản, nó sẽ tổ chức và cung cấp quyền truy cập vào database nơi trang web chứa thông tin.

Ta dùng apt để cài:

  • sudo apt-get install mysql-server

Lưu ý : Bạn không phải chạy sudo apt-get update trước lệnh vì đã chạy trước đó.

Nhập Y để tiếp tục. Trong quá trình cài đặt, server sẽ yêu cầu bạn chọn và xác nhận password cho user MySQL "root". Đây là account quản trị trong MySQL, khác với account root của hệ điều hành. Đảm bảo rằng đây là password mạnh, duy nhất và không để trống.

Khi quá trình cài đặt hoàn tất, ta muốn chạy một file bảo mật đơn giản để loại bỏ một số mặc định nguy hiểm:

  • mysql_secure_installation

Bạn sẽ được yêu cầu nhập password đã đặt cho account root MySQL. Tiếp theo, bạn sẽ được hỏi xem bạn có muốn cấu hình VALIDATE PASSWORD PLUGIN .

Cảnh báo: Kích hoạt tính năng này cần cân nhắc. Nếu được bật, password không phù hợp với tiêu chí đã chỉ định sẽ bị MySQL từ chối, báo lỗi. Điều này gây ra sự cố nếu bạn sử dụng password yếu kết hợp với phần mềm tự động cấu hình đăng nhập user MySQL, chẳng hạn như gói Ubuntu cho phpMyAdmin. Có thể tắt tính năng bảo mật này, nhưng bạn cần luôn sử dụng password mạnh, duy nhất cho thông tin đăng nhập database.

Trả lời y.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Bạn sẽ chọn cấp độ xác thực password. Nếu bạn nhập 2 , đối với cấp độ mạnh nhất, bạn sẽ nhận được lỗi khi password không chứa số, chữ hoa và chữ thường và các ký tự đặc biệt, hoặc dựa trên các từ thông dụng trong từ điển.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Tiếp theo sẽ hỏi bạn sử dụng password đã đặt hay không:

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Đối với các câu hỏi còn lại, bạn nên nhấn Y và nhấn phím Enter . Thao tác này sẽ xóa một số user ẩn danh và database thử nghiệm, vô hiệu hóa đăng nhập root từ xa và áp dụng các quy tắc mới này để MySQL ngay lập tức tuân thủ những thay đổi ta đã thực hiện.

Tại thời điểm này, hệ thống database đã được thiết lập xong và ta có thể tiếp tục.

Bước 3: Cài đặt PHP

PHP là thành phần sẽ xử lý mã để hiển thị nội dung động. Nó có thể chạy các file, kết nối với database MySQL để lấy thông tin và chuyển giao nội dung đã xử lý cho web server để hiển thị.

Một lần nữa có thể tận dụng hệ thống apt để cài đặt các thành phần, sẽ bao gồm một số gói trợ giúp, để mã PHP có thể chạy trong server Apache và nói chuyện với database MySQL:

  • sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

Lệnh này sẽ cài đặt PHP mà không gặp bất kỳ vấn đề gì. Ta sẽ kiểm tra trong giây lát.

Hiện tại, nếu user truy cập webserver này, Apache trước tiên sẽ tìm kiếm một file có tên là index.html . Ta cần web server tìm kiếm index.php .

Để thực hiện việc này, hãy nhập lệnh này để mở file dir.conf trong trình soạn thảo văn bản với quyền root:

  • sudo nano /etc/apache2/mods-enabled/dir.conf

Trông giống thế này:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Thay đổi vị trí file .php lên đầu:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Khi bạn hoàn tất, hãy lưu và đóng file bằng cách nhấn Ctrl-X.

Sau đó, ta cần khởi động lại web server Apache để các thay đổi được áp dụng:

  • sudo systemctl restart apache2

Kiểm tra trạng thái apache2 bằng systemctl :

  • sudo systemctl status apache2
Sample Output
● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Wed 2016-04-13 14:28:43 EDT; 45s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
    Tasks: 6 (limit: 512)
   CGroup: /system.slice/apache2.service
           ├─13623 /usr/sbin/apache2 -k start
           ├─13626 /usr/sbin/apache2 -k start
           ├─13627 /usr/sbin/apache2 -k start
           ├─13628 /usr/sbin/apache2 -k start
           ├─13629 /usr/sbin/apache2 -k start
           └─13630 /usr/sbin/apache2 -k start

Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server.
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server...
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]:  * Starting Apache httpd web server apache2
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerNam
Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]:  *
Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server.

Cài đặt module PHP

Để nâng cao chức năng của PHP, ta có thể tùy chọn cài đặt thêm một số module.

Để xem các tùy chọn có sẵn cho các module và thư viện PHP, ta có thể chuyển kết quả apt-cache search thành less , để xem theo trang:

  • apt-cache search php- | less

Sử dụng các phím mũi tên để cuộn lên và xuống, và q để thoát.

Kết quả là tất cả các thành phần tùy chọn có thể cài đặt với các mô tả ngắn:

libnet-libidn-perl - Perl bindings for GNU Libidn
php-all-dev - package depending on all supported PHP development packages
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default)
php-cli - command-line interpreter for the PHP scripting language (default)
php-common - Common files for PHP packages
php-curl - CURL module for PHP [default]
php-dev - Files for PHP module development (default)
php-gd - GD module for PHP [default]
php-gmp - GMP module for PHP [default]
…
:

Để biết thêm thông tin về chức năng của mỗi module, ta có thể tìm kiếm trên internet hoặc có thể xem mô tả dài của gói bằng cách nhập:

  • apt-cache show package_name

Ví dụ, để tìm hiểu module php-cli làm gì, ta có thể nhập:

  • apt-cache show php-cli

Kết quả gần giống như sau:

Output
…
Description-en: command-line interpreter for the PHP scripting language (default)
 This package provides the /usr/bin/php command interpreter, useful for
 testing PHP scripts from a shell or performing general shell scripting tasks.
 .
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.0).
…

Nếu sau khi nghiên cứu, ta quyết định cài đặt một gói phần mềm nào đó,  sử dụng apt-get install như đã dùng.

Ví dụ với php-cli :

  • sudo apt-get install php-cli

Nếu muốn cài đặt nhiều module, bạn có thể thực hiện việc đó bằng cách liệt kê từng module, được phân tách bằng dấu cách, sau apt-get install , như sau:

  • sudo apt-get install package1 package2 ...

Tại thời điểm này, LAMP đã được cài đặt và cấu hình. Tuy nhiên, ta vẫn nên thử nghiệm PHP .

Bước 4: Kiểm tra Xử lý PHP trên web server

Để kiểm tra xem hệ thống có được cấu hình đúng cho PHP hay không, ta có thể tạo một file PHP rất cơ bản.

Ta sẽ gọi script này là info.php . Để Apache có thể tìm thấy file, nó phải được lưu vào một thư mục rất cụ thể, được gọi là “web root”.

Trong Ubuntu 16.04, thư mục này được đặt tại /var/www/html/ . Ta có thể tạo file tại vị trí đó bằng cách nhập:

  • sudo nano /var/www/html/info.php

Thao tác này sẽ mở một file trống. Đưa nội dung vào file info.php :

<?php
phpinfo();
?>

Khi bạn hoàn tất, hãy lưu file.

Bây giờ ta có thể kiểm tra xem web server có thể hiển thị chính xác nội dung được tạo bởi file PHP hay không. Truy cập web với IP công cộng của server.

http://your_server_IP_address/info.php

Trang trả về trông giống như sau:

Thông tin PHP mặc định của Ubuntu 16.04

Về cơ bản, trang này cung cấp cho bạn thông tin về server, có ích để kiểm tra và đảm bảo rằng cài đặt chính xác.

Nếu điều này thành công, thì PHP đang hoạt động như mong đợi.

Nên xóa file này đi, vì có thể cung cấp thông tin về server cho user trái phép. Để làm điều này, bạn có thể nhập:

  • sudo rm /var/www/html/info.php

Tất nhiên ta có thể tạo lại để có thông tin trên khi cần.

Kết luận

Vậy ta đã cài đặt LAMP. Về cơ bản, ta đã cài đặt một nền tảng cho phép ta chạy hầu hết các loại trang web và phần mềm web trên server .

Bước tiếp theo, ta nên đảm bảo các kết nối đến web server được bảo mật bằng cách cung cấp chúng qua HTTPS. Tùy chọn dễ nhất ở đây là sử dụng Let's Encrypt để bảo mật web bằng chứng chỉ TLS / SSL miễn phí.



Các tin trước

Sử dụng UFW căn bản, các luật firewall phổ biến 2015-08-20

Nâng cấp lên Mysql 5.7 2015-04-20

Cấu hình xác thực bằng ssh-key trên server Linux 2014-10-20

Toàn tập làm việc với Openssl và chứng chỉ số 2014-09-12

Cài đặt Nginx trên CentOS 7 2014-07-22

Cài đặt Linux Apache MySQL PHP (LAMP) On CentOS 7 2014-07-21

Cài đặt Bảo mật cơ bản cho CentOS 7 2014-07-21

Cài đặt và sử dụng yum repositories trên Centos-6 vps 2013-10-01

Sử dụng SSH để kết nối tới Remote Server trong Ubuntu 2013-09-10

Backup postgresql databases trên Ubuntu vps 2013-08-28