【自宅サーバー】Docker Composeで監視・管理ツールを一括構築する方法

はじめに

自宅サーバーやVMにDocker Composeを使って、監視・管理ツール一式を構築する方法を紹介します。この構成で以下のことが実現できます:

  • サーバーリソースの可視化(CPU、メモリ、ディスク)
  • コンテナの管理(起動・停止・ログ確認)
  • サービスの死活監視(ダウン時にアラート)
  • プライベートクラウドストレージ(自前Dropbox)

構築するサービス一覧

サービス用途ポート
Grafanaダッシュボード・可視化3000
Prometheusメトリクス収集・保存9090
Node Exporterサーバーメトリクス取得9100
cAdvisorコンテナメトリクス取得8084
PortainerDocker管理WebUI9000
Uptime Kumaサービス死活監視3001
Nextcloudファイル共有8085

前提条件

  • Ubuntu 22.04 LTS(または同等のLinux)
  • Docker / Docker Compose インストール済み
  • 最低4GB RAM(推奨8GB以上)

ディレクトリ構成

~/monitoring/
├── docker-compose.yml
└── prometheus.yml

1. docker-compose.yml の作成

version: '3.8'

services:
  # メトリクス収集
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--storage.tsdb.retention.time=30d'
    restart: unless-stopped

  # サーバーメトリクス
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    ports:
      - "9100:9100"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--path.rootfs=/rootfs'
    restart: unless-stopped

  # コンテナメトリクス
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
      - "8084:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    restart: unless-stopped

  # ダッシュボード
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=your_secure_password_here
      - GF_USERS_ALLOW_SIGN_UP=false
    volumes:
      - grafana_data:/var/lib/grafana
    depends_on:
      - prometheus
    restart: unless-stopped

  # Docker管理UI
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    ports:
      - "9000:9000"
      - "8000:8000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    restart: unless-stopped

  # 死活監視
  uptime-kuma:
    image: louislam/uptime-kuma:latest
    container_name: uptime-kuma
    ports:
      - "3001:3001"
    volumes:
      - uptime_kuma_data:/app/data
    restart: unless-stopped

  # ファイル共有 - データベース
  nextcloud-db:
    image: mariadb:10.11
    container_name: nextcloud-db
    environment:
      - MYSQL_ROOT_PASSWORD=your_mysql_root_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=your_mysql_password
    volumes:
      - nextcloud_db_data:/var/lib/mysql
    restart: unless-stopped

  # ファイル共有 - キャッシュ
  nextcloud-redis:
    image: redis:alpine
    container_name: nextcloud-redis
    restart: unless-stopped

  # ファイル共有 - メイン
  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    ports:
      - "8085:80"
    environment:
      - MYSQL_HOST=nextcloud-db
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=your_mysql_password
      - REDIS_HOST=nextcloud-redis
    volumes:
      - nextcloud_data:/var/www/html
    depends_on:
      - nextcloud-db
      - nextcloud-redis
    restart: unless-stopped

volumes:
  prometheus_data:
  grafana_data:
  portainer_data:
  uptime_kuma_data:
  nextcloud_db_data:
  nextcloud_data:

2. prometheus.yml の作成

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']

  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']

3. 起動

cd ~/monitoring
docker compose up -d

全コンテナの起動を確認:

docker compose ps

4. 各サービスの初期設定

Portainer(Docker管理)

  1. http://your-server-ip:9000 にアクセス
  2. 管理者アカウントを作成
  3. 「Get Started」→「local」を選択

Grafana(ダッシュボード)

  1. http://your-server-ip:3000 にアクセス
  2. 設定したユーザー名/パスワードでログイン
  3. データソース追加:
  • Connections → Data sources → Add data source
  • Prometheus を選択
  • URL: http://prometheus:9090
  • Save & test
  1. ダッシュボードインポート:
  • Dashboards → Import
  • ID: 1860(Node Exporter Full)を入力
  • Load → データソースでPrometheusを選択 → Import

Uptime Kuma(死活監視)

  1. http://your-server-ip:3001 にアクセス
  2. 管理者アカウントを作成
  3. 「Add New Monitor」で監視対象を追加:
  • Monitor Type: HTTP(s)
  • URL: 監視したいサービスのURL
  • Heartbeat Interval: 60秒

Nextcloud(ファイル共有)

  1. http://your-server-ip:8085 にアクセス
  2. 管理者アカウントを作成
  3. 初期設定完了を待つ(数分かかる場合あり)

5. 推奨する監視設定(Uptime Kuma)

監視名タイプURL
GrafanaHTTP(s)http://localhost:3000
PrometheusHTTP(s)http://localhost:9090
PortainerHTTP(s)http://localhost:9000
NextcloudHTTP(s)http://localhost:8085

6. おすすめGrafanaダッシュボード

ID名前用途
1860Node Exporter Fullサーバーリソース詳細
893Docker Containerコンテナ監視
11074Node Exporter for Prometheusシンプル版

よくあるトラブルと対処法

コンテナが起動しない

# ログを確認
docker logs コンテナ名

# 再起動
docker compose restart サービス名

Prometheusでターゲットがdown

  1. http://your-server-ip:9090/targets を確認
  2. エラーメッセージを確認
  3. 対象コンテナが起動しているか確認

メモリ不足

# メモリ使用量確認
free -h

# コンテナごとの使用量
docker stats --no-stream

メモリが不足している場合:

  • 不要なコンテナを停止
  • スワップ領域を追加
  • サーバーのメモリを増設

リソース目安

構成推奨メモリ
Prometheus + Grafana + Node Exporter2GB
上記 + Portainer + Uptime Kuma3GB
全部入り(Nextcloud含む)4GB+

セキュリティ上の注意

  1. パスワードは必ず変更
  • your_secure_password_here は強力なパスワードに変更
  • 各サービスのデフォルトパスワードは必ず変更
  1. 外部公開時はリバースプロキシ + SSL
  • Nginx等でSSL終端
  • 基本認証の追加を検討
  1. ファイアウォール設定
  • 不要なポートは閉じる
  • 必要なポートのみ開放

まとめ

Docker Composeを使えば、監視・管理ツール一式を簡単に構築できます。

構築したもの:

  • Grafana + Prometheus: メトリクス可視化
  • Portainer: Docker管理UI
  • Uptime Kuma: サービス監視
  • Nextcloud: プライベートクラウド

一度設定してしまえば、サーバーの状態を常に把握でき、問題の早期発見につながります。


参考リンク:

コメント (0)

まだコメントはありません。最初のコメントを投稿してください!

コメントを投稿