LinuxサーバーをWeb画面で視覚的に管理するCockpit入門:リソース監視・ストレージ・コンテナ運用まで

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

ターミナルからのSSH操作が不便に感じられる瞬間とは?

ターミナルにSSHでログインすることは、システム管理者にとって呼吸のような自然な動作です。しかし、実際の現場では必ずしも理想的な環境ばかりではありません。例えば、業務時間外のオンコール対応中に、スマートフォンへ「CPU使用率100%」のアラートが届いた場面を想像してみてください。ノートPCを開き、VPNを繋ぎ、top、iostat、lsblk といったコマンドを1つずつ叩いたり、journalctl で膨大なログを漁ったりするのは、決して短時間で済む作業ではありません。

一方で、cPanelやPleskのような従来の管理ツールは過度に肥大化しています。これらは数百MBものメモリを消費し、OS標準の設定ファイルを独自形式で書き換えてしまうため、インフラ基盤サーバーには向きません。Cockpitはこの課題をまったく異なるアプローチで解決します。POSIX標準に準拠した軽量なWebインターフェースであり、実際にアクセスしたときにのみリソースを消費する設計になっています。

Cockpitは内部でどのように動作しているのか?

CockpitはRed Hatが主導するオープンソースプロジェクトです。RHEL、Fedora、AlmaLinux、Rocky Linuxなどには標準で同梱されており、UbuntuやDebian上でも非常にスムーズに動作します。その最大の特徴は、以下の3つの設計原則にあります。

  • アクセス時以外のフットプリントはゼロ(Zero Footprint): Cockpitはsystemdのソケットアクティベーション機能(cockpit.socket)を利用しています。スタンバイ状態ではポート9090をリッスンしているだけで、メモリ消費量はわずか数KBにとどまります。ブラウザからアクセスしてログインした瞬間に初めてバックエンドプロセスが起動し、30MB〜50MB程度のメモリを消費しますが、セッション終了後には自動で解放されます。
  • ターミナルとの完全な1対1同期: Cockpitは独自の管理レイヤーやデータベースを持ちません。Web画面上での操作はすべてD-Bus API、NetworkManager、LVM、systemdへ直接コマンドとして伝達されます。WebUI上でIPアドレスの変更やサービスの再起動を行っても、CLI側で即座にまったく同じ変更結果を確認できます。
  • OSネイティブのPAM認証を利用: 独自のユーザーデータベースを作成する必要はありません。サーバー上の既存のLinuxアカウントでそのままログインでき、実行可能な操作権限も既存のsudoers設定に完全に準拠します。

実践:Cockpitのインストールと基本操作

1. Cockpit本体と拡張モジュールのインストール

コアパッケージに加えて、ストレージ管理モジュール(cockpit-storaged)とコンテナ管理モジュール(cockpit-podman)をあわせて導入することをおすすめします。

RHEL、AlmaLinux、Rocky Linux、Fedoraの場合:

# Cockpitと必要なプラグインをインストール
sudo dnf install -y cockpit cockpit-storaged cockpit-podman

# ソケットを有効化し、OS起動時に自動起動するように設定
sudo systemctl enable --now cockpit.socket

# firewalldでポート9090を解放
sudo firewall-cmd --add-service=cockpit --permanent
sudo firewall-cmd --reload

UbuntuまたはDebianの場合:

sudo apt update
sudo apt install -y cockpit cockpit-storaged cockpit-podman

# ソケットを有効化
sudo systemctl enable --now cockpit.socket

# ファイアウォール(UFW)が有効な場合はポートを解放
sudo ufw allow 9090/tcp

インストール完了後、ブラウザを開いて https://<サーバーのIP>:9090 にアクセスします。デフォルトでは自己署名証明書(オレオレ証明書)が使用されているため、ブラウザにセキュリティ警告が表示されますが、警告を承認して進むことでログイン画面が表示されます。

2. 管理者権限(Administrative Access)への切り替え

ログイン直後のデフォルト状態では、sudo権限を持つアカウントであってもLimited Access(読み取り専用の制限モード)で動作します。設定の変更や操作を行うには、画面右上のTurn on administrative accessボタンをクリックし、アカウントのパスワードを再入力します。この仕組みにより、単にシステム状態を確認したいだけの誤操作を未然に防ぐことができます。

3. リソース監視とログ(Logs)の分析

