さくらのレンタルサーバとは
VPSとは異なり,OSの管理をさくらインターネットが行い,一部の権限だけをユーザーが持つホスティングサービスです.
root権限のあるVPSとは違い,できることと使えるリソースは限られますが以下の機能がセットアップなしで利用できます.
さらに,OSやApacheのセキュリティアップデートなどのメンテナンスもさくらが行うので,(自分が設置したもの以外)メンテナンスを意識せずに使えるため,これまでVPSでやってきた人にとっても思った以上に便利だと思います.
- ApacheによるWebサーバ + CGI
- メールサーバ (SMTP/POP3/IMAP)
- データベースサーバ(MySQL)
- PHP, Python, 等々のコマンド
- CRON
詳しい仕様は サービスサイト に任せるとして本題に入ります.
ある程度ApacheやDjangoについて理解できている人向けにあっさりと説明します.
Djangoを動かす
一般的な設置方法との違い
レンサバのApacheには mod_wsgi
のようなPython向けのモジュールが入っていないため,一般的なデプロイ方法では設置できません.また,常時起動のデーモンプロセスを起動させることもできないため,FastCGIサーバとしてDjangoを動作させることもできません.
そこで,言語問わずCGIモードに対応していることを用いてCGIとしてDjangoを動かします.
Djangoのアプリケーションを作成する
今回はデプロイの説明のため,Webアプリケーションの作成に関しては触れません.サンプルとして以下に公開しているDjangoのプロジェクトを利用して説明します.
chibiegg/django-example-python2
さくらのレンタルサーバを契約する
さくらのレンタルサーバオンラインサインアップ より,さくらのレンタルサーバを契約します.MySQLはスタンダードプラン以上で利用できます.すでに契約しているひとは持っているアカウントでOKです!
2週間の無料お試し期間もあります.(この記事も2週間お試し期間をつかって書いています)
契約すると,仮登録完了メール等でパスワードが通知され,最終的に以下のようなコントロールパネルにログインできると思います.
今回は初期ドメイン chibiegg-201505.sakura.ne.jp
で契約したとして説明します.
データベースを作成する
コンパネ左のメニューから データベースの設定
をクリックします.
“データベースの新規作成” をクリックし,適当なデータベース名とパスワードを決めて,データベースを作成します.
パスワードは今後作成する全てのデータベースで共通になります.(変更可能)
また,文字コードはUTF-8を指定します.
作成後に表示されるデータベースサーバ名を控えておきます.(いつでも参照可能です)
今回は mysql508.db.sakura.ne.jp
でした.
SSHでログインして作業する
サブディレクトリを初期ドメインのルートディレクトリにする
標準では /home/chibiegg-201505/www/
がルートディレクトリになりますが,さくらのレンタルサーバでは一つの契約で複数のドメインのWebサイトを提供できます.このとき,ドメインごとに別ディレクトリを指定すると便利なので, /home/chibiegg-201505/www/chibiegg-201505.sakura.ne.jp/htdocs/
が chibiegg-201505.sakura.ne.jp
のルートディレクトリになるように ~/www/.htaccess
を作成します.
RewriteEngine on RewriteCond %{HTTP_HOST} chibiegg-201505.sakura.ne.jp [NC] RewriteCond %{REQUEST_URI} !(^/chibiegg-201505.sakura.ne.jp) [NC] RewriteRule .* /chibiegg-201505.sakura.ne.jp/htdocs%{REQUEST_URI} [L]
pyenvのセットアップ
標準ではPythonのバージョンが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
を使います.
chsh -s /usr/local/bin/bash bash source ~/.bash_profile
次回からはSSHログイン時にbashが起動します.
今回のプロジェクトで使う環境をセットアップする
pyenv install 2.7.9 pyenv virtualenv 2.7.9 django-example-python2 pyenv activate django-example-python2 pip install django mysqlclient
Djangoのファイルを設置する
bash mkdir -p ~/www/chibiegg-201505.sakura.ne.jp/htdocs cd ~/www/chibiegg-201505.sakura.ne.jp git clone https://github.com/chibiegg/django-example-python2.git cd django-example-python2 pyenv local django-example-python2
Djangoの設定ファイルを修正する
~/www/chibiegg-201505.sakura.ne.jp/django-example-python2/src/myprj/production_settings.py
を以下のように編集します.
この時,ディレクトリやホスト名,データベースの接続情報は環境に合わせてください.
# encoding=utf-8 from .settings import * DEBUG = False ALLOWED_HOSTS = ["chibiegg-201505.sakura.ne.jp"] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'chibiegg-201505_myprj', 'USER': 'chibiegg-201505', 'PASSWORD': 'PASSWORDISHERE', 'HOST': 'mysql508.db.sakura.ne.jp', 'OPTIONS': { "init_command": "SET storage_engine=InnoDB", } } } STATIC_URL = '/static/' STATIC_ROOT = '/home/chibiegg-201505/www/chibiegg-201505.sakura.ne.jp/htdocs/static/'
migrate (syncdb) する
VPSの時と同じようにモデルからテーブルを作成し,スーパーユーザの作成と,静的ファイルの生成を行います.
cd ~/www/chibiegg-201505.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を作成する
ここまでは,どこにデプロイするときも同じです.本来であれば,mod_wsgiや,FastCGI(gunicorn)を使いますが,CGIモードで動かすためにcgiのスクリプトを ~/www/chibiegg-201505.sakura.ne.jp/htdocs/django.cgi
に作成します.
ひな形を用意してますので,ダウンロードして使います.
cd ~/www/chibiegg-201505.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箇所編集・追記する場所があります.
pythonのバイナリの場所を指定する
一行目のpythonのパスを,pyenvの環境のpythonにします.
今回は /home/chibiegg-201505/.pyenv/versions/django-example-python2/bin/python
ですので,一行目を以下のようにしました.
#!/home/chibiegg-201505/.pyenv/versions/django-example-python2/bin/python
プロジェクトのパスを追加する
# Change this to the directory above your site code.
の行の後にDjangoのプロジェクトのパスを追加します.
sys.path.append("/home/chibiegg-201505/www/chibiegg-201505.sakura.ne.jp/django-example-python2/src")
利用するDjangoの設定を指定する
末尾のほうの application.settings
を今回利用する myprj.production_settings
に変更します.
.htaccessでリダイレクトの設定をする
ここまでで http://chibiegg-201505.sakura.ne.jp/django.cgi/admin/
にアクセスしてみましょう.
ちゃんとDjangoの管理サイトにアクセスできると思います.
ただ,これではカッコ悪いので,ちゃんとRewriteでURLを /admin/
だけになるようにしましょう.
~/www/chibiegg-201505.sakura.ne.jp/htdocs/.htaccess
を以下のように作成します.
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /django.cgi/$1 [QSA,L] </IfModule>
これで http://chibiegg-201505.sakura.ne.jp/admin/
でちゃんとアクセスできるようになりました.
Python3を使う場合
pyenvを入れたのでPython3系列も利用可能です.CGIファイルがバージョンによってことなりますので,
https://raw.githubusercontent.com/chibiegg/django-cgi/master/django-python3.cgi
を利用してください.