やじま公式ブログ

趣味のことを書く

iroha Boardマイクロサービス構築② ソースコードをファイル共有サーバーに設置する

iroha Boardのいい感じの動作環境を構築する第二編。

今回からじわじわとマイクロサービスアーキテクチャ化していく。

 

この記事でわかること

  • WindowsServerのファイル共有サーバー構築(超簡易的)
  • Apacheでファイルサーバー上のWebソースを読み込む方法
  • mountコマンドとfstabでファイル共有サーバーをマウントする方法

 

前回の記事

yajimanji.hatenablog.com

 

目次

 

環境

iroha Boardサーバー:Ubuntu22.04

ファイル共有サーバー:WindowsServer2022EV

今回のゴール

iroha Boardのソースコードをファイル共有サーバーに格納後、UbuntuからマウントしてWebルートディレクトリとする。

サーバー間のインターナル通信専用ネットワークを構築

長くなるので作業内容の詳細は別途記事にしようと思う。

  1. Hyper-Vマネージャーの仮想スイッチマネージャーからインターナル用スイッチを追加
  2. NICを各仮想サーバーに増設
  3. 各サーバーに接続し、アタッチしたNICに固定IPを割り当てる
  4. サーバー管理表のようなものを作成し、割り当てたIPアドレスを整理する

チーミングするべきなのは169.254.xxx.xxx/16のほうなんだけど、めんどくさくなっちゃった・・・)

 

ファイル共有サーバーを構築

SMBプロトコルで通信を行うファイル共有サーバーを構築する。

今回はWindowsServer2022EVをファイル共有サーバーとして使ってみるが、UbuntuNASでも可能。

WindowsServerの準備
  1. MicroSoft公式サイトから評価版WindowsServer2022のisoファイルをダウンロード

    Windows Server 2022 | Microsoft Evaluation Center

  2. Hyper-V仮想マシンでハードウェアの設定をする
    メモリ2048MB、動的メモリを無効化、HDD100GB
  3. ネットワークアダプターを3本作成し、1,2をDefaultSwitch、3を管理用NWに接続
  4. クリーンインストール実行
  5. 初期設定をする

    Windowsサーバー2019,2022起動直後にやること - やじま公式ブログ

  6. [サーバーマネージャー] > [役割と機能の追加] > [サーバーの役割]画面が表示されるまで[次へ]を押下

  7. [サーバーの役割]画面にて[ファイルサーバ]にチェックを入れる

  8. 確認画面まで進め、[インストール]。再起動の指示があれば再起動する。

  9. タスクバーの検索窓に[comp]と入力し、[コンピューターの管理]を開く
  10. 左ペイン[記憶域] > [ディスクの管理]
  11. (C:)を右クリック > [ボリュームの縮小]

  12. (確保したい容量)×1024の値を[縮小する領域のサイズ]に指定する。
    図では20GB確保するため20480と入力。

  13. [縮小]を押下し、[未割り当て]が生成されることを確認

  14. [未割り当て]を右クリック > [新しいシンプルボリューム]
  15. 新しいシンプルボリュームウィザードが表示されたらすべての画面で[次へ]を押下し、[完了]
  16. ボリューム(D:)が生成されたことを確認
ソースコード設置用の共有フォルダ作成
  1. iroha Boradのソースコード設置用のフォルダ作成
    Dドラ直下に新規フォルダ[irohasrc]作成

  2. タスクバーの検索窓に[comp]と入力し、[コンピューターの管理]を開く
  3. 左ペイン[共有フォルダー] > [共有] >中央ペインで右クリックし、[新しい共有] > [次へ]

  4. フォルダーパスに1で作成したフォルダを指定
  5. 次の画面はデフォルトのまま[次へ]

  6. [アクセス許可をカスタマイズする]にチェックを入れ、[完了]

