2016年1月21日木曜日

Ubuntu14.04で、NginxとuWSGI(emperor)を構築

ABLE.net の VPS で、WEBサーバを構築する手順です。

1. インストール

$ sudo apt-get install nginx uwsgi uwsgi-plugin-python python-pip

2. ポートを開く

$ sudo ufw allow 80

3. Nginx の設定

デフォルトのサイト設定を削除しておきます。

$ sudo rm /etc/nginx/sites-enabled/default

設定ファイルの例です。

FILE: /etc/nginx/conf.d/<サイト名>.conf
--
server {
 listen 80;
 server_name <サイトURL>;
 location / {
  uwsgi_pass unix:/tmp/<サイト名>.sock;
  include uwsgi_params;
 }
}
--
※ UNIXソケット(.sock)で、uWSGI に連結します。

再起動しておきます。
$ sudo service nginx restart

4. uWSGI (emperor) の設定

必要なディレクトリを作成します。

$ sudo mkdir -p /etc/uwsgi/vassals
$ sudo mkdir -p /var/log/uwsgi

設定ファイルです。

FILE: /etc/init/uwsgi.conf
--
description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn
env UWSGI=/usr/local/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log
exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --logto $LOGTO
--

emperorモードで起動し、/etc/uwsgi/vassals の iniファイルを監視します。

$ sudo service uwsgi restart

5. Django の動作確認

virtualenv 環境に、Django を入れます。

$ cd
$ virtualenv venv
$ cd venv
$ source bin/activate
$ pip install Django
$ django-admin.py startproject mysite
$ cd mysite

$ deactivate

6. uWSGI 設定ファイル

Nginx から uWSGI に連結する為に、iniファイルを作成します。

設定ファイルの例です。

FILE: /etc/uwsgi/vassals/<サイト名>.ini
--
[uwsgi]
# Variables
base = /home/<ユーザ名>/venv
app  = <サイト名> # Djangoのデフォルトは、mysite
# Generic Config
home   = %(base)
chdir  = %(base)/%(app)
module = mysite.wsgi
socket = /tmp/%n.sock
chmod-socket = 666
py-autoreload = 1 #reload on change python file
plugins = python
--

7.まとめ

全体の繋がりは、以下の通り。

 WEBアクセス -> Nginx -> uWSGI -> Django

複数のサイトを動かす場合は、
・Nginx の <サイト名>.conf
・uWSGI の <サイト名>.ini
・アプリケーション(Django等)
を準備します。

Ubuntu14.04 + Nginx で、画像のリサイズを行う。

こちらの続きです。
http://yamayoshi.blogspot.jp/2013/05/ubuntu1204-nginx.html

やりたいこと。
・任意のサイズを指定
・任意のアドレスを指定

元の画像: http://<アドレス>/<パス>/<ファイル>
 ↓
リサイズ: http://<変換サーバのアドレス>/g<サイズ>/<アドレス>/<パス>/<ファイル>

1.インストール

$ sudo apt-get install nginx

2.設定

FILE: /etc/nginx/conf.d/<app>.conf
--
server {
 listen 80;
 server_name www.example.com;
 resolver localhost;

 location / {
  uwsgi_pass unix:/tmp/<app>.sock;
  include uwsgi_params;
 }

 location ~ ^/g(?P<size>[^/]+)/(?P<url>[^/]+)/(?P<file>.*)$ {
  rewrite ^ /crop last;
 }

 location /crop {
  image_filter crop $size $size;
  proxy_pass http://$url/$file;
  add_header Nginx "$size $url $file";
 }
}
--

ちょこっと説明

> location ~ ^/g(?P<size>[^/]+)/(?P<url>[^/]+)/(?P<file>.*)$
 → サイズ、アドレス、ファイル(パスを含む) の情報を取り出して、変数に格納します。

> image_filter crop $size $size;
 → 変換サイズを指定

> proxy_pass http://$url/$file;
 → 元の画像ファイルを指定

> add_header Nginx "$size $url $file";
 → おまけ(HTTP_HEADERに変数を出力し、Chrome開発ツールで確認。)

3.起動/停止

$ sudo service nginx stop … 停止
$ sudo service nginx start … 起動

4.動作確認

ブラウザから、

http://www.example.com/g160/3.bp.blogspot.com/-qn0m7KScp4A/TsTyX4cO5FI/AAAAAAAAANA/ooqc_7cGnis/s1600/NEC_0025.JPG

にアクセスすると、

http://3.bp.blogspot.com/-qn0m7KScp4A/TsTyX4cO5FI/AAAAAAAAANA/ooqc_7cGnis/s1600/NEC_0025.JPG

のサムネイル画像を表示します。

キャッシュを使う場合は、前回の記事を参考に。