---
# System prepended metadata

title: LinuxWeb 第４章 演習手順

---

第４章 演習手順
==

## 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. メールアドレス一覧というページが表示されるはずである。これは、第３章で構築したMySQLの従業員テーブルから、メールアドレスを抜き出して表示するFlask製のWebアプリケーションが動作した結果である

---
#### 以上で第４章の演習は終了です。時間のある方は、mod_wsgiの設定やmyapp内の設定、ソースコードを参照しておいてください

### 補足
- myapp.pyにて、データベースの接続情報をコードに埋め込んでいますが、これは実業務では絶対にしてはいけません！演習環境でのみ許されます
- mod_wsgiはApache専用で、Apacheのディレクトリに対してWSGIサーバーをマップします。つまり、Webサーバーとアプリケーションサーバーをホスト単位で分離することができません。 Webサーバーを分離して独立してスケールしたい、という場合には、uWSGIを使うことになります