【Xserver】Wagtailを動かす

こんにちは。

Xserverを使って、WagtailのWebサイトを公開するところまで行きたいと思います。WagtailはDjangoに比べて情報が少なく、Xserver × Wagtailの情報は皆無でしたので不安だったのですが、なんとか出来ました。

手順
以下手順でXserverでWagtailを動かしています。

  1. サブドメイン作成
  2. Xserverで仮想環境作成してWagtailインストール
  3. Wagtailソースをアップロード
  4. index.cgi、.htaccess作成
  5. production.pyの編集
  6. 動作確認

また、以下を実施をしている状態です。

【Xserver】Python3.9とvirtualenvのインストール

2020.11.03

①サブドメイン作成

ドメインで良いのですが、、追加費用が発生する話ですので、ここは既にもっているドメインのサブドメインを作成して、そこに乗せていこうと思います。Xserverでサブドメインの作成するには以下を参照してください。

https://www.xserver.ne.jp/manual/man_domain_subdomain_setting.php

②Xserverで仮想環境作成してWagtailインストール

まずは、以下コマンドでbash_profileを適用します。

source ~/.bash_profile

testenvという仮想環境を作成します。

$ mkvirtualenv testenv

仮想環境作成直後はアクティブになっていると思いますが、なっていない場合はworkonで仮想環境をアクティブにします。

$ workon testenv

wagtailをインストールします。

(testenv)$ pip install wagtail
補足
今回は最低限のものしかインストールしていません。
ローカルで「pip freeze > requirements.txt 」で出力したものをXserverの仮想環境で
「$ pip install -r requirements.txt」すると良いと思います。

③Wagtailソースをアップロード

ローカルで作成したWagtailソース一式をXserverにアップロードします。ここではローカルで「$ wagtail start mywagtail」しただけのシンプルなソースをアップロードします。

こんな感じでサブドメインの配下に丸っとコピーします。(↓この画像にはこの先に作成する「index.cgi、.htaccess」も含まれています)

④index.cgi、.htaccess作成

Xserverではwsgiが使えないので、CGIかFastCGIを使用します。ここではCGIを使った方法で説明します。

サブドメインフォルダの直下にindex.cgiと.htaccessファイルを作成します。

index.cgi

#!/home/(サーバーID)/.virtualenvs/(仮想環境)/bin/python
# -*- coding: utf-8 -*-
import sys, os
 
print("Content-Type: text/plain;charset=utf-8\n")

sys.path.insert(0, "/home/(サーバーID)/.virtualenvs/(仮想環境)/bin")

os.environ['DJANGO_SETTINGS_MODULE'] = "mywagtail.settings.production"
os.environ['OPENBLAS_NUM_THREADS'] = "1"

from wsgiref.handlers import CGIHandler
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
CGIHandler().run(application)

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]

2ファイルとも、改行コードLFになっている事を確認してください。改行コードがCRLFだと「500 Internal server error」が出ます。エラーログには「End of script output before headers: index.cgi」と表示されます。

VSCodeの場合は、右下で改行コードをCRLFからLFに切り替える事が出来ます。

2ファイルのアクセス権限を設定します。
Xserverでは以下のように設定するように、という記載があるので、そのまま設定します。

(testenv)$ cd /home/(サーバーID)/(ドメイン名)/public_html/(サブドメイン名)
(testenv)$ chmod 755 index.cgi
(testenv)$ chmod 644 .htaccess

権限を確認します。「-l」だけだと.htaccessは表示されないので、「-al」にします。

(testenv)$ ls -al
・・・・・・
-rw-r--r-- 1 .htaccess
-rwx---r-x 1 index.cgi

⑤production.pyの編集

「$ wagtail start mywagtail」で作成した場合、mywagtail/settings/production.pyにファイルがあります。ローカルで起動させる場合は、同階層にあるdev.pyで動いていますが、production.pyで動くようにindex.cgiの設定をしてあります。

production.py

import os

from .base import *

DEBUG = False
# @todo get a key from here https://miniwebtool.com/django-secret-key-generator/
SECRET_KEY = 'XXXXXX'  
# @todo add your website url in here
ALLOWED_HOSTS = ['localhost', '(URL)']

cwd = os.getcwd()
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": f"{cwd}/.cache"
    }
}

try:
    from .local import *
except ImportError:
    pass

最後にマイグレーションファイルをデータベースに適用します。

(testenv)$ python manage.py migrate

⑥動作確認

ここまででうまくいっているのか、ようやく確かめたいと思います。URLにアクセスしてください。もし以下「500 Internal server error」が表示されましたら、改行コード、アクセス権を見直すと良いかと思います。

Internal server error
Sorry, there seems to be an error. Please try again soon.
が表示された場合は、↓以下が出力されています。
mywagtail/templates/500.html
production.pyの「DEBUG = True」にすると詳細がわかるかもしれません。

URLにアクセスして無事に以下が表示されました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)