Cài đặt phpMyAdmin với Apache (LAMP) trên Ubuntu 20.04

phpMyAdmin là một công cụ quản lý cơ sở dữ liệu dựa trên web mã nguồn mở và miễn phí được viết bằng PHP. Nó cung cấp một giao diện web đồ họa để người dùng quản lý cơ sở dữ liệu MySQL hoặc MariaDB.

phpMyAdmin cho phép quản trị viên:

  • Duyệt các cơ sở dữ liệu và bảng;
  • Tạo, sao chép, đổi tên, thay đổi và loại bỏ cơ sở dữ liệu;
  • Tạo, sao chép, đổi tên, thay đổi và loại bỏ bảng;
  • Thực hiện bảo trì CSDL;
  • Thêm, chỉnh sửa và bỏ trường;
  • Thực thi bất kỳ câu lệnh SQL nào, thậm chí nhiều truy vấn;
  • Tạo, thay đổi và loại bỏ các chỉ mục;
  • Load các tệp văn bản vào bảng;
  • Tạo và đọc kết xuất các bảng hoặc cơ sở dữ liệu;
  • Xuất dữ liệu sang các định dạng SQL, CSV, XML, Word, Excel, PDF và LaTeX;
  • Quản trị nhiều máy chủ;
  • Quản lý người dùng và đặc quyền MySQL;
  • Kiểm tra cài đặt máy chủ và thông tin thời gian chạy với gợi ý cấu hình;
  • Kiểm tra tính toàn vẹn tham chiếu trong các bảng MyISAM;
  • Tạo các truy vấn phức tạp bằng cách sử dụng Query-by-example (QBE), tự động
  • Kết nối các bảng yêu cầu;
  • Tạo đồ họa PDF của bố cục cơ sở dữ liệu;
  • Quản lý bảng InnoDB và khóa ngoại;
  • ....

Điều kiện tiên quyết


Bước 1: Tải xuống và cài đặt phpMyAdmin trên Ubuntu 20.04

phpMyAdmin có trong kho phần mềm Ubuntu 20.04. vì vậy chúng ta có thể dễ dàng cài đặt bằng lệnh bên dưới.

sudo apt update
sudo apt install phpmyadmin
Lệnh trên sẽ cài đặt tất cả các phụ thuộc cần thiết bao gồm PHP7 extensions. Trong quá trình cài đặt, nó sẽ nhắc bạn chọn một máy chủ web để cấu hình. Nhấn phím space bar để chọn apache2. (Dấu hoa thị cho biết mục đã được chọn). Sau đó nhấn phím Tab và Enter để xác nhận lựa chọn của bạn.
Trong màn hình tiếp theo, chọn Yes để định cấu hình cơ sở dữ liệu cho phpMyAdmin với dbconfig-common.
Sau đó đặt mật khẩu cho người dùng phpmyadmin trong MariaDB/MySQL.
Khi bước này được thực hiện, một cơ sở dữ liệu mới có tên là phpmyadmin được tạo và người dùng cơ sở dữ liệu phpmyadmin có các đặc quyền cần thiết để quản lý cơ sở dữ liệu này. Nếu bạn cũng tò mò như tôi, bạn có thể đăng nhập vào MariaDB và kiểm tra những đặc quyền mà người dùng phpmyadmin đã được cấp.
Bạn có thể sử dụng lệnh sau để đăng nhập vào máy chủ MariaDB.
sudo mysql -u root
Sau đó kiểm tra các đặc quyền của người dùng phpmyadmin.
show grants for phpmyadmin@localhost;
Output:
Như bạn thấy, người dùng phpmyadmin có tất cả các đặc quyền trên cơ sở dữ liệu phpmyadmin. Bây giờ bạn có thể thoát bằng cách thực hiện:
exit;
Bây giờ hãy chạy lệnh sau để kiểm tra xem tệp /etc/apache2/conf-enabled/phpmyadmin.conf có tồn tại hay không.
file /etc/apache2/conf-enabled/phpmyadmin.conf
Nếu không có lỗi trong quá trình cài đặt, bạn sẽ thấy output như sau: 
/etc/apache2/conf-enabled/phpmyadmin.conf: symbolic link to ../conf-available/phpmyadmin.conf
Nếu tệp này không tồn tại trên máy chủ của bạn, có thể bạn đã không chọn máy chủ web Apache trong trình hướng dẫn thiết lập phpMyAdmin. Bạn có thể sửa nó bằng các lệnh sau.
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf

sudo a2enconf phpmyadmin

sudo systemctl reload apache2

Bước 2: Truy cập phpMyAdmin từ Sub-directory

Khi cài đặt phpMyAdmin, một tệp cấu hình được đặt tại /etc/apache2/conf-enabled/phpmyadmin.conf, cho phép chúng ta truy cập phpMyAdmin thông qua sub-directory. Nếu bạn đã cài đặt các ứng dụng web khác như WordPress trên cùng một máy chủ Ubuntu 20.04, thì chỉ cần thêm /phpmyadmin sau tên miền của bạn trong thanh địa chỉ trình duyệt.
example.com/phpmyadmin

Nếu phpMyAdmin được cài đặt trên máy tính Ubuntu của bạn, thì bạn có thể truy cập giao diện web phpMyAdmin bằng cách nhập URL vào thanh địa chỉ trình duyệt.
localhost/phpmyadmin
Nếu kết nối bị từ chối hoặc không thể hoàn tất, có thể có tường lửa ngăn chặn các yêu cầu HTTP. Nếu bạn đang sử dụng tường lửa iptables, thì bạn cần chạy các lệnh sau để mở cổng TCP 80 và 443.
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
Nếu bạn đang sử dụng tường lửa UFW, hãy chạy lệnh này để mở cổng TCP 80 và 443.
sudo ufw allow 80,443/tcp
Bây giờ Bạn có thể sử dụng tên người dùng và mật khẩu MariaDB/MySQL để đăng nhập vào phpMyAdmin. Nếu bạn không thể đăng nhập bằng quyền root, hãy chuyển sang bước 5 để khắc phục sự cố này.

Bước 3: Truy cập phpMyAdmin từ tên miền con

Nếu máy chủ Ubuntu 20.04 của bạn không có máy chủ ảo Apache khác, thì bạn có thể muốn sử dụng tên miền phụ để truy cập giao diện web phpMyAdmin. Bằng cách này, bạn có thể bật HTTPS để mã hóa lưu lượng.

Đầu tiên, chúng ta cần tạo một máy chủ ảo Apache cho phpMyAdmin. Đoạn mã cấu hình phpMyAdmin hiện có có thể được sử dụng làm mẫu. Hãy sao chép nó vào một tệp mới.
sudo cp /etc/apache2/conf-enabled/phpmyadmin.conf /etc/apache2/sites-available/phpmyadmin.conf
Sau đó, chỉnh sửa tệp mới bằng trình soạn thảo văn bản dòng lệnh, chẳng hạn như Nano.
sudo nano /etc/apache2/sites-available/phpmyadmin.conf
Tệp này thiếu thẻ <VirtualHost>, vì vậy chúng ta cần thêm các dòng sau vào đầu tệp này. Thay thế pma.example.com bằng miền phụ ưa thích của bạn cho phpMyAdmin. Đừng quên tạo bản ghi DNS A cho miền phụ này.
<VirtualHost *:80>
ServerName pma.example.com
DocumentRoot /usr/share/phpmyadmin

ErrorLog ${APACHE_LOG_DIR}/pma.error.log
CustomLog ${APACHE_LOG_DIR}/pma.access.log combined
Thêm dòng sau vào cuối tệp này để đóng thẻ <VirtualHost>.
</VirtualHost>

Lưu và đóng tập tin. (Để lưu tệp trong trình soạn thảo văn bản Nano, nhấn Ctrl + O, sau đó nhấn Enter để xác nhận. Để thoát, nhấn Ctrl + X.) Sau đó bật máy chủ ảo này.
sudo a2ensite phpmyadmin.conf
Tải lại máy chủ web Apache để thay đổi này có hiệu lực.
sudo systemctl reload apache2
Bây giờ bạn sẽ có thể truy cập giao diện web phpMyAdmin qua pma.example.com 

Trước khi nhập thông tin đăng nhập của người dùng vào biểu mẫu đăng nhập, hãy bật HTTPS.

Bước 4: Bật HTTPS trên phpMyAdmin với Apache

Để bảo mật giao diện web phpMyadmin, chúng ta có thể cài đặt chứng chỉ TLS Let’s Encrypt miễn phí. Chạy lệnh sau để cài đặt ứng dụng khách Let’s Encrypt (certbot) từ kho phần mềm Ubuntu 20.04.
sudo apt install certbot python3-certbot-apache
Python3-certbot-apache là plugin Apache cho Certbot. Bây giờ hãy chạy lệnh sau để lấy và cài đặt chứng chỉ TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple -d pma.example.com --email you@example.com
  • Apache: Sử dụng trình xác thực và trình cài đặt Apache
  • Agree-tos: Đồng ý với các điều khoản dịch vụ của Let’s Encrypt
  • Redirect: Thực thi HTTPS bằng cách thêm chuyển hướng vĩnh viễn 301.
  • Hsts: Thêm header Strict-Transport-Security vào mọi phản hồi HTTP.
  • Staple-ocsp: Bật Ghim OCSP.
  • Must-staple: Thêm phần mở rộng OCSP Must Staple vào chứng chỉ.
  • Cờ -d được theo sau bởi một danh sách các tên miền, được phân tách bằng dấu phẩy. Bạn có thể thêm tối đa 100 tên miền.
  • Email: Email được sử dụng để đăng ký và liên hệ khôi phục.
Bạn sẽ được hỏi có muốn nhận email từ EFF (Electronic Frontier Foundation) hay không. Sau khi chọn Y hoặc N, chứng chỉ TLS của bạn sẽ được tự động lấy và định cấu hình cho bạn, được chỉ ra bằng thông báo bên dưới.

Bước 5: Khắc phục sự cố Lỗi đăng nhập phpMyAdmin

Nếu bạn cố gắng đăng nhập vào phpMyAdmin bằng tài khoản root MariaDB, bạn có thể gặp lỗi sau.
#1698 - Access denied for user 'root '@'localhost'
Hoặc
mysqli_real_connect(): (HY000/1698): Access denied for user 'root '@'localhost'
Nguyên nhân của lỗi là do người dùng root MariDB mặc định được xác thực thông qua plugin unix_socket, thay vì sử dụng plugin mysql_native_password. Để giải quyết vấn đề này, chúng tôi có thể tạo một người dùng quản trị khác và cấp tất cả các đặc quyền cho người dùng quản trị mới.
Đăng nhập vào máy chủ MariaDB từ dòng lệnh.
sudo mysql -u root
Tạo người dùng admin với xác thực mật khẩu.
create user admin@localhost identified by 'your-preferred-password';
Cấp tất cả các đặc quyền trên tất cả các cơ sở dữ liệu.
grant all privileges on *.* to admin@localhost with grant option;
flush privileges;
exit;
Bây giờ bạn có thể đăng nhập vào phpMyAmin bằng tài khoản admin và quản lý tất cả cơ sở dữ liệu.