【入社2ヶ月・未経験から挑戦】Uptime Kumaで監視環境を構築してみた話「第2章」

### いよいよ 実践編・第2章に突入！
前回の「第1章」では、Uptime Kumaを選んだ経緯や、その特徴についてお話ししました。
……といっても、あくまで“初心者から見たKumaの特徴”なんですが（笑）

さて、いよいよ今回は、実際に Amazon Lightsail 上に Uptime Kuma を構築していきます！
とはいえ、当時の私は Docker も SSL も完全に初体験。
最初のコマンドを打つまでにめちゃくちゃ調べたり、Qiitaの記事を漁りまくったり、ChatGPTと大親友になったりと……まさに“生まれたての子鹿”状態でした😂


そんな初心者の私の構築体験を、順を追ってご紹介します。
コマンドにはコメントをつけて、「何をしているのか」 をちゃんと書いているので、焦らずゆっくり進んでいきましょう！ 

:::note
🐻第1章では「Uptime Kumaって何？」「なんで選んだの？」という背景をお話ししてます！
まだの方はぜひこちらもあわせてどうぞ👇
[【入社2ヶ月・未経験から挑戦】Uptime Kumaで監視環境を構築してみた話「第1章」](https://qiita.com/tacos_02/private/e03a3055c4266bef3da4)
:::

# 今回の構成
### 使用環境
- Amazon Lightsail
  - big-aの指定でして理由を尋ねたら「俺が使うっち言いよーろーが！」とのことでした💦（（安いからだと思いますが... そう、きっと僕のため）
  - OS：Amazon Linux 2023, 512MB RAM, 1vCPU ($5/月)
  ※東京リージョンの場合
  - Static IPを付与
- ファイアウォール設定
  - 利用が限定されるため、以下でポート制御しました
  - ポート22(SSH), ポート80(HTTP), ポート443(HTTPS)：MyIPからのみアクセス許可
- Uptime Kuma
  - バージョン：Docker版 最新
- nginx
  - バージョン：Docker版 最新
  - リバースプロキシとして動作させ自己署名証明書を入れる
 
## 構築手順
:::note info
ディレクトリ構成図
uptime-kuma-ssl/
├── docker-compose.yml&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# docker構成ファイル
├── nginx.conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         # nginx設定ファイル
└── ssl/        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;          # SSL証明書ディレクトリ
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;├── selfsigned.crt  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # 自己署名証明書
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└── selfsigned.key  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # 秘密鍵
:::


:::note
私の環境ではMacを使用しています。
・純正のターミナルを使用
・SSHの鍵は aws-lightsail-key.pem とし、ホームディレクトリ下のダウンロードフォルダに保存しています。
実際にコマンドを打つ場合はご自身の環境に置き換えて実施をお願いします。
:::


# 1. Docker & Docker Compose のインストール、起動
- SSHでログイン 
 
 ```bash
ssh -i ~/Downloads/aws-lightsail-key.pem ec2-user@パブリックIP
```

- システムのすべてのパッケージを最新版に更新 

```bash
sudo dnf upgrade -y 
```

- Dockerインストール
```bash 
 sudo dnf install -y docker
 ```

- Docker Compose v2.24.6を手動でインストール
```bash
 sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
```

- 実行権限の付与  
```bash 
sudo chmod +x /usr/local/bin/docker-compose
```

- Dockerバージョンの確認
- Docker version 24.0.2が入ってることを確認  
```bash 
docker --version
```
- Docker Compose のバージョン確認
- Docker Compose version v2.24.6を確認

 ```bash  
 docker-compose version
```
- Dockerの起動  

```bash 
sudo systemctl start docker
```
- Docker自動起動設定  
```bash 
sudo systemctl enable docker
```

# 2. ディレクトリの作成 

- ここでは、ホームディレクトリ直下（/home/ec2-user/)にディレクトリを作成しています。
```bash 
 mkdir -p uptime-kuma-ssl/ssl
```

- ディレクトリの移動 

```bash
cd uptime-kuma-ssl/ssl
```

# 3. SSL証明書と秘密鍵の生成
- コマンドが長いため\で区切ってます。
- 内容はご自身の環境用に変更

