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
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:
/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:
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
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"
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:
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:
<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:
<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
● 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:
… 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:
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
Cài đặt đăng nhập với ssh và key authentication trên Ubuntu 16.4 2016-04-21
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ấu hình firewall IP V6 trên Linux VPS 2014-04-01
Cài đặt và sử dụng yum repositories trên Centos-6 vps 2013-10-01