この記事は

このサイトの作り方のメモである。
以下の点について触れている。

  • 要件定義
  • システム方式
  • インフラ設計

以降は、時間を見つけて

  • 既存クラスタのアップデート
  • ミドルウェアの設定
  • CI/CDの構築
  • テスト

なども書いてみたい。

要求整理

このサイトについてで触れている内容が要求である。

概要: このシステムは

もともと運用していたコミュニティ跡地で情報発信を行うブログシステムを構築。
情報発信と同時に、最低限関わりを持つためのポータルを用意する

このシステムの技術的特徴

予算はかけられないが、昨今のセキュリティ侵害のニュースから鑑みる最低限の対策。
保守にかけられる時間も限られている。記事をつくる時間も限られているので、以下の実現を必須とした。

  • ブログサービスは使わない (wordpress.comやnote,zennなど)
  • オンプレ型のブログは使わない (wordpress,mtなど)
  • 記事はすべてGITで管理する
  • 書式はMarkdownとする
  • vimで編集できるようにする
  • デプロイ環境はkubernetesで冗長構成とする
  • GitLabのCI/CDを使ってリリースをする
  • 脆弱性スキャンをリリース毎にかける

要件定義

機能要件

ブログ機能

  • 記事の内容が様々なので、まとめやすくするために、tagcategoryといった整理手法を持つこと。

コミュニティ機能

  • 気軽に話しかけられる環境を持つ
  • 個別チャットや全体チャットなどが作成できる
  • 活発でない時もそばに感じられる工夫をしたい

非機能要件

Static Site Generatorを利用する

MarkdownからSSGでブログサイトを生成する

システム運用コストを下げる

労務的にも原価的にも

システム方式

コミュニティ機能のシステム方式

現在アバップ社の運営しているAvapmostに新規チームを作成し、そこを”かむながら”とする

ブログシステム

実現したいリリースフロー

ポイント

  1. サイト生成をGitコミット時にすれば執筆環境を限定しない
  2. kubernetessにリリースすると保守が楽
  3. Gitlabパイプラインを作成するとリリースフローをすべて自動化できる
$2記事作成GIT PUSHHTML生成コンテナイメージ作成コンテナイメージセキュリティスキャンイメージSHA256取得kustomizeファイルを作成コンテナイメージ格納kubernetes 反映執筆者Gitlab パイプラインレジストリKubernetes

ミドルウェア

用途 ミドルウェア 詳細
スタティックファイルジェネレータ HEXO
WEBサーバ NGINX
ソース管理 GitLab
CI/CD fluxcd k8sの基礎的な反映
CI/CD Gitlab Runner デプロイ・リリースフロー
証明書発行 Let’s Encrypt K8S Cluster Issuer + OCI webhook利用

インフラ設計

基本構成

$2gitlabk8s: avap-public-prodKubernetes: NS: kamunagaraRegistryリポジトリネットワークLBK8S ApiServeragentk証明書変更で自動再起動証明書発行システムexternal-dns内部LBkamunagara wab setkamunagara wab01kamunagara wab02kamunagara wab03SSL証明書InternetネームサーバGitlab CI Runner依存登録認証利用

監視構成

$2AVAP監視システムKamunagaraBlackbox ExporterAlert ManagerPrometheusHTTPShttps://kamunagara.org障害時アラーム汎用へ通知疎通監視

リポジトリ構成

$2kamunagarak8s: K8Sエージェント管理用blog: BLOGシステムソースコード