やじま公式ブログ

趣味のことを書く

iroha BoardサーバーをUbuntuでモノリシックに構築する①

iroha Boardのいい感じの動作環境を構築する

irohaboard.irohasoft.jp

iroha Board は日本で生まれたオープンソースのeラーニングシステム(LMS)です。  -公式サイトより引用-

この記事でわかること

 

24/3/20追記:

Ubuntuの初期設定で、netplanの記載を一部修正+固定IPアドレスの設定に関して追記

(v6無効化の記述に誤りがあった)。

どうやらHyper-VのDefaultSwitchが提供してくれるネットワーク空間は一筋縄ではいかないらしい。

 

目次

今回の構成

  • ハードウェア:Hyper-VRyzen 7 7730U、RAM1GB、HDD20GBとか)
  • OS:Ubuntu22.04LTS
  • モジュール:公式サイト指定のものを導入
  • モノリシック

シリーズを通してやりたいこと

  1. モノリシックアーキテクチャで構築&お試し
  2. マイクロサービスアーキテクチャで設計
  3. 実際にやってみる
  4. 負荷試験&パフォーマンスチューニング

今回はモノリシックアーキテクチャで作ってみて勝手を理解する。

モノリシックとマイクロサービスとは

モノリシックアーキテクチャ

1つの機器にあらゆるモジュールを積み込み、アプリケーション実行基盤を構築する設計思想。機材が1つで済む反面、故障=サービスダウンなので耐障害性に欠ける。ガンダムSEEDで例えるとデストロイ。

マイクロサービスアーキテクチャ

複数の機器に1つのモジュールを積み込み、機器同士を連携させることでアプリケーション実行基盤を構築する設計思想。複数の機材を準備する必要があるが、故障した機器だけを入れ替えればサービス復旧できるため耐障害性が高い。ガンダムSEEDで例えるとインパルスで、チェスト/レッグ/シルエットを交換することで故障後もすぐに再稼働可能。

実際に作ってみる

Hyper-VUbuntuインストールと初期設定

  1. ISOをDL

    Ubuntu 22.04 LTS 日本語 Remix リリース | Ubuntu Japanese Team\

  2. Hyper-Vマネージャの仮想マシン新規作成ウィザードでDLしたUbuntuのISOを指定して完了

  3. 仮想マシンを起動後、Ubuntuの指示に従ってインストールウィザードを完了させる
  4. インストールウィザード完了後、OSのアップグレードを実行
    • # sudo apt update
    • # sudo apt -y upgrade 
  5.  SSHをインストール
    • # apt -y install openssh-server
    • # vi /etc/ssh/sshd_config
  6. rootユーザーのログインを禁止するため、33行目を編集し、保存

  7. SSHを再起動
    • # systemctl restart ssh
  8.  netplanを使ってIPアドレスを固定する
    • //デフォルトの設定ファイルをリネームして無効化
    • # mv /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.org
    • # vi /etc/netplan/01-network-config.yaml
    •  
    • //事前にipアドレスNICアダプターの名前を確認
    • # ip a
    • 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host
             valid_lft forever preferred_lft forever
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether 00:15:5d:00:0b:09 brd ff:ff:ff:ff:ff:ff
          inet 172.18.85.107/20 metric 100 brd 172.18.95.255 scope global dynamic eth0
             valid_lft 86275sec preferred_lft 86275sec
          inet6 fe80::215:5dff:fe00:b09/64 scope link
             valid_lft forever preferred_lft forever
    •  
    • //netplanの設定ファイルを新規作成
    • network:
        ethernets:
          eth0:
            dhcp4: false
            addresses: [172.18.85.107/20] #DHCPから取得していたIPアドレスを割当
            routes:
              - to: default
                via: 172.18.80.1
    •           metric: 100
            nameservers:
              addresses: [172.18.80.1]
            dhcp6: false
        version: 2
    •  
    • //設定を反映する
    • # chmod 600 /etc/netplan/01-network-config.yaml
    • # netplan apply
      • ※ここで[WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.]とエラー文が表示される場合、下記コマンドを実行
        # apt install -y openvswitch-switch
    • //確認
    • # ip a
    • 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host
             valid_lft forever preferred_lft forever
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          link/ether 00:15:5d:00:0b:09 brd ff:ff:ff:ff:ff:ff
          inet 172.18.85.107/20 brd 172.18.95.255 scope global dynamic eth0
             valid_lft 85534sec preferred_lft 85534sec

なお、Hyper-VのデフォルトスイッチはDHCPやネットワークセグメントに特殊な仕様があるため、第二回では専用の固定IPアドレスを用意する(24/3/20追記)。

ApachePHPMariaDBをインストール

Apacheのインストールと初期設定
  1. Apacheのインストール
    • # apt -y install apache2
  2. Apacheの初期設定
    • # vi /etc/apache2/conf-enabled/security.conf
    • //25行目を変更し、応答ヘッダからApacheの情報量を減らす
    • ServerTokens Prod
    •  
    • # vi /etc/apache2/mods-enabled/dir.conf
    • //2行目を編集してディレクトリ名のみでアクセスできるファイル名を設定
    • DirectoryIndex index.html index.php
    •  
    • //ServerName登録用の設定ファイルを作成する(やらないとエラーログ吐かれまくる)
      # echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf
      # a2enconf fqdn

    • //mod_rewriteとmod_headersを有効化する
    • # a2enmod rewrite headers
    • Enabling module rewrite.
    • Enabling module headers.
    • To activate the new configuration, you need to run:
    •   systemctl restart apache2
    •  
    • # vi /etc/apache2/apache2.conf
    • //172行目のAllow overrideをAllowにする
    • <Directory /var/www/>
          Options Indexes FollowSymLinks
          AllowOverride All
          Require all granted
      </Directory>

    • //Apacheを再起動して設定変更を反映
    • # systemctl restart apache2

    • //有効化したmodが動いているか確認
    • # apache2ctl -M | grep 'rewrite'
    •  rewrite_module (shared)
    • # apache2ctl -M | grep 'headers'
    •  headers_module (shared)
  3. ブラウザからIPアドレスにアクセスし、Apacheの動作を確認