```bash
　-openssl req -x509 -nodes -days 3650 \
  -newkey rsa:2048 \
  -keyout selfsigned.key \
  -out selfsigned.crt \
  -subj "/C=JP/ST=Fukuoka/L=Iizuka/O=組織名/CN=パブリックIP
  ```
### 各項目の意味
:::note info
   - /C= 国コード（例：JP）
   - /ST= 都道府県名（例：Fukuoka）	 　
   - /L= 市区町村名（例：Iizuka）	 　
   - /O= 組織名（例：会社名） 
   - /CN= コモンネーム（例：公開するサーバーのIPアドレスやドメイン名）
   :::
   
# ４. nginx.conf の作成、編集 
- ディレクトリの移動  
```bash
cd uptime-kuma-ssl/
```
- nginx.confの作成
:::note
Firewallで制御していることと、動作確認を目的としているため、最低限のコンフィグ記載となっています。
:::


```bash
vi nginx.conf
```

```nginx
server {
    listen 443 ssl;
    server_name _;
    ssl_certificate /etc/nginx/ssl/selfsigned.crt;
    ssl_certificate_key /etc/nginx/ssl/selfsigned.key;

    location / {
        proxy_pass http://uptime-kuma:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
```

# 5. Docker Compose 構成ファイルの作成（Uptime Kuma + nginx）
- 同じディレクトリ（uptime-kuma-ssl/）で実行
```bash 
vi docker-compose.yml
```

```yml
version: "3"
services:
  uptime-kuma:
    image: louislam/uptime-kuma
    container_name: uptime-kuma
    restart: always
    volumes:
      - uptime-kuma-data:/app/data

  nginx:
    image: nginx:latest
    container_name: kuma-nginx
    restart: always
    ports:
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./ssl:/etc/nginx/ssl:ro

volumes:
  uptime-kuma-data:
```
# 6. Docker コンテナの起動
- 同じディレクトリ（uptime-kuma-ssl/）で実行　-d（バックグラウンドで実行）をつけ忘れない。

```bash
sudo docker-compose up -d
```

# 7. Uptime Kuma の初期設定

ブラウザで https:// パブリックIPへアクセス 

:::note info
初回アクセス時は、証明書エラーが出る場合があります。
自己署名証明書のため「続行」を選択して進めます.
:::

<画面を確認しながら実施> 
管理者アカウントを作成
- 言語選択：日本語
※40種以上の言語から選択可能
- ユーザー名：任意の名前でOK
- パスワード：ログイン時に使用
※パスワードはログイン後設定から変更も可能
![スクリーンショット 2025-06-16 13.47.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/93f57091-1e73-4184-9b43-e424ea27dd35.png)



# 8. 「監視設定の追加」
### Webアプリ監視（HTTP/HTTPS）

- 今回の目的：Webページが表示可能か、ステータス200か確認
- わかりやすい名前：HTTPS-監視対象ドメイン名（自身がわかりやすい名前ならなんでも可） 
- URL：監視したい対象のURL
- 監視間隔：60 　
→監視間隔は自身で変更可能 
- HTTPS ウェブサイトの TLS/SSL エラーを無視する：デフォルト　
:::note warn
🚨監視対象が自己証明 SSL証明書を使っている場合などは、エラー対策として「TLS/SSL エラーを無視する」にチェックを忘れずに！
:::

![https 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/ed49a618-eb67-4cf0-98d0-4c70b2fe7854.png)
![スクリーンショット 2025-06-16 13.44.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/53e1788d-8c5d-4ce6-84d2-f4cc1dd9e694.png)

実際の監視画面⬇️
![HTTPs 最新！.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/8772ebd3-749b-4dce-9a3f-adfe2c19311d.png)
![スクリーンショット 2025-06-16 13.42.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/85f61543-3efa-44a8-aca7-9a265b76f8ef.png)






### 死活監視（ping）

- 今回の目的：サーバー自体が起動しているか（疎通できるか）を確認 
- わかりやすい名前：ping-監視対象ドメイン名（自身がわかりやすい名前ならなんでも可）
- ホスト名：監視対象ドメイン
- 監視間隔：60 　
→監視間隔は自身で変更可能

