Trang chủ Thủ thuật

Cài đặt LAMP Stack trên Ubuntu 18.04

Cài đặt LAMP Stack trên Ubuntu 18.04

LAMP stack là một tập các phần mềm mã nguồn mở thường được cài đặt cùng với nhau trên một server để cho các ứng dụng web hay website chạy trên đó. LAMP là 4 chữ cái đầu tiên của bốn thành phần tạo nên stack: hệ điều hành Linux, web server Apache, cơ sở dữ liệu MySQL và cuối cùng là PHP

Bài viết sau sẽ hướng dẫn chi tiết các bạn cài đặt LAMP stack Ubuntu 18.04

Bước 1 - Cài đặt Apache và cập nhật Firewall

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

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

$ sudo apt update

$ sudo apt install apache2

Vì đây là lệnh sudo, các thao tác này được thực thi với các đặc quyền root. Nó sẽ yêu cầu cung cấp mật khẩu người dùng để xác minh.

Ngay khi nhập mật khẩu, apt sẽ cho bạn biết những package nào dự định sẽ cài đặt và bao nhiêu không gian đĩa chúng sẽ sử dụng.

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 web traffic

Tiếp theo, giả sử rằng bạn đã làm theo hướng dẫn thiết lập máy chủ và bật tường lửa UFW, hãy đảm bảo rằng tường lửa của bạn cho phép các traffic từ HTTP và HTTPS. Bạn có thể kiểm tra xem UFW có một hồ sơ ứng dụng cho Apache hay không như sau:

$ sudo ufw app list

Output

Các ứng dụng Apache khả dụng:

  Apache

  Apache Full

  Apache Secure

  OpenSSH

Nếu bạn xem 1 profile Apache đầy đủ, sẽ thấy rằng 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 HTTP và HTTPS:

$ sudo ufw allow in "Apache Full"

Bạn có thể thực hiện kiểm tra ngay lập tức để xác minh mọi thứ đều đã được thiết lập đúng kế hoạch bằng cách truy cập địa chỉ IP công cộng của máy chủ trong trình duyệt web của bạn (xem phần ghi chú trong phần tiếp theo để tìm hiểu địa chỉ IP công cộng của bạn là gì nếu bạn không có thông tin này):

http://your_server_ip

Bạn sẽ thấy 1 trang web Ubuntu 18.04 Apache mặc định, trang này dùng để cung cấp thông tin và thử nghiệm.

Nếu bạn thấy trang này, thì web server đã được cài đặt đúng cách và có thể truy cập được qua tường lửa của bạn.

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

Giờ thì bạn đã có web server sẵn sàng để chạy, bước tiếp theo là tiến hành cài đặt MySQL.

Tiếp tục sử dụng lệnh apt để tải và cài đặt MySQL.

$ sudo apt install mysql-server

Chú ý: Trong trường hợp này, bạn không phải chạy sudo apt update trước lệnh bởi nó đã được chạy trong lệnh cài đặt Apache trước đó. Gói được lập trên máy của bạn đã được cập nhật sẵn.

Nhấn Y để tiếp tục.

Khi việc cài đặt hoàn tất chạy một script bảo mật đã được cài đặt sẵn trong MySQL để loại bỏ một vài lỗi nguy hại và khóa truy cập vào hệ dữ liệu. Bắt đầu tập lệnh tương tác bằng cách chạy:

$ sudo mysql_secure_installation

Lệnh sẽ hỏi bạn có muốn cấu hình PLUGIN PASSWORD VALIDATE không.

Lưu ý: Nếu tính năng được bật, mật khẩu không khớp với tiêu chí được chỉ định sẽ bị MySQL từ chối do lỗi. Điều này sẽ gây ra một vấn đề là nếu bạn sử dụng một mật khẩu yếu cùng với phần mềm tự động cấu hình các thông tin người dùng MySQL, chẳng hạn như các gói Ubuntu cho phpMyAdmin. Việc tắt xác nhận là an toàn 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 cơ sở dữ liệu.

Trả lời Y cho "có" để tiếp tục 

VALIDATE PASSWORD PLUGIN có thể được sử dụng để kiểm tra mật khẩu và cải thiện an ninh. Nó kiểm tra sức mạnh của mật khẩu và cho phép người dùng chỉ đặt những mật khẩu đủ an toàn. 

"Would you like to setup VALIDATE PASSWORD plugin?" - Bạn có muốn thiết lập plugin VALIDATE PASSWORD không?

Nhấn y | Y cho Có, và ấn phím bất kỳ cho Không:

Nếu bạn trả lời "Yes", 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 để chọn mức mạnh nhất, bạn sẽ gặp lỗi khi cố gắng đặt bất kỳ mật khẩu nào không chứa số, chữ thường, chữ hoa và các ký tự đặc biệt hoặc các từ thông dụng trong từ điển.

Nhấn y | Y cho Có, bất kỳ phím nào khác cho Không:

Có mức độ mạnh của mật khẩu:

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 PLUGIN PASSWORD VALIDATE hay không, server của bạn sẽ yêu cầu bạn chọn và xác nhận mật khẩu cho MySQL root user. Đây là một tài khoản quản trị trong MySQL đã tăng các đặc quyền. Hãy xem nó như tài khoản gốc cho chính máy chủ (mặc dù cái bạn đang cấu hình bây giờ là một tài khoản MySQL cụ thể). Đảm bảo một mật khẩu mạnh, duy nhất và không để trống.

