Trang chủ / Chuyên đề / Cài đặt Linux Apache MySQL PHP (LAMP) trên Ubuntu 18 04
Thứ sáu, 27/04/2018 | 00:00 GMT+7

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

“LAMP” là một nhóm phần mềm nguồn mở thường được cài đặt cho phép server chạy các trang web và ứng dụng web động. Thuật ngữ này viết tắt từ Linux, với web server Apache. Dữ liệu trang web được lưu trữ trong database MySQL và nội dung xử lý bởi PHP. Trong hướng dẫn này, ta sẽ cài đặt LAMP trên server Ubuntu 18.04.

Chuẩn bị

Để hoàn thành hướng dẫn này, ta cần server Ubuntu 18.04 với tài khoản user kích hoạt sudo không phải root và firewall cơ bản. Điều này có thể được định cấu hình bằng cách sử dụng hướng dẫn thiết lập server ban đầu của ta cho Ubuntu 18.04 .

Bước 1 - Cài  Apache và cập nhật firewall

Web server Apache là một trong những web server phổ biến nhất trên thế giới. Nó được được sử dụng rộng rãi trong phần lớn lịch sử của web, điều này khiến nó trở thành lựa chọn mặc định tuyệt vời để lưu trữ một trang web.

Cài đặt Apache bằng trình quản lý gói của Ubuntu, apt :

  • sudo apt update
  • sudo apt install apache2

Vì đây là sudo , các thao tác này được thực hiện với đặc quyền root. Nó sẽ yêu cầu bạn nhập mật khẩu của regular user.

Sau khi bạn nhập mật khẩu , 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 và quá trình cài đặt sẽ tiếp tục.

Điều chỉnh firewall để Cho phép Lưu lượng truy cập Web

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

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

Nếu bạn nhìn vào profile Apache Full , sẽ cho thấy rằng nó cho phép lưu lượng truy cập đến các cổng 80443 :

  • 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 HTTP và HTTPS đến cho cấu hình này:

  • sudo ufw allow in "Apache Full"

Kiểm tra kết quả, truy cập địa chỉ IP server trên trình duyệt web:

http://your_server_ip

Bạn sẽ thấy trang web Ubuntu 18.04 Apache mặc định, giống như sau:

Ubuntu 18.04 Apache mặc định

Nếu bạn thấy trang này, thì web server hiện đã đượ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ủa server

Nếu bạn không biết địa chỉ IP của server là gì, có một số cách tìm. 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ó một số cách khác nhau để thực hiện việc này từ dòng lệnh. Trước tiên, bạn có thể sử dụng các công cụ iproute2 để lấy địa chỉ IP bằng cách nhập:

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

Kết quả có vài dòng. Tất cả đều là địa chỉ chính xác, nhưng chỉ sử dụng được một trong số chúng, nên hãy thử từng địa chỉ.

Một phương pháp nữa 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 . Điều này được thực hiện bằng cách:

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

Sau khi có IP, nhập địa chỉ đó vào thanh địa chỉ của trình duyệt web để xem trang Apache mặc định.

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

Bây giờ bạn đã 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 có thể lưu trữ thông tin.

Một lần nữa, hãy sử dụng apt để mua và cài đặt phần mềm này:

  • sudo apt install mysql-server

Lưu ý : Trong trường hợp này, bạn không phải chạy sudo apt update trước lệnh. Điều này là do gần đây bạn đã chạy nó trong các lệnh trên để cài đặt Apache. Chỉ mục gói trên máy tính phải được cập nhật.

Lệnh này cũng sẽ hiển thị cho bạn danh sách các gói sẽ được cài đặt, cùng với dung lượng ổ đĩa mà chúng sẽ chiếm. Nhập Y để tiếp tục.

Khi quá trình cài đặt hoàn tất, hãy chạy một tập lệnh bảo mật đơn giản được cài đặt sẵn với MySQL để loại bỏ một số mặc định nguy hiểm và khóa quyền truy cập vào hệ thống database . Bắt đầu tập lệnh tương tác bằng cách chạy:

  • sudo mysql_secure_installation

Điều này sẽ hỏi bạn có muốn định cấu hình VALIDATE PASSWORD PLUGIN .

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

Trả lời Y có hoặc bất kỳ điều gì khác để tiếp tục mà không cần bật.

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:

Nếu bạn trả lời “có”, bạn sẽ được yêu cầu chọn mức độ xác thực mật khẩu. Hãy nhớ rằng nếu bạn nhập 2 cho cấp độ mạnh nhất, bạn sẽ nhận được lỗi khi cố gắng đặt bất kỳ mật khẩu nào 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

Bất kể bạn đã chọn thiết lập VALIDATE PASSWORD PLUGIN , server sẽ yêu cầu bạn chọn và xác nhận mật khẩu cho user root MySQL. Đây là tài khoản quản trị trong MySQL. Đảm bảo rằng đây là mật khẩu mạnh, không giống mật khẩu nào (duy nhất) và không để trống.