認証用ユーザーを作成し、フォルダへのアクセス権を付与
  1. [コンピューターの管理] > 左ペイン[グループ] > 中央ペインで右クリック > [新しいグループ]

  2. グループ名に任意の名前を指定し、他はデフォルトのまま[作成] > [閉じる]

  3. [コンピューターの管理] > 左ペイン[ユーザー] > 中央ペインで右クリック > [新しいユーザー]

  4. [新しいユーザー]ウィンドウにてユーザー情報を入力後、[パスワードを無期限にする]にチェックを入れて[作成]

  5. 作成したユーザーを右クリックし、[プロパティ] > [所属するグループ]タブ
  6. [Users]にカーソルを合わせて[削除]

  7. [追加] > [選択するオブジェクト名を入力してください]に2で作成したグループ名を入力(iroha-admins) > [名前の確認] > [OK]

  8. 再度[OK]を押下し、プロパティを閉じる
  9. 左ペイン[共有フォルダー] > [共有] > 先の手順で追加した共有フォルダを右クリック > [プロパティ]

  10. [共有のアクセス許可]タブを表示
  11. [Everyone]にカーソルを合わせて[削除]

  12. [追加] > [選択するオブジェクト名を入力してください]に2で作成したグループ名を入力(iroha-admins) > [名前の確認] > [OK] 
  13. [フルコントロール]にチェックを入れ、[OK]
    ここまでの設定により、作成した共有フォルダ(irohasrc)にアクセスできるのは作成したグループ(iroha-admins)に所属するユーザー(iroha-admin)限定されるようになる。

共有への接続確認
  1. ファイルサーバーのIPアドレスを確認
    どちらのIPアドレスでも接続可能だが、イントラ専用の固定IPである169.254.xxx.xxxに接続を試みる。

  2. エクスプローラーのアドレスバーに[\\IPアドレス]と入力し、エンター

  3. ネットワーク資格情報の入力画面にて、先の手順で作成したユーザーのID/PASSを入力 > [OK]

  4. 無事に作成したフォルダに入ることができたら確認OK

※アクセスできない的なエラーが出たら以下の点について確認したほうが良いかも。

  • ユーザーがグループに追加されているか
  • 作成したフォルダの[プロパティ] > [共有のアクセス許可] →グループがフルコントロールで追加されているかどうか
  • ユーザーが無効化されていないか
  • Cドラ直下のフォルダを共有しようとしていないか(Cドラは権限が厳しいのでめんどい)

UbuntuからSMBファイル共有サーバーをマウントする

※ミスるとサーバーがお釈迦になるので、ここで一度チェックポイントを作っておくとよい(俺は何度もお釈迦にした)

ファイル共有サーバーをマウントするためには以下の情報が必要

  • ファイル共有サーバーのIPアドレス認証情報
    IPアドレス
    ファイル共有サーバーの固定IPアドレス
    認証情報 :
    ファイル共有サーバー構築手順で作成したユーザーのID/PASS
  • マウント後に権限を付与させたいUbuntuユーザーのuidとgid

マウント実行手順前に整理しておかないとグダる

マウントコマンド実行の準備とテスト
  1. SMB共有フォルダを操作するためのモジュールをインストールする
    • # apt -y install cifs-utils
  2. マウントポイントを作成
    • # mkdir /mnt/irohasrc
  3. 共有ファイルサーバーへの認証を行うための「認証情報ファイル」を作成する
    コマンドラインでユーザー名、パスワードを指定するのはセキュリティ的にまずいため
    • //ファイル置き場を作成(場所とディレクトリ名は任意)
      # mkdir /etc/smb-credentials/

      //認証情報ファイルを作成
    • # vi /etc/smb-credentials/.password1
      username=<ファイル共有サーバーで作成したユーザー名>
      password=<パスワード>

      //所有権を変更し、認証情報ファイルを参照できるユーザーを限定する
      # chmod 600 /etc/smb-credentials/.password1
  4. Apache実行ユーザーのuid,gidを調べる(環境によっては違うかも)
    • # id www-data
      uid=33(www-data) gid=33(www-data) groups=33(www-data)
  5. いざ、マウントコマンド実行
    • # mount -t cifs -o credentials=/etc/smb-credentials/.password1,uid=33,gid=33,file_mode=0755,dir_mode=0755 //169.254.10.4/irohasrc /mnt/irohasrc/
  6. マウントできているか確認
    • # df -aTh |grep 169
      Filesystem                     Type Size  Used Avail Use% Mounted on
    • //169.254.10.4/irohasrc cifs 60G 11G 50G 18% /mnt/irohasrc
  7. htmlのソースコードをマウントポイントへ移設
    • # mv /var/www/html/ /mnt/irohasrc/html/
  8. iroha BoardのURLへアクセスし、開けないことを確認
  9. htmlディレクトリへのシンボリックリンクを作成後、iroha BoardのURLへアクセスできることを確認する
    • # ln -s /mnt/irohasrc/html/ /var/www/html

自動マウントの設定

