さくらのレンタルサーバーでpyenvとDjangoを動かす方法

今回はさくらのレンタルサーバーでpyenvとDjangoを動かす方法を紹介します。

 

Djangoを動かす

さくらのレンタルサーバーにはmod_wsgiのようなパイソンを動かすためのモジュールが入っていないため、一般的なデプロイ方法では設置することができません。

なので、今回はCGIとしてDjangoを動かします。言語問わずCGIモードに対応しているのがいいですね。

 

さくらのレンタルサーバーを取得

公式サイトからさくらのレンタルサーバーを取得しましょう。

サーバーを取得すると仮登録メールが送られてくるので、手順通りに進めるとサーバーのコントロールパネルに入ることができます。

初期ドメインは任意で構いません。今回はexample.sakura.ne.jpを初期ドメインとします。

 

データベースを作成

画面左のアプリケーションの作成の欄にあるデータベースの設定をクリックします。

データベースの新規作成をクリックし、データベース名とパスワードを決めてデータベースを作成しましょう。文字コードはUTF-8を指定します。

データベースを作成するとデータベースサーバー名が表示されます。これはあとで必要になります。

 

sshでログイン

さくらのレンタルサーバでは1度契約すれば複数のドメインのWebサイトを作ることができます。

複数のサイトを作るとなるとドメインごとにディレクトリを分けた方がわかりやすいので、/home/example/www/example.sakura.ne.jp/htdocs/ が example.sakura.ne.jp のルートディレクトリになるように ~/www/.htaccess を作成します。

以下の内容を.htaccessに記述してください。

RewriteEngine on
RewriteCond %{HTTP_HOST} example.sakura.ne.jp [NC]
RewriteCond %{REQUEST_URI} !(^/example.sakura.ne.jp) [NC]
RewriteRule .* /example.sakura.ne.jp/htdocs%{REQUEST_URI} [L]

 

pyenvのセットアップ

標準のバージョンで使用できるのが2系だけで、pipも使えないのでpyenvとpyenv-virtualenvを使用してプロジェクトごとにパッケージを管理します。

まずはpyenvをインストールしましょう。

git clone https://github.com/yyuu/pyenv.git ~/.pyenv
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

 

次に~/.bash_profile を以下のようにします。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export TMPDIR="$HOME/tmp"
export PYTHON_PATH=./
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

 

今後pyenvを使うときはbashを使っていきます。sshでログインするとbashが起動するようになります。

chsh -s /usr/local/bin/bash
bash
source ~/.bash_profile

 

Djangoのファイルを設置

以下のコマンドでDjangoのファイルを設置します。

bash
mkdir -p ~/www/example.sakura.ne.jp/htdocs
cd ~/www/example.sakura.ne.jp
git clone https://github.com/example/django-example-python2.git
cd django-example-python2
pyenv local django-example-python2

 

Djangoの設定ファイルを編集

~/www/example.sakura.ne.jp/django-example-python2/src/myprj/production_settings.py を以下のように編集します。

ディレクトリ名やデータベース名は各々で変更してください。

# encoding=utf-8
from .settings import *

DEBUG = False
ALLOWED_HOSTS = ["example.sakura.ne.jp"]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'example_myprj',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': 'dbname.sakura.ne.jp',
        'OPTIONS': {
               "init_command": "SET storage_engine=InnoDB",
        }
    }
}
STATIC_URL = '/static/'
STATIC_ROOT = '/home/example/www/example.sakura.ne.jp/htdocs/static/'

 

migrateする

テーブルの作成、スーパーユーザーの作成、静的ファイルの作成を行います。

cd ~/www/example.sakura.ne.jp/django-example-python2/src
python manage.py migrate --settings=myprj.production_settings
python manage.py createsuperuser --settings=myprj.production_settings
python manage.py collectstatic --settings=myprj.production_settings

 

CGIを作成する

今回はCGIで動かすので、cgiのスクリプトを ~/www/example.sakura.ne.jp/htdocs/django.cgi に作成します。

雛形が用意されているのでダウンロードしてしまいましょう。

cd ~/www/example.sakura.ne.jp/htdocs
wget --no-check-certificate https://raw.githubusercontent.com/chibiegg/django-cgi/master/django-python2.cgi
mv django-python2.cgi django.cgi
chmod +x django.cgi

 

また、上のスクリプトには環境に合わせて書き換える箇所が3つあります。

1つ目は1行目のPythonのパスはpyenvのPythonを指定する必要があります。1行目は以下のように変更しました。

#!/home/example/.pyenv/versions/django-example-python2/bin/python

 

2つ目はプロジェクトのパスの追加です。

# Change this to the directory above your site code. の行の後にDjangoのプロジェクトのパスを追加しましょう。

sys.path.append("/home/example/www/example.sakura.ne.jp/django-example-python2/src")

 

3つ目は利用するDjangoの設定に関してです。末尾のほうの application.settings を今回利用する myprj.production_settings に変更しましょう。

 

リダイレクト設定

一応上記の手順でここまでで http://example.sakura.ne.jp/django.cgi/admin/ にアクセスできるはずですが、このままだとカッコ悪いのでURLを/adminとだけ表示させるように.htaccessをちょっと弄りましょう。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /django.cgi/$1 [QSA,L]
</IfModule>

 

これで次回からアクセスするときはこれで http://example.sakura.ne.jp/admin/ でちゃんとアクセスできるようになりました。