Skip to content
wate edited this page Aug 10, 2021 · 8 revisions

姫路IT系勉強会 インフラ環境更改

既存環境

  • 全体構成

    • リポジトリはhistudy/infra
    • サーバ基盤としてさくらのクラウドを利用
      • ただしRedmineはwateさんの個人サーバを利用中
    • TerraFormによるリソース管理
      • TerraForm Cloudからプロビジョニングを実施
      • usacloudプラグインを利用してさくらのクラウドを利用
    • 管理対象
      • 公開用Webサーバ
        • 勉強会サイト(主に開催ログ掲載)
        • ベースはさくらのクラウドのアーカイブにあるDebian GNU/Linux 10
        • CPU 1コア/Mem 1GB/Disk 20GB
      • DNSレコード(histudy.jp)
        • Webサーバ用 Aレコード
        • メールサーバ用 NS/MXレコード(さくらのメールサーバに向けてる)
  • Webサーバ(基盤部分)

    • リポジトリはhistudy/server
    • ホスト名:histudy.jp
    • Ansibleによる基盤管理
      • ホスト名の設定
      • 必要パッケージのインストール
        • ufw
        • sudo
        • etckeeper
        • fail2ban
      • 攻撃対応
        • sshのポート開放
          • ufwでsshをallow
        • 管理ユーザのsudo管理
      • パッケージを最新版優先とする
        • backportsリポジトリの追加
        • デフォルトリリースをbackportsに設定
      • リソース監視対応
        • mackerelのインストール
          • リポジトリのAPTキー(GPG)を登録(Ansible apt_keyモジュール)
          • リポジトリの登録(Ansible apt_repository)
          • パッケージのインストール
            • mackerel-agent
            • mackerel-agent-plugins
            • mackerel-check-plugins
            • mkr
          • 監視サービスのAPI設定
            • mackerel-agentのコンフィグを書き換え(Ansible lineinfileモジュール)
      • Webサーバの準備
        • nignxインストール(Ansible apt)
        • SSL向けDiffie-Hellmanキーの生成(Ansible openssl_dhparam)
        • nginx.confの生成(Ansible Templateモジュール)
        • バーチャルホストの設定(Ansible Templateモジュール)
        • バーチャルホストの有効化/無効化(Ansible Fileモジュール)
          • /etc/nginx/sites-enableのファイル生成/削除
        • ufwのポート開放
          • http/https(WWW Full)のallowルール追加
      • SSLの対応
        • 前提パッケージのインストール
          • dehydrated
          • lexicon
        • dehydrated設定ファイルの生成(Ansible Templateモジュール)
          • 全体設定(/etc/dehydrated/conf.d/local.sh)
          • 対象ドメイン設定(/etc/dehydrated/domains.txt)
          • フックスクリプト(/etc/dehydrated/hook.sh)
        • Let's Encryptアカウント登録(Ansible command:dehydrated --register)
      • サービス類の起動、自動起動設定(Ansible Systemd:enabled/started)
        • nginx
        • mackerel-agent
        • fail2ban
      • 管理ユーザ/グループの管理(group_vars/all.yml)
        • 管理ユーザグループの作成
        • 管理アカウントの作成、追加
        • 各アカウントの公開鍵登録
        • 各アカウントの管理者グループへの登録
      • Webサーバのドキュメントルートのアクセス権の設定
      • Vimのインストール
  • Webサーバ(公開コンテンツ)

    • リポジトリはhistudy/site
    • コンテンツはHexo(静的サイトジェネレータ)で生成
      • ローカルで生成テスト等実施の場合はnodejsのインストールが必要
    • デプロイはCicleCIを使って実施
      • siteリポジトリのmasterにpushがあるとCIが回る
      • rsyncでサーバのドキュメントルートに配置
    • 各コンテンツはsource配下にmarkdownで作成

新規環境

  • 全体構成

    • リポジトリはhistudy/infraを利用
    • サーバ基盤としてさくらのクラウドを利用
    • TerraFormによるリソース管理
      • TerraForm Cloudからプロビジョニングを実施
      • usacloudプラグインを利用してさくらのクラウドを利用
    • 管理対象
      • 公開用Webサーバ
      • Redmineサーバ
      • DNSレコード
  • 公開用Webサーバ

    • 基本は現状構成を利用
    • 既知の問題
      • dehydratedでLet's EncryptのSSL発行がうまく行かない
        • おそらくlexiconのドメイン登録時にFQDN指定が誤っている
  • 公開用Webサーバ(コンテンツ部)

    • 基本は現状構成を利用
    • 既知の問題
      • npmパッケージ群のアップデートが対処できていない
        • GithubのBotからプルリクが出てる
      • コンテンツが2019くらいで止まってる
        • HackMD自体は更新できているのでmarkdown落として来て記事化する流れのFixが必要
  • Redmineサーバ


更改作業

  • 新規環境のTerraForm構成作成(histudy/infraの新規ブランチで対応?)

    • Redmineサーバの構成をTerrafromに追加
      • HWの登録データ
      • DNSのレコード追加(Aレコード)
      • 要対応項目
        • 既存サーバのDBデータ抽出、導入の手順、タイミングの調整
        • 必要リソース量の確認(CPU/Mem/Disk)
    • Redmineサーバの基盤部分構成
      • histudy/infraにRedmineサーバ用の項目を追加
        • Webとの分離をどうするか、web,redmineを別YAMLに分けるか決める
  • 既存Webサーバの問題対応

    • 基盤部分
    • コンテンツ部分
      • npmパッケージ群のアップデート
      • HackMDコンテンツの取得、格納、生成確認

更改後の新機能追加

  • ログ管理
    • Grafana Lokiなどでログデータの収集、アラート
  • 機密情報管理