第4章 演習手順 == ## 1. 作業準備 1. (起動していない場合) Hyper-Vでhost10.dom1.exmapleを起動し、ログイン後、ターミナルを起動 2. rootユーザーになる。以降の手順はすべてrootで実施する。ホームディレクトリが/rootであることも確認しておくこと ```bash su - pwd ``` > root での本番作業は基本的に禁止なケースが多いです。今回は演習を円滑に進めるため、と理解ください 3. 以下のコマンドを実行し、作業用ディレクトリの作成と演習資材をダウンロードする ```bash mkdir linuxweb;cd linuxweb wget https://delivery-kanaisan-com.s3.us-west-2.amazonaws.com/linuxweb.zip ``` 4. 取得したファイルを解凍する ```bash unzip linuxweb.zip ``` ## 2. mod_wsgiインストール ### WSGIの実装であるmod_wsgiをインストールし、場所を確認する作業を行う 1. 以下を実行して、依存パッケージのインストールを行う ```bash sh ./install_packages.sh ``` 2. pip3でmod_wsgiをインストールする ``` pip3 install mod_wsgi ``` 3. mod_wsgiの本体がどこにインストールされたかを確認する。まずは検索インデックスを更新する ``` updatedb ``` 4. mod_wsgiの本体を探す ``` locate mod_wsgi|grep so ``` 5. 以下のような結果が出てくるので、コピペできるようにメモ帳などに退避しておく ``` /usr/local/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so ``` ## 3. virtualhost作成 ### Apacheに mod_wsgi を認識させ、Webアプリケーションの場所を定義する作業を行う 1. 以下のコマンドを実行し、WSGI関連の設定ファイルをApacheの設定ファイルのあるディレクトリにコピーする ``` cp ~/linuxweb/etc/httpd/conf.d/wsgi.conf /etc/httpd/conf.d/ ``` 2. コピーした先のwsgi.confを編集する。編集する箇所は以下 - LoadModule wsgi_module 以降のファイルパスを、前項の手順5で確認したものに更新する ## 4. アプリケーション配置 ### Python製WebアプリケーションをApacheのDocumentとして配置する作業を行う > 本来は、作成したアプリケーションを git や SCP などで配置します。この演習では、すでに完成した資材を/root以下にダウンロードしているので、ファイルのコピーだけで配置が終わります 1. 以下のコマンドを実行し、アプリケーションをApache配下に配置する。上書き確認された場合は、上書きで良い ``` cp -r ~/linuxweb/var/www/html/* /var/www/html/ ``` > 上記は既存のindex.htmlを上書きします。これまでの演習のトップページを残しておきたければ、index.htmlの上書きはしなくても良いです 1. 実行結果を確認する。以下はlsコマンドでの確認例 ``` ls -l /var/www/html/ ``` - 以下のような構成になっていればOK(treeコマンドでの結果) ``` /var/www/html/ ├── index.html └── myapp ├── flask.wsgi ├── myapp.py ├── requirements.txt ├── static │   └── css └── templates ├── index.html └── layout.html ``` 1. 以下のコマンドを実行して、アプリケーションのディレクトリに移動する ``` cd /var/www/html/myapp ``` 1. 以下のコマンドを実行して、flaskの実行に必要なモジュールをインストールする ``` pip3 install -r requirements.txt ``` ## 5. 動作確認 ### データベースの起動確認 - host12のVMが起動し、MySQLが起動していることを確認する ### HTTPサーバーの起動と動作確認を行う 1. 以下のコマンドを実行して、httpd を起動する > すでに起動している場合はrestartしてください ``` systemctl start httpd ``` 1. Webブラウザを起動し、192.168.1.10 にアクセスする 1. this is top page.というページが表示されることを確認する。これは、/var/www/html/index.htmlが表示された結果である - 前項の手順1で既存のindex.htmlを上書きしなかった場合は、これまでの演習で作成したトップページが表示される 1. ブラウザに入力したURLの最後に/myappを追記し、再度アクセスする(Enterキーを押せばOK) - 例:192.168.1.10/myapp 1. メールアドレス一覧というページが表示されるはずである。これは、第3章で構築したMySQLの従業員テーブルから、メールアドレスを抜き出して表示するFlask製のWebアプリケーションが動作した結果である --- #### 以上で第4章の演習は終了です。時間のある方は、mod_wsgiの設定やmyapp内の設定、ソースコードを参照しておいてください ### 補足 - myapp.pyにて、データベースの接続情報をコードに埋め込んでいますが、これは実業務では絶対にしてはいけません!演習環境でのみ許されます - mod_wsgiはApache専用で、Apacheのディレクトリに対してWSGIサーバーをマップします。つまり、Webサーバーとアプリケーションサーバーをホスト単位で分離することができません。 Webサーバーを分離して独立してスケールしたい、という場合には、uWSGIを使うことになります