ラベル Nginx の投稿を表示しています。 すべての投稿を表示
ラベル Nginx の投稿を表示しています。 すべての投稿を表示

2017年6月11日日曜日

GCE で Flask + uWSGI + Nginx を使う。

イロイロと手こずったので、自分用のメモです。

0. 環境

Ubuntu 16.04 LTS
Nginx 1.10.0
uWSGI 2.0.15

1. パッケージのインストール

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

2. uWSGIの設定

2-1. systemd 用の設定ファイルを作成

$ sudo nano /etc/systemd/system/uwsgi.service
--
[Unit]
Description=uWSGI Emperor
After=syslog.target
[Service]
ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
--

2-2. あれこれ、ディレクトリを作る

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

2-3. uWSGI/emperor 用の設定ファイルを作成

$ sudo nano /etc/uwsgi/emperor.ini
--
[uwsgi]
emperor = /etc/uwsgi/vassals
uid = www-data
gid = www-data
logto = /var/log/uwsgi/emperor.log
--

3. アプリケーションの作成

ディレクトリ構成
~/web
├ venv/
│ └ Flask
└ project1/
 ├ main.py

$ cd
$ mkdir web
$ cd web
$ virtualenv venv
$ source ./venv/bin/activate
V pip install Flask
V mkdir project1
V cd project1
V nano main.py
--
from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
 return "Hello Project1!"

if __name__ == "__main__":
 app.run()
--
V deactivate

4. アプリケーション用 uWSGI設定ファイル

$ sudo nano /etc/uwsgi/vassals/project1.ini
--
[uwsgi]
base = /home/<user>/web
#
socket = /tmp/%n.sock
home = %(base)/venv
chdir = %(base)/%n
manage-script-name = true
mount = /%n=main:app
py-autoreload = 1
--
$ sudo systemctl enable uwsgi

5. Nginxの設定

5-1. デフォルトの設定を削除


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

5-2. アプリケーション用 Nginx設定ファイルを作成

$ sudo nano /etc/nginx/conf.d/project1.conf
--
server {
 listen 80;
 server_name project1;
 location /project1 {
  uwsgi_pass unix:/tmp/project1.sock;
  include uwsgi_params;
 }
}
--

6. 再起動

$ sudo reboot

[参考]

[おまけ]
$ sudo systemctl daemon-reload
$ sudo systemctl enable uwsgi
$ sudo systemctl start uwsgi
$ sudo systemctl stop uwsgi
$ sudo systemctl status uwsgi

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

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

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

2013年5月1日水曜日

Nginx + uWSGI で、Django を起動する。

タイトルそのままですが、一応動いたので、忘れる前にメモ。

OS は、Ubuntu12.04 です。

1.インストール


# apt-get install nginx
# pip install Django==1.4 uwsgi

2.設定


まず、Nginx 側。
location / へのアクセスを、uwsgi_pass で、127.0.0.1:4000 に飛ばしています。
ポートは、4000以外でも良いです。

File: /etc/nginx/sites-available/default
--
location / {
 uwsgi_pass 127.0.0.1:4000;
 include uwsgi_params;
}
--

次は、uWSGI。
/etc/init にconf ファイルを置くことで、自動的にuWSGIを起動します。
ポート4000で待ち受けて、uWSGI を起動(exec)します。
起動パラメータ:
 --chdir /home/<ユーザ名>/mysite … Django プロジェクトのディレクトリに移動
 --wsgi-file mysite/wsgi.py … プロジェクト内の wsgi.py を指定

File: /etc/init/uwsgi.conf
--
# simple uWSGI script
description "uwsgi tiny instance"
start on socket PROTO=inet PORT=4000
stop on runlevel [06]
exec uwsgi --master --processes 2 --die-on-term --chdir /home/akira/mysite --wsgi-file mysite/wsgi.py

3.Django プロジェクトの作成


ユーザのホームディレクトリに作ります。

# cd
# django-admin.py startproject mysite

/home/<ユーザ名>/mysite/mysite/wsgi.py の出来上がりです。

ここで、一旦、リブートしておきます。

4.動作確認


ブラウザからアクセスして、Django の画面が出ることを確認しましょう。

参考