<jupyter_start><jupyter_text>About: 設定ファイルの変更--httpd.conf---リバースプロキシコンテナの `httpd.conf` の設定内容を変更します。  概要設定ファイルを変更する例としてリバースプロキシコンテナの`httpd.conf`を編集して、起動時のサーバプロセス数を変更してみます。![処理の流れ](images/moodle-032-01.png) 操作手順は以下のようになります。1. VCノードに配置されている設定ファイルをNotebook環境に取得する2. 取得したファイルのバックアップを作成する3. Notebookの編集機能を利用して設定ファイルの変更をおこなう4. 変更した設定ファイルをVCノードに配置する5. 設定ファイルの変更を反映させるためにコンテナを再起動する アプリケーションテンプレートによって構築したMoodle環境では、利用者が変更する可能性のある `httpd.conf` などの設定ファイルをVCノードに配置しています。VCノードに配置したファイルはコンテナ内から参照するために[bind mount](https://docs.docker.com/storage/bind-mounts/)の設定を行っています。このため、設定ファイルを編集する場合はコンテナ内のパス名とVCノードのパス名のどちらを指定するか、またbindする際のマウントポイントがどこになっているかなどについて留意する必要があります。リバースプロキシコンテナにおける設定ファイルの対応関係を以下の表に示します。       コンテナ内のパス    VCノードのパス    コンテナ側のマウントポイント    VCノード側のマウントポイント        /usr/local/apache2/conf/httpd.conf    /opt/moodle/proxy/conf/httpd.conf    /usr/local/apache2/conf/    /opt/moodle/proxy/conf/        /usr/local/apache2/conf/moodle-proxy.conf    /opt/moodle/proxy/conf/moodle-proxy.conf    /usr/local/apache2/conf/    /opt/moodle/proxy/conf/        /usr/local/apache2/conf/extra/    /opt/moodle/proxy/conf/extra/    /usr/local/apache2/conf/    /opt/moodle/proxy/conf/        /usr/local/apache2/conf/cert/server.crt    /opt/moodle/cert/server.crt    /usr/local/apache2/conf/cert/    /opt/moodle/cert/        /usr/local/apache2/conf/cert/server.key    /opt/moodle/cert/server.key    /usr/local/apache2/conf/cert/    /opt/moodle/cert/    パラメータの設定変更対象のコンテナ名、設定ファイル名などを指定します。  グループ名の指定このNotebookの操作対象となるAnsibleのグループ名を設定します。<jupyter_code># (例)
# ugroup_name = 'Moodle'

ugroup_name =<jupyter_output><empty_output><jupyter_text>チェック指定された `ugroup_name` の値が適切なものかチェックします。 `ugroup_name` に対応する `group_vars` ファイルが存在していることを確認します。<jupyter_code>from pathlib import Path
if not (Path('group_vars') / (ugroup_name + '.yml')).exists():
    raise RuntimeError(f"ERROR: not exists {ugroup_name + '.yml'}")<jupyter_output><empty_output><jupyter_text>`ugroup_name`に対応する VCノードが実行中であり Ansible で操作できることを確認します。<jupyter_code>!ansible {ugroup_name} -m ping<jupyter_output><empty_output><jupyter_text>コンテナの指定設定ファイルを変更する対象となるコンテナを指定します。 現在実行中のコンテナの一覧を確認します。<jupyter_code>!ansible {ugroup_name} -a 'chdir=/opt/moodle docker-compose ps --services'<jupyter_output><empty_output><jupyter_text>表示されたコンテナ一覧から、対象とするコンテナ名を指定してください。<jupyter_code>target_container = 'proxy'<jupyter_output><empty_output><jupyter_text>設定ファイルの指定 変更する設定ファイルのパスを指定してください。ここではコンテナ内のパスを指定してください。<jupyter_code>target_file = '/usr/local/apache2/conf/httpd.conf'<jupyter_output><empty_output><jupyter_text>VCノードとコンテナとで bind mountする際に基準となるコンテナ側のマウントポイントを指定してください。<jupyter_code>relative_to = '/usr/local/apache2/conf'<jupyter_output><empty_output><jupyter_text>設定ファイルの編集リバースプロキシコンテナの設定ファイル`httpd.conf`をローカル環境に取得しJupyter Notebookの編集機能を用いて設定ファイルを編集します。![設定ファイルの取得、編集](images/moodle-032-03.png) 次のセルを実行すると、以下の手順が実行されます。1. VCノードに配置されているApache HTTP Serverコンテナの設定ファイル(`httpd.conf`)をローカル環境に取得する2. 取得した設定ファイルのバックアップを作成する3. Jupyter Notebookの編集機能を利用して設定ファイルを編集するためのリンクを表示する<jupyter_code>%run scripts/edit_conf.py
fetch_conf(ugroup_name, target_container, target_file, relative_to)<jupyter_output><empty_output><jupyter_text>上のセルの出力に表示されているリンクをクリックして設定ファイルの編集を行ってください。この例では、ファイルの末尾に以下の内容を追加してください。```  ServerLimit              16  StartServers             16  MinSpareThreads         400  MaxSpareThreads         400  ThreadsPerChild          25```この設定を追加することによりApache HTTP Serverの起動時のプロセス数がデフォルトの 3 から 16 に増えます。> ファイルの編集後は**必ず**、メニューの[File]-[Save]を選択してファイルの保存を行ってください。 ローカル環境に取得したファイルは、以下のパスに格納されています。`./edit/{ugroup_name}/{YYYYMMDDHHmmssffffff}/httpd.conf``{ugroup_name}` には UnitGroup名が、`{YYYYMMDDHHmmssfffff}` にはファイルを取得したタイムスタンプが入ります。また、バックアップファイルは以下のパスに格納されます。`./edit/{ugroup_name}/{YYYYMMDDHHmmssffffff}/httpd.conf.orig` 次のセルを実行すると編集の前後での差分を確認することができます。<jupyter_code>show_local_conf_diff(ugroup_name, target_container, target_file)<jupyter_output><empty_output><jupyter_text>編集した設定ファイルの反映編集したファイルをVCノードに配置して、設定ファイルの変更内容をコンテナに反映させます。![設定ファイルの反映](images/moodle-032-04.png)  変更前の状態を確認する設定ファイル変更の反映前の状態を確認します。Apache HTTP Serverのプロセス数に関する設定を変更したので、Apache HTTP Serverコンテナのプロセス一覧を確認します。 Apache HTTP Serverコンテナには `ps` コマンドがインストールされていないので、`procps`パッケージを追加します。<jupyter_code>!ansible {ugroup_name} -a 'chdir=/opt/moodle docker-compose exec -T {target_container} \
    bash -c "apt-get update && apt-get install -y procps"'<jupyter_output><empty_output><jupyter_text>プロセス一覧を表示します。<jupyter_code>!ansible {ugroup_name} -a 'chdir=/opt/moodle docker-compose exec -T {target_container} ps ax '<jupyter_output><empty_output><jupyter_text>編集内容の反映前章で編集した設定ファイル `httpd.conf` を Apache HTTP Serverコンテナに反映します。 次のセルを実行すると、以下の手順が実行されます。1. 編集前と編集後の設定ファイルの差分を表示する2. 編集した設定ファイル(`httpd.conf`)をVCノードに配置する3. コンテナを再起動して変更した設定ファイルの反映を行う<jupyter_code>apply_conf(ugroup_name, target_container, target_file, relative_to)<jupyter_output><empty_output><jupyter_text>変更後の状態を確認する設定ファイル変更の反映後の状態を確認します。Apache HTTP Serverコンテナのプロセス一覧を確認します。<jupyter_code>!ansible {ugroup_name} -a 'chdir=/opt/moodle docker-compose exec -T {target_container} ps ax '<jupyter_output><empty_output><jupyter_text>変更を取り消す編集前の設定ファイルの状態に戻します。![設定ファイル変更の取り消し](images/moodle-032-05.png) 次のセルを実行すると、以下の手順が実行されます。1. 編集後と編集前の設定ファイルの差分を表示する2. 編集前の設定ファイルをVCノードに配置する3. コンテナを再起動して設定値の反映を行う<jupyter_code>revert_conf(ugroup_name, target_container, target_file, relative_to)<jupyter_output><empty_output><jupyter_text>設定ファイルを戻した後の状態を確認します。Apache HTTP Serverコンテナのプロセス一覧を確認します。<jupyter_code>!ansible {ugroup_name} -a 'chdir=/opt/moodle docker-compose exec -T {target_container} ps ax '<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1085899513776337, 'fraction_numerical': 0.010985053124437242, 'mean_word_length': 8.256666666666666, 'pattern_counts': {'":': 0, '<': 61, '<?xml version=': 0, '>': 62, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '15', 'dir': 'jupyter-structured-clean-dedup', 'id': '217226', 'license': 'BSD-3-Clause', 'n_tokens_mistral': 3383, 'n_tokens_neox': 3274, 'n_words': 200, 'path': 'Moodle/notebooks/032-設定ファイルの変更.ipynb', 'repo_name': 'nii-gakunin-cloud/ocs-templates', 'size': '5553'}