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
シグナルの送信に関しては下記のページ。
しかしCentOS6.8はモダンではない模様。Emperorは使えるかな?
保存版 CentOS 7とCentOS 6との違いまとめ | urashita.com
CentOS6(CentOS5)と7の差分対応 (SystemVinit/Upstart/systemd) - Opensourcetechブログ(ZeusITCamp裏BLOG)
RHEL6→RHEL7で変更された主要コマンドまとめ — | サイオスOSS | サイオステクノロジー
第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
Ubuntu 12.04でpyenvを利用して速攻でPython3.4 + Nginx + uWSGI + FlaskなWebアプリケーション実行環境を作る - Qiita
nginxをCentOS6にインストール
入門 自然言語処理
「入門 自然言語処理」関連のページ
原著の1版
原著のPython3対応の奴
原著のerrata
Confirmed Errata | O'Reilly Media Natural Language Processing with Python
Unconfirmed Errata | O'Reilly Media Natural Language Processing with Python
日本語版の日本語に関する12章
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でやってみた場合。
- pyenv入れる
- pyenvでAnaconda 4.1.0以上入れる
- pip install janome
- 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を使うといいらしい。
で更に、デーモンモードと、組み込みモードがあると(また選択肢があるんかい)。
参考ページ:
- Apache+mod_wsgi+Flaskインストール | Zafiel
- mod_wsgi (Apache) — Flask Documentation (0.11)
- Google Code Archive - Long-term storage for Google Code Project Hosting.
- Python: mod_wsgi の組み込みモードとデーモンモードについて - CUBE SUGAR CONTAINER
- Apache と mod_wsgi 環境で Django を使う方法 — Django 1.4 documentation
- mod_wsgi — mod_wsgi 4.5.6 documentation
- mod_wsgi は VirtualHost 単位でないと Daemon を分けられない? - methaneのブログ
- mod_wsgiでDjangoを動かすまでを淡々と記録する - スコトプリゴニエフスク通信
文書の要約技術について
文書の要約技術について。
下記書籍参照。
文書要約の分類
- 単一文書要約
- リード法
- 文書の最初の数行を提示
- 単純だが強力
- ニュース記事などに特に有用
- リード法
複数文書要約
抽出型要約
- 文を抽出して変更せずに提示
- 実用化されている手法のほとんどはこれ
- MMR(maximal marginal relevance)
- なるべく代表的な文を選択しながら、なるべく冗長でない文を選択
- 類似度に基づく尺度
- コサイン類似度など
- 抽象型要約
- 新しい文章を生成しながら内容を抽象的に要約
日本語の要約に関して。
日本語要約の実装例
過去にググった時の記事
要約とはまた違うけど日本語関係のPyPI
Tensorflowで要約
スライド資料等
VimでPython
インデントとかシンタックスハイライティングとか。
インデントに関してはpythonファイルとして読み込まれたファイルにpython式のインデントを施す為に、下記の設定を。
~/.vim/ftplugin/python.vim
を作成- 下記内容を記述
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のプラグインとして、汎用のフォーマッタ?もあるようだ。
↑のプラグインをVimにNeoBundleとかでインストールして、言語ごとのフォーマッタ(前述のautopep8とか)インストールした後、
:Autoformat
で整形。
Python限定ならautopep8 1.2.4 : Python Package Index入れるだけでも楽かな?