いよいよ 実践編・第2章に突入!
前回の「第1章」では、Uptime Kumaを選んだ経緯や、その特徴についてお話ししました。
……といっても、あくまで“初心者から見たKumaの特徴”なんですが(笑)
さて、いよいよ今回は、実際に Amazon Lightsail 上に Uptime Kuma を構築していきます!
とはいえ、当時の私は Docker も SSL も完全に初体験。
最初のコマンドを打つまでにめちゃくちゃ調べたり、Qiitaの記事を漁りまくったり、ChatGPTと大親友になったりと……まさに“生まれたての子鹿”状態でした😂
そんな初心者の私の構築体験を、順を追ってご紹介します。
コマンドにはコメントをつけて、「何をしているのか」 をちゃんと書いているので、焦らずゆっくり進んでいきましょう!
🐻第1章では「Uptime Kumaって何?」「なんで選んだの?」という背景をお話ししてます!
まだの方はぜひこちらもあわせてどうぞ👇
【入社2ヶ月・未経験から挑戦】Uptime Kumaで監視環境を構築してみた話「第1章」
今回の構成
使用環境
- 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版 最新
- リバースプロキシとして動作させ自己署名証明書を入れる
構築手順
ディレクトリ構成図
uptime-kuma-ssl/
├── docker-compose.yml # docker構成ファイル
├── nginx.conf # nginx設定ファイル
└── ssl/ # SSL証明書ディレクトリ
├── selfsigned.crt # 自己署名証明書
└── selfsigned.key # 秘密鍵
私の環境ではMacを使用しています。
・純正のターミナルを使用
・SSHの鍵は aws-lightsail-key.pem とし、ホームディレクトリ下のダウンロードフォルダに保存しています。
実際にコマンドを打つ場合はご自身の環境に置き換えて実施をお願いします。
1. Docker & Docker Compose のインストール、起動
- SSHでログイン
ssh -i ~/Downloads/aws-lightsail-key.pem ec2-user@パブリックIP
- システムのすべてのパッケージを最新版に更新
sudo dnf upgrade -y
- Dockerインストール
sudo dnf install -y docker
- Docker Compose v2.24.6を手動でインストール
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
- 実行権限の付与
sudo chmod +x /usr/local/bin/docker-compose
- Dockerバージョンの確認
- Docker version 24.0.2が入ってることを確認
docker --version
- Docker Compose のバージョン確認
- Docker Compose version v2.24.6を確認
docker-compose version
- Dockerの起動
sudo systemctl start docker
- Docker自動起動設定
sudo systemctl enable docker
2. ディレクトリの作成
- ここでは、ホームディレクトリ直下(/home/ec2-user/)にディレクトリを作成しています。
mkdir -p uptime-kuma-ssl/ssl
- ディレクトリの移動
cd uptime-kuma-ssl/ssl
3. SSL証明書と秘密鍵の生成
- コマンドが長いため\で区切ってます。
- 内容はご自身の環境用に変更
-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
各項目の意味
- /C= 国コード(例:JP)
- /ST= 都道府県名(例:Fukuoka)
- /L= 市区町村名(例:Iizuka)
- /O= 組織名(例:会社名)
- /CN= コモンネーム(例:公開するサーバーのIPアドレスやドメイン名)
4. nginx.conf の作成、編集
- ディレクトリの移動
cd uptime-kuma-ssl/
- nginx.confの作成
Firewallで制御していることと、動作確認を目的としているため、最低限のコンフィグ記載となっています。
vi nginx.conf
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/)で実行
vi docker-compose.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(バックグラウンドで実行)をつけ忘れない。
sudo docker-compose up -d
7. Uptime Kuma の初期設定
ブラウザで https:// パブリックIPへアクセス
初回アクセス時は、証明書エラーが出る場合があります。
自己署名証明書のため「続行」を選択して進めます.
<画面を確認しながら実施>
管理者アカウントを作成
8. 「監視設定の追加」
Webアプリ監視(HTTP/HTTPS)
- 今回の目的:Webページが表示可能か、ステータス200か確認
- わかりやすい名前:HTTPS-監視対象ドメイン名(自身がわかりやすい名前ならなんでも可)
- URL:監視したい対象のURL
- 監視間隔:60
→監視間隔は自身で変更可能 - HTTPS ウェブサイトの TLS/SSL エラーを無視する:デフォルト
🚨監視対象が自己証明 SSL証明書を使っている場合などは、エラー対策として「TLS/SSL エラーを無視する」にチェックを忘れずに!
死活監視(ping)
- 今回の目的:サーバー自体が起動しているか(疎通できるか)を確認
- わかりやすい名前:ping-監視対象ドメイン名(自身がわかりやすい名前ならなんでも可)
- ホスト名:監視対象ドメイン
- 監視間隔:60
→監視間隔は自身で変更可能
「監視タイプ」によって設定できる項目が異なります。
バージョン1.12.1の時点では、次の選択肢が用意されています。
・HTTP(S)監視
→WebサイトやWebアプリケーションが正常に動作しているかを監視します。
・TCP Port
→各種サービスのポート監視(例:SSH(22), HTTP(80), HTTPS(443)など)。サーバー側の個別プロセスが正常に稼働しているかを確認します。
・Ping監視
→ネットワーク機器やサーバーが稼働しているか(死活)を確認するために、Pingコマンドを使って定期的にパケットを送信し、応答の有無を確認します。
・HTTP(s) - キーワード
→WebサイトやWebアプリケーションのHTTP/HTTPS通信の中から、特定のキーワードが含まれているかどうかを確認します。
その他監視項目ありますが、抜粋し説明を記載しました👍
その他項目は下記をご覧下さい⬇️
9. 通知設定 今回はSlackで通知
-
通知タイプ:slack
-
わかりやすい名前:Slackで通知される名前
-
Webhook URL:SlackのIncoming Webhooksで発行したURLを貼り付け
※詳しくはこちら👈 -
ユーザー名:kuma-san
※今回はわかりやすく面白い名前にさせていただきました!
Webhook URL 発行手順(Slack側)🔧
- Slackにログイン
- Slack公式:Incoming Webhooks にアクセス
- ワークスペースに追加 または 設定を管理 を選択
- 通知先のチャンネルを指定
- Webhook URLが発行される
・通知設定補足
Slackで通知の際絵文字アイコンというものが設定可能。
設定したアイコンでSlackで通知してくれる小ネタあり自分は🐻にしてます笑
絵文字は1つまでしか表示されない、ただしスマホで通知を確認する時は絵文字が出ません!!
・つまずきポイント
今回Lightsailを使っていますが、初めはubuntuを使用予定でした。
ubuntu環境で構築時にメモリ使用率が100%近くにになり、コマンド叩いても重くて反応しない現象が起きた為、Amazon Linux 2023に変更したところ問題は起きず。
(海外のポストで同様の事象が報告されていました。swapかと思いましたが、いずれのOSともswapはありませんので関係ないようです)
やってみた感想
改めてブログとして書きながら振り返ると、作業自体はそこまで難しくなく、構築工数も意外と少ないな〜と感じました。
もちろん nginx.conf
や docker-compose.yml
の中身などはまだまだ勉強が必要ですが、「自分の手で動かす」ことで理解がかなり深まりました。
Slackの通知設定では、絵文字が使えるのが地味に楽しくて、ついつい遊んでしまいました😂
アラートなのに「😂」とか「❤️」みたいな平和そうな絵文字を設定して、逆に危機感がなくなるのもある意味シュールです(笑)
ちょっと長くなってしまいましたが、最後まで読んでいただきありがとうございました!
このあと、Uptime Kumaの通知テスト編や、他の監視ツールについてもブログにまとめていく予定なので、よければぜひチェックしてみてください!
Valeu! Valeu! 👋