Quản trị Fedora Server từ xa bằng Cockpit: Review sau 6 tháng dùng thực tế

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Mình bắt đầu dùng Cockpit sau một lần SSH vào server lúc 2 giờ sáng để restart service, mò mẫm trong terminal mắt díu lại — và nghĩ: phải có cách nào dễ hơn chứ? Sau 6 tháng chạy trên production Fedora Server, đây là những gì mình thấy thực sự đáng chia sẻ.

Ba phương án mình đã thử — và lý do loại 2 cái đầu

Trước khi chốt dùng Cockpit, mình đã thử qua 3 hướng chính và mỗi hướng có lý do để loại bỏ:

1. SSH thuần + CLI tools

Cách này thì khỏi cần giới thiệu. Không cài thêm gì, bảo mật tốt, attack surface nhỏ. Nhưng với team nhỏ hoặc khi onboard người mới, đây thực sự là rào cản. Yêu cầu ai đó nhớ cú pháp của systemctl, journalctl, df, netstat, lsblk trong tuần đầu là không thực tế. Chưa kể lúc bạn đang dùng máy công ty, máy khách, hay tablet — không có SSH client, bạn kẹt hoàn toàn.

2. Webmin

Webmin từng là lựa chọn phổ biến những năm 2010. Giao diện đầy đủ tính năng, nhưng dùng một lúc là thấy ngay: UI lỗi thời, cập nhật chậm, và không “native” với Fedora/RHEL ecosystem chút nào. Cài xong là kéo theo một đống package từ repo bên ngoài — không phải thứ mình muốn trên production, nơi bạn cần biết chính xác mọi thứ đang chạy là gì.

3. Cockpit — Web console tích hợp sẵn

Cockpit khác với hai phương án trên ở một điểm cốt lõi: nó không phải là một layer riêng chạy trên server, mà là giao diện web cho chính các công cụ hệ thống đã có sẵn. Khi bạn xem log trong Cockpit, bạn đang xem journald. Khi bạn quản lý service, bạn đang dùng systemd thật sự. Không có database riêng, không có daemon nặng, không có magic ẩn.

Cockpit làm được gì — và không làm được gì

Điểm mạnh thực sự

  • Real-time system monitoring: CPU, RAM, disk I/O, network hiện ngay — không cần htop hay iotop
  • Log viewer tích hợp journald: Filter theo service, severity, time range dễ hơn journalctl rất nhiều
  • Quản lý service systemd: Start/stop/restart/enable với 1 click, xem status và log cùng lúc
  • Terminal web tích hợp: SSH vào server mà không cần client riêng
  • Tích hợp tốt với Fedora/RHEL: Red Hat phát triển Cockpit, ecosystem khớp hoàn toàn

Những điểm cần biết trước khi cài

  • Không phải control panel hosting: Cockpit không quản lý virtual host Apache/Nginx kiểu cPanel — đừng nhầm vai trò
  • Tính năng nâng cao cần plugin: Quản lý container Podman, KVM, storage nâng cao cần cài thêm module riêng
  • Port 9090 cần bảo vệ: Thêm một attack surface, dù Cockpit dùng TLS mặc định

Tại sao Cockpit phù hợp hơn cho 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 — Fedora luôn có kernel mới, systemd mới trước các distro khác. Cockpit theo kịp nhịp đó. Red Hat đứng sau cả Fedora lẫn Cockpit, nên sự tích hợp là tự nhiên, không phải vá víu từng phiên bản.

Từ Fedora 36 trở đi, Cockpit đã được đưa vào image minimal (chưa kích hoạt mặc định). Nghĩa là không cần repo bên ngoài, không lo tương thích — cài từ repo chính thức như bao package khác. Trên môi trường production, điều đó quan trọng hơn nhiều người nghĩ.

Hướng dẫn cài đặt Cockpit trên Fedora Server

Bước 1: Cài đặt Cockpit và các module cần thiết

Trên Fedora Server, Cockpit thường đã có sẵn. Kiểm tra và cài nếu chưa có:

sudo dnf install cockpit -y

Cài thêm các module thường dùng:

# Quản lý container Podman
sudo dnf install cockpit-podman -y

# Quản lý disk, LVM, RAID
sudo dnf install cockpit-storaged -y

# Quản lý KVM/libvirt VMs (nếu cần)
sudo dnf install cockpit-machines -y

Bước 2: Kích hoạt service

sudo systemctl enable --now cockpit.socket

