Vấn đề mình gặp sau 6 tháng quản trị Fedora Server
Mình dùng Fedora làm máy development chính đã 2 năm và khá hài lòng với tốc độ cập nhật package. Khi mở rộng lên homelab với 3 máy chủ Fedora, quản lý thủ công bắt đầu cho thấy giới hạn của nó: storage LVM trải dài nhiều volume group, vài chục container Podman chạy các service khác nhau, và phải quản lý toàn bộ qua SSH từ nhiều terminal song song.
Không phải CLI tệ — mình vẫn dùng CLI là chủ yếu. Nhưng khi cần kiểm tra disk usage trên máy B trong lúc đang debug container trên máy A — mở terminal mới, SSH vào, gõ df -h rồi podman ps — cái routine đó lặp lại cả chục lần mỗi ngày. Mỗi lần chỉ mất 2-3 phút, nhưng nhân lên là đáng kể. Tệ hơn là khi cần giải thích tình trạng server cho người khác: đưa một URL dễ hơn rất nhiều so với hướng dẫn SSH từng bước.
Khi CLI bắt đầu tạo thêm việc thay vì tiết kiệm thời gian
Nhìn lại workflow một lúc, mình thấy 4 điểm cụ thể mà CLI làm mình mất thêm bước không đáng:
- Giám sát nhiều metrics đồng thời: CPU, RAM, disk I/O, network — cần chạy song song
top,iostat,netstattrên nhiều terminal, không có cái nhìn tổng thể một màn hình - Quản lý LVM: Resize logical volume khi disk đầy đòi hỏi nhớ đúng cú pháp
lvcreate/lvextend/resize2fsvà chính xác tên device — sai một ký tự là rắc rối - Container lifecycle: Start/stop/inspect nhiều container cùng lúc, xem log realtime — mỗi thứ cần một lệnh riêng
- Remote access từ thiết bị khác: Từ điện thoại hay máy tính không có SSH client cài sẵn, browser luôn có mặt
Các giải pháp đã thử trước Cockpit
Netdata — Monitoring tốt nhưng chỉ đọc
Netdata cho dashboard đẹp với metrics real-time rất chi tiết. Nhưng nó chỉ đọc được — không restart service được, không quản lý storage hay container từ đó. Vẫn phải mở terminal song song — vòng lặp ban đầu vẫn còn đó.
Webmin — Nhiều tính năng nhưng không native với Fedora stack
Webmin có từ thời mình còn học IT, hỗ trợ gần như mọi thứ. Nhưng interface cũ kỹ, cấu hình phức tạp, và quan trọng hơn: Webmin không tích hợp native với systemd hay Podman theo cách mà Fedora dùng. Phải wrap thêm layer, dễ xảy ra hành vi không nhất quán giữa Webmin và CLI.
Portainer — Tốt cho container, không giải quyết bài toán storage
Portainer rất tốt cho quản lý Docker/Podman container. Nhưng nó chỉ xử lý phần container, còn storage và system monitoring vẫn cần tool riêng khác.
Cockpit: Native với Fedora stack, không cần trade-off
Cockpit khác ba cái trên ở một điểm then chốt: nó được phát triển bởi Red Hat, tích hợp native với đúng stack mà Fedora dùng — systemd, NetworkManager, Podman, LVM. Không phải wrap thêm layer, không cần agent riêng chạy ngầm. Và nó không cố làm mọi thứ: làm tốt đúng những việc mình cần.
Cài đặt Cockpit và các module cần thiết
Trên Fedora Server, Cockpit thường đã được cài sẵn. Nếu chưa có, cài cực nhanh:
# Cài Cockpit core
sudo dnf install cockpit -y
# Module quản lý storage (LVM, RAID, Btrfs, iSCSI)
sudo dnf install cockpit-storaged -y
# Module quản lý Podman container
sudo dnf install cockpit-podman -y
# Bật và khởi động ngay
sudo systemctl enable --now cockpit.socket
Lưu ý quan trọng: Cockpit dùng socket activation — service chỉ thực sự chạy khi có kết nối đến, idle hoàn toàn khi không dùng. Trên server mình, Cockpit gần như không ăn RAM khi idle, trong khi Netdata hay Webmin ngốm 50–100MB liên tục. Điểm này quan trọng với server tài nguyên hạn chế.
Mở firewall và truy cập lần đầu
# Mở port 9090 qua firewalld
sudo firewall-cmd --add-service=cockpit --permanent
sudo firewall-cmd --reload
# Kiểm tra
sudo firewall-cmd --list-services
Truy cập tại https://[IP-server]:9090. Browser sẽ cảnh báo SSL vì dùng self-signed cert mặc định — bình thường, chấp nhận exception hoặc cài cert thật qua Let’s Encrypt sau. Đăng nhập bằng user Linux có quyền sudo.
Quản lý Storage LVM với cockpit-storaged
cockpit-storaged là lý do chính mình cài Cockpit. Tab Storage hiển thị toàn bộ: disk vật lý, partition, volume group, logical volume và filesystem — tất cả trong một màn hình với biểu đồ I/O realtime.
Lần mình cần extend logical volume của /var khi log đầy đĩa, thay vì phải gõ chính xác:
sudo lvextend -L +20G /dev/fedora/var
sudo resize2fs /dev/fedora/var
Với Cockpit: click vào volume, kéo thanh slider resize, nhấn Grow — xong trong 10 giây, không lo nhầm device path. Filesystem được resize tự động luôn.
Ngoài LVM, cockpit-storaged còn hỗ trợ:
- Tạo/xóa partition và format filesystem trực tiếp
- Mount/unmount và tự động cập nhật
/etc/fstab - Theo dõi SMART status của ổ cứng — cảnh báo trước khi ổ chết
- Cấu hình RAID software (mdadm) và iSCSI
Quản lý Podman Container với cockpit-podman
Trước khi dùng module này, đảm bảo Podman đã được cài:
podman --version
# Nếu chưa có
sudo dnf install podman -y
Tab Podman containers hiển thị cả container rootless (user) và rootful (root) với CPU/RAM usage realtime từng container. Những thứ có thể làm từ UI:
- Xem logs container realtime — thay thế
podman logs -f - Start/stop/restart/delete container
- Inspect environment variables, mount points, port bindings
- Commit container thành image mới
Phần hay nhất là xem log realtime thẳng trên browser. Khi debug lúc nửa đêm từ điện thoại, không cần mở SSH client mobile — mở browser, vào URL Cockpit là xem log ngay.
Giám sát hệ thống và quản lý service
Dashboard mặc định đã cho thấy CPU, RAM, disk I/O, network traffic — đồ thị realtime cập nhật liên tục. Tab Services liệt kê tất cả systemd unit với trạng thái, cho phép start/stop/restart và xem journal log trực tiếp không cần terminal.
Kết nối quản lý nhiều server từ một giao diện
Cái tiện nhất: từ Cockpit trên máy A, thêm máy B vào và điều khiển cả hai từ một tab browser mà không cần đổi cửa sổ hay mở terminal mới. Trên server remote, chỉ cần Cockpit đang chạy:
# Kiểm tra server remote
sudo systemctl status cockpit.socket
Trong Cockpit UI: Hosts → Add new host → nhập IP và xác thực SSH. Từ đó switch giữa hai server chỉ cần click vào tên host ở thanh sidebar.
Giới hạn truy cập cho môi trường production
Mặc định Cockpit cho phép mọi user Linux đăng nhập. Trên production, nên giới hạn lại:
sudo tee /etc/cockpit/cockpit.conf << 'EOF'
[WebService]
AllowedUsers = youradminuser
Origins = https://your-domain.com https://[SERVER-IP]:9090
EOF
sudo systemctl restart cockpit
Cockpit chạy tốt trong SELinux Enforcing mode — không cần tắt SELinux như một số tool khác yêu cầu. Đây là điểm cộng lớn khi kết hợp với bài cấu hình SELinux trên Fedora.
Tại sao Cockpit là lựa chọn phù hợp nhất cho Fedora stack
Sau 6 tháng dùng thực tế, lý do mình vẫn tiếp tục dùng Cockpit:
- Native integration thực sự: Cockpit gọi trực tiếp systemd D-Bus API, Podman REST API, LVM — không phải parse output của CLI command. Thao tác qua UI cho kết quả giống hệt CLI, không có hành vi bất ngờ
- Module hóa linh hoạt: Chỉ cài module cần thiết. Homelab khác production server ở nhu cầu khác nhau
- Không tốn tài nguyên khi idle: Socket activation — không có gì chạy ngầm khi bạn không dùng
- Maintained bởi Red Hat: Fedora update nhanh, Cockpit theo kịp — không lo compatibility với kernel và systemd version mới nhất
- SELinux-aware: Chạy tốt trong Enforcing mode, không phá vỡ security policy đã cấu hình
Mình vẫn dùng CLI cho automation, scripting và những thao tác phức tạp — Cockpit không thay thế được terminal. Nhưng cho việc kiểm tra nhanh tình trạng hệ thống, quản lý storage khi disk đầy, debug container từ bất kỳ thiết bị nào — Cockpit đã trở thành tab mình để pinned trên browser cùng với các dashboard khác.

