☆☆ 新着記事 ☆☆

2018年12月25日火曜日

これで動く (3/3) !! WebArena VPS(CentOS7)でFlaskを動かす (routingの確認)

安さに目が眩んでWebArena VPSで、Flaskを動かしてみました。 今回が最終回です。

CentOS 7 + Python 3.6 + Apache2.4 +mod_wsgi +  Flaskです。 オーソドックスな環境です。

今回は、

1.  wsgiファイルを設定する。

2. Apacheファイルを設定する。

3. Flask appをアップロードする。


これで、今回のシリーズは終了です。




1.  wsgiファイルを設定する。

 設置場所:/var/www/html

 If you don’t want to install it system wide consider using a virtual python instance. Keep in mind that you will have to actually install your application into the virtualenv as well. Alternatively there is the option to just patch the path in the .wsgi file before the import

という事なので、
ファイル名: myapp.wsgi
記述内容:


# coding: utf-8
import sys
sys.path.insert(0, '/var/www/html')

from app import app as application

[root@cnewgwb6 html]# touch myapp.wsgi
[root@cnewgwb6 html]# vi myapp.wsgi
上記をコピペ。


2. Apacheファイルを設定する。

1)  httpd.conf の修正
  Virtual Hostを使用することをapacheに教えます。
  /etc/httpd/conf/httpd.confの編集(1行)

  (修正前)
      ServerName www.example.com:80
    (修正後:コメントアウト)
    #ServerName www.example.com:80 
 
  ↑ Defaultではコメントアウトになっているので、特別に設定を変えていなければ修正不要。

    (名前ベースの VirtualHost の待受けをすることを宣言)
  記載する場所はどこでも可だが、とりあえず 'Listen 80'の下に、以下を書く。
  NameVirtualHost *:80


2)

/etc/httpd/conf.d/ の下に、virtualhost.conf を作成。


[root@ip2h3wsy httpd]# ls -a
.  ..  conf  conf.d  conf.modules.d  logs  modules  run
[root@ip2h3wsy conf.d]# touch virtualhost.conf
[root@ip2h3wsy conf.d]# vi virtualhost.conf

==ファイル名: virtualhost.conf
LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi.so

<VirtualHost *:80>
  ServerName mossymob.tk
 ServerAlias www.mossymob.tk
  DocumentRoot /var/www/html
  WSGIScriptAlias / /var/www/html/myapp.wsgi
  <Directory "/var/www/html/">
    Options Includes ExecCGI FollowSymLinks
  </Directory>
</VirtualHost>


*WSGIScriptAlias の書き方
  第一引数:アップのある場所  ドキュメントルートのトップと同じなら ' / ' だけで良い。
  第二引数:.wsgiファイルのある場所までのFull Path

*注意)
apache2.4から書式が変わっています、 cgiなどを許可しますが、実際にCGIを動かすには
この他にも AllowOverride All ← .htaccessの許可 とか、AddHandler cgi-script .cgi .pl ← CGIスクリプトに.plを追加 の設定が必要になるようです。
(詳細:https://qiita.com/salt_field/items/3e255c3356006a1e020f

Require all granted を</Directory>の直前に書いてもよい。

(* この書き方は、wsgiのデフォルトであるEmbeded Modeでの記述方法です。  Embeded Modeは、メモリーを多く 要すること等から問題も多く、Deamon Mode (デーモン・モード)で運用することが推奨されていますし、  Djangoを動かすときの前提でもあります。 このデーモン・モードの書き方は以下で説明しています。

 【 「 (詳述) Virtualenvとmod_wsgiで、Python Flaskを動かす  」 】)
 

以上を記載の上、システムのリロードをして設定終了。

# systemctl reload httpd

3. Flask appをアップロードする。

ドキュメント・ルート(/var/www/html)に以下のflask appをアップロード

ファイル名:app.py
# coding: utf-8
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
     return "Hello, Flask!"
if __name__ == "__main__":
     app.run( )  ←ドメイン名やポート指定を削除してます。




Browserでwww.mossymob.tk / mossymob.tk を確認。



!!よく見えないかもしれませんが、
'wwwあり'と'wwwなし'のどちらも、
きちんと表示されました。!!


さて、ここまではシェアド・ホスティングでcgiを使ってもできます。

ルーティングが出来なくては。

ということで確認。


(Directory構成)
-----html
 |-----app.py
 |---templates
   |
   |--sample01.html
   |--sample02.html

(ファイルの内容)

app.py
from flask import Flask, render_template, request
app = Flask(__name__)

@app.route('/')
def index():
    message="Hi, Charlie!"
    return render_template("sample01.html", message=message)
   
@app.route('/add',methods=['POST'])
def add():
    if request.method =='POST':
        result = request.form['new_wish'] # Formのname elementで指定する。
    #else:
    #    result = "No wish! Ah?"
       
    return render_template("sample02.html", result=result)

if __name__ == '__main__':
    app.run(debug=True)



sample01.html
<html>
 <head>
   <meta charset="utf-8">
 </head>
 <body>
 {{message}}
<form action="/add" method="post"> 
<p>Input new make you wish to add to the list:</p>
<input type="text" name="new_wish" >
<input type="submit" value="Do">
</form>
 </body>
</html>
sample02.html
<meta charset="utf-8">
 </head>
 <body>
<p>Now we know the brand of the car you want is</p>
{{result}}
 </body>
</html> 


で、ルーティング( '/' --> '/add')ができるか検証です。





こちらも、問題なく、ルーティングがされていることが確認できました。

これで終わりです。



ちょっと追加)


Browserで確認すると、welcome.htmlが出てしまうことがあったので、

表示されないようにする。


[root@ofcm9och conf.d]# pwd
/etc/httpd/conf.d

[root@ofcm9och conf.d]# vi welcome.conf
#
# This configuration file enables the default "Welcome" page if there
# is no default index page present for the root URL.  To disable the
# Welcome page, comment out all the lines below.
#
# NOTE: if this file is removed, it will be restored on upgrades.

# All descriptions below from here are commented out on Dec 25,2018
# While all descriptions were commented in before this modifcation.

#<LocationMatch "^/+$">
#    Options -Indexes
#    ErrorDocument 403 /.noindex.html
#</LocationMatch>
#<Directory /usr/share/httpd/noindex>
#    AllowOverride None
#    Require all granted
#</Directory>

0 件のコメント:

コメントを投稿