DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

Djangoの使い方④サーバー連携Ⅱ(Apache2のドキュメントルート以外でDjangoを動かす)

前回、Apacheのデフォルトドキュメントルート「/var/www」以下でApacheDjangoを連携しました。 

dreamerdream.hateblo.jp

 

今回はApacheのドキュメントルート以外でDjangoプロジェクトと連携します。

何故って?それはApacheの設定ミスやセキュリティーホール等があった場合にドキュメントルート以下にDjangoのファイルが存在していたら丸バレになる可能性があるらしいから(?)です。

プログラムやら設定ファイルやらは出来るだけ外部に公開したくないですよね?

 

少しややこしかったのですが、まあなんとか出来ましたので纏めておきます。

まず、Djangoプロジェクトを作ったのは

/home/django/以下にdraemonというプロジェクトを作りました。

 

プロジェクトの立ち上げはこちらの方法でホームディレクトリが変わっただけ。

dreamerdream.hateblo.jp

その中にhelloアプリケーションを作りました。

これも、こちらの方法と同じ。

dreamerdream.hateblo.jp

 

viewsを編集します。

$ sudo nano /home/django/draemon/hello/views.py

こんな感じ。

#!/usr/bin/python3
#coding:utf-8

from django.shortcuts import render
from django.http.response import HttpResponse

def hello_world(request):
return HttpResponse("<h1>Hello World!</h1>--Apache & Django--")

 

 

 

前回作ったApacheの設定ファイルを書き換えます。

$ sudo nano /etc/apache2/sites-available/draemon.conf

中身はモジュールの読み込み設定とWSGIのパス設定とApacheに/home/django/draemonの中にあるwsgi.pyファイルにだけアクセス許可を与えています。

WSGI関連はVirtualHostの外に記述、ドキュメントルート「DocumentRoot 」の指定は別に記述しなくても良さそうな気がしますが、いちおう書いています。

LoadModule wsgi_module modules/mod_wsgi.so

WSGIScriptAlias / /home/django/draemon/wsgi.py

WSGIPythonPath /home/django/draemon


<VirtualHost *:80>

ServerAdmin webmaster@localhost
DocumentRoot /var/www/draemon

<Directory /home/django/draemon>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

 

そうそう、ApacheDjangoプロジェクトにアクセス出来るようにパーミッション設定も必要です。

何が必要か解らないし面倒なのでdjangoディレクトリ以下、全て755設定にしました(おい)

sudo chmod 755  -R /home/django

 

 

次に、前回同様wsgi.pyファイルを生成します。

$ sudo nano /home/django/draemon/wsgi.py

違う所はパスの指定先。他は特に変わっていません。

プロジェクト内にパスを通してsettingsファイルを読み込むだけですね。

#!/usr/bin/python3
#coding:utf-8


import os
import sys

from django.core.wsgi import get_wsgi_application

sys.path.append("/home/django/draemon")
sys.path.append("/home/django/draemon/draemon")

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "draemon.settings")

application = get_wsgi_application()

 パーミッションも忘れず変更しましょう。

sudo chmod 755 /home/django/draemon/wsgi.py

 

できたら動作確認してみましょう。

ブラウザで

<URL>/hello

にアクセスして無事に表示されたら成功です!

(※画像でアドレスのポートが8000指定になっているのは外部から隔離されたシステムへSSHポートフォワードで接続しているからで、通常であればポートの指定は必要ありません。)

f:id:DreamerDream:20180920134029p:plain

views.pyでreturnした通りのメッセージが返ります。

そして大事なことはviews.pyは既にpythonアプリです!

つまり、ここまでたどり着けると後はDjangoに頼らずともアプリ毎にpythonでファイルを読み出したり書き出したりと既にやりたい放題なわけですが、Djangoを利用することでさらに便利になるってワケです。

 

うまく動かないときは、パーミッションの設定抜け、ディレクトリ設定ミス、スペルミス、などが考えられます。

あと、sshポートフォワードで接続している場合は再接続しないと反映されないことがありました。

dreamerdream.hateblo.jp

 

DjangoはデフォルトではデバッグモードがONになっていますので、エラーが発生した場合にはどこがおかしいのか、丁寧に教えてくれます。

Djangoのエラーが出ない場合はApacheDjangoを呼べていないのでApacheの設定を見直しましょう。

 

例えば、間違ったURLへアクセスした場合でもDjangoが動いていればこのように下のいずれかのURLじゃないから繋げないよと教えてくれます↓

f:id:DreamerDream:20180920141739p:plain

デバッグモードは本番運用時にはセキュリティーホールを晒すことになりかねないので、本番はデバッグモードをOFFにします。

 $ sudo nano /home/django/draemon/draemon/settings.py

 で