自動マウントの設定は[/etc/fstab]で行う。
現状手動でマウントを行っているため、サーバーの再起動時にはマウントが行われない。当然それではお話にならないので、自動マウント設定を行う。

  1. まずはアンマウント
    • # umount /mnt/irohasrc
  2. [fstab]最下部にマウント用情報を追記する
    • # vi /etc/fstab
      -----
    • //169.254.10.4/irohasrc /mnt/irohasrc/ cifs _netdev,x-systemd.automount,credentials=/etc/smb-credentials/.password1,uid=33,gid=33,file_mode=0755,dir_mode=0755 0 0
  3. 再起動を行う
    • # shutdown -r now
  4. マウントを確認し、無事マウントできていれば完了

マウントコマンド小解説

マウントポイント

SMB共有フォルダと接続するためのディレクトリ。

今回はファイル共有サーバーに作成したフォルダと同名ディレクトリを作成したが、揃える必要はない。

Apache実行ユーザー(www-data)のidに指定する理由

ApacheユーザーでマウントしないとApache実行時にソースコードが読み込めず、「Permission Denied」エラーとなるため。

mountコマンドの引数について

-o:

オプションを指定するための引数。
細かい指定を複数指定する際は、<オプション1>,<オプション2>,<オプション3>....といった具合にカンマ区切りで指定する。
この記事では以下の箇所がオプションとなる。

  • # mount -t cifs -o credentials=/etc/smb-credentials/.password1,uid=33,gid=33,file_mode=0755,dir_mode=0755 //169.254.10.4/irohasrc /mnt/irohasrc/
  • credentials
    認証情報ファイルを使用してID/PASS認証を行うためのオプション
    認証情報はmountコマンド内にベタ書きすることも可能だが、問題はTeraTerm操作ログやhistoryコマンドなどに他サーバーのID/PASS情報を出力してしまうこと。接続情報の漏洩リスクが高まるので、できればベタ書きは避けてcredentialで認証をしたい。
  • uid
    サービスやユーザーの実行id。マウント後のディレクトリのユーザー所有権はuidで指定する。
  • gid
    サービスやユーザーの所属するグループの実行id。マウント後のディレクトリのグループ所有権はgidで指定する。
  • file_mode
    マウント後、ディレクトリ内に存在するファイルのパーミッションを指定。特に希望がなければ644か755でいいと思う。
  • dir_mode
    マウント後、ディレクトリ内に存在するディレクトリのパーミッションを指定。特に希望がなければ755でいいと思う。

-t cifs:

マウント実行時に[cifs-utils]を呼び出すための引数。

今回のコマンドでは、[credentials]オプション実行のために必要。

ちなみにID/PASSを平文で指定する場合は[-t cifs]を引数に与えなくともマウント実行可能だった。

 

fstabのオプションについて
  • //169.254.10.4/irohasrc /mnt/irohasrc/ cifs _netdev,x-systemd.automount,credentials=/etc/smb-credentials/.password1,uid=33,gid=33,file_mode=0755,dir_mode=0755 0 0
  • ①、②ディレクトリパス
    ①は[ファイル共有サーバーのIPアドレス] / [マウントするフォルダ]
    外付けHDDなどをマウントする際はUDIDやデバイス名を指定することも可能。
    ②は作成したマウントポイント。
    ①を②にマウントする。
  • ファイルシステム
    ここはファイルシステムを指定する箇所(例:NTFSext4exFATなど)。
    ここではcifsの利用を宣言。
  • ④オプション
    _netdev:
    ①がネットワークに依存するディレクトリであることを認識するためのオプション。Linuxのネットワークデバイスがオンラインになるまでマウントの実行を待機する優れもの。
    x-systemd.automount:
    シンボリックリンクでマウントディレクトリへ接続を試みる場合に、仮にマウント解除されていた場合でも改めてマウントを実行してくれる優れもの。
    fsck実行時にリソースを効率よく回す的な役目もあるらしいが今回fsckはオフにしているので関係なし。
  • ファイルシステムのdump要否
    dumpコマンドの対象に含めるかどうかを設定できる。
    1にするとバックアップ対象、0だと対象外になる。
  • ⑥OS起動時のfsckをやるかどうか
    fsck = OS起動時にファイルシステムのチェックを行う機能。
    ここではマウントしたディレクトリをその対象にするかどうか、また対象の場合の優先度を設定できる。
    0~2の数字を指定可能で、0の場合は対象外、
    1はチェックの優先度が一番高い。

参考にした情報