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
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 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 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:
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;
+------------------+-------------------------------------------+-----------------------+-----------+ | 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;
+------------------+-------------------------------------------+-----------------------+-----------+ | 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ự:
<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:
<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
● 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:
… 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 .
Bước 4 - Thiết lập VirtualHost (Khuyến nghị)
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:
<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:
<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:
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ậ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:
<?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:
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à:
- Thiết lập PHPMyAdmin để giúp quản lý database MySQL từ trình duyệt web.
- Tìm hiểu cách sử dụng SFTP để truyền file đến và từ server .
Các tin trước
Cài đặt xác thực đăng nhập SSH Keys, không cần password trên Ubuntu 18.04 2018-04-27
Bảo mật cơ bản Ubuntu 18.04 2018-04-27
Cài đặt Apache Web Server trên Ubuntu 18.04 2018-04-27
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