DEBUG = False

とすれば、間違ったアドレスを指定しても「ない!」と冷たくあしらってくれるようになります。

f:id:DreamerDream:20180920141804p:plain

ちなみに、Apacheと連携させたDjangoの反応は遅いです!

僕がRaspberryPi1でテストしているからだと思いますが、Apacheは重たいソフトなのでDjango単品で動かすよりレスポンスが遅くなります。

Djangoで開発が終ってからApacheと連携させた方がスムーズだということがよく解りました。

まあApacheと連携させる方法が解ったので心置きなくDjangoでサイト構築ができますし、将来的にVPSに移行する予定ですのでレスポンスは大丈夫でしょう。

 

尚、情報によりますとデバッグモードをOFFにした状態でテンプレートや画像(staticファイル)を扱う際には少し設定を弄る必要がありそうですが今の所触れていないので不明です。

 

 

 

dreamerdream.hateblo.jp

 

Djangoの使い方③サーバー連携Ⅰ(Apache2とDjangoの連携テスト)

前回はDjangoアプリケーションを作ってみました。

dreamerdream.hateblo.jp

そうすると本格的な運用環境が気になりますよね? 

Djangoのサーバー機能はテスト用なので本格運用となるとサーバーソフトが必要になります。

f:id:DreamerDream:20180919165331p:plain

いくらDjango上で上手く動いていても本番環境で動かないシステムを作っても意味がありません。

ということで、「開発しても本番でちゃんと動くのか?」という不安を取り除くため、3回目にしてサーバーソフトの有名所、「Apache2」と連携する方法を掲載します。

(Djangoの初期設定ではデバッグモードとして機能しているので、本番環境とはテンプレート等の参照ディレクトリに対する処理が違っていたりと実にややこしいらしいのです。)

※環境はRaspberryPi上のRaspbianですのでディストリビューションによっては方法が異なるかもしれません。

 

DjangoとサーバーソフトのApache2を連携させるには、mod-wsgiというApacheのモジュールが必要で、このwsgiがApache2でpythonを扱うためのモジュールになります。

 

 

apache2のインストール

まずはサーバーソフトapache2をインストール

$ sudo apt-get install apache2

これだけでOK!

一応バージョン確認

$ apache2 -v
Server version: Apache/2.4.25 (Raspbian)
Server built: 2018-06-02T08:01:13

問題なし!

一応再起動しておく。

sudo reboot

この時点で既にApacheが起動しているのでブラウザで[サーバーのIPアドレス]へアクセスするとApache2のデフォルトページにアクセス出来ます。

f:id:DreamerDream:20180912111039p:plain

ちなみに、このHTMLファイルの場所は

/var/www/html/index.html

です。

書き換えると

<HTML>
<TITLE>Test</TITLE>
<BODY>
<H1>HELLO!</H1>
</BODY>
</HTML>

f:id:DreamerDream:20180912111801p:plain

ほら反映されます。

 

 

 

 

mod-wsgiインストール

pip3でmod-wsgiをインストール

$ sudo pip3 install mod-wsgi

あで?、何かエラーが出た。

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-iYOjuE/mod-wsgi/

setuptoolsをアップグレードしてみる

$ sudo pip3 install --upgrade setuptools

ん?けどやはり通らない「なんでかなー?」いろいろ調べたけど解らない。

ヒントになったのはこちらの記事

python3 Django1.9 を mod_wsgi で動かす ( デプロイする )

インストールコマンドが違う?

$ sudo apt-get install libapache2-mod-wsgi-py3

あれ?mod-wsgiのインストールってこんなんだっけ?

って過去自分ブログを調べてみると、 

dreamerdream.hateblo.jp

過去記事

////////////////////

WSGIインストール

sudo apt-get install libapache2-mod-wsgi

////////////////////

書いてあった・・・凹

各々のディストリビューションに合わせてインストールしましょう。

 

【重要】

python3用のものが

 sudo apt-get install libapache2-mod-wsgi-py3

python2用のものが

sudo apt-get install libapache2-mod-wsgi

でインストールできます。

間違えると動きません。

 

 

上記の方法でmod-wsgiをインストール完了!

apache2のwsgiを有効化

$ sudo a2enmod wsgi


Module wsgi already enabled

既に有効になっていました。

wsgiが正常に動いてるかテストしたい場合は、記事最後の参考サイトの方法を試してみてください。

 

 

 Apache2+Djangoの連携