Overview / Metricsメニューでは、CPU、メモリ、ディスクI/O、ネットワークの推移がリアルタイムなグラフで表示されます。CPU使用率が突発的に95%まで跳ね上がった場合でも、該当のグラフをクリックするだけで、CPUを過剰に消費しているプロセス一覧が即座に展開されます。

Logsタブには、systemd-journaldが収集した全ログが集約されています。エラーレベル(Error、Critical、Warning)による即時フィルタリングはもちろん、nginx.serviceやmariadb.serviceといった個別サービス単位での絞り込みも容易です。

実際のトラブル事例として、Node.jsのワーカープロセスが/var/log/app/ディレクトリの権限エラーでクラッシュを繰り返していたことがありました。フィルターなしでjournalctlを実行するとログが猛スピードで流れてしまい見落としがちですが、Cockpitなら該当サービスのみを絞り込むことで、鮮やかな赤い警告バーとともに原因となったパーミッションエラーの行を30秒足らずで特定できました。

4. LVMストレージ管理:コマンドの打ち間違いによるデータ消失を防止

fdisk、parted、lvextend などを用いた手動のパーティション操作には、/dev/sdb と打つべきところを /dev/sda と打ち間違えてOS全体を吹き飛ばしてしまうような重大な事故のリスクが常に付きまといます。

Storageタブを使用すれば、Cockpitがディスク構成全体を分かりやすく可視化してくれます。

  • S.M.A.R.T.情報を読み取り、不良セクタや高温などのハードウェア障害の兆候を早期に検知。
  • ボリュームグループ(Volume Group)の拡張やロジカルボリューム(Logical Volume)の容量追加(例:/dev/mapper/vg0-dataに50GB追加)を、視覚的なスライダーと容量プレビューを見ながら直感的に実行可能。
  • パーティションのext4/xfsフォーマットやマウントポイントの設定を自動化し、/etc/fstabへの標準エントリ追記も安全に処理。
  • IPアドレスと対象ディレクトリを指定するだけで、NFS共有ストレージのマウントも簡単に完了。

5. cockpit-podmanによるコンテナ管理

サーバー上でコンテナを稼働させている場合、cockpit-podmanモジュールはPortainer(常時100MB以上のメモリを消費し、Dockerデーモンの常駐が必要)の極めて軽量な代替手段となります。

  • Docker Hub、Quay.io、またはプライベートレジストリから直接イメージを検索・プル。
  • ポートマッピング、ボリュームマウント、環境変数などをWebフォーム経由で漏れなく指定してコンテナを作成。
  • コンテナログのリアルタイム追跡や、ブラウザの別タブを介したコンテナ内への直接ターミナル接続(コンソール操作)。
  • コンテナ用のsystemdユニットファイルを自動生成し、サーバー再起動時にもコンテナが自動復帰する仕組みを容易に構築。

6. セキュリティ設定:管理ポート9090をインターネットに直接公開しない

Web管理ポートをそのままインターネットに晒しておくことは、ポートスキャンやブルートフォース攻撃の格好の標的になります。以下の2つの防御策を講じることを推奨します。

デフォルトポートの変更: systemdの設定ファイルを作成し、ポート9090を任意のランダムなポート(例:44990)に変更します。

sudo mkdir -p /etc/systemd/system/cockpit.socket.d/
sudo bash -c 'cat <<EOF > /etc/systemd/system/cockpit.socket.d/listen.conf
[Socket]
ListenStream=
ListenStream=44990
EOF'

sudo systemctl daemon-reload
sudo systemctl restart cockpit.socket

Nginxリバースプロキシの背後に配置: Let’s EncryptによるSSL証明書を適用したNginxの背後にCockpitを配置し、社内ネットワークや固定IPのみをホワイトリストで許可します。また、WebSocket接続が切断されないよう、/etc/cockpit/cockpit.confにドメインを定義しておく必要があります。

sudo bash -c 'cat <<EOF > /etc/cockpit/cockpit.conf
[WebService]
Origins = https://cockpit.yourdomain.com
ProtocolHeader = X-Forwarded-Proto
EOF'

おわりに

Cockpitは、Linuxのコマンドライン操作を完全に置き換えるものではありません。しかし、サーバーのヘルスチェックを数秒で完了させ、ストレージ容量を安全に拡張し、障害対応を迅速化してくれる極めて優秀な「運用アシスタント」となります。まずは個人のVPSや検証環境にCockpitを導入し、日常のサーバー管理がいかに快適になるかをぜひ体感してみてください。

Share: