前言

最近一年陆陆续续写了一些自己感兴趣的小项目,手头上的服务器慢慢多起来了,于是想找一个好用的工具统一地管理它们。

经过一番搜索发现了 Cockpit 这个工具能满足我的需求,项目主页:https://cockpit-project.org/

最终效果展示:https://cockpit.cjh.zone

这篇博客主要是想记录一下安装和配置过程,方便自己以后回看,主要参考资料就是项目的官方文档

下面贴一段 ChatGPT 对它的介绍:

Cockpit 是一个用于管理 Linux 服务器的简洁而强大的图形化工具。它允许系统管理员通过一个 Web 界面执行各种系统管理任务,而无需在命令行中输入复杂的命令。Cockpit 支持各种操作系统和 Linux 发行版,如 Fedora、RHEL、CentOS、Debian 和 Ubuntu。

Cockpit 的主要用途:

  • 系统监控:实时查看 CPU、内存、网络和存储使用情况。
  • 日志查看:访问系统日志以诊断和排除问题。
  • 服务管理:启动、停止和重启系统服务。
  • 网络配置:管理网络接口、查看网络连接和配置防火墙。
  • 存储管理:管理硬盘、分区和文件系统。
  • 用户管理:添加、删除和修改系统用户和组。
  • 软件更新:安装和更新系统软件包。
  • 容器管理:支持管理 Docker 和 Podman 容器。

下面记录了我在 Debian 12 上的安装和配置过程,其他系统应该也是大同小异。

安装与更新

参考文档:https://cockpit-project.org/running.html#debian

先启用 backports 软件源:

. /etc/os-release
echo "deb http://deb.debian.org/debian ${VERSION_CODENAME}-backports main" > \
    /etc/apt/sources.list.d/backports.list
apt update

安装 Cockpit(后续更新也是这条指令):

apt install -t ${VERSION_CODENAME}-backports cockpit

-t 选项是指定刚才添加的 backports 软件源。

启动并设置开机自启:

systemctl enable cockpit.socket
systemctl start cockpit.socket

经过上面的步骤,Cockpit 应该已经在 9090 端口启动了,可以通过浏览器访问 https://your-server-ip:9090(如果不能打开就检查一下防火墙配置)。需要注意的是,现在的 ssl 证书是 Cockpit 自签的,浏览器会提示不安全,可以选择继续访问。

另外,Cockpit 默认禁止了 root 用户登录,如果需要可以修改 /etc/cockpit/disallowed-users 中的配置,默认配置是:

# List of users which are not allowed to login to Cockpit
root  # 默认禁止了 root 用户登录

Web 服务配置

上面通过 9090 端口访问的是 Cockpit 的 Web 服务,我在我其中的一台机器上使用 nginx 做了反向代理。这么做的原因如下:

  • 避免直接暴露 Cockpit 的 Web 服务端口,增加安全性

  • 使用 nginx 可以更方便地配置 ssl 证书

需要特别说明的是,你不需要在每台机器上都配置 Web 服务,只需要挑一台你认为合适的机器配置即可。

  1. Cockpit 默认监听的是 0.0.0.0:9090,将其改为 127.0.0.1:9090

    参考文档:https://cockpit-project.org/guide/latest/listen

    在配置文件 /etc/systemd/system/cockpit.socket.d/listen.conf 中加入以下内容(可能需要创建一下目录和文件):

     [Socket]
     ListenStream=
     ListenStream=127.0.0.1:9090
     FreeBind=yes
    

    第一行 ListenStream= 是清空默认的监听地址,第二行 ListenStream=127.0.0.1:9090 是重新指定监听地址。

    重新加载配置文件并重启服务:

     systemctl daemon-reload
     systemctl restart cockpit.socket
    
  2. Cockpit 反向代理配置:

    默认情况下,由于跨域限制,Cockpit 不能被其他域名访问,因此需要在配置文件 /etc/cockpit/cockpit.conf 中加入以下内容(文件不存在就创建一下):

     [WebService]
     Origins = https://cockpit.domain.tld wss://cockpit.domain.tld
     ProtocolHeader = X-Forwarded-Proto
    

    注意将 cockpit.domain.tld 替换为你的域名。

    参考文档: https://cockpit-project.org/external/wiki/Proxying-Cockpit-over-NGINXhttps://cockpit-project.org/guide/latest/cockpit.conf.5.html

  3. nginx 反向代理配置:新建一个 nginx 配置文件 /etc/nginx/conf.d/cockpit.conf,内容如下:

     server {
         listen       80;
         server_name  cockpit.domain.tld;  # 将域名替换为你的域名
         return       301 https://cockpit.domain.tld$request_uri;  # 将域名替换为你的域名
     }
    
    
     server {
         listen 443 ssl http2;
         server_name cockpit.domain.tld;
    
         ssl_certificate      /etc/nginx/cert/cockpit.domain.tld/cert.pem;  # 将路径替换为你的证书路径
         ssl_certificate_key  /etc/nginx/cert/cockpit.domain.tld/key.pem;  # 将路径替换为你的证书路径
    
         access_log /var/log/nginx/cockpit_access.log;
         error_log /var/log/nginx/cockpit_error.log;
    
         location / {
             # Required to proxy the connection to Cockpit
             proxy_pass https://127.0.0.1:9090;
             proxy_set_header Host $host;
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
             # Required for web sockets to function
             proxy_http_version 1.1;
             proxy_buffering off;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
    
             # Pass ETag header from Cockpit to clients.
             # See: https://github.com/cockpit-project/cockpit/issues/5239
             gzip off;
         }
     }
    

    重启 nginx 服务:

     systemctl restart nginx
    

添加其他机器

其他机器也需要像前面的步骤安装 Cockpit,但是不需要再进行 Web 服务配置了

安装好 Cockpit 后,可以在 Web 界面的左侧导航栏中找到 Add Server,点击后输入其他机器的 IP 地址和用户名密码即可添加。

需要注意的是,如果你的机器的 ssh 端口不是默认的 22,可以在添加机器时在 IP 地址后加上端口号,例如 192.168.1.1:2222

Applications(应用)

我理解 Cockpit 的应用是一些插件,可以扩展 Cockpit 的功能。

可以在:https://cockpit-project.org/applications.html 查看所有的应用。

我只安装了一个应用:

Navigator:https://github.com/45Drives/cockpit-navigator

一个文件管理器,可以在 Cockpit 中管理机器上的文件。

wget https://github.com/45Drives/cockpit-navigator/releases/download/v0.5.10/cockpit-navigator_0.5.10-1focal_all.deb
apt install ./cockpit-navigator_0.5.10-1focal_all.deb