Thiết lập Ngăn xếp Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 18.04
Ngăn xếp LAMP là một bộ phần mềm mã nguồn mở được sử dụng để lưu trữ các ứng dụng web. Một ứng dụng web yêu cầu hệ điều hành (Linux), HTTP Server (Apache), hệ quản trị cơ sở dữ liệu (MySQL) và ngôn ngữ lập trình (PHP).
Trong khi có các lựa chọn thay thế khác cho MySQL làm cơ sở dữ liệu như cơ sở dữ liệu MariaDB, PostgreSQL, NoSQL và cũng có các lựa chọn thay thế cho ngôn ngữ lập trình PHP như Perl và Python. Hướng dẫn này sẽ tập trung chủ yếu vào MySQL làm cơ sở dữ liệu và PHP là ngôn ngữ lập trình.
Contents
Điều kiện tiên quyết
Để làm theo hướng dẫn này, cần phải thiết lập máy chủ Ubuntu với người dùng đã bật sudo không root. Trong hướng dẫn này, miền của tôi sẽ là demoapp.com .
Apache
Cài đặt Apache bằng trình quản lý gói của Ubuntu apt
:
sudo apt update
sudo apt install apache2
apt
sẽ hiển thị các gói mà nó sắp cài đặt và dung lượng đĩa sẽ được 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.
Lưu ý: các hoạt động lệnh sudo được thực thi với đặc quyền root, vì vậy bạn có thể được yêu cầu nhập mật khẩu của người dùng của mình.
Trên trình duyệt của bạn, điều hướng đến địa chỉ IP công cộng của máy chủ ( http: // server_ip ) và bạn sẽ thấy trang mặc định của Apache2 Ubuntu.
PHP
Cài đặt kho lưu trữ ppa: ondrej / php PPA có các gói xây dựng mới nhất của PHP.
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
Trong hướng dẫn này, chúng tôi sẽ cài đặt php7.4;
sudo apt install php7.4
Xác nhận cài đặt bằng lệnh;
php -v
Tiếp theo, cài đặt một số phần mở rộng PHP thường được sử dụng;
sudo apt install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-text php7.4-opcache php7.4-soap php7.4-zip php7.4-intl
Thiết lập máy chủ ảo
Khi sử dụng máy chủ web Apache, chúng ta có thể tạo các máy chủ ảo để kèm theo các chi tiết cấu hình. Điều này cho phép chúng tôi lưu trữ nhiều hơn một miền trên một máy chủ. Apache trên Ubuntu được bật theo mặc định để phục vụ các tệp từ /var/www/html
thư mục. Điều này hoạt động tốt cho một trang web, vì vậy nếu đây là những gì bạn cần, bạn có thể kết xuất các tệp mã của mình vào thư mục này và chuyển sang phần tiếp theo.
Tạo một thư mục trong /var/www
trang web miền của chúng tôi và chỉ định quyền sở hữu thư mục;
sudo mkdir /var/www/demoapp.com
sudo chown -R $USER:$USER /var/www/demoapp.com
Tạo một trang index.php bằng nano;
nano /var/www/domain/index.php
Thêm phần sau và lưu tệp;
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello world from demoapp</h1>
</body>
</html>
Tiếp theo, tạo một tệp máy chủ ảo để cung cấp nội dung này. Hãy tạo một bản sao của tệp cấu hình mặc định và sửa đổi;
cd /etc/apache2/sites-available
sudo cp 000-default.conf demoapp.com.conf
Mở tệp và sửa đổi các lệnh sau thành giá trị chính xác, lưu và đóng tệp khi hoàn tất.
- ServerName – demoapp.com (đặt lược đồ yêu cầu, tên máy chủ và cổng mà máy chủ sử dụng để nhận dạng chính nó).
- ServerAlias - www.demoapp.com (đặt tên thay thế cho máy chủ).
- DocumentRoot – /var/www/demoapp.com (đặt thư mục mà từ đó httpd – Máy chủ giao thức truyền siêu văn bản Apache sẽ phục vụ tệp).
Bật tệp cấu hình mới và tắt tệp cấu hình mặc định;
sudo a2ensite demoapp.com.conf
sudo a2dissite 000-default.conf
Kiểm tra lỗi cấu hình và nếu không có lỗi khởi động lại Apache;
sudo apache2ctl configtest
sudo systemctl restart apache2
Kiểm tra các thay đổi của bạn bằng cách truy cập URL trong trình duyệt của bạn. Bạn sẽ thấy một cái gì đó như dưới đây;
MySQL
Chạy lệnh dưới đây để cài đặt từ apt
trình quản lý gói
sudo apt install mysql-server
Khi quá trình cài đặt hoàn tất, chúng tôi cần chạy một tập lệnh được cài đặt sẵn với MySQL để giúp cải thiện tính bảo mật của quá trình cài đặt của chúng tôi theo những cách sau:
- Đặt mật khẩu cho tài khoản người dùng gốc.
- Loại bỏ các tài khoản gốc có thể truy cập từ bên ngoài máy cục bộ.
- Xóa tài khoản người dùng ẩn danh (Đây là những tài khoản cho phép bất kỳ ai kết nối vào máy chủ MySQL mà không cần có tài khoản người dùng).
- Xóa cơ sở dữ liệu thử nghiệm mà người dùng ẩn danh có thể truy cập.
sudo mysql_secure_installation
Đầu tiên, bạn sẽ được hỏi xem bạn có muốn bật plugin xác thực mật khẩu hay không . Điều quan trọng cần lưu ý là 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. Đối với hướng dẫn này, nó sẽ không được bật và nếu bạn làm như vậy, hãy đảm bảo sử dụng mật khẩu mạnh và duy nhất cho thông tin đăng nhập cơ sở dữ liệu.
Tiếp theo, cấu hình mật khẩu cho người dùng gốc MySQL. Đối với các câu hỏi còn lại, hãy nhấn Y và nhấn phím ENTER tại mỗi lời nhắc.
Hãy kiểm tra cài đặt của chúng tôi bằng cách đăng nhập với tư cách người dùng root;
sudo mysql
Thoát khỏi bảng điều khiển MySQL bằng cách gõ exit và nhấn ENTER
Truy cập mật khẩu cho tài khoản MySQL
Khi bạn kết nối với MySQL với tư cách là người dùng root, bạn đã không cung cấp mật khẩu mặc dù mật khẩu đã được cung cấp trong quá trình cài đặt. Điều này là do, trên các hệ thống Ubuntu chạy MySQL 5.7 và các phiên bản mới hơn, phương pháp xác thực mặc định cho người dùng root là sử dụng plugin auth_socket thay vì mật khẩu.
Điều này có nghĩa là, chỉ những người dùng hệ thống có đặc quyền sudo kết nối từ thiết bị đầu cuối hoặc thông qua ứng dụng có cùng đặc quyền mới được phép đăng nhập với tư cách người dùng root. Mặc dù đây là một tính năng an toàn tuyệt vời, nhưng bạn sẽ không thể sử dụng người dùng gốc để kết nối từ ứng dụng PHP của bạn hoặc một chương trình bên ngoài như phpMyAdmin.
Điều quan trọng cần lưu ý là để tăng cường bảo mật, tốt hơn nên tạo người dùng khác với ít đặc quyền hơn, đặc biệt nếu sẽ có nhiều cơ sở dữ liệu được lưu trữ trên máy chủ.
Để chuyển phương thức xác thực từ auth_socket sang mysql_native_password cho người dùng gốc của bạn, hãy mở lời nhắc MySQL từ thiết bị đầu cuối của bạn:
sudo mysql
Tiếp theo, xác nhận người dùng root có thực sự xác thực bằng cách sử dụng plugin auth_socket với truy vấn bên dưới:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Định cấu hình người dùng root để xác thực bằng mật khẩu. Thay thế ‘mật khẩu’ bên dưới bằng một mật khẩu mạnh hơn mà bạn chọn.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Tải lại bảng tài trợ để kích hoạt các thay đổi mới của bạn.
FLUSH PRIVILEGES;
Đến đây, bạn đã thiết lập LAMP Stack thành công. Bạn có thể tiếp tục bên dưới để biết các tùy chọn thiết lập tùy chọn khác.
phpMyAdmin
Để bắt đầu, hãy cài đặt phpMyAdmin bằng trình quản lý gói của Ubuntu apt
:
sudo apt install phpmyadmin
Điều này sẽ hỏi bạn một số câu hỏi để định cấu hình cài đặt của bạn một cách chính xác. Hãy lưu ý những điều sau:
- Khi lời nhắc xuất hiện, “apache2” được đánh dấu, nhưng không được chọn. Nhấn SPACE để chọn Apache, sau đó nhấn TAB rồi ENTER .
- Khi được hỏi có sử dụng dbconfig-common để thiết lập cơ sở dữ liệu hay không, hãy chọn CÓ .
Tiếp theo là nhập mật khẩu ứng dụng MySQL cho phpMyAdmin và kích hoạt phần mở rộng mbstring PHP bằng lệnh
sudo phpenmod mbstring
Khởi động lại Apache để bật các thay đổi
sudo systemctl restart apache2
Điều hướng đến http://demoapp.com/phpmyadmin để xác nhận cài đặt của bạn.
Lưu ý : Bạn có thể gặp count(): Parameter must be an array or an object that implements Countable
lỗi khi làm việc với phpMyAdmin được cài đặt. Trong khi có rất nhiều cách để giải quyết lỗi này trên web, tôi sẽ chọn tùy chọn đơn giản nhất là nâng cấp phpMyAdmin.
Nâng cấp phpMyAdmin
Điều hướng đến thư mục chính và cài đặt phần phụ thuộc.
cd ~
sudo apt install unzip
Tiếp theo, tạo một bản sao lưu của thư mục phpMyAdmin hiện tại.
sudo mv /usr/share/phpmyadmin/ /usr/share/phpmyadmin.bak
Tải xuống phiên bản phpMyAdmin mới nhất và giải nén nội dung của nó.
wget www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip
unzip phpMyAdmin-latest-all-languages.zip
Tạo một thư mục phpMyAdmin mới và di chuyển nội dung của thư mục đã giải nén vào thư mục mới được tạo;
sudo mkdir /usr/share/phpmyadmin
sudo mv phpMyAdmin-*/* /usr/share/phpmyadmin/
Dọn dẹp tệp zip đã tải xuống và thư mục đã giải nén;
sudo rm phpMyAdmin-latest-all-languages.zip
sudo rm -rf phpMyAdmin-*/*
Cập nhật các hằng số TEMP_DIR và CONFIG_DIR trong tệp cung cấp_config.php.
sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php
và cập nhật giá trị của hằng số
define('TEMP_DIR', '/var/lib/phpmyadmin/tmp/');
define('CONFIG_DIR', '/etc/phpmyadmin/');
Lưu tệp và đăng nhập vào phpMyAdmin và bạn sẽ thấy mình đang sử dụng phiên bản mới nhất.
Cụm mật khẩu bí mật trong cấu hình quá ngắn
Nếu bạn gặp lỗi như trên, hãy mở tệp blowfish_secret.inc.php
sudo nano /var/lib/phpmyadmin/blowfish_secret.inc.php
và cập nhật giá trị của $ cfg [‘blowfish_secret’] . Đây là một công cụ tốt để tạo một chuỗi ngẫu nhiên
$cfg['blowfish_secret'] = '{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V';
Lưu tệp và lỗi sẽ biến mất trên bảng điều khiển phpMyAdmin của bạn.
Người soạn nhạc
trong thư mục chính, tải xuống trình cài đặt trình soạn nhạc bằng curl.
curl -sS https://getcomposer.org/installer -o composer-setup.php
Tiếp theo, xác minh rằng trình cài đặt khớp với hàm băm SHA-384 cho trình cài đặt mới nhất được tìm thấy trên trang Khoá / Kiểm tra Công cộng của Trình soạn thảo . Sao chép băm và thay thế thích hợp
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Nếu bạn thấy Trình cài đặt bị hỏng, hãy tải xuống lại tập lệnh cài đặt và kiểm tra kỹ xem bạn có đang sử dụng mã băm chính xác hay không. Sau khi bạn có một trình cài đặt đã được xác minh, bạn có thể tiếp tục.
Cài đặt trình soạn nhạc trên toàn cầu
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Để kiểm tra cài đặt, hãy nhập trình soạn nhạc và nhấn ENTER trong thiết bị đầu cuối của bạn và bạn sẽ thấy một đầu ra hiển thị phiên bản của trình soạn nhạc và các lệnh có sẵn.
Hãy mã hóa chứng chỉ ký tự đại diện SSL miễn phí
Let’s Encrypt là một tổ chức phát hành chứng chỉ mở (CA) miễn phí, tự động và mở, cung cấp các chứng chỉ kỹ thuật số cần thiết để kích hoạt HTTPS (SSL / TLS) cho các trang web thân thiện với người dùng nhất có thể.
Cài đặt kho lưu trữ ppa: certbot / certbot PPA và cài đặt certbot
sudo add-apt-repository ppa:certbot/certbot
sudo apt install certbot
Tạo chứng chỉ ký tự đại diện bằng lệnh dưới đây;
sudo certbot certonly --manual -d *.demoapp.com -d demoapp.com --agree-tos --no-bootstrap --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
Bạn sẽ thấy một cái gì đó tương tự khi bạn chạy lệnh trên
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for demoapp.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.demoapp.com with the following value:
OGdBk2JteHzs8eWxNomoCWRrOJN83ECovDwRiL51ONY
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Tạo bản ghi TXT DNS trong nhà cung cấp miền của bạn với tên _acme-challenge. Chờ trong vài phút để bản ghi được truyền qua internet và sau đó nhấn ENTER. Bạn sẽ thấy một kết quả tương tự
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/demoapp.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/demoapp.com/privkey.pem
Your cert will expire on 2021-02-23. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Congratulations!! Your wildcard certificate is generated. You can use this wildcard certificate with any sub-domain you create for your domain name.
Sửa đổi tệp cấu hình máy chủ ảo;
sudo nano /etc/apache2/sites-available/demoapp.com.conf
và thêm phần sau. Thay thế các giá trị thích hợp
<VirtualHost *:443>
ServerName demoapp.com
ServerAlias www.demoapp.com
ServerAdmin info@demoapp.com
SSLEngine On
DocumentRoot /var/www/demoapp.com
ErrorLog ${APACHE_LOG_DIR}/demoapp.com-error.log
CustomLog ${APACHE_LOG_DIR}/demoapp.com-access.log combined
SSLCertificateFile /etc/letsencrypt/live/demoapp.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/demoapp.com/privkey.pem
</VirtualHost>
Bật mô-đun SSL chịu trách nhiệm tạo và phục vụ các kết nối SSL.
sudo a2enmod ssl
Kiểm tra lỗi cấu hình và nếu không có lỗi hãy khởi động lại Apache
sudo apache2ctl configtest
sudo systemctl restart apache2
Bây giờ bạn có thể truy cập https://demoapp.com
Sự kết luận
Làm theo hướng dẫn này, bạn sẽ có thể thiết lập thành công ngăn xếp LAMP và cũng có thể cài đặt một số ứng dụng cần thiết. Hy vọng bạn thấy điều này hữu ích.