webshでやったことまとめ
webshというwebアプリを作成して運用している
だいたいどういうことやったのか忘れないようにまとめる
ソースコード
アプリケーションとデプロイパイプラインの実装
https://github.com/jiro4989/websh
インフラのコードは非公開
アプリの実装 (nim / docker)
フロントエンド (karax)
バックエンド (jester)
GitHubActionsでデプロイパイプライン作成
インフラ
セキュリティ対策
パスワード認証でサーバにsshできなくする
SSHポート番号の変更
iptables (ufw)でアクセスポート制限
ipsetで大量のIPをブロック
fail2banで不正アクセス監視+BAN+slack通知
AIDEでファイル改ざん検知
不要なサービスの停止
Infrastructure as Code
Ansibleでプロビジョニング
Serverspecでインフラのテスト
fabricでデプロイ
監視
prometheusとGrafana、lokiでサービス・リソース・ログ監視
ログ監視に合わせたログのJSON化
UptimeRobotでサービス生存監視
daemon管理
systemd
(途中から使うのやめたけれどsupervisor)
ログ
systemd-journaldでログ管理
systemd-journaldからpromtail、lokiに流してgrafanaから見る
logrotateでログローテーション
(途中から使うのやめたけれどfluentd)
他
さくらVPSでサーバのレンタル
ドメイン取得
DNS設定
Lets encryptで証明書の自動取得
アプリのフロントとしてNginxでプロキシ
障害対応
webshのシステム構成図を書いた
前はdraw.ioで書いていたけれど今はPlantUML
Docker APIの有効化
ストレージ制限をするためのパーティション作成
cronで定期実行ジョブ管理
感想
振り返ってみるとやはりインフラ側のほうが圧倒的にやることが多い
webshのアプリ側はめちゃくちゃ単純なのもある
画面は特に手抜き
サーバレスやマネージド、コンテナ技術の機運が高まっているのも納得
webshくらいのアプリならherokuとかでも運用できたのでは、とか思う
まあwebshの目的はインフラの勉強なのでheroku使っちゃ意味がない