Nếu bạn đã bật xác thực mật khẩu, bạn sẽ được hiển thị cường độ mật khẩu cho mật khẩu gốc mà bạn vừa nhập và máy chủ của bạn sẽ hỏi bạn có muốn thay đổi mật khẩu đó không. Nếu bạn hài lòng với mật khẩu hiện tại của mình, hãy nhập N cho "no" tại 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 phần còn lại, nhấn Y và nhấn phím ENTER ở mỗi lời nhắc. Như vậy, sẽ loại bỏ một số người dùng ẩn danh và test database, vô hiệu hóa đăng nhập gốc từ xa và tải các quy tắc mới để MySQL ngay lập tức ghi nhận những thay đổi bạn đã thực hiện.

Nếu bạn muốn 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 phải chuyển phương thức xác thực của nó từ auth_socket sang mysql_native_password. Để thực hiện điều này, hãy mở lời nhắc MySQL từ terminal:

$ sudo mysql

Tiếp theo, kiểm tra phương thức xác thực mà mỗi tài khoản người dùng MySQL của bạn sử dụng với lệnh sau:

mysql> 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 root user thực tế xác thực bằng cách sử dụng plugin auth_socket. Để cấu hình tài khoản root xác thực bằng mật khẩu, hãy chạy lệnh ALTER USER sau đây. Đảm bảo thay đổi mật khẩu thành mật khẩu mạnh mà bạn chọn:

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

Sau đó, chạy FLUSH PRIVILEGES yêu cầu máy chủ tải lại các bảng trợ cấp và đặt các thay đổi mới của bạn có hiệu lực:

mysql> FLUSH PRIVILEGES;

Kiểm tra các phương thức xác thực được sử dụng bởi từng người dùng của bạn một lần nữa để xác nhận rằng root không còn xác thực bằng cách sử dụng plugin auth_socket:

mysql> 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 trong output ví dụ này, MySQL root user đã xác thực bằng cách sử dụng mật khẩu. Khi bạn xác nhận điều này trên máy chủ của riêng mình, bạn có thể thoát MySQL shell:

mysql> exit

Tại thời điểm này, hệ thống cơ sở dữ liệu của bạn hiện đã được thiết lập và bạn có thể chuyển sang cài đặt PHP, thành phần cuối cùng của LAMPstack.

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

Một lần nữa, sử dụng apt để cài đặt PHP. Ngoài ra, với một số gói trợ giúp PHP code có thể chạy trên máy chủ Apache và giao tiếp với cơ sở dữ liệu MySQL của bạn:

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

Như vậy, bạn có thể cài đặt PHP mà không gặp bất kỳ vấn đề gì.

Trong hầu hết các trường hợp, bạn sẽ muốn sửa đổi cách Apache phân phối các tệp khi một thư mục được yêu cầu. Hiện tại, nếu một người dùng yêu cầu một thư mục từ máy chủ, trước tiên Apache sẽ tìm một tệp có tên là index.html. Khi muốn yêu cầu webserver ưu tiên các tệp PHP hơn các tệp khác, vì vậy hãy để Apache tìm tệp index.php trước.

Để thực hiện việc này, gõ lệnh sau để mở tệp dir.conf trong trình soạn thảo văn bản có các đặc quyền root:

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

Sẽ xuất hiện dòng lệnh sau:

/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 PHP index (được đánh dấu ở trên) đến vị trí đầu tiên sau mô 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, lưu và đóng tệp bằng cách nhấn CTRL X. Xác nhận lưu bằng cách nhập Y và sau đó nhấn ENTER để xác minh vị trí lưu tệp.

Sau đó, khởi động lại web server Apache để các thay đổi của bạn được nhận diện. Thực hiện bằng cách gõ lệnh sau:

$ sudo systemctl restart apache2

Bạn cũng có thể kiểm tra trạng thái của dịch vụ 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

Để tăng cường 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, pipe kết quả apt search thành less, một pager cho phép bạn cuộn qua output của các lệnh khác:

$ apt search php- | less

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

Kết quả cho ra tất cả các thành phần tùy chọn mà bạn có thể cài đặt. Nó sẽ cung cấp cho bạn một mô tả ngắn cho mỗi thành phần như vậy:

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

:

Để tìm hiểu thêm về từng module nào làm nhiệm vụ gì, bạn có thể tìm kiếm trên Internet để biết thêm thông tin về chúng. Ngoài ra, hãy xem mô tả dài của package bằng cách nhập:

$ apt show package_name

Cùng với một lượng lớn thông tin khác, bạn sẽ tìm thấy thông tin 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).

Nếu sau khi nghiên cứu, bạn quyết định cài đặt một package, có thể thực hiện bằng cách sử dụng lệnh apt install như bạn đã làm cho phần mềm khác.

Nếu bạn lựa chọn php-cli, có thể gõ:

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 liệt kê từng module, cách nhau bằng dấu cách, theo lệnh apt install, như sau:

$ sudo apt install package1 package2 ...

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

Bây giờ bạn đã có LAMP stack được cài đặt hoàn toàn, bạn có rất nhiều lựa chọn để thực hiện các tác vụ tiếp theo. Về cơ bản, bạn đã cài đặt một nền tảng cho phép bạn chạy hầu hết các loại trang web và phần mềm web trên máy chủ của mình.

Chúc các bạn thành công!

Theo https://www.digitalocean.com

>> Tham khảo thêm: Cấu hình firewall sử dụng ipset