nginxでDjangoを動かす

とりあえずnginxでDjangoを動かしたいという人向けに。
一応、前提としてmacコンピュータを使ってOracle VM VirtualBox などで仮想環境を作れることです。
そこらへんはグーグル先生に聞いてみるなどをしてください。

・使用環境:
Ubuntu 10.10
nginx 0.8.53
MySQL 5.1.41
Python 2.6.5
Django 1.2.4


・準備:macターミナルで仮想環境にリモートコントロール(※本題は下)

VM上で操作するのはやりにくいので、macのターミナルからリモートコントロールする。


Ubuntu開発環境を立ち上げる
Ubuntu ページからサーバ用isoイメージをDLする
http://www.ubuntu.com/server/get-ubuntu/download
VM を立ち上げ、新規作成でUbuntu仮想環境を作る
管理画面でUbuntu設定ボタンを押す。
設定→ストレージの項、IDEコントローラの下にisoを適用
設定→ネットワークの項、アダプタ2を有効化、割り当てを「ホストオンリーアダプタ」に
設定を保存し、起動する。
(詳しい設定は割愛。今回のメインではないので気になる方はグーグル先生に聞いてください)


sshをインストールする

$ sudo apt-get install ssh

/etc/network/interface を編集

$ sudo vi /etc/network/interface

iface eth1 inet dhcp を行末に追加記述
※vi コマンド
i カーソル位置から入力開始
escキー 入力終了
:w 保存
:q 終了



/etc/ssh/sshd_config を編集

$ sudo vi /etc/ssh/sshd_config

#PasswordAuthentication yes の行から
#(シャープ) を取り除く


仮想環境のIPアドレスを更新

$ sudo ifup eth1

コマンドを実行した時の
bound to ~ の行の4つの数字を憶える 例:192.168.56.101

後は触らずそのままにしておいて、macのターミナルを起動する


リモート接続をする

$ ssh [仮想環境ログイン時のユーザ名]@[仮想環境のIPアドレス] 例: ssh hydden@192.168.56.101

Are you sure you want to continue connecting (yes/no)? と聞かれるので yes と入力する
password: と表示されるので、仮想環境ログイン時のパスワードを入力する

これで準備は完了
(後で別にまとめた方が良いかな。。。)

・ nginxでDjangoを動かす

ここで、やっと本題。以下のコマンド操作は仮想環境にログインした状態を基本としている。
コマンドの詳細は割愛。

Djangoのインストール

$ sudo apt-get install python-setuptools
$ sudo easy_install pip
$ sudo pip install django
$ sudo pip install flup
$ sudo apt-get install libmysqlclient-dev
$ sudo aptitude install python-dev

MySQL のインストール

$ sudo pip install mysql-python
$ sudo apt-get install python-mysqldb
$ sudo apt-get install mysql-server

・パスワード作るかどうかを3 回聞かれるが、作っても良いし作らなくても良い。


nginxのインストール

$ sudo su -
$ echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main" >> /etc/apt/sources.list
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
$ apt-get update
$ apt-get install nginx
$ logout

nginxの起動確認

$ sudo nginx

macコンピュータのインターネットブラウザを立ち上げてアドレス欄に
http://[仮想環境のIPアドレス]/ を入力 例: http://192.168.56.101/
Welcome to nginx! と出れば起動確認はOK


Django の設定

$ sudo mkdir -p /var/www/hoge/{logs,public_html,run}
$ sudo chown www-data:www-data /var/www/hoge/run
$ cd /var/www/hoge/public_html
$ sudo django-admin.py startproject [Djangoプロジェクト名:半角英数のみ]
例: sudo django-admin.py startproject hogeproject
$ cd hogeproject
$ vi settings.py
:set nu で行数を表示させ、以下に書き換える
・14行目 'ENGINE': 'django.db.backends.' → 'ENGINE': 'mysql'
・15行目 'NAME': '' → 'NAME': '[データベース名:半角英数のみ]' 例:'NAME': 'hoge'
・16行目 'USER': '' → 'USER': 'root'
・30行目 TIME_ZONE = 'America/Chicago' → TIME_ZONE = 'Asia/Tokyo'
・34行目 LANGUAGE_CODE = 'en-us' → LANGUAGE_CODE = 'ja'
・93行目 # 'django.contrib.admin' → 'django.contrib.admin',

$ sudo vi urls.py
以下の行の文頭の#と半角スペースを消す
・ 4行目 # form django.contrib import admin
・5行目 # admin.autodiscover()
・ 15行目 # (r'admin/', include(admin.site.urls)),


$ mysql -uroot
$ create database [データベース名:半角英数のみ] character set utf8;
$ exit
$ sudo python manage.py syncdb
・ yes と入力
・ ユーザー名を設定できるので半角英数で入力し、Enterキー を押す
・ emailアドレスを聞かれるが、個人で使うなら適当に入力しても大丈夫
・ ブラウザで管理画面に入るためのパスワードを作成する
・ 作成したパスワードをもう一度入力する

FastCGIの設定

$ sudo vi /etc/init.d/django-fastcgi
:set nu で行数を表示させる
InitdScriptForLinux – Django – Tracのページの最初の四角の囲みの中のコードをまるっとコピーして貼付けたあと以下に変更する
・1行目 /bin/bash
・21行目 DJANGO_SITES="[Djangoのプロジェクト名]" 例:DJANGO_SITES="hogeproject"
・22行目 SITEES_PATH=/var/www/hoge/public_html
・23行目 RUNFILES_PATH=/var/www/hoge/run

$ sudo update-rc.d django-fastcgi defaults
$ sudo chmod 755 /etc/init.d/django-fastcgi

nginx 設定ファイルの作成

$ sudo vi /etc/nginx/sites-available/hoge
以下のコードをコピーして貼り付けて、次を変更する。
----この下からコピー----
server {
    listen 80;
    server_name hoge;
    access_log /var/www/hoge/logs/access.log;
    error_log /var/www/hoge/logs/error.log;

    location / {
        fastcgi_pass 127.0.0.1:3000;
        include /etc/nginx/fastcgi_params_django;
    }

    location /static {
        root /var/www/hoge/public_html/[djangoのプロジェクト名];
    }

    location /media {
        alias /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media;
    }
}
----この上までをコピー----
・13行目 root /var/www/hoge/public_html/[djangoのプロジェクト名];
 djangoを設定するときに作成したプロジェクト名を入力する
 例: root /var/www/hoge/public_html/hogeproject;

$ sudo ln -s /etc/nginx/sites-available/hoge /etc/nginx/sites-enabled
$ sudo vi /etc/nginx/fastcgi_params_django
以下のコードをコピーして貼り付ける
----この下からコピー----
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# Django
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
----この上までコピー ----

FastCGIを起動、nginxを再読み込み

$ sudo /etc/init.d/django-fastcgi start
$ sudo nginx -s reload

インターネットブラウザで確認
http://[仮想環境のIPアドレス]/ 例: http://192.168.56.101/
・Page not found (404)が表示される
http://[仮想環境のIPアドレス]/admin 例: http://192.168.101/admin
Django管理サイトのログイン画面が出るので、
Djangoの設定の$ sudo python manage.py syncdb で作成した
ユーザ名とパスワードを入力し、ログインボタンを押す。
ログインできることを確認する


お疲れさまでした。