雑なやつ

レベルを上げて技術で殴りたい

VPS を式年遷宮する その3 サーバの監視周り

概要

サーバ監視を目的として Mackerel を導入、SSH ログイン時 Slack へ通知するスクリプトを組み込んだ。
その際の作業内容を記述する。

環境

サーバ

ローカル

  • macOS 10.15.6 Catalina
  • iTerm2

1. Mackerelの導入

Mackerel とは

株式会社はてな が開発・運用しているサーバ監視サービス。
mackerel.io

数年程利用していますが、グラフやアラート時系列といった UI が見やすく、
各種設定も分かりやすいのでお勧めです。
Free プランと Standard プランが存在するが、個人用途なら Free プランで十分です。

サーバへのインストール

mackerel-agent のインストールは非常に簡単です。
Mackerel のダッシュボードにて、新規ホストを追加する際に提示されるワンライナーコマンドを実行するだけで完了します。

$ sudo wget -q -O - https://mackerel.io/file/script/setup-all-apt-v2.sh | MACKEREL_APIKEY='<API Key>' sh

私の環境ではパッケージが足りず失敗したので、必要パッケージを導入しました。

$ sudo apt install gnupg

監視ルールの設定

サーバに異常が出た際、通知するための監視ルールを設定します。
Free プランでは監視ルール数の上限が結構少ないので、 厳密な設定が必要な場合は有償プランを検討してください。

f:id:ram1009:20200807223238p:plain
mackerel-monitors

Slack 通知の設定

監視ルールに抵触した場合は通知を送信できます。
送信先には様々なサービスが選択でき、複数サービスへ同時送信も可能です。

f:id:ram1009:20200807232442p:plain
Mackerel の通知チャンネル一覧

Slack へ通知を行う際には下記の2つが必要です。

  • 通知するチャンネル名
  • Slack の Webhook URL

f:id:ram1009:20200807233423p:plain
Slack 通知の設定

実際に Slack へ通知が送られた例は以下の通り。

f:id:ram1009:20200807235651p:plain
Slack 通知の例

2. SSH ログイン時通知スクリプト導入

SSH ログイン時に実行するスクリプト/var/local/script/ に設置する。

$ sudo vim /var/local/script/sshlogin.sh

---
#!/bin/sh
#WebHookUrl
WEBHOOKURL="<WebHookUrl>"
#Slack送信チャンネル
CHANNEL=${CHANNEL:-"#server"}
#Slack送信名
BOTNAME=${BOTNAME:-"SSH_Login"}
#Slackアイコン
FACEICON=${FACEICON:-":ghost:"}
#Slackメッセージ
MESSAGE=${MESSAGE:-"$1が$2から$3にログインしました"}

curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOT    NAME}\", \"icon_emoji\": \"${FACEICON}\", \"text\": \"${MESSAGE}${WEBMESSAGE}\" }" ${WEBHOOKURL}     >/dev/null

/etc/ssh/sshrc に下記を記述する。

$ sudo vim /etc/ssh/sshrc
--- 
if [ $PS1 ]; then
  /var/local/script/sshlogin.sh "$USER" "$SSH_CLIENT" "$HOST_NAME"
fi

SSH でログインを行うと Slack へ下図のような通知が届きます。

f:id:ram1009:20200807235139p:plain
SSH ログイン時の Slack 通知例

参考文献

SSHログイン時にコマンド実行 | technote

SSHでログインしたらSlackに通知する方法 | Step On Board

VPS を式年遷宮する その2 VPS セットアップ

概要

VPS 契約後に行ったサーバセットアップの作業内容を記録する。

  • OS アップデート
  • 作業ユーザ追加
  • SSH の設定
  • FireWall 設定
  • 公開鍵接続

環境

サーバ

ローカル

  • macOS 10.15.6 Catalina
  • iTerm2

1. OS アップデートと作業ユーザ追加

VPS の契約と OS インストール完了後、
さくら VPS のコントロールパネルから Web コンソールでサーバに接続し、
OS のアップデートを行う。

$ sudo su -
# apt update
# apt upgrade -y

作業ユーザを追加する。

# adduser y4shiro
# gpasswd -a <Password> sudo

以降、 SSH で接続し作業を行う。

2. SSH の設定

先程設定した User / Password を用いてサーバへ接続。

$ ssh -l y4shiro <IPAdress>
// 上記コマンド実行後にパスワードを求められる

SSH 接続に成功後、sshd_config の設定を変更する。

$ sudo su -
# vim /etc/ssh/sshd_config
---
// デフォルトのポートではセキュリティリスクが高いので変更
- Port 22
+ Port <任意のポート番号>
---
// root でのログインを不許可
- PermitRootLogin prohibit-password
+ PermitRootLogin no
---
// 公開鍵認証を許可
- PubkeyAuthentication no
+ PubkeyAuthentication yes
---
// パスワード認証を不許可
- PasswordAuthentication yes
+ PasswordAuthentication no
---
// PAM を使用しないので無効化
- UsePAM yes
+ UsePAM no
---

編集後、sshd を再起動する。

# service ssh restart

3. FireWall 設定

今回は Ubuntuuwf を使用する。