![ping 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/09e45dfd-051f-4bfe-b629-c1117cca3ef5.png)

実際の監視画面⬇️
![Ping 最.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/1421a60a-9661-47f1-b7e5-23bccb86ada2.png)
![Ping 私信.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/97429881-dd4d-49f1-b8d4-7b5097d495b7.png)


**「監視タイプ」によって設定できる項目が異なります。**
バージョン1.12.1の時点では、次の選択肢が用意されています。

:::note
**・HTTP(S)監視**
→WebサイトやWebアプリケーションが正常に動作しているかを監視します。

**・TCP Port**
→各種サービスのポート監視（例：SSH(22), HTTP(80), HTTPS(443)など）。サーバー側の個別プロセスが正常に稼働しているかを確認します。

**・Ping監視**
→ネットワーク機器やサーバーが稼働しているか（死活）を確認するために、Pingコマンドを使って定期的にパケットを送信し、応答の有無を確認します。

**・HTTP(s) - キーワード**
→WebサイトやWebアプリケーションのHTTP/HTTPS通信の中から、特定のキーワードが含まれているかどうかを確認します。
:::

その他監視項目ありますが、抜粋し説明を記載しました👍
その他項目は下記をご覧下さい⬇️
![スクリーンショット 2025-06-16 13.58.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/31458ff5-dda4-4260-a959-7399bcd3c3cb.png)


# 9. 通知設定　今回はSlackで通知 
- 右上アカウントのプルダウンクリック→設定→通知→通知設定
![スクリーンショット 2025-06-11 16.39.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/cfcc6358-a3b9-4e45-b180-b4b82f0b3494.png)

- 通知タイプ：slack
- わかりやすい名前：Slackで通知される名前 
- Webhook URL：SlackのIncoming Webhooksで発行したURLを貼り付け
※[詳しくはこちら👈](https://api.slack.com/messaging/webhooks)
- ユーザー名：kuma-san
※今回はわかりやすく面白い名前にさせていただきました！
- チャンネル名：通知を送りたいチャンネルを選択
![スクリーンショット 2025-06-11 16.36.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/d31be191-c91e-4149-8edc-52390e02066e.png)

### Webhook URL 発行手順（Slack側）🔧 
1. Slackにログイン
2. Slack公式：[Incoming Webhooks](https://slack.com/marketplace/A0F7XDUAZ--incoming-webhook-) にアクセス
3. ワークスペースに追加 または 設定を管理 を選択
4. 通知先のチャンネルを指定
5. Webhook URLが発行される

### ・通知設定補足 
Slackで通知の際絵文字アイコンというものが設定可能。
設定したアイコンでSlackで通知してくれる小ネタあり自分は🐻にしてます笑 
絵文字は1つまでしか表示されない、ただしスマホで通知を確認する時は絵文字が出ません！！
![スクリーンショット 2025-06-11 16.41.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4110550/5ac34d53-6863-4bb7-b856-00e1adb75891.png)


### ・つまずきポイント 
今回Lightsailを使っていますが、初めはubuntuを使用予定でした。
ubuntu環境で構築時にメモリ使用率が100％近くにになり、コマンド叩いても重くて反応しない現象が起きた為、Amazon Linux 2023に変更したところ問題は起きず。
（海外のポストで同様の事象が報告されていました。swapかと思いましたが、いずれのOSともswapはありませんので関係ないようです）

## やってみた感想

改めてブログとして書きながら振り返ると、作業自体はそこまで難しくなく、構築工数も意外と少ないな〜と感じました。
もちろん `nginx.conf` や `docker-compose.yml` の中身などはまだまだ勉強が必要ですが、「自分の手で動かす」ことで理解がかなり深まりました。

Slackの通知設定では、絵文字が使えるのが地味に楽しくて、ついつい遊んでしまいました😂  
アラートなのに「😂」とか「❤️」みたいな平和そうな絵文字を設定して、逆に危機感がなくなるのもある意味シュールです（笑）

ちょっと長くなってしまいましたが、最後まで読んでいただきありがとうございました！

このあと、Uptime Kumaの通知テスト編や、他の監視ツールについてもブログにまとめていく予定なので、よければぜひチェックしてみてください！

**Valeu! Valeu! 👋**