※DjangoではApacheのルートディレクトリにプロジェクトを置く事は禁忌とされているようですが、とりあえずルートディレクトリ上が一番動かしやすい環境なので(他のディレクトリにすると設定が面倒らしい)動作確認として直に置いてみます。

/var/wwwディレクトリがroot権が必要なのでsudoで動かしています。

/var/www $ sudo django-admin startproject draemon

draemonディレクトリに移動

$ cd draemon

おまじないのmigrateする。

$ sudo python3 manage.py migrate

アクセス元の許可とタイムゾーンの設定

$ sudo nano draemon/settings.py

と、ここまでは、①と同じです。

dreamerdream.hateblo.jp

 動作確認までできたら次へ

 

wsgi.pyファイルを作成します。

/var/www/draemon $ sudo nano wsgi.py

中身はパスを通すだけのコード。

色々なサイトのサンプルを見て手間取ったけど、sys.path.append()の順番を間違わないように!(どこかのサイトでは間違っていた)

#!/usr/bin/python
#coding:utf-8


import os
import sys

from django.core.wsgi import get_wsgi_application

sys.path.append("/var/www/draemon")
sys.path.append("/var/www/draemon/draemon")

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "draemon.settings")

application = get_wsgi_application()

 

 

保存したら一応実際に単品で動かしてみてエラーが出ないか確認しましょう!

sudo python3 wsgi.py

パスを通すだけだから特になにも起こらないまま終了します。

 

次にApacheのデフォルトの設定ファイルが置かれている場所を確認しましょう。

/etc/apache2 $ ls sites-available/
000-default.conf default-ssl.conf

この000-default.confというのが通常httpで見れるwebサイトの設定ファイル

default-ssl.confはhttpsで見れるwebサイトの設定ファイル。

今回は000-default.confをコピーして使います。

sudo cp sites-available/000-default.conf draemon.conf

で、中身を弄ります。

/etc/apache2 $ sudo nano sites-available/draemon.conf

これがややこしいのなんのって!

とりあえず動いた設定(コメントアウト部分を除)を公開しておきます。

LoadModule wsgi_module modules/mod_wsgi.so

WSGIScriptAlias / /var/www/draemon/wsgi.py

WSGIPythonPath /var/www/draemon
<VirtualHost *:80>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
WSGIScriptAlias / /var/www/draemon/wsgi.py

 

ここまで完了したらApacheのデフォルトのページと、今回のプロジェクトのページを切り替えます。

sudo a2dissite 000-default

でデフォルトページを切り離します。

sudo a2ensite draemon

で今回の設定ページを接続します。

これでポート80番へのアクセスがdraemonプロジェクトになります。

systemctlからApacheをリロードもしくは、再起動させます。

リロード

sudo systemctl reload apache2

リロードでうまく表示されなかったら再起動してみましょう。

sudo systemctl restart apache2

 

ブラウザで繋げばDjangoのデフォルトページが表示されるハズです。

f:id:DreamerDream:20180919164010p:plain

 

これだけのことなのに情報錯綜しててうまく動かず手間取りました。

 

 

 

次回はApacheのドキュメントルート以外でDjangoを動かします。 

dreamerdream.hateblo.jp

 

 

<参考サイト> 

[raspberry pi]djangoをwsgiでapache2によりdeployまで | そんなヒロシの備忘録

Apache2.4で、アクセス制限の記述方法が変更されていた

Django を Apache と mod_wsgi とともに使うには? | Django documentation | Django

Django事始め: 3_Apache連携

Django1.9 環境非依存のwsgi.pyの書き方

やむとらぼ: Raspberry Pi Zero W の Django を Apache で動かす

pyenvの使いかた(今回は必要無かった)

RaspberryPiにpyenvでPython3環境を作る

Raspberry Pi3にPyenvをいれてみた。環境構築メモ | ビット世界冒険記

WSGI動作確認方法

mod_wsgiでhello worldを描画する

ネットリテラシーとは?なぜ何でも自由なハズのインターネットなのに人に迷惑をかけちゃいけないの?

Twitterであまりに非人道的な投稿や迷惑行為を披露をする「バカッター」と呼ばれる人が問題になってから「ネットリテラシー」という言葉をよく聞きませんか?

 

一言で言えば

ネットワークや情報を正しく利用できる能力のこと

ですが、何故正しく利用しないといけないのでしょうか?

f:id:DreamerDream:20180919103946j:plain

道徳的?人道的?

それもありますが、「自身の身を守るため」ということをここではお伝えしておきます。

 

インターネットの世界は「何処の誰が発信しているのか」という情報は基本的には見えないはずですよね?

もちろん、僕の本名もプロフの「おにゃんこぽん」ではありません(笑)

 

そういった匿名性の高いインターネットの世界においては、「誰が誰に何を言おうとかまわない」と感じてしまうのも無理はありませんが

f:id:DreamerDream:20180919104035p:plain

 

実は

ちゃんと「誰がどんな発言をしているのか」とう情報は管理されていますし、情報は途中で抜かれている可能性もあるのです。

今は全世界で、できるだけ情報が途中で抜かれないようなシステムを作ろうとしていますので途中で抜かれるようなことは減りました。が、

dreamerdream.hateblo.jp

 

 

あの発言も秘密の画像も「サーバー」には履歴として残っています。

f:id:DreamerDream:20180919122630p:plain

もちろん自由に扱える型で配布はされていませんから一般人には見えませんが、サーバーを管理している「管理者」側は見ようと思えば見れます。

f:id:DreamerDream:20180919122650p:plain

見られているかどうかは解りませんが見ることは可能なのです。

 

TwitterなどのSNSに限らず、ブログに限らず、掲示板に限らず「サービス」という型で提供されているものには「サーバー」が存在し、それを運営している側の「管理者」が存在します。

管理者は一人じゃない場合もあります。

 

ほとんどのサーバー管理者は個人的な情報を公開しないという約束を「規約」という型で紹介していますが、利用規約をよくよく見ると「こちらが必要と判断した場合には利用させていただく場合もあります。」「もしかしたら漏洩することもあるかもしれないけど、その際は自己責任でよろしく!」とほぼ必ず抜け道が書かれています。

 

利用規約なんてあまりよく見る人は無いでしょうけれど、殆どの利用規約にはサーバー運営側が不利にならないようになっています

サービスを利用する=(イコール)=利用規約に同意している

と見なされるので、管理者が必要と判断した場合にはあなたの情報、発信内容は公開されてもおかしくは無い状態なのです。特に刑事事件等で警察に情報を求められた場合には開示(走査協力)する場合があります。

 

例えば、SNS等で個人的にメッセージをやり取りする場合、イメージ的には自分のスマホから相手のスマホへ直接メッセージが飛んでいるように感じます。

f:id:DreamerDream:20180919124259p:plain

しかし、実際にはセキュリティーに守られたサーバーを介した通信ですのでサーバー側からは見ようと思えば見える状態なのです。

 

f:id:DreamerDream:20180919124314p:plain

 

管理者にモラルがあるなら知り得た情報を一般に開示することはまず無いでしょうけれど、もし「ネタとして開示しちゃおう!」という悪徳管理者の場合は困った事になりえます。

f:id:DreamerDream:20180919125249p:plain

運営側が大きな組織の場合は守秘義務がありますので外部に漏らすなんてことはまず無いでしょうけれど悪意のある個人がサーバーを運営する可能性も十分にあります。

きちんとした業者に見せかけて個人情報を抜くというフィッシングサイトなんてその代表格です。

 

インターネットを上手に利用するには、

常に「誰かに見られているかもしれない

という感覚でインターネットを利用するようにしましょう。

そういう感覚で利用すると、自ずと迷惑をかけないネットリテラシーのある利用方法になります。

小学生でもわかる!共有鍵(共通鍵)、公開鍵と秘密鍵とは?

インターネットではここ近年、「http」から「https」のセキュアな通信へと移行する動きが出ています。

f:id:DreamerDream:20180917145052p:plain

 

今回はhttpsで使われている暗号化技術の1つ、「共有鍵」「公開鍵と秘密鍵」について、難しいことは専門家がかな〜り詳細に説明してくださっていますので、僕は難しいことは避けて出来るだけ実生活の中で使われるような方法で簡単にイメージをしていただこうと思います。

 

まずは、どのWebページでも説明されていると思われる基本的なことですが、

例えば、AさんがBさんに手紙を出す事にします。

f:id:DreamerDream:20180918122617p:plain

 

どうでも良いような内容であれば、第三者を仲介者として手紙を運んでもらっても全く問題はありませんよね?

f:id:DreamerDream:20180918122655p:plain

 

ここで大事なのは、この「第三者」は見るかもしれないし、見ないかもしれない。ということです。

これが、インターネットで使われるいわゆる「生のデータ」であり、httpで接続された状態です。

インターネット上の情報は誰かに見られているかもしれません。しかし見られないかもしれません。

「送っている人も受け取る人も見られているか見られていないかは解らない。」というのが基本です。

 

こういった生のデータは単純なホームページの閲覧程度であれば問題視されませんが、クレジットカードの情報等の個人データを扱う場合には大問題になりかねます。

 

そこで、httpsの大切な機能の一つ!大事な手紙は「鍵の付いた箱で運ぶ!

f:id:DreamerDream:20180917145125p:plain

という方法が提案されます。(「暗号化」と呼ばれる技術です)

 

f:id:DreamerDream:20180918124305p:plain

これならば第三者に見られることはありませんし誰かに盗まれたとしても開けられる心配もありません。

問題解決!とおもいきや、これではBさんにも開けられません。なんてこった!

お互いにヒミツのデータをやり取りする場合は、お互いに同じ鍵が無いと中を見る事ができません。

この、お互いに同じ鍵を持った場合、共通した鍵を「共有(共通)鍵」といいます。

f:id:DreamerDream:20180918124155p:plain

 

では、何かの方法でAさんにはBさんにも使える南京錠を開けるための共有鍵を渡さないといけませんね。

しかし、普通に鍵だけ送った場合

f:id:DreamerDream:20180918124429p:plain

複製を作られる可能性があります。

 

f:id:DreamerDream:20180918124619p:plain

 

この一度の取り引きで鍵を盗まれてしまえば、今後いくら鍵をかけても無駄ということになります。

じゃあ別の鍵を用意しますか?その別の鍵はどうやって安全に送りましょうか?

 

・・・・・・・・・・

ここで、だいたいのwebページで紹介されているのは公開鍵と暗号鍵という鍵の存在でしょう。ほとんどの説明ページはこのような2本の鍵のある図になっていると思います。

f:id:DreamerDream:20180918122127p:plain

 

 

「鍵なのに?閉めれるけど開かない?」そういう誤解や混乱を避けるためには施錠専用の公開鍵を「解錠状態の南京錠の錠」そのもの、解錠専用の秘密鍵を「南京錠を開けるための鍵」とするとここでは理解しましょう。

f:id:DreamerDream:20180918125425p:plain

 

今度はBさんに鍵の掛けられる公開鍵(解錠状態の南京錠)を送ってもらいましょう。

この錠はBさんの持っている秘密鍵でしか開けられません。

 

f:id:DreamerDream:20180918125726p:plain

 

 

AさんはBさんとやり取りするための鍵(共有鍵)を1本箱にいれ、公開鍵を閉めました。

公開鍵で一度閉めてしまえばAさんにも開ける事が出来ません

f:id:DreamerDream:20180918130020p:plain

 

公開鍵で施錠された共有鍵は途中で第三者が共有鍵の複製を作ろうとしても中が解らないので無理です。

 

f:id:DreamerDream:20180918130512p:plain

 

公開鍵によって施錠された箱をBさんは手元で持っていた秘密鍵を使って開ける事ができました。

中には共有鍵が入っていましたので、それを使って無事に秘密の手紙も見る事ができました。

f:id:DreamerDream:20180918130917p:plain

そして、今度は共有鍵を既に持っているAさんへも同じ鍵で秘密のデータを送れば誰にも見られることはありませんね。

めでたし、めでたし。

 

と思いきやっ!

三者がBさんの公開鍵を手に入れ、偽の公開鍵をAさんに渡した場合はどうなるでしょう??

AさんはBさんの公開鍵だと信じてしまいます。これが「なりすまし」と呼ばれる方法です。

f:id:DreamerDream:20180918132934p:plain

AさんはBさんの公開鍵だということをどうやって確認するのでしょうか?

実は「証明書」という型で確認することができますが・・・

証明書のお話は今回の本題ではなってしまうので今回はこのあたりで失礼します。

 

証明書の必要性はコチラ↓に詳しく書かれていますので興味があれば是非。

glorificatio.org

 

今回の目的、共有鍵、公開鍵と秘密鍵のイメージは掴んでいただけましたでしょうか?

このように、インターネットでの大事な情報のやり取りにはいろいろな鍵を渡して、キチンと本人に渡っているのかを確認するような機構が複雑に作られています。

そしてこれらは私達が意識せずとも自然に使っている技術なのです。

 

しかしインターネットのセキュリティー技術も人が作るものですから「カンペキ」というものは無く、今でもあの手この手での攻防戦が繰り広げられています。

 

https通信をするには基本的に外部機関の証明書が必要ですが、例えば自分だけしか使わないような暗号化通信のみを取り入れたい場合には「オレオレ証明書の発行」という方法もあります。

dreamerdream.hateblo.jp

 

実際の暗号化の方法について興味を持たれましたらこちらが詳しく載っていますのでオススメです↓。

qiita.com

 

さいごに、

https通信がいくらセキュリティーがしっかりしているといってもサーバー側からは情報は見ようと思えば丸見えの状態ですので「誰かに見られている可能性」を考え、ネットリテラシーのある言動を心がけましょう。

dreamerdream.hateblo.jp

 

災害で孤立してしまった時に役に立つグッズや方法

天変地異で被災してしまったり事故に遭遇して援助や頼りに出来る人がいない状況下で孤立してサバイバルすることになった場合、「私なら生き残れる!」と自信を持って言える人はどのぐらいいるでしょうか?

 

状況によりますが「いろいろな状況を予めシミュレートして準備をしておく。」ことは命をつなぐ上でとても大切なことなのです。

f:id:DreamerDream:20180917150028p:plain

いろいろな状況が考えられます。陸路の寸断による孤立、旅先での被災、事故による遭難などなど

 

たとえば、震災等での緊急の持ち出し袋の準備は大事ですが本当にこの中身だけで何週間も孤立してしまった時に助かるでしょうか? 

dreamerdream.hateblo.jp

 

緊急時に情報の無い中で少しでも命をつなぐグッズやアイデアをここに纏めます。

<ブログ内画像クリックで詳細ページへリンクします>

 

 

 

水の確保

まずは何を置いても飲み水を確保しましょう。命に関わります。

成人が一日に消費する水分は最低2Lとされています。運動や気温、また食品に含まれる水分でも左右されますのが、最低でも2Lは確保する必要はあります。

水の確保はいろいろな状況での取得方法が考えられます。

 ウォーターサーバーがあれば緊急時でも綺麗な水が確保出来ます。

dreamerdream.hateblo.jp

また、給湯器でお湯を貯めておくタイプ(エコキュート)は中に常に新鮮な水道水が溜まっていますので緊急時に綺麗な飲料水が確保出来ます。 

井戸の場合、くみ上げポンプが電動式の場合、停電してしまうと井戸は使えません。手動、もしくは発電機の用意が必要です。

川や池が無い場合はまずは雨水をどうにかして確保しましょう。

川や池等で採水する場合、濁った水はしばらく置いておいて上澄みを使いましょう。

電力やガスなど大きな熱源が使える場合

グッズを利用する

近くに池やプール等の水源がある場合、蒸留装置があれば安全な水を確保することが出来ます。

海水であっても蒸留装置があれば塩分を含まない水を確保することが出来ます。

 

 

 

 

商用電源や太陽光発電など、水源が無い、雨水さえ無い状況でも電力だけはなんとか確保出来る状況であればこのような「空気中の水分から水を作る」という装置を稼動させることが出来ます。

 

 

 

簡易的な蒸留装置を作る

鍋があればこちらのような方法で簡易的に蒸留装置を作ることが出来ます。

matome.naver.jp

 

 

電気や熱源が使えない場合

 

便利グッズを利用する

手動式装置で安全な飲み水を確保することが出来ます。

 

 

また、一人で使うにはこちらで充分です。

 

 

 

 

植物を利用する

・「朝露」を集めて回る

公園などの草のあるところで早朝に吸水性のある布を引きずって回ります。すると布に露が付着するので後で絞ると水を確保出来るというワケです。

ビニール袋に草を集める

草を摘んで、ビニール袋に入れて炎天下に放置します。

太陽熱で蒸れて草から出た水分が底に溜まるというワケです。2Lもの水分を確保しようとおもうとかなりの量が必要そうですが方法としては簡単ですね。 

 

出た水分を再利用する

「再利用」と聞くと聞こえが良いですが、要はおしっこを飲むという方法です。

嫌だけれどもし命に関わるなら仕方の無い選択肢です。非常時には排泄物さえ利用する必要があるのです。

ちなみにこの再利用は宇宙ステーションでは当然ながら濾過装置を通していますが、普通に行なわれている方法です。孤立した状況下でおしっこは貴重な水資源だと覚えておきましょう。


千原ジュニア 宇宙でのおしっこは再利用して飲料水

 

食料の確保

非常食の利用

非常食があればそれに超した事はありません。

パウチ式のもの、フリーズドライ式のもの、おやつまで種類は色々あります。

dreamerdream.hateblo.jp

 

 

採取

野草も場合によっては食べないといけません。

中には食べると危険なものもありますので代表的なものだけでも覚えておきましょう。

例えばトリカブトは有毒で有名だけれど、ニラに似たスイセンが有毒だと意外と知らない人は多いです。

inakasensei.com

 

釣り

海や川で釣りをするという方法もあります。

釣り道具の自作は難しいですが、この動画ではプルタブを使ってうまく釣り竿を作っています。身近な道具を改造して必要な道具を作る能力がサバイバルでは求められます。


Simple Survival Life Hacks

 

狩り

狩猟ですね。かつての人類はヤリやモリで大型の動物を長時間追いかけ回して疲労させたところを為留めていたとされていますが、人間の体力があまり無いこの時代では檻やワイヤーで罠を作って仕掛けるのが現実的でしょう。


【獣害対策】イノシシ•鹿捕獲用くくり罠 設置

 

 

風雨から身を守る

風や雨から身を守る壁と屋根のある場所を確保しましょう。洞窟があればベストです。

風雨や低気温による低体温症は判断を鈍らせます。 

ビニールシートやトタンなど、何でも利用出来る物は利用して風雨を凌ぐ場所を確保しましょう。

動画では草で小屋を作っています。(台風が来たら飛ばされそう)


Primitive Technology: Grass hut

 

 

熱源の確保

火ですね。熱源があれば飲食物を安全に摂取することができます。

サバイバルで一番怖いのは脱水です。脱水は下痢によって起こります。つまり、お腹を下さない食べ物を確保するというのが生き残る為には必要なのです。戦争による死者の多くが戦闘での負傷ではなくこの脱水によって命を奪われています。

一時期「生レバー」が話題になりましたよね。やっぱり生食って危険なんです。

火が使えればウイルス、細菌、寄生虫などの被害から身を守る事が出来ます。

寄生虫に侵された人(グロ注意)↓

http://sharetube.jp/article/1268/

火の起こし方は沢山あります。

基本は細かな繊維のものに種火を付けて充分に火種が育ってから大きな木材へと火を移していきます。キャンプでは着火材が使われますが、サバイバルでは松ぼっくりが着火材として優秀です。覚えておきましょう。

 

摩擦熱

木と木を擦り合わせて摩擦熱で火を起こすというのは定番中の定番でしょう。

綺麗な棒をクルクル回すよりこういう風に長さを確保して起こした方が手が痛く無く楽です(結構力は必要です)


竹で火起こし サバイバル 火起こし

 

火打石

火打石は意外と知られていませんが、その辺の河原に転がっていることがあります。

動画では着火材として100%綿を炭状に炭化させたものに火をつけています。へー!そんなんあるんだ。


夏休みの宿題 資料 火打石で火を熾す

 

レンズ

これは小学生ぐらいで一度は実験したことあるでしょう。

太陽光+虫眼鏡ですね。


【ダイソー】虫眼鏡で火をつける【簡単着火】

 

ラップ/ビニール

レンズと同じ方法ですが、レンズとなるのは水です。

一時期猫避けペットボトルで火事になるというニュースがありましたが、水でも工夫して焦点を合わせれば火が起こせます。


水で火を起こすサバイバル術

 

電球の反射材

レンズは透過した光を焦点に集めるのに対し、こちらは反射した光を集める方法です。


懐中電灯で火をつけるサバイバル術

 

 

 

電力の確保

携帯電話の電力が確保できれば情報を得る事が出来ます。

残念ながら電力はそれ相応の設備を予め用意しておかないと発電機から自作するとなると大変なことになります。

方法は、発電するか、蓄電するかしか方法はありません。

dreamerdream.hateblo.jp

dreamerdream.hateblo.jp

 

 

情報の送受信

情報の取得が出来れば気持ちが楽になります。

発信が出来れば助けを求める事もできます。

はやり1番はスマホが頼りになることでしょう。 

メインのスマホが壊れた時のことを考えると古いスマホは捨てずに使える状態を保っておく事をオススメします。

dreamerdream.hateblo.jp

 

Djangoの使い方②基本のアプリケーション作成(HelloWorld!)

前回①のように

dreamerdream.hateblo.jp

 

 

Djangoが無事に起動して基本画面を表示してくれたら今度は「Webアプリケーション」を作成しましょう。

といっても今回は静的ページに「HelloWorld!」と表示するだけのものですが、これが全ての基本ですので舐めないようにしましょう。

まず、manage.pyファイルのあるディレクトリからhelloアプリケーションを作ります。

$ python3 manage.py startapp hello

無事にアプリケーションが作成出来たらlsで中身を見てみましょう。

$ ls hello/
admin.py apps.py __init__.py migrations models.py tests.py views.py

この中のviews.pyというファイルがアプリケーションの基本中の基本となるファイルです。

views.pyからの返事が反映されます。

Djangoではこのviewsに入っている関数を「views関数」と呼び、用語として頻繁に出て来ますので覚えておきましょう。

 

では、views.pyにHelloWorld!と返答するプログラムを書いてみましょう。

$ nano hello/views.py

 

from django.shortcuts import render
from django.http.response import HttpResponse
# Create your views here.
def hello_world(request):
    return HttpResponse("<h1>Hello World!</h1>")

