bucket-sort logo bucket-sort

プログラミングとインフラエンジニアリングの覚え書き

  • Posts
  • About
  • Contact
  1. Home
  2. All Posts
  3. InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (3) パブリックサーバーを立ち上げる

InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (3) パブリックサーバーを立ち上げる

Mar 7, 2026 インフラ bucket-sort

前回の記事では WSL 上のローカル環境に InfluxDB + Grafana を立ち上げました。 今回はこれを VPS 上の AlmaLinux 9.5 に移して、HTTPS で外部公開するサーバー として仕上げます。

  1. InfluxDBとGrafanaの概要
  2. ローカルサーバーを立ち上げる(WSL上のUbuntuでDockerを使って動かす)
  3. パブリックサーバーを立ち上げる(VPS上のAlmaLinuxでDockerを使って動かす)(この記事)

全体構成

Windows Keys App
        ↓ HTTPS
keys-api.example.com (Apache 443)
        ↓ Reverse Proxy
127.0.0.1:8086 (InfluxDB Docker)
        ↓
127.0.0.1:3000 (Grafana Docker)
        ↑ Reverse Proxy
keys.example.com (Apache 443)

InfluxDB は 外部公開しない。Apache だけが公開窓口。

Step 1: DNS 設定

keys-api.example.com  CNAME  vps.example.com
keys.example.com      CNAME  vps.example.com

Step 2: Docker & Docker Compose インストール(AlmaLinux)

AlmaLinux は RHEL 系なので、Docker 公式の CentOS リポジトリを使います。

# dnf update -y
# dnf install -y dnf-plugins-core
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# systemctl enable --now docker

Step 3: docker-compose.yml(ローカルとの違い)

ローカルとの最大の違い:ポートを 127.0.0.1 にバインドする。 0.0.0.0 にバインドするとファイアウォールを素通りして外部に露出してしまうため。

# mkdir -p /opt/keys-server
# cd /opt/keys-server
services:
  influxdb:
    image: influxdb:2
    container_name: keys-influxdb
    ports:
      - "127.0.0.1:8086:8086"   # ← ローカルは 0.0.0.0 だったがここを制限
    volumes:
      - influxdb-data:/var/lib/influxdb2
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: keys-grafana
    ports:
      - "127.0.0.1:3000:3000"   # ← 同上
    environment:
      - GF_SERVER_ROOT_URL=https://keys.example.com
      - GF_SERVER_DOMAIN=keys.example.com
    volumes:
      - grafana-data:/var/lib/grafana
    restart: unless-stopped

volumes:
  influxdb-data:
  grafana-data:

起動前にユーザー・権限を整理しておきます。

# usermod -aG docker user
# chown -R user:user /opt/keys-server
# exit  # rootから抜けて再ログイン
$ cd /opt/keys-server
$ docker compose up -d
$ docker compose ps
NAME            IMAGE                    ...  PORTS
keys-grafana    grafana/grafana:latest   ...  127.0.0.1:3000->3000/tcp
keys-influxdb   influxdb:2               ...  127.0.0.1:8086->8086/tcp

Step 4: InfluxDB 初期セットアップ

InfluxDB は外部公開しないため、SSHトンネル経由でブラウザアクセスします。

# ローカルPCから
$ ssh -L 8086:localhost:8086 user@vps.example.com

ブラウザで http://localhost:8086 を開き、[Get Started] からセットアップ。 手順はローカルと同じです(Organization: keys / Bucket: keys)。 Operator API Token は必ず控えておく(後から確認不可)。

Step 5: Apache リバースプロキシ設定

VirtualHost を /etc/httpd/sites-available/ に作成します。

InfluxDB 書き込み API 用 (keys-api.example.com)

ポイントは /api/v2/write だけ をプロキシして、POST 以外は拒否すること。

<VirtualHost *:80>
    ServerName keys-api.example.com
    Redirect permanent / https://keys-api.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName keys-api.example.com

    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "https"

    ProxyPass        /api/v2/write http://127.0.0.1:8086/api/v2/write
    ProxyPassReverse /api/v2/write http://127.0.0.1:8086/api/v2/write

    <Location "/api/v2/write">
        <LimitExcept POST>
            Require all denied
        </LimitExcept>
    </Location>

    # SSL は certbot が後から追記
</VirtualHost>

Grafana 用 (keys.example.com)

Grafana はすべてのパスをプロキシするだけです。

<VirtualHost *:80>
    ServerName keys.example.com
    Redirect permanent / https://keys.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName keys.example.com

    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "https"

    ProxyPass        / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/

    # SSL は certbot が後から追記
</VirtualHost>

シンリンクを張って有効化します。

# ln -s /etc/httpd/sites-available/keys-api.example.com.conf /etc/httpd/sites-enabled/
# ln -s /etc/httpd/sites-available/keys.example.com.conf /etc/httpd/sites-enabled/
# httpd -t && systemctl reload httpd

Step 6: Let’s Encrypt 証明書取得

# certbot

対話形式でドメインを選択すると、certbot が VirtualHost に SSL 設定を自動追記してくれます。

Step 7: 動作確認

# GET は 403 になることを確認(POST 以外拒否の設定が効いている)
$ curl -I https://keys-api.example.com
HTTP/1.1 403 Forbidden

# POST で書き込めることを確認
$ curl -X POST "https://keys-api.example.com/api/v2/write?org=keys&bucket=keys&precision=ns" \
  -H "Authorization: Token <TOKEN>" \
  -H "Content-Type: text/plain" \
  --data-binary "keystrokes,host=test daily_count=1 $(date +%s%N)"
# 204 No Content が返れば成功

Grafana のセットアップ

https://keys.example.com にアクセスしてログイン(初期認証情報は admin/admin)。

データソースの URL は Docker サービス名で指定します(Grafana コンテナの中から見るため)。

項目 値
URL http://keys-influxdb:8086
Query language Flux
Organization keys
Token (控えておいた API Token)
Default Bucket keys

ダッシュボードの Flux クエリはローカルで作成したものと同一です(前回の記事参照)。

Windows アプリ側の設定

書き込み先を本番エンドポイントに変えます。

[InfluxDB]
Endpoint=https://keys-api.example.com
Organization=keys
Bucket=keys
Token=<TOKEN>

まとめ

VPS (AlmaLinux 9.5)
├── Apache (:443)
│   ├── keys-api.example.com  → 127.0.0.1:8086 (POST /api/v2/write のみ)
│   └── keys.example.com      → 127.0.0.1:3000 (Grafana)
└── Docker
    ├── keys-influxdb  (InfluxDB 2.x)  127.0.0.1:8086
    └── keys-grafana   (Grafana)        127.0.0.1:3000

ローカルとの主な違いは以下の 3 点です。

項目 ローカル (WSL) 本番 (VPS)
ポートバインド 0.0.0.0 127.0.0.1 のみ
アクセス localhost 直アクセス Apache リバースプロキシ経由
TLS なし Let’s Encrypt (certbot)

セキュリティの最低ライン:

  • InfluxDB は localhost バインドで直アクセス不可
  • Apache で /api/v2/write への POST 以外を拒否
  • Grafana の admin パスワードは初回ログイン時に変更
InfluxDB Grafana Docker AlmaLinux Apache Let's Encrypt モニタリング
← InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (2) ローカルサーバーを立ち上げる 認証(Authentication)と認可(Authorization)の違い →

Related Posts

  • InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (2) ローカルサーバーを立ち上げる Mar 6, 2026
  • InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (1) InfluxDBとGrafanaの概要 Mar 5, 2026
  • Dockerを使ってDynamoDB LocalをWSL上のUbuntuで動かす Feb 28, 2026
  • 公開サーバーハングアップ時の記録 ④対策 Feb 17, 2026

Table of Contents

  • 全体構成
  • Step 1: DNS 設定
  • Step 2: Docker & Docker Compose インストール(AlmaLinux)
  • Step 3: docker-compose.yml(ローカルとの違い)
  • Step 4: InfluxDB 初期セットアップ
  • Step 5: Apache リバースプロキシ設定
    • InfluxDB 書き込み API 用 (keys-api.example.com)
    • Grafana 用 (keys.example.com)
  • Step 6: Let’s Encrypt 証明書取得
  • Step 7: 動作確認
  • Grafana のセットアップ
  • Windows アプリ側の設定
  • まとめ

Recent Posts

  • Laravel の Event / Listener で Pub/Sub を実装する Apr 2, 2026
  • [C#] delegate と event の仕組みを整理する Apr 1, 2026
  • Pub/Sub パターンとは何か Mar 31, 2026
  • PHP/Laravel で値の状態を判定するヘルパ関数まとめ Mar 30, 2026
  • Filament の dehydrated メソッドとは何か Mar 29, 2026

Categories

  • AWS27
  • C#22
  • .NET20
  • Laravel16
  • Linux12
  • Apache8
  • MySQL8
  • PHP8
  • DynamoDB6
  • Nginx5
  • WordPress4
  • インフラ4
  • Hugo3
  • セキュリティ3
  • .NET Framework1
  • Aurora1
  • Filament1
  • Git1
  • SQS1

Tags

  • AWS
  • C#
  • .NET
  • Laravel
  • PHP
  • MySQL
  • セキュリティ
  • Linux
  • Apache
  • Code Snippet
  • DynamoDB
  • NoSQL
  • PHP-FPM
  • RDS
  • DoS
  • Nginx
  • Windows
  • WordPress
  • パフォーマンス
  • 監視
  • Amazon Linux 2023
  • CMS
  • Docker
  • Ipset
  • Iptables
  • OPCache
  • Webサーバー
  • 認可
  • Aurora
  • Blade
Powered by Hugo & Explore Theme.