Djangoで作成した掲示板を公開します。
作成した掲示板はこんな感じになります。 ⇒ 動作確認はこちらから
Contents
共用サーバーで公開したい
これまでDjangoで掲示板をつくってきましたが、つくった以上はWeb上で公開してみたいものです。ではどうすればいいのでしょうか?
鳩でもわかるC#はレンタルサーバーのエックスサーバーで運営されています。このサーバーは共用サーバーでありsudoコマンドを実行することはできません。そこで制限された手段のなかで掲示板を公開する方法を考えます。
サーバー上で掲示板を公開する方法は検索してみると見つかりますが、紹介されている方法の多くはサブドメインをつかう方法です。ところがこの方法だと他にも公開したいWebアプリがある場合、サブドメインを大量に作らなければならなくなります。エックスサーバーの場合は作成できるサブドメインに制限はないのでそれはいいのですが、やっぱりメインで使っているドメインのなかで公開できるのであればそれに越したことはありません。
実際にやってみた結果、以下の方法で可能です。
公開する場所ですが、 https://lets-csharp.com/samples/2202/01/ にします。2202は西暦2022年の2月という意味です。その下の01はその月の01番目(最初)に公開するという意味です。
.htaccessファイルを作成する
まず.htaccessファイルを作成しましょう。
そこにこの様に記述します。最後のFiles~は直接これらのファイルにアクセスさせないために必要です。sqlite3にはアカウント情報が記録されているので、これが外部に漏れたら大変です。直接 https://lets-csharp.com/samples/2202/01/db.sqlite3 へアクセスしようとするとどうなるでしょうか? この場合は403 Forbiddenが表示されます。
1 2 3 4 5 6 7 |
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /samples/2202/01/index.cgi/$1 [QSA,L] <Files ~ "\.(sqlite3|py|html|pyc)$"> Deny from all </Files> |
作成したら公開したいディレクトリ内にアップロードします。パーミッションは604です。
index.cgiファイルを作成する
次にindex.cgiファイルを作成します。
index.cgi
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/home/XXXXX/miniconda3/bin/python3 # encoding: utf-8 import sys, os sys.path.append("/home/XXXXX/lets-csharp.com/public_html/samples/2202/01/") os.environ['DJANGO_SETTINGS_MODULE'] = "myapp.settings" from wsgiref.handlers import CGIHandler from django.core.wsgi import get_wsgi_application application = get_wsgi_application() CGIHandler().run(application) |
作成したらアップロードします。パーミッションは705にしてください。
記述内容の補足をするとXXXXXは鳩でもわかるC#管理人のアカウントIDです。これは教えるわけにはいかないので伏せ字にしています。
/home/XXXXX/miniconda3/binの部分ですが、ここにPythonをインストールしています。以前、エックスサーバーにPythonをインストール やり方がわからず1日かかってしまった件という記事を書きましたが、このときこの場所にPythonをインストールしました。
sys.path.append(“/home/XXXXX/lets-csharp.com/public_html/samples/2202/01/”)の部分は公開したいurlに相当するサーバー上のパスです。
つぎにos.environ[‘DJANGO_SETTINGS_MODULE’] = “myapp.settings”の部分ですが、Djangoでプロジェクトを作成するときmyappという名前にしたのでこのような指定になりました。
settings.pyファイルを編集する
次に内側のmyappディレクトリ内のsettings.pyを変更します。
まずログイン後とログアウト後のリダイレクト先ですが、ドメイントップであれば前回設定した状態で問題ないのですが、サブディレクトリ内で公開したい場合、このままではトップページにリダイレクトされてしまうので、変更が必要です。
今回の場合でいえば掲示板のトップページは https://lets-csharp.com/samples/2202/01/bbs/ であり、ログアウトしたときにリダイレクトしてほしいurlは https://lets-csharp.com/samples/2202/01/accounts/logout/ なので、settings.pyにそのように記述します。
settings.py
1 2 |
LOGIN_REDIRECT_URL = 'https://lets-csharp.com/samples/2202/01/bbs/' # 変更 ACCOUNT_LOGOUT_REDIRECT_URL = 'https://lets-csharp.com/samples/2202/01/accounts/logout/' # 項目を追加 |
ファイルをアップロード
そして https://lets-csharp.com/samples/2202/01/ へ前回までに作成したファイルをアップロードします。アップロードするのはプロジェクトのなかに作成したファイルとディレクトリです。アップロードしたときに以下のようになっていればOKです。