CentOS Stream 9: Quản lý Node.js, PHP “dễ thở” hơn nhờ AppStream và DNF Modules

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

Tạm biệt nỗi lo xung đột thư viện khi nâng cấp Server

Nếu từng vận hành CentOS 7, chắc hẳn bạn đã quá quen với cảnh “đánh vật” mỗi khi khách đòi nâng cấp PHP từ 5.4 lên 7.4. Anh em thường phải lục lọi các repo bên thứ ba như REMI hay EPEL. Sau đó là những giờ phút cầu nguyện cho chúng không làm hỏng các gói hệ thống sẵn có. Mình đã dành 6 tháng qua để migrate hơn 50 server từ CentOS 7 sang CentOS Stream 9, và thực sự cách quản lý phần mềm mới đã thay đổi hoàn toàn cuộc chơi.

Các bản phân phối Linux truyền thống thường rất bảo thủ. Họ khóa cứng phiên bản runtime (Node.js, Python, PHP) để đảm bảo hệ thống không bao giờ sập. Tuy nhiên, sự ổn định này đôi khi lại trói chân các developer cần công nghệ mới nhất. CentOS Stream 9 xử lý vấn đề này bằng AppStream và DNF Modules. Sau nửa năm chạy thực tế cho các dự án thương mại điện tử, mình thấy đây là tính năng “đáng đồng tiền bát gạo” nhất cho dân SysAdmin.

Hiểu đúng về BaseOS, AppStream và Module

Để không bị rối khi gõ lệnh, bạn cần phân biệt rõ ba thành phần chính trong kiến trúc mới này:

  • BaseOS: Những gói lõi tối thiểu để máy ảo có thể boot và chạy ổn định. Những thứ này rất ít khi thay đổi.
  • AppStream: Kho chứa ứng dụng, công cụ lập trình và database. Điểm cộng lớn nhất là nó cho phép nhiều phiên bản của cùng một phần mềm tồn tại song song.
  • DNF Modules: Cách đóng gói các ứng dụng liên quan thành một nhóm. Một Module sẽ có nhiều Stream (phiên bản như Node.js 18, 20) và Profile (kiểu cài đặt như minimal hay full-stack cho dev).

Thay vì cài lẻ tẻ từng file .rpm, chúng ta quản lý theo tư duy mới. Bạn chỉ cần chọn Module mong muốn, chỉ định phiên bản (Stream) và chọn cấu hình (Profile) phù hợp cho môi trường production.

Thực hành: Cài đặt và chuyển đổi Runtime trong 1 nốt nhạc

Dưới đây là quy trình mình thường dùng để setup server cho khách hàng. Mọi thao tác đều bắt đầu bằng lệnh quản lý module rất trực quan.

1. Kiểm tra các phiên bản đang được hỗ trợ

Đừng vội cài đặt ngay. Hãy xem hệ thống đang có sẵn những gì bằng lệnh:

dnf module list nodejs

Màn hình sẽ hiện ra danh sách các bản 18, 20. Ký hiệu [d] nghĩa là bản mặc định, còn [e] là bản bạn đang dùng. Việc này giúp bạn tránh cài nhầm phiên bản cũ cho dự án mới.

2. Cài đặt Node.js 20 cho dự án hiện đại

Nếu dự án yêu cầu Node.js 20 nhưng bản mặc định lại thấp hơn, bạn không cần tải source về compile tốn thời gian. Chỉ cần thực hiện hai lệnh sau:

# Kích hoạt stream phiên bản 20
sudo dnf module enable nodejs:20

# Cài đặt profile common (đủ dùng cho hầu hết ứng dụng)
sudo dnf module install nodejs:20

Chỉ mất khoảng 30 giây để hệ thống tự động giải quyết các dependency phức tạp. Kiểm tra lại bằng node -v, bạn sẽ thấy kết quả như ý.

3. Chuyển đổi giữa PHP 8.1 và 8.2 sạch sẽ nhất

Đây là tính năng mình cực kỳ tâm đắc. Khi migrate ứng dụng, mình thường test trên PHP 8.1 trước khi nâng lên 8.2. DNF Modules giúp quá trình này diễn ra cực kỳ gọn gàng.

Để nâng cấp, hãy thực hiện quy trình Reset để tránh rác hệ thống:

# Reset module để xóa sạch cấu hình phiên bản cũ
sudo dnf module reset php

# Kích hoạt và cài đặt phiên bản mới
sudo dnf module enable php:8.2
sudo dnf module install php:8.2/common

Kinh nghiệm xương máu: Đừng bao giờ bỏ qua lệnh dnf module reset. Nếu cài đè trực tiếp, các dependency cũ có thể gây ra những lỗi “ma” rất khó debug sau này.

4. Tối ưu dung lượng với Profile

Mỗi module thường chia làm nhiều Profile. Với Python, nếu chỉ cần chạy code trên server, hãy chọn bản minimal. Nếu cần build thư viện, hãy chọn bản development. Xem danh sách profile bằng lệnh:

dnf module info --profiles python39

Cú pháp cài đặt sẽ là module:stream/profile. Ví dụ: sudo dnf module install python39/build.

Mẹo nhỏ để quản lý AppStream hiệu quả hơn

Qua quá trình vận hành thực tế, mình rút ra 3 quy tắc để giữ server luôn sạch:

  1. Ưu tiên hàng chính chủ: Luôn check dnf module list trước khi tìm đến các repo ngoài. Hàng từ AppStream được đội ngũ RHEL test rất kỹ về bảo mật.
  2. Cẩn thận với lệnh cài đặt tắt: Nếu bạn dùng dnf install [tên_gói], hệ thống sẽ bốc bản mặc định. Luôn dùng module enable để kiểm soát chính xác phiên bản mình muốn.
  3. Kiểm tra file cấu hình dư thừa: Sau khi đổi version PHP, hãy check thư mục /etc/php.d/. Đôi khi các extension cũ vẫn để lại file config gây xung đột với version mới.

Lời kết

Làm chủ AppStream và DNF Modules giúp việc quản trị CentOS Stream 9 trở nên chuyên nghiệp hơn hẳn. Nó xóa bỏ rào cản giữa một hệ điều hành Enterprise ổn định và nhu cầu thay đổi liên tục của giới dev. Thay vì loay hoay với hàng tá repo không rõ nguồn gốc, giờ đây bạn có thể nâng cấp runtime chỉ với vài lệnh đơn giản. Nếu đang bắt đầu với RHEL 9 hay AlmaLinux, hãy tập thói quen dùng Module ngay hôm nay để server luôn ổn định và dễ bảo trì.

Share: