FlaskのアプリをuWSGI+Nginxで動かす(Cent OS 6.8)

試した手順。

Flask + uWSGI + Nginx でハローワールドするまで @ さくらのVPS (CentOS 6.6) - Qiita

一応動いた。 ただ、これはforegroundで動かすまでの解説。 backgroundで動かすか自動起動とかになると別途情報が必要。

ここまでで、一応FlaskアプリケーションをNginx経由で動かすことはできた。あとは、起動時に自動実行されるよう設定するなどすればOKだろう(そのためには/etc/rc.localをいじればいい)。

Flask公式の奴

uWSGI — Flask Documentation (0.11)

以下、ちょい訳


uWSGIはプロトコルでもアプリケーションサーバでもある。

uWSGI is both a protocol and an application server

もっとも一般的なuWSGIサーバはuwsgi。ややこしいな。

The most popular uWSGI server is uwsgi,

以下略


uWSGIの公式?

Managing the uWSGI server — uWSGI 2.0 documentation

以下、ちょい訳。


uWSGIを起動するのはシスアドの役目、webサーバみたいに。webサーバにやらせる仕事じゃない、とはいえ自分のアプリのアーキテクチャにフィットするならできるけど。

一番いいのはOSの起動時にuWSGIサービス起動するやりかた。

ダンなOSなら下記のやつが有効。「クラシック」なOSならinit.d/rc.dスクリプトとかSupervisor、Daemontoolsかinetd/xinetdが使える。

System Method
Ubuntu Running uWSGI via Upstart (the official uwsgi package, available since Ubuntu 12.04 provides an init.d based solution. Read the README.)
Debian Systemd
Arch Linux Systemd
Fedora Systemd
OSX launchd
Solaris SMF

uWSGIを制御するシグナル

uWSGIにsafe-pidfile optionをつければmaster process PIDをファイルに書かせることができる。

uWSGIが応じるシグナルは下記の通り。

Signal Description Convenience command
SIGHUP gracefully reload all the workers and the master process --reload
SIGTERM brutally reload all the workers and the master process (use --die-on-term to respect the convention of shutting down the instance)
SIGINT immediately kill the entire uWSGI stack --stop
SIGQUIT immediately kill the entire uWSGI stack
SIGUSR1 print statistics
SIGUSR2 print worker status or wakeup the spooler
SIGURG restore a snapshot
SIGTSTP pause/suspend/resume an instance
SIGWINCH wakeup a worker blocked in a syscall (internal use)
SIGFPE generate C traceback
SIGSEGV generate C traceback

インスタンスを管理するにはシグナルよりも良い方法があって、例えばmaster-fifoみたいなやり方がしっかりとしたやり方。

サーバのリロード

以下略


上記の記述だと、素直に読めばUbuntu以外のLinuxは「Systemd」使えば良いように読める。

で、下記のページ読むと、

Systemd — uWSGI 2.0 documentation

uWSGI is a new-style daemon for systemd.

とか

Adding the Emperor to systemd

とか言ってる。強そう。

Emperorに関しては下記のページ。

The uWSGI Emperor – multi-app deployment — uWSGI 2.0 documentation

Master FIFOに関しては下記のページ。

The Master FIFO — uWSGI 2.0 documentation

リロードに関しては下記のページ。

The Art of Graceful Reloading — uWSGI 2.0 documentation

シグナルの送信に関しては下記のページ。

CodeZine(コードジン)

Man page of SIGNAL

しかしCentOS6.8はモダンではない模様。Emperorは使えるかな?

保存版 CentOS 7とCentOS 6との違いまとめ | urashita.com

CentOS6(CentOS5)と7の差分対応 (SystemVinit/Upstart/systemd) - Opensourcetechブログ(ZeusITCamp裏BLOG)

RHEL6→RHEL7で変更された主要コマンドまとめ — | サイオスOSS | サイオステクノロジー

CentOS6, CentOS7 システムコマンド対応表

第1回 CentOS7の変更点について(CentOS6.6との違い) | Nedia What's up!

ではinit.d/rc.dスクリプトか、Supervisor、Daemontoolsかinetd/xinetdを使うと。

Windowsユーザーに教えるLinuxの常識(最終回):Linux起動の仕組みを理解しよう[rcスクリプト編] - @IT

[ThinkIT] 第4回:システム起動スクリプトとランレベルの比較 (1/3)

linux起動時に自動的に実行するコマンド(プログラム)の設定 - Qiita

とりあえず、バックグラウンド動かすには--daemonizeオプションを付けてログファイルの保存場所を指定すれば良い模様。

便利で超強力なWSGIサーバー uWSGI を使ってみよう - 檜山正幸のキマイラ飼育記

とりあえず、ここで保留。


その他参考ページ:

CentOS6.5でPython3.4+Nginx+uWSGIでバーチャルホスト運用 - Life is Really Short, Have Your Life!!

How to Deploy Python WSGI Applications Using uWSGI Web Server with Nginx | DigitalOcean

uWSGI で Django を使う方法 — Django 1.4 documentation

[Python]Flaskアプリをnginx + uWSGIでさくらVPSにデプロイする - Unresolved

uWSGI — flask-docs-ja 0.10-dev documentation

Apacheにかわるwebサーバ: uWSGIパフォーマンスチューニング - Qiita

ちゃんと運用するときのuWSGI設定メモ - Qiita

Ubuntu 12.04でpyenvを利用して速攻でPython3.4 + Nginx + uWSGI + FlaskなWebアプリケーション実行環境を作る - Qiita

nginx コマンド超シンプル早見表 - Qiita

nginxとuwsgiの連携方法 - Qiita

入門 自然言語処理

「入門 自然言語処理」関連のページ

原著の1版

NLTK Book

原著のPython3対応の奴

NLTK Book

原著のerrata

Confirmed Errata | O'Reilly Media Natural Language Processing with Python

Unconfirmed Errata | O'Reilly Media Natural Language Processing with Python

日本語版の日本語に関する12章

Python による日本語自然言語処理

Python による日本語自然言語処理 http://www.nltk.org/book-jp/ch12.html#id36

12.2.2 文字単位分かち書きを使う なお、TinySegmenter in Python の最新版は https://code.google.com/p/mhagiwara/source/browse/trunk/nltk/jpbook/jptokenizer.py から入手することができる。

上記URLからのダウンロードはできなくなった模様。下記URLに移動?

nltk/jptokenizer.py at master · mhagiwara/nltk https://github.com/mhagiwara/nltk/blob/master/jpbook/jptokenizer.py


続きを読む

Summpyの動かせる環境を作る楽な手順

pythonは色んな選択肢があるようで、なかなか迷ってしまった。

なんやかんやで楽だったのは下記のような手順になろうか。

python2.7系で動くのでそんな感じの環境を作る。

MacのYosemiteでやってみた場合。

  1. pyenv入れる
  2. pyenvでAnaconda 4.1.0以上入れる
  3. pip install janome
  4. pip install summpy

開発環境とは別のサーバにあげて動かす時は、pip freezeで追加パッケージの名前とバージョンをrequirements.txtに書き出したものから不要なものを消してサーバにインストールする。

% pip freeze > requirements.txt

% pip install -r requirements.txt

ApacheでPythonアプリのデプロイ

いやー、沼だ。PythonでWebアプリをまるっと作ろうとすると、初心者には荷が重い。

足掻くだけあがいたが、わからないなりに多少は目星がついてくるのが救いか。

PythonでFlaskとかで作ったアプリのデプロイをApacheでやろうとする場合、mod_wsgiを使うといいらしい。

で更に、デーモンモードと、組み込みモードがあると(また選択肢があるんかい)。

参考ページ:

文書の要約技術について

文書の要約技術について。

下記書籍参照。

自然言語処理の基本と技術 (仕組みが見えるゼロからわかる)


文書要約の分類

  1. 単一文書要約
    • リード法
      • 文書の最初の数行を提示
      • 単純だが強力
      • ニュース記事などに特に有用
  2. 複数文書要約

  3. 抽出型要約

    • 文を抽出して変更せずに提示
    • 実用化されている手法のほとんどはこれ
    • MMR(maximal marginal relevance)
      • なるべく代表的な文を選択しながら、なるべく冗長でない文を選択
      • 類似度に基づく尺度
        • コサイン類似度など
  4. 抽象型要約
    • 新しい文章を生成しながら内容を抽象的に要約

日本語の要約に関して。


日本語要約の実装例

  1. GitHub - recruit-tech/summpy
  2. 日本語文書の自動要約アルゴリズムを60年近く前の論文を頼りに再記述する | Welcome to Singularity

過去にググった時の記事



要約とはまた違うけど日本語関係のPyPI


Tensorflowで要約


スライド資料等

Treeコマンドのインストール

Macの場合はHomebrewで、CentOSの場合は Yum でインストールできるとの事。

CentOSの場合は Yum でインストール可能です。 $ sudo yum -y install tree

Treeコマンドの使い方とオプションについて (Mac/CentOS) - TASK NOTES

VimでPython

インデントとかシンタックスハイライティングとか。

インデントに関してはpythonファイルとして読み込まれたファイルにpython式のインデントを施す為に、下記の設定を。

  1. ~/.vim/ftplugin/python.vimを作成
  2. 下記内容を記述
set tabstop=8
set expandtab
set shiftwidth=4
set softtabstop=4

シンタックスハイライトはバージョンによってはデフォルトで有効になっている。

有効になっていない場合は下記の設定を。

設定ファイルは/etc/vimrcか、できれば、ホームディレクトリの.vimrc

syntax on 

黒画面でやるなら下記設定を追加するといい感じにカラーリング。

set background=dark

vimでフォーマット

vim - Reformat a Python file to have 4 space indentations - Stack Overflow

↑このページだと、いい感じにしてくれるPythonスクリプト?として、下記のものが紹介されている。

Reindent 0.1.0 : Python Package Index

:%! reindent

autopep8 1.2.4 : Python Package Index

:%! autopep8 -

あとはVimプラグインとして、汎用のフォーマッタ?もあるようだ。

GitHub - Chiel92/vim-autoformat: Provide easy code formatting in Vim by integrating existing code formatters.

↑のプラグインVimにNeoBundleとかでインストールして、言語ごとのフォーマッタ(前述のautopep8とか)インストールした後、

:Autoformat

で整形。

Python限定ならautopep8 1.2.4 : Python Package Index入れるだけでも楽かな?