Nếu đã bật xác thực mật khẩu, bạn sẽ được hiển thị độ mạnh mật khẩu cho mật khẩu root mà bạn vừa nhập và server sẽ hỏi bạn có muốn thay đổi mật khẩu đó hay không. Nếu bạn hài lòng với mật khẩu hiện tại , hãy nhập N cho “không” ở lời nhắc:

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, nhấn Y + Enter để tiếp tục. 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à tải các quy tắc mới này để MySQL ngay lập tức tôn trọng những thay đổi bạn đã thực hiện.

Lưu ý rằng trong các hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản mới hơn), user MySQL root được đặt để xác thực bằng cách sử dụng plugin auth_socket theo mặc định chứ không phải bằng mật khẩu. Điều này cho phép một số bảo mật và khả năng sử dụng cao hơn trong nhiều trường hợp, nó cũng có thể làm phức tạp mọi thứ khi bạn cần cho phép một chương trình bên ngoài (ví dụ: phpMyAdmin) truy cập vào user.

Nếu bạn thích sử dụng mật khẩu khi kết nối với MySQL dưới dạng root , bạn sẽ cần chuyển phương thức xác thực từ auth_socket sang mysql_native_password . Để thực hiện, hãy mở MySQL từ dòng lệnh :

  • sudo mysql

Tiếp theo, hãy kiểm tra phương thức xác thực mà mỗi tài khoản user MySQL sử dụng bằng lệnh sau:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Trong ví dụ này, bạn có thể thấy rằng user root trên thực tế xác thực bằng cách sử dụng plugin auth_socket . Để định cấu hình tài khoản root để xác thực bằng mật khẩu, hãy chạy ALTER USER sau. Đảm bảo thay đổi password thành một mật khẩu mạnh mà bạn chọn:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Sau đó, chạy FLUSH PRIVILEGES để yêu cầu server tải lại các bảng và đặt các thay đổi mới có hiệu lực:

  • FLUSH PRIVILEGES;

Kiểm tra lại các phương pháp xác thực được sử dụng bởi từng user để xác nhận rằng root không còn xác thực bằng plugin auth_socket :

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Bạn có thể thấy đầu ra ví dụ trên user MySQL root hiện xác thực bằng mật khẩu. Khi bạn xác nhận điều này trên server, bạn có thể thoát MySQL shell:

  • exit

Như vậy, database đã được cấu hình và ta có thể chuyển sang cài đặt PHP, thành phần cuối cùng của LAMP.

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

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

Cài đặt:

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

Ta sẽ kiểm tra kết quả trong giây lát.

Hiện tại, nếu user yêu cầu một thư mục từ server, Apache trước tiên sẽ tìm kiếm một file có tên là index.html . Nhưng ta sẽ cấu hình để Apache dùng index.php trước.

Để thực hiện việc này, soạn thảo file dir.conf với quyền root:

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

Nội dung tương tự:

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

Di chuyển file index.php (được đánh dấu ở trên) đến vị trí đầu tiên sau đặc tả DirectoryIndex , như sau:

/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 bằng cách nhấn CTRL+X Xác nhận lưu bằng cách gõ Y , sau đó nhấn ENTER để xác minh vị trí lưu file.

Rồi khởi động lại web server Apache để tải các thay đổi:

  • sudo systemctl restart apache2

Kiểm tra trạng thái của 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 Tue 2018-04-23 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

Nhấn Q để thoát khỏi đầu ra trạng thái này.

Để nâng cao chức năng của PHP, bạn có tùy chọn cài đặt một số module bổ sung. Để xem các tùy chọn có sẵn cho các module và thư viện PHP, hãy chuyển kết quả của apt search thành less:

  • apt search php- | less

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

Kết quả là các lựa chọn cài đặt:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
  Tracks usage of TCP/IP and builds html files with graphs

bluefish/bionic 2.2.10-1 amd64
  advanced Gtk+ text editor for web and software development

cacti/bionic 1.1.38+ds1-1 all
  web interface for graphing of monitoring systems

ganglia-webfrontend/bionic 3.6.1-3 all
  cluster monitoring toolkit - web front-end

golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
  PHP-like Compression and Archive Extensions in Go

haserl/bionic 0.9.35-2 amd64
  CGI scripting program for embedded environments

kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php

kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php-l10n
…
:

Để biết chức năng của mỗi module, bạn có thể tìm kiếm trên internet. Ngoài ra, có thể xem mô tả dài của gói bằng cách nhập:

  • apt show package_name

Trường được gọi là Description sẽ có phần giải thích dài hơn về chức năng mà module cung cấp.

Ví dụ, để tìm hiểu những gì module php-cli làm:

  • apt show php-cli

Bạn sẽ tìm thấy giống như sau:

Output
…
Description: 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 Ubuntu's default
 PHP version (currently 7.2).
…

Ví dụ cài php-cli:

  • sudo apt install php-cli

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

  • sudo apt install package1 package2 ...

Vậy, LAMP đã được cài đặt và cấu hình. Trước khi làm bất kỳ điều gì khác, bạn nên thiết lập VirtualHost Apache, nơi lưu trữ chi tiết cấu hình server .