Cockpit dùng socket activation — service chỉ thực sự khởi động khi có request đến port 9090. Lúc idle, nó gần như không tốn RAM. Kiểm tra trạng thái:

sudo systemctl status cockpit.socket

Bước 3: Mở firewall

Fedora Server mặc định dùng firewalld:

sudo firewall-cmd --add-service=cockpit --permanent
sudo firewall-cmd --reload

# Kiểm tra đã thêm chưa
sudo firewall-cmd --list-services

Bước 4: Truy cập và đăng nhập

Mở trình duyệt và vào địa chỉ:

https://[IP-server]:9090

Lần đầu sẽ có cảnh báo SSL do certificate tự ký — bỏ qua hoặc add exception. Đăng nhập bằng user hệ thống có quyền sudo. Sau khi vào, nhớ tick “Reuse my password for privileged tasks” để thao tác admin mà không cần nhập lại mật khẩu liên tục.

Bước 5 (tùy chọn): Thay SSL certificate bằng Let’s Encrypt

Nếu server có domain public, bỏ certificate tự ký cho sạch:

sudo dnf install certbot -y
sudo certbot certonly --standalone -d your-domain.com

# Copy certificate vào thư mục Cockpit đọc
sudo cp /etc/letsencrypt/live/your-domain.com/fullchain.pem \
    /etc/cockpit/ws-certs.d/1-custom.cert
sudo cp /etc/letsencrypt/live/your-domain.com/privkey.pem \
    /etc/cockpit/ws-certs.d/1-custom.key

sudo systemctl restart cockpit.socket

Tăng cường bảo mật Cockpit

Giới hạn IP được phép truy cập

Thay vì để Cockpit public hoàn toàn, dùng firewalld rich rules để chỉ cho phép IP cụ thể:

# Xóa rule public trước
sudo firewall-cmd --remove-service=cockpit --permanent

# Chỉ cho phép IP của bạn (thay bằng IP thật)
sudo firewall-cmd --add-rich-rule=\
'rule family="ipv4" source address="203.0.113.10/32" service name="cockpit" accept' \
--permanent

sudo firewall-cmd --reload

SSH tunnel — cách an toàn nhất khi không muốn mở port

Không muốn mở port 9090 ra internet? Dùng SSH tunnel — chạy lệnh này trên máy local:

ssh -L 9090:localhost:9090 [email protected] -N

Sau đó vào https://localhost:9090 trên máy local. Cockpit chạy qua SSH tunnel, không cần mở thêm firewall rule nào. Đây là cách mình hay dùng nhất vì không tốn công cấu hình SSL và an toàn tuyệt đối.

Workflow thực tế sau 6 tháng

Mình không dùng Cockpit để thay thế hoàn toàn SSH. Thực ra là kết hợp cả hai, tùy việc:

  • Monitoring hàng ngày: Mở Cockpit xem dashboard — CPU/RAM/disk ổn định không, có alert gì không. Mất 30 giây thay vì phải SSH rồi chạy nhiều lệnh
  • Debug service lỗi: Vào Services, click vào service, log hiện ngay bên dưới — nhanh hơn nhiều so với journalctl -u service-name -n 100
  • Quản lý storage: Xem usage từng partition trực quan, không cần nhớ lệnh lsblk hay df -h
  • Khi cần thao tác phức tạp: Bật terminal ngay trong Cockpit, không cần chuyển app hay mở thêm tab SSH

Phần tiết kiệm thời gian nhất? Log viewer. Thay vì gõ journalctl với đủ loại flag, mình filter trực tiếp trên UI: chọn service, chọn mức “Error and above”, chọn time range — xong trong 10 giây. Hữu ích nhất lúc investigate incident nửa đêm, khi não không còn nhớ nổi syntax.

Khi nào Cockpit không phải lựa chọn tốt

Bài toán hosting với nhiều virtual host? cPanel hay DirectAdmin hợp hơn. Orchestration trên chục server cùng lúc? Ansible hay AWX mới đúng hướng. Cockpit ngon nhất cho đúng một trường hợp: một server, cần web console tiện, không muốn cài thứ nặng nề.

Cái làm mình tin tưởng để chạy production là ba yếu tố gộp lại: cài sẵn trong Fedora, maintained bởi Red Hat, không phụ thuộc repo ngoài. Dependency stack gọn, có thể audit hoàn toàn — đủ để yên tâm để nó chạy dài hạn.

Share: