【自宅サーバ】Raspberry PIとDjangoで自宅Webサーバを構築する方法!

2020年9月22日

Raspi
どうもマルネギです!
以前、↓の記事で自宅に合ったRaspberry piをサーバ化する話をしてましたが、前回sshで接続できるようにして、そのまま止まっていたので、今回はその続きです!

【雑記】ラズパイをサーバー化してみた!

広告

Raspberry piにDjangoをインストールすることに決定

前回の記事から色々考えていたのですが、とりあえず、Raspberry piをファイルサーバ兼自宅用のWebサーバにすることにしました!
そのために、今回この記事でやることは以下の通りです。
1.Raspberry pi にDjangoをインストール
2.テストページを表示して動作確認
※ついでファイルサーバにするため+コードをWindowsからいじれるようにするため、sambaをインストールしてます。ただ、今回の記事では割愛します。
ということで、上記についての手順を記しておきます!
また、今回のこの記事だと、まだRaspiは「Webサーバ」としての機能を備えません(自分はちょっと引っ掛かりました)。
なので、その辺は注意点としてまとめておきます!
では、いってみよう!

Raspberry piにDjangoをインストール・設定

Djangoとは

そもそもの話をしてませんでしたが、Djangoというのはpythonで記述されたWebフレームワークの一種です。
Webページを表示する際にpythonを使うことができます。
(さすがに表示本体はhtmlです。ただ、その中でもpythonによる制御ができたりします。)
DjangoはMTVモデルというものを採用しています。
これは
Model(データ部)
Template(デザイン部)
View(ページ表示の設定部)
の頭文字からきていて、主に表示されるのはTemplateのファイルです。「どのテンプレートを見せるか」をViewが決定し、「そのために必要なデータ」をModel部が持っているという感じです。
☆参考記事

【Django入門】templateとHTMLを使ってWebページを表示しよう

Djangoのインストール手順

Pythonではライブラリのインストール時にpipというユーティリティを使用します。
Python3.4以降には標準で付属しており、そのPythonはRaspberry piのOSにデフォルトでインストールされているため、実質的にRaspberry piであればインストールした時点で使えるはずです。
インストール方法は簡単で

を実行するだけです。

Djangoの初期設定

Djangoのインストールが無事に終了したら、次は設定をしていきます。
Djangoでは一つのWebサービスのことを「プロジェクト」と呼び、その中に複数のアプリ(機能)を作成するという形で開発をします。
というわけで、まずはプロジェクトの作成です。

Djangoでプロジェクト作成

プロジェクトの作成は

でできます。今回は「djtest」という名前で作成しました。
すると現在のディレクトリに「djtest」というフォルダが作成されていると思いますので、そこに移動してください。
また、この際djtestの下にもう一つdjtestというフォルダが作成されていると思いますが、こちらは「djtest」の設定を格納しておく場所になります。
これ以降数回

というコマンドを入力するかと思いますが、その際は必ず親の「djtest」(直下にmanage.pyがいるほう)のディレクトリにいる状態で実行してください。

プロジェクトのアプリを作成

続いて、アプリケーションの作成をしていきます。
アプリケーションの作成は

を実行してください。今回は「webpi」としました。
すると今いるディレクトリにアプリケーション名のフォルダが生成されていると思います。

データベースの構築

Djangoは使用するデータベースもフレームワーク内で構築していきます。
デフォルトではsqlite3を使う用に設定されていますが、mysqlやpostqresqlなども設定変更で使えるようです。

を実行すると、djtestフォルダ内にdb.sqlite3というファイルが出来ていることが確認できると思います。
データベースの構築が終わったら、データベースの管理者を作成します。

を実行すると、各種設定がCUIベースで聞かれます。内容は順に
ユーザー名
メールアドレス
パスワード
パスワード確認用
です。
ユーザー名は空欄にすると、現在のログインユーザー名が設定されます。
メールアドレスは特に入力しなくても(今のところは)大丈夫です。
パスワードはmysqlよろしく短すぎると弾かれるらしいので注意です。

setting.pyを編集

djangoの設定ファイルを編集し、今回使用するRaspberry piのIPやアプリケーションの名前を登録していきます。
(Djangoインストール時のディレクトリ)/プロジェクト名/プロジェクト名/setting.pyのsetting.pyを開くと、中に「ALLOWED_HOSTS」という項目があるので、ここにIPを打っていきます。
ちょっと混乱したのですが、ここに記載するのはRaspberry pi(Webサーバに「なる」方)のIPらしいです。
続いて、「INSTALLED_APPS」のリストの末尾に今回のアプリケーション名を追記します。
☆参考記事
https://www.raspberrypirulo.net/entry/django-1
ここまでで、設定は完了です。最後に、実際に別クライアントからブラウザで動作を確認します。

Raspberry piにアクセス(動作確認)

コマンドを入力してサーバーを起動します。
この状態でRaspberry piのIPの8000番ポートにWebブラウザからアクセスし、「It Works!」という文字が表示されれば成功です。(ちなみに、自分は最初やったときはページは表示されるもののfaviconが見つからないというエラーが返ってきて参考にしたページとは表示が異なっていたので不安でしたが、それでも動作確認はOKそうです。)
上記コマンドを打ってもらえるとわかるのですが、これはpythonスクリプトの実行です。
なので実行中はコンソールにカーソルが戻ってきません。
ちょっと調べてみると上記のコマンドはあくまで開発用であり、本番公開ではないそうです。
参考記事:https://qiita.com/ming_hentech/items/9e21fe175988448e204b
なので、本番公開するためにはやはりApacheなどのサービスをインストールする必要があります。
長くなってきているので、今回はここまでにして、以降は次回に書いて行こうと考えています。

注意点

動作確認の最後の方でも触れましたが、今回の手順では、サーバは常時Webサーバとするのは若干不十分感があります
ただ、それでも、自宅で個人利用であればWebページにはアクセスできるので十分かもしれませんが、やはりコンソールのカーソルが戻ってこないというのは色々不便なので、Apacheをサーバサービスとして使おうと思っています。
ApacheとDjangoをつなぐ役割を果たすものとして、「wsgi」というものがあるそうなので、そちらについても調べつつ次回は書いていきます。

まとめ

今回のまとめです。
・Djangoはpythonで書けるWebフレームワーク
・インストールはpythonパッケージなのでpipでできる
・Webサーバ機能もあるが、開発用なので、本番公開にはApache等他のWebサーバソフトを使うことを推奨
でした!次回は本番公開までのプロセスとか書いていけたらいいなと思ってます!(覚えてたら)
あと、今コンテンツをどうするか悩んでいるので、そちらも適宜考えていきます!

ではでは!