Khi sử dụng web server Apache, bạn có thể sử dụng VirtualHost (tương tự như block server trong Nginx) để đóng gói chi tiết cấu hình và lưu trữ nhiều hơn một domain trên server. Ta sẽ thiết lập domain có tên your_domain , bạn nên thay thế domain này bằng tên domain của riêng bạn.

Apache trên Ubuntu 18.04 có một config server mặc định cấu hình để cung cấp document từ thư mục /var/www/html . Mặc dù điều này hoạt động tốt cho một trang web nhưng nó có thể trở nên khó sử dụng nếu bạn cần lưu trữ nhiều trang web. Thay vì sửa đổi /var/www/html , hãy tạo cấu trúc thư mục trong /var/www cho trang web your_domain, để /var/www/html ở vị trí làm thư mục mặc định.

Tạo thư mục cho your_domain như sau:

sudo mkdir /var/www/your_domain

Chỉ định quyền sở hữu thư mục với biến môi trường $USER :

  • sudo chown -R $USER:$USER /var/www/your_domain

Các điều khoản của gốc web nên chính xác nếu bạn chưa sửa đổi unmask giá trị, nhưng bạn có thể chắc chắn rằng bằng cách gõ:

  • sudo chmod -R 755 /var/www/your_domain

Tiếp theo, tạo một trang index.html:

  • nano /var/www/your_domain/index.html

Bên trong, thêm HTML mẫu sau:

/var/www/your_domain/index.html
<html>
    <head>
        <title>Welcome to Your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain server block is working!</h1>
    </body>
</html>

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

Để Apache phân phát nội dung này, bạn cần tạo một file VirtualHost với các lệnh chính xác. Thay vì sửa đổi trực tiếp file cấu hình mặc định nằm tại /etc/apache2/sites-available/000-default.conf , hãy tạo một file mới tại /etc/apache2/sites-available/your_domain.conf :

  • sudo nano /etc/apache2/sites-available/your_domain.conf

Dán vào khối cấu hình sau, khối này tương tự như khối mặc định, nhưng được cập nhật cho thư mục và tên domain mới:

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Lưu ý rằng ta đã cho DocumentRoot mục mới và ServerAdmin. Ta cũng đã thêm hai chỉ thị: ServerName , thiết lập domain cơ sở phù hợp với định nghĩa VirtualHost này và ServerAlias. Ghi lại file.

Hãy kích hoạt file bằng a2ensite :

  • sudo a2ensite your_domain.conf

Tắt trang web mặc định được xác định trong 000-default.conf :

  • sudo a2dissite 000-default.conf

Tiếp theo, hãy kiểm tra lỗi cấu hình:

  • sudo apache2ctl configtest

Kết quả sau là thành công:

Output
Syntax OK

Khởi động lại Apache để triển khai các thay đổi:

  • sudo systemctl restart apache2

Bạn có thể kiểm tra bằng cách vào địa chỉ web: http:// your_domain, bạn sẽ thấy giống như sau:

Ví dụ về máy chủ ảo Apache

Vậy VirtualHost đã được thiết lập đầy đủ. Tuy nhiên, trước khi thực hiện thêm bất kỳ thay đổi hoặc triển khai ứng dụng nào, sẽ rất hữu ích nếu bạn chủ động kiểm tra cấu hình PHP trong trường hợp có bất kỳ vấn đề nào cần được giải quyết.

Bước 5 - 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, hãy tạo một tập lệnh PHP rất cơ bản có tên là info.php

Tạo file ở root web:

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

Tạo nội dung file:

info.php
<?php
phpinfo();
?>

Bây giờ bạn xem web server có thể hiển thị chính xác nội dung được tạo bởi tập lệnh PHP này hay không. Truy cập trang này trong trình duyệt web

http://your_domain/info.php

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

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

Trang này cung cấp một số thông tin cơ bản về server. Nó cần để đảm bảo rằng cài đặt đang được áp dụng chính xác.

Nếu bạn có thể thấy trang này trong trình duyệt, thì PHP đang hoạt động như mong đợi.

Bạn có thể xóa file này sau khi kiểm tra vì nó có thể cung cấp thông tin về server cho user trái phép, hacker. Xóa bằng cách:

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

Bạn có thể tạo lại trang này nếu sau cần truy cập lại thông tin.

Kết luận

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

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

Một số công việc phổ biến khác là:



Các tin trước

Cài đặt SSH Keys trên Ubuntu 16.04 2018-04-12

Cài đặt Node.js trên Ubuntu 16.04 2018-03-07

Cài đặt Anaconda Python trên Ubuntu 16 04 2017-12-27

Cài đặt MySQL trên CentOS 7 2016-12-01

Cài đặt MySQL trên Ubuntu 16.04 2016-11-23

Cài đặt Node.js Application for Production trên Ubuntu 16.04 2016-11-01

Cài đặt Nginx Server Blocks (Virtual Hosts) trên Ubuntu 16.04 2016-05-19

Cài đặt OpenVPN Server trên Ubuntu 16.04 2016-05-04

Cài đặt JAVA với Apt-Get trên Ubuntu 16.04 2016-04-23

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