Bối cảnh: Khi dự án cũ và mới “đánh nhau” về phiên bản
Làm Web hay DevOps, chắc hẳn bạn đã từng “đau đầu” khi dự án cũ kẹt ở PHP 7.4, còn dự án mới lại đòi PHP 8.2. Với Node.js, tình hình cũng chẳng khá hơn khi mỗi app yêu cầu một môi trường riêng. Thông thường, chúng ta hay cầu cứu đến nvm hoặc cài thêm các Repository bên thứ ba, vốn tiềm ẩn rủi ro xung đột hệ thống.
Mình đã dùng Fedora làm máy làm việc chính suốt 2 năm qua. Điểm khiến mình tâm đắc nhất chính là DNF Modularity. Thay vì ép bạn dùng duy nhất một bản phần mềm, Modularity cho phép hệ thống chạy nhiều “luồng” (streams) phiên bản khác nhau ngay từ kho ứng dụng chính thức.
Tại sao không dùng Docker cho nhẹ đầu? Thực tế, Modularity mang lại sự ổn định tuyệt đối vì nó tích hợp sâu vào dnf. Bạn sẽ không phải lo về bảo mật hay lỗi thư viện khi nâng cấp. Chỉ với 3-5 phút thao tác, bạn có thể nhảy từ Node.js 18 sang 20 mà không làm hỏng các dependencies của hệ điều hành.
Hiểu nhanh về Module, Stream và Profile
Trước khi gõ lệnh, hãy nhìn qua 3 khái niệm cốt lõi này để tránh nhầm lẫn:
- Module: Tên phần mềm bạn muốn quản lý (ví dụ:
nodejs). - Stream: Phiên bản cụ thể của module đó (ví dụ: 18, 20, 22).
- Profile: Cách cài đặt phù hợp với nhu cầu. Bạn có thể chọn
commoncho server hoặcdevelopmentđể lấy thêm bộ công cụ debug.
Muốn biết máy mình đang có những “món” gì? Hãy dùng lệnh:
dnf module list
Danh sách trả về thường rất dài. Để lọc nhanh, ví dụ với Node.js, hãy chạy:
dnf module list nodejs
Hãy chú ý cột Stream. Ký tự [d] là bản mặc định, còn [i] báo hiệu phiên bản đó đã nằm gọn trong máy bạn rồi.
Thực chiến: Chuyển đổi linh hoạt phiên bản trong tích tắc
1. Xử lý Node.js
Giả sử bạn đang ở Node.js 18 nhưng khách hàng yêu cầu Node.js 20. Quên việc tải script từ nodesource đi, quy trình chuẩn chỉ là “Reset – Enable – Install”:
# Bước 1: Reset module để xóa các cấu hình cũ
sudo dnf module reset nodejs
# Bước 2: Kích hoạt luồng phiên bản 20
sudo dnf module enable nodejs:20
# Bước 3: Cài đặt hoặc đồng bộ hệ thống
sudo dnf install nodejs
Nếu máy đã có Node.js 18, bạn chỉ cần chạy thêm sudo dnf distro-sync. Hệ thống sẽ tự động hạ cấp hoặc nâng cấp các package liên quan cho đồng bộ.
2. Quản lý PHP cho các dự án Web
PHP là nơi Modularity phát huy sức mạnh rõ nhất. Để cài PHP 8.2 sạch sẽ cho server, mình thường dùng Profile:
sudo dnf module enable php:8.2
# Cài đặt theo profile 'common' để có đủ các extension hay dùng
sudo dnf install @php:8.2/common
Ký tự @ giúp bạn cài cả một bộ package mà không cần nhớ tên từng thư viện lẻ tẻ. Tiết kiệm đáng kể thời gian so với việc ngồi gõ php-mbstring, php-xml…
3. Với MariaDB: Cẩn thận không thừa
Chuyển phiên bản Database luôn rủi ro hơn vì cấu trúc dữ liệu bên dưới. Cách kích hoạt vẫn tương tự:
sudo dnf module enable mariadb:10.11
sudo dnf install mariadb-server
Kinh nghiệm xương máu: DNF chỉ nâng cấp phần mềm (binary), nó không tự chạy mysql_upgrade cho bạn. Hãy luôn mysqldump dữ liệu ra trước khi đổi stream để tránh cảnh “tiền mất tật mang”.
Kiểm tra và “Hồi mã thương” khi gặp lỗi
Sau khi xong xuôi, đừng quên xác nhận lại thành quả. Lệnh sau sẽ liệt kê mọi module đang hoạt động:
dnf module list --enabled
Check trực tiếp version để chắc chắn:
node -v && php -v
Lỡ tay enable nhầm stream làm vỡ môi trường? Đừng hoảng. DNF có tính năng ghi lại lịch sử cực hay. Bạn chỉ cần chạy:
dnf history
Tìm ID của thao tác lỗi rồi gõ dnf history undo <ID> để “quay xe” về trạng thái cũ chỉ trong vài giây. Đây chính là phao cứu sinh mình dùng thường xuyên khi lỡ tay vọc vạch quá đà.
DNF Modularity biến Fedora thành một cỗ máy đa năng, giúp hệ thống luôn gọn gàng mà vẫn đáp ứng mọi yêu cầu oái oăm của dự án. Chúc bạn có những trải nghiệm mượt mà!

