Chuyển đến nội dung chính
Giảm 50% tất cả các gói, có thời hạn. Khởi điểm từ $2.48/mo
10 min left
Database và Analytics

Cách cài đặt Adminer trên VPS Linux (với Nginx và bảo mật đúng cách)

H Bởi Haze 10 phút đọc
Adminer login screen served by Nginx on a Linux VPS

Một phiên bản Adminer được để chạy trên địa chỉ mở là một trong những cách yên lặng nhất để mất cơ sở dữ liệu. Ai đó triển khai tệp PHP đơn lẻ để kiểm tra bảng, URL hoạt động và tệp đó ở đó nhiều tháng cho đến khi bản sao lỗi thời trở thành bề mặt tấn công. Đó là lý do tại sao hướng dẫn cài đặt Adminer trên Linux VPS này dành nhiều không gian cho việc bảo mật công cụ như cho việc chạy nó.

Adminer là một tệp PHP duy nhất (khoảng 503 KB trong bản build đầy đủ) hỗ trợ MySQL, MariaDB, PostgreSQL, SQLite và nhiều cơ sở dữ liệu khác. Nó rất dễ triển khai, đó chính xác là lý do tại sao nó thường được triển khai cẩu thả.

Bạn sẽ cài đặt nó trên VPS Ubuntu hoặc Debian hiện đại với Nginx và PHP-FPM, thêm xác thực HTTP, danh sách IP cho phép và HTTPS với Let's Encrypt, rồi kết thúc với quy tắc rõ ràng về thời điểm bỏ qua hoàn toàn thiết lập công khai và thay vào đó tiếp cận Adminer qua đường hầm SSH.

Tóm tắt nhanh

  • Adminer là một tệp PHP duy nhất mà bạn tải xuống vào webroot bằng wget; Nginx cùng PHP-FPM phục vụ nó.
  • Một phiên bản Adminer công khai cần cả ba: lớp xác thực HTTP, danh sách IP cho phép và HTTPS. Chỉ một trong số chúng là chưa đủ.
  • Đối với các cơ sở dữ liệu nhạy cảm nhất, không nên để lộ Adminer chút nào: liên kết nó với localhost và truy cập qua đường hầm SSH.
  • Cập nhật chỉ là một lệnh: chạy lại wget lệnh tải xuống. Các bản phát hành bảo mật gần đây biến việc cập nhật thường xuyên thành một nhiệm vụ vận hành thực sự, không chỉ là điều tốt nên làm.

Điều kiện tiên quyết: Những gì bạn cần trước khi cài đặt

Hướng dẫn này nhắm vào Ubuntu 26.04 và 24.04 cùng Debian 13, với các ghi chú tương thích cho Ubuntu 22.04 và Debian 12. Các phiên bản PHP-FPM mặc định là 8.5 trên Ubuntu 26.04, 8.3 trên Ubuntu 24.04, 8.4 trên Debian 13, 8.2 trên Debian 12 và 8.1 trên Ubuntu 22.04.

  • VPS Linux chạy Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 hoặc Debian 13, với người dùng có sudo truy cập
  • Máy chủ cơ sở dữ liệu (MySQL, MariaDB hoặc PostgreSQL) đang chạy sẵn, trên VPS này hoặc trên một máy chủ mà Adminer có thể tiếp cận qua mạng. Hướng dẫn này không cài đặt cơ sở dữ liệu; nó cài đặt công cụ bạn dùng để quản trị cơ sở dữ liệu.
  • PHP-FPM từ các kho lưu trữ được hỗ trợ của hệ điều hành. Mặc dù file đã biên dịch của Adminer hỗ trợ PHP 5.3+, hãy sử dụng phiên bản hiện tại do bản phân phối cung cấp được liệt kê ở trên thay vì cài đặt phiên bản PHP lỗi thời.
  • Để thiết lập HTTPS công khai, bạn cần tên máy chủ phân giải đến VPS và các cổng TCP vào 80 và 443 khả dụng. quy trình làm việc Certbot Nginx sử dụng xác thực HTTP-01 trên cổng 80. Let's Encrypt hiện hỗ trợ chứng chỉ địa chỉ IP ngắn hạn, nhưng Certbot không tự động cài đặt chúng qua quy trình làm việc Nginx của mình, vì vậy hướng dẫn này sử dụng tên máy chủ.

Lưu ý: Hướng dẫn này cố ý sử dụng Nginx. Nếu bạn chạy Apache, logic tải xuống và bảo mật vẫn áp dụng, nhưng cấu hình server block bên dưới thì không.

Cài đặt Nginx và PHP-FPM

Bắt đầu bằng cách làm mới chỉ mục gói và cài đặt Nginx và PHP-FPM cùng với tiện ích mở rộng cơ sở dữ liệu PHP mà máy chủ của bạn cần:

sudo apt update
sudo apt install -y nginx php-fpm php-mysql

Đối với backend PostgreSQL, hãy cài đặt php-pgsql thay thế cho, hoặc cùng với, php-mysql:

sudo apt install -y php-pgsql

Xác nhận rằng socket PHP-FPM tồn tại:

ls /run/php/

Khớp tên tệp socket với phiên bản được liệt kê ở trên, ví dụ: php8.5-fpm.sock trên Ubuntu 26.04, php8.3-fpm.sock trên Ubuntu 24.04, hoặc php8.4-fpm.sock trên Debian 13. Nếu socket dự kiến bị thiếu, hãy kiểm tra dịch vụ phù hợp bằng systemctl status php8.5-fpm, thay thế 8.5 với phiên bản được cài đặt trên hệ điều hành của bạn.

Mẹo chuyên nghiệp: Sự không khớp socket là một nguyên nhân có thể gây ra 502 Bad Gateway. Khớp fastcgi_pass với tên tệp trong /run/php/, xác nhận rằng dịch vụ PHP-FPM tương ứng đang chạy và kiểm tra /var/log/nginx/error.log nếu lỗi vẫn còn.

Tải xuống Adminer

Tạo thư mục để phục vụ Adminer, sau đó tải tệp duy nhất vào đó. latest.php URL luôn phân giải đến phiên bản ổn định hiện tại:

sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php

Nếu bạn chỉ làm việc với MySQL hoặc MariaDB, bản build chỉ dành cho MySQL nhỏ hơn (khoảng 406 KB) và tải xuống theo cùng cách:

sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php

Giữ quyền sở hữu thư mục Adminer cho root trong khi cấp quyền đọc cho PHP-FPM:

sudo chown -R root:root /var/www/adminer
sudo chmod 755 /var/www/adminer
sudo chmod 644 /var/www/adminer/adminer.php

You do not need to track the version number: the latest.php URL có nghĩa là chạy lại quá trình tải xuống cũng là đường dẫn cập nhật của bạn, điều mà phần bảo trì sẽ quay lại.

Cấu hình Khối máy chủ Nginx

Tạo khối máy chủ phục vụ thư mục Adminer và chuyển tiếp .php yêu cầu đến socket PHP-FPM mà bạn đã xác định trước đó. Mở tệp site mới:

sudo nano /etc/nginx/sites-available/adminer

Dán nội dung sau, thay thế db.example.com bằng tên máy chủ đã trỏ đến VPS của bạn và xác nhận rằng fastcgi_pass socket khớp với phiên bản PHP của bạn:

# /etc/nginx/sites-available/adminer
server {
    listen 80;
    server_name db.example.com;
    root /var/www/adminer;

    location = / {
        return 302 /adminer.php;
    }

    location = /adminer.php {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location / {
        return 404;
    }
}

Kích hoạt trang web bằng cách tạo symlink vào sites-enabled, sau đó kiểm tra cấu hình mà chưa tải lại Nginx:

sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t

nginx -t phải báo cáo rằng cú pháp hợp lệ và kiểm tra thành công. Chưa tải lại Nginx vì trang web chưa có xác thực hoặc hạn chế IP. Tiếp tục qua hai bước bảo mật đó; bước hạn chế IP thực hiện lần tải lại đầu tiên sau khi cả hai biện pháp bảo vệ được áp dụng.

Khóa Quyền Truy Cập: Xác thực, Hạn chế IP và HTTPS

Một phiên bản Adminer công khai đứng ngay trước thông tin xác thực cơ sở dữ liệu của bạn, vì vậy nó cần phòng thủ nhiều lớp thay vì một ổ khóa duy nhất. Ba lớp dưới đây thực hiện các nhiệm vụ khác nhau: xác thực HTTP ngăn bất kỳ ai không có mật khẩu tại máy chủ web, danh sách IP cho phép ngăn bất kỳ ai kết nối từ địa chỉ chưa được phê duyệt, và HTTPS giữ cho thông tin xác thực bạn nhập không vượt qua mạng dưới dạng văn bản thuần túy. Thêm cả ba. Không cái nào thay thế được cái kia.

Thêm Xác thực HTTP Cơ bản

Cài đặt htpasswd tiện ích, đi kèm trong gói apache2-utils gói trên Ubuntu và Debian:

sudo apt install -y apache2-utils

Tạo tệp mật khẩu và người dùng (bạn sẽ được nhắc nhập mật khẩu):

sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd

Thêm các chỉ thị vào vị trí PHP Adminer chính xác để bản thân yêu cầu PHP được bảo vệ:

location = /adminer.php {
    auth_basic           "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Cả hai chỉ thị đều được ghi chép trong tài liệu tham khảo mô-đun Nginx HTTP auth_basic. Chạy sudo nginx -t để xác thực cấu hình, nhưng chưa tải lại Nginx; danh sách IP cho phép sẽ được thêm tiếp theo. Không gửi thông tin xác thực Basic Auth qua HTTP thông thường; đợi cho đến khi HTTPS được kích hoạt bên dưới.

Hạn chế Quyền truy cập theo Địa chỉ IP

Xác thực cơ bản chặn người dùng chưa xác thực, nhưng Nginx vẫn nhận yêu cầu từ mọi nguồn. Thay thế vị trí PHP Adminer hiện có bằng khối kết hợp sau để các quy tắc IP và chỉ thị Basic Auth vẫn ở một nơi:

location = /adminer.php {
    satisfy all;

    allow                203.0.113.10;
    allow                203.0.113.0/28;
    deny                 all;

    auth_basic           "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Thay thế các địa chỉ ví dụ bằng địa chỉ IP công cộng thực tế hoặc dải mạng tin cậy của bạn. Chỉ giữ lại các mục allow bạn cần và xóa bất kỳ ví dụ nào không sử dụng. Mục đầu tiên minh họa một địa chỉ đơn lẻ, trong khi mục thứ hai minh họa một dải CIDR. Nginx trả về 403 Forbidden đến các địa chỉ không khớp với quy tắc allow quy tắc allow. tài liệu tham khảo mô-đun truy cập Nginx ghi chép cú pháp chỉ thị. Kiểm tra và tải lại Nginx:

sudo nginx -t && sudo systemctl reload nginx

Bật HTTPS với Let's Encrypt

Với tên miền trỏ đến VPS, cài đặt Certbot và plugin Nginx của nó, sau đó yêu cầu chứng chỉ:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com

Certbot chỉnh sửa khối máy chủ của bạn để phục vụ HTTPS trên cổng 443 và đề xuất chuyển hướng HTTP sang HTTPS; chấp nhận chuyển hướng. Nó cũng cài đặt bộ đếm thời gian gia hạn, vì vậy chứng chỉ tự động gia hạn trước khi hết hạn. Bạn có thể xác nhận đường dẫn gia hạn bằng sudo certbot renew --dry-run, nên hoàn thành mà không có lỗi.

Bây giờ hãy truy cập https://db.example.com/adminer.php từ một địa chỉ được phép và xác nhận rằng Nginx yêu cầu thông tin xác thực Basic Auth trước khi Adminer tải.

Adminer login screen after first successful load, showing the database system dropdown and server and username fields

Chọn Mô hình Truy cập của Bạn: HTTPS Công khai so với SSH Tunnel

Thiết lập trên phù hợp khi bạn cần truy cập trình duyệt vào cơ sở dữ liệu từ nhiều máy hoặc khi mở phiên SSH là không thực tế. Đây không phải là mô hình duy nhất và đối với cơ sở dữ liệu nhạy cảm đây không phải là mô hình phòng thủ nhất.

Đối với các thiết lập nhạy cảm, không nên để lộ Adminer công khai. Hướng dẫn bảo mật chính thức của Adminer khuyến nghị làm cho nó không thể truy cập từ internet công khai khi có thể. Nếu bạn chọn chỉ truy cập qua đường hầm, hãy thay thế khối máy chủ Nginx công khai bằng cấu hình chỉ loopback này và bỏ qua thiết lập HTTPS công khai:

# /etc/nginx/sites-available/adminer
server {
    listen 127.0.0.1:8080 default_server;
    server_name _;
    root /var/www/adminer;

    location = / {
        return 302 /adminer.php;
    }

    location = /adminer.php {
        auth_basic           "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location / {
        return 404;
    }
}

Kiểm tra và tải lại cấu hình thay thế:

sudo nginx -t && sudo systemctl reload nginx

Sau đó mở đường hầm từ máy của bạn:

ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip

Với đường hầm đang chạy, mở http://127.0.0.1:8080/adminer.php. Nginx chỉ chấp nhận kết nối Adminer qua giao diện loopback của VPS, trong khi SSH mang lưu lượng qua kết nối được mã hóa của nó. Điều này sử dụng hành vi được mô tả trong tài liệu chuyển tiếp cục bộ OpenSSH.

Sử dụng thiết lập HTTPS công khai, Basic Auth và danh sách IP cho phép khi bạn cần truy cập trình duyệt trực tiếp từ nhiều máy. Ưu tiên thiết lập SSH chỉ loopback khi truy cập công khai không cần thiết.

Điểm mấu chốt: Adminer an toàn nhất là cái không bao giờ có thể tiếp cận được từ internet công khai.

Giữ Adminer Được Cập nhật

Phiên bản bị lãng quên là rủi ro thực sự ở đây, và đáng để xử lý như một nhiệm vụ theo lịch trình hơn là suy nghĩ sau. Cập nhật Adminer là một lệnh, cùng lệnh wget lệnh bạn đã dùng để cài đặt nó, vì latest.php luôn tải phiên bản hiện tại:

sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php

Đây không phải là mối lo ngại lý thuyết. Adminer 5.4.3, phát hành ngày 9 tháng 7 năm 2026, đã giải quyết bảy Cảnh báo Bảo mật GitHub trong một lần phát hành. Cảnh báo trước đó cho CVE-2026-25892 cho thấy ngay cả điểm cuối kiểm tra phiên bản của Adminer cũng có thể bị biến thành vector từ chối dịch vụ không được xác thực; vấn đề đã được khắc phục trong phiên bản 5.4.2. Một bản sao lỗi thời tích lũy các lỗ hổng được ghi chép công khai, vì vậy việc cập nhật nó nên là bảo trì thông thường.

Lưu ý: Giữ nguyên phiên bản Adminer chính thức hiện tại. kho lưu trữ AdminerEvo đã được lưu trữ vào tháng 1 năm 2025 và không phải là một giải pháp thay thế được duy trì tích cực.

Triển khai trên VPS

Nếu bạn muốn bỏ qua các bước thủ công, Adminer có sẵn như một triển khai một cú nhấp chuột trong marketplace Cloudzy trên một VPS Linux Cloudzy. Hình ảnh marketplace sử dụng Apache, Basic Auth và chứng chỉ tự ký, do đó khác với stack Nginx, danh sách IP cho phép và Let's Encrypt ở trên. Xem xét những khác biệt bảo mật đó trước khi nhập thông tin xác thực cơ sở dữ liệu sản xuất.

Dấu chân của chính Adminer là không đáng kể; cơ sở dữ liệu điều khiển kích thước của bạn. Chọn CPU, bộ nhớ và lưu trữ dựa trên kích thước dữ liệu và chỉ mục của cơ sở dữ liệu, tải truy vấn, số lượng kết nối, sao lưu và tăng trưởng dự kiến thay vì chính Adminer.

Câu hỏi thường gặp

Có An Toàn Không Khi Công Khai Adminer trên VPS?

Không phải một mình. Nếu bạn phải công khai Adminer, đặt nó phía sau HTTP Basic Authentication, danh sách IP cho phép và HTTPS cùng nhau. Các kiểm soát này giảm rủi ro nhưng không làm cho việc công khai không có rủi ro. Đối với cơ sở dữ liệu nhạy cảm, hãy ràng buộc Adminer với localhost và truy cập nó qua đường hầm SSH thay thế.

Làm Thế Nào Để Truy Cập Adminer Mà Không Để Lộ Nó Ra Internet?

Cấu hình khối máy chủ Nginx chỉ loopback được hiển thị ở trên để Adminer lắng nghe trên 127.0.0.1:8080, rồi chạy ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip trên máy của bạn. Mở http://127.0.0.1:8080/adminer.php trong khi đường hầm đang chạy.

Adminer Có Thể Kết Nối Với PostgreSQL Cũng Như MySQL Không?

Có. Adminer hỗ trợ MySQL, MariaDB, PostgreSQL, SQLite, MS SQL và Oracle ngay lập tức, với các cơ sở dữ liệu khác có sẵn qua plugin. Cài đặt PHP extension tương ứng cho cơ sở dữ liệu của bạn, ví dụ php-pgsql cho PostgreSQL để PHP có thể giao tiếp với nó.

Làm Thế Nào Để Giữ Adminer Được Cập Nhật?

Chạy lại lệnh tải xuống: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. Cái latest.php URL luôn trả về phiên bản ổn định hiện tại, do đó điều này ghi đè bản sao của bạn bằng phiên bản mới nhất. Các bản phát hành bảo mật gần đây khiến điều này đáng thực hiện theo lịch trình hơn là chỉ khi bạn nhớ ra.

Tôi Có Nên Cài Adminer Qua apt Gói Hay Tải Xuống Trực Tiếp?

Tải xuống trực tiếp tệp đơn. Nó cung cấp cho bạn phiên bản hiện tại ngay lập tức và làm cho các bản cập nhật thành lệnh một dòng, trong khi gói phân phối có thể tụt hậu so với bản phát hành chính thức. Tệp trực tiếp là cùng một công cụ với đường dẫn ngắn hơn đến các bản vá bảo mật mới nhất.

Chia sẻ

Thêm bài viết từ blog

Tiếp tục đọc.

Sẵn sàng triển khai? Từ $2.48/tháng.

Cloud độc lập, từ 2008. AMD EPYC, NVMe, 40 Gbps. Hoàn tiền trong 14 ngày.