PHPモジュールのインストールと初期設定
  1. PHPとiroha Board動作に必要なPHPモジュールをインストール
  2. PHPモジュールの初期設定
    • # vi /etc/apache2/sites-available/000-default.conf
    • //23行目あたりにPHP-FPM動作設定を追記
    •         <FilesMatch \.php$>
    •                 SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/"
    •         </FilesMatch>

    • //PHP-FPM有効化
    • # a2enmod proxy_fcgi setenvif
    • Considering dependency proxy for proxy_fcgi:
    • Enabling module proxy.
    • Enabling module proxy_fcgi.
    • Module setenvif already enabled
    • To activate the new configuration, you need to run:
    •   systemctl restart apache2
    •  
    • # a2enconf php8.1-fpm
    • Enabling conf php8.1-fpm.
    • To activate the new configuration, you need to run:
    •   systemctl reload apache2

    • //諸々の設定を反映
    • # systemctl restart php8.1-fpm apache2
    •  
    • //モジュール確認用にphpinfoを作成する
    • # echo '<?php phpinfo(); ?>' > /var/www/html/info.php
  3. phpinfoのページを確認する
    http://{IPアドレス}/info.php
  4. [FPM/FastCGI], [mbstring], [pdo_mysql]の稼働を確認する

  5. phpinfoのページを削除する(セキュリティ対策)
    • # rm /var/www/html/info.php
MariaDBのインストールと初期設定
  1. MariaDBのインストール
  2. MariaDBの初期設定を行う
    • # mysql_secure_installation
      • //root ユーザーのパスワード入力
        Enter current password for root (enter for none):
      • OK, successfully used password, moving on...
      • //[Unix_Socket] 認証に切り替えるかどうか
        Switch to unix_socket authentication [Y/n] n
         ... skipping.

      • //MariaDB root パスワードを設定するかどうか。設定するとパスワードによるrootログインが可能になるので無効化する
        Change the root password? [Y/n] n
         ... skipping.

      • //匿名ユーザーを残すかどうか。不要なので削除。
        Remove anonymous users? [Y/n] y
         ... Success!

      •  //root のリモートログインを無効化
         Disallow root login remotely? [Y/n] y
         ... Success!

      •  //テスト用に自動作成されたデータベースを削除する
         Remove test database and access to it? [Y/n] y
         - Dropping test database...
         ... Success!
         - Removing privileges on test database...
         ... Success!

      •  //権限をリロード
         Reload privilege tables now? [Y/n] y
         ... Success!
  3. iroha Board用のデータベースとユーザーを追加(passwordは変える)
    • # mysql

    •  //iroha Board用データベースの作成と確認
    • MariaDB [(none)]> create database irohaboard;
    • MariaDB [(none)]> show databases;
    •  
    •  //iroha Board用ユーザーの作成とDBアクセス権限付与
      MariaDB [(none)]> grant all privileges on irohaboard.* to irohaboard@'localhost' identified by 'password';
    • MariaDB [(none)]> select user,host,password from mysql.user;
iroha Boardソースコードの展開と初期設定
  1. iroha Board公式サイトからソースコード一式のzipファイルをDL(バージョンアップに伴ってURLが変わるので注意)
  2. DLしたソースコードの展開
    • # unzip /var/www/html/irohaboard_v0.10.10.zip -d /var/www/html/

      //zipファイルは削除
    • # rm /var/www/html/irohaboard_v0.10.10.zip

      //ソースコードの所有権をApache実行ユーザーに変更
    • # chown -R www-data:www-data /var/www/html/
  3. データベース接続情報を設定
    • # vi /var/www/html/app/Config/database.php
    •  
    • <?php
    • class DATABASE_CONFIG
    • {
    •         // iroha Board で使用するデータベース
    •         public $default = [
    •                 'datasource' => 'Database/Mysql', // 変更しないでください
    •                 'persistent' => true,
    •                 'host' => 'localhost', // MySQLサーバのホスト名
    •                 'login' => 'irohaboard', // ユーザ名
    •                 'password' => 'password', // パスワード
    •                 'database' => 'irohaboard', // データベース名
    •                 'prefix' => 'ib_', // 変更しないでください
    •                 'encoding' => 'utf8'
    •         ];
    • }
  4. [http://{IPアドレス}/install]へ接続 > [管理者ログインID]と[パスワード]を入力 > [インストール]押下

  5. インストール完了後、[管理者ログイン画面へ]を押下
  6. 作成した管理者IDログイン

たぶん完成

ちょっと触ってみる

学習コンテンツの作成

受講者の画面

手軽にe-ラーニングサービスを作れるのは夢があると思った(こなみかん)

次からはストレージやDBを別サーバーで立てて徐々にマイクロサービス化していく予定。