内容はごく単純に、ファイル内のhello_world()関数が呼ばれたら"<h1>Hello World!</h1>"とreturnされるだけのものです。

 

次に、helloアプリケーション内にurls.pyというファイルを作ります。

$ nano hello/urls.py

これは初期状態では作成されていません。必ず必要というフィアルでは無いからです。プロジェクトを作った際に自動作成されたdraemon/urls.pyからも先ほどのviews関数を呼ぶ事ができるからです。

しかし、Djangoでは各アプリケーション毎にurls.pyを作成して管理することを推奨としているようですので作成します。実際大規模なサイトであればあるほど分割管理した方が都合が良いでしょう。

from django.conf.urls import url
from . import views

urlpatterns = [
    url('', views.hello_world,name="hello!"),
]

 

urls.pyでは「このurlsファイルに訪ねて来たら、views関数のhello_worldからの返答を返す」ことを表現しています。

 

次に、プロジェクトで自動作成されたurls.pyを編集します。

$ nano draemon/urls.py

こちらは先ほどのurls.pyへ割り振る役割です。

from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url

urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', include('hello.urls')),
]

 

「(アクセスURL)/hello/」というリクエストがあればhello.urls.pyへ作業を流しています。

 

helloアプリケーション自体はここまでで体勢が整いました。

次に、プロジェクトに「hello」アプリケーションを登録します。

登録は簡単、

$ nano draemon/settings.py

でアプリケーション名'hello'を追記するだけです。

INSTALLED_APPS = [
'hello',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

 

出来たらサーバーを起動して

$ spython3 manage.py runserver 0:8000

ブラウザで呼び出してみましょう!

f:id:DreamerDream:20180907090649p:plain

成功しましたか?

 

 

試しにいろいろ弄って試してみましょう。

例えば、先ほどの

$ nano hello/urls.py

を編集して

urlpatterns = [
    url('world/', views.hello_world,name="hello!"),
]

とすれば、アドレスはhello/world/でアクセス出来ることになります。

f:id:DreamerDream:20180907094007p:plain

おめでとうございます!

f:id:DreamerDream:20180910130834p:plain

Dijangoはアプリケーションを起動することが出来ました。

 

 

次回はサーバーアプリApache2と連携テストをします。 

dreamerdream.hateblo.jp

 

 

Djangoの使い方①基本(超簡単!5ステップでDjangoを動かす)

Djangoってかなり奥が深いWebフレームワークなんで超初心者向けのサイトはあまり無いんですよね。(チュートリアルが難しいのなんのって・・・)

 

書籍としてkindle本なら0円で読めるものがあったりしますが↓どうなんでしょうね?

 

僕の奮闘記はこちら↓

dreamerdream.hateblo.jp

 

 

プロジェクトとかアプリとか難しい用語が沢山あるけど、とりあえず動かないとモチベーションが上がらないので

まずDjangoでつくられたページを表示しましょう!話はそれからだ!!

 

①まずはpip3でdjangoをインストールします。

sudo pip3 install django

pipがインストール出来ていない人は「pip3 インストール」等で調べてください(投げやり)。

 

②インストール出来たら、好きなディレクトリで(どこでもいい、気に入らなかったら消したらいい)プロジェクトをとりあえず作ります。

「draemon」って名前がプロジェクト名。

django-admin startproject draemon

 

③migrateっていう「おまじない」をします。

先ほど作ったディレクトリに移動します。

cd draemon

sqLiteというデータベースを作っています。

python3 manage.py migrate

 

④サーバー起動の設定をします。

nano draemon/settings.py

ファイルの中で以降の設定を変更しましょう。

..........

ALLOWED_HOSTS = ['*']

.............

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

..............

意味は、「どこからのアクセスでも繋げる」「言語は日本語」「タイムゾーンは日本」です。

 

⑤サーバーを立ち上げましょう。

python3 manage.py runserver 0:8000

ブラウザから8000ポートへアクセスしてロケットが表示されると成功です。

Djangoサーバーの動いているPCからアクセスする場合はアドレスに「localhost:8000」と入力します。

無事にロケットが発射されましたら成功です!おめでとうございます!

f:id:DreamerDream:20180906163105p:plain

今回は以上です。

 

Djangoは奥が深いので僕も現在使いながら勉強しているところです。

僕は「自分が勉強するための一番の近道は『人に伝えること』」だと考えています。

理解できた機能や使い方などをブログの日付に関係無く「Djangoの使い方」として①→②→③と順番にリンクが辿れるようにを貼っていきます。つまりリンクの無いブログはその時点での「理解の最終地点」です。気長に見守ってやってください。

 

dreamerdream.hateblo.jp

 

kampa.me