# ufw default deny
# ufw allow <SSH Port>
# ufw allow 80
# ufw allow 443
# ufw enable

4. 公開鍵接続の設定

公開鍵を登録して SSH 接続できるようにする。
今回はローカル側から鍵をコピーした。

// サーバ側で /.ssh ディレクトリを作成し、パーミッションを変更
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
// ローカル側から公開鍵を送信
$ scp -P 12555 ~/.ssh/id_rsa.pub y4shiro@<IPAdress>:~/.ssh/authorized_keys
// 公開鍵のパーミッションを修正
$ chmod 600 .ssh/authorized_keys

実際に公開鍵で接続できる事を確認する

$ ssh -p 12555 -l y4shiro <IPAdress>

参考資料

さくらVPS1GプランにUbuntu16.04でサーバーを構築した備忘録 - spangled shalalala blog

超簡単Ubuntu 18.04(ConoHa VPS)必要最低限(セキュリティ)初期設定(ユーザー・SSH・ファイアーウォール)|10mohi6|note

VPS を式年遷宮する その1 移行先検討

目的

  • 現在運用している OS のサポート終了が近いので刷新したい
  • Ubuntu を利用して知見を深めたい
  • 現行サーバのストレージが HDD なので SSD のプランへ変更したい

VPS の移行先検討

希望条件

  • ストレージは SSD かつ 100GB 以上
  • メモリは 1GB
  • 東京リージョン

現行サーバのスペック

  • 以降の料金表示は税抜きです
さくらのVPS
プラン 1GB (v4)
CPU 仮想 2コア
メモリ 1GB
ストレージ HDD 100GB
リージョン 東京
料金 900円 / 月

候補

さくらのVPS ConoHa VPS
プラン 1GB (v5) 1GB
CPU 仮想 2コア 仮想 2コア
メモリ 1GB 1GB
ストレージ SSD 50GB
(初期費用 1,000円で 100GB)
SSD 100GB
リージョン 東京 東京
料金 900円 / 月
年間契約では9,900円(825円 / 月)
880円 / 月
備考 石狩サーバは 880円 / 月
年間契約では8,800円(733円 / 月)
イメージ保存や LB 利用可

結果

元々さくらの VPS を利用しているので ConoHa を試してみたかったのですが、
コスト的にさくらの方が若干安く、かつ数年運用して問題が起きなかったため、
引き続きさくらの VPS を利用する事にしました。

VuePress で静的ページを作成し、GitHub Pages に公開する

VuePress を試したかったので、ついでに CircleCI でビルド/デプロイを行うようにしました。

目的

  • VuePress 環境構築
  • GitHub Pages の公開
  • CircleCI でビルド/デプロイ

までを行う

環境

  • OS: macOS Sierra
  • Node.js: v10.13.0
  • npm: 6.4.1
  • yarn: 1.12.1

GitHub リポジトリと成果物

実際にデプロイした GitHub Pages のリンクです。
作業手順の詳細も下記を参照してください。
GitHub - y4shiro/vue-press

y4shiro.github.io

所感と今後の予定

VuePress の環境構築、GitHub Pages の公開、CircleCI 環境構築を1日かからずに終えたので、サクッと試せてお手軽でした。
むしろ、README.md を書くほうが圧倒的に面倒だったので、定期的に文章を書いて慣れていく必要性を痛感しました。

CircleCI から GitHub Pages へのデプロイはコミット履歴を汚してしまうデメリットがあるため、別ホスティングへのデプロイに適用したほうが無難です。
ポートフォリオページ作成が頓挫しているので、リニューアルついでに CircleCI を組み込む予定です。

LocalStackを試した

手元で AWS のサービスを動かしたかったので試しました。
やっていくぞ!

  • tl;dr
  • 参考URL
  • 環境
  • 対応している AWS サービス一覧とエンドポイント
  • 利用方法
    • 事前準備
      • aws profile の設定
    • pip でローカルにインストール
    • git clone後にDockerで起動
  • 使用例
    • Lambda 関数作成と実行
      • 適当なディレクトリで test.py 作成
      • zipに纏めて LocalStack に Lambda 関数作成
      • Lambda 関数実行
    • Lambda 関数の一覧取得
    • Lambda 関数更新と削除
      • 更新
      • 削除

tl;dr

LocalStack を使うと、AWS のサービスをローカルで使用出来る。
aws-cli でエンドポイントを指定するだけ。
簡単!

参考URL

GitHub - localstack/localstack: 💻 A fully functional local AWS cloud stack. Develop and test your cloud apps offline! qiita.com

環境

  • macOS Sierra
  • Python 3.6
  • Docker version 18.03.1-ce, build 9ee9f40
  • docker-compose version 1.21.2, build a133471
  • aws-cli/1.15.30
続きを読む

AWS SAM CLI を macOS (with fish shell) に導入する際のメモ

業務中に AWS SAM(Serverless Application Model) CLI が必要になったので導入したのですが、
シェル力が低くて手こずったのでメモに残します。
原因を先に書いておきますが、僕が fish shell 独自の記法に慣れていなかっただけです。

  • 環境
  • bashzsh の場合
  • fish の場合

環境

続きを読む