DreamerDreamのブログ

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

Djangoの使い方⑦formの使い方とテンプレートで動的なページを作る方法

 前回記事

dreamerdream.hateblo.jp

 

 

formは動的なWebページでは書かせない要素です。

基本的にはGETかPOSTでサーバーにリクエストを飛ばします。

(PUTやDELETEリクエストもあるけど必要性を感じません。)

 

index.html

<form method="post" action="">
Hello!<br>
<p>
<textarea name="text" rows="5" cols="30">テキスト内容</textarea>
</p>

<input type="submit" value="送信"><input type="reset" value="リセット">
</form>

 

というフォームを書いた場合

f:id:DreamerDream:20181012132959p:plain

と表示されます。表示されるだけで何も起こりません。

何を書いても送信かリセットを押すと最初の文章が戻ります。

 

1つづつ見ていきます。

<form method="post" action="">

ここからPOSTリクエストされますよーという指定です。

リクエストを送信した後、action=で指定されたページに飛びます。何も指定が無ければページはそのままで更新されます。


Hello!<br>

単なる文字列です。説明の必用は無いでしょう。


<p>
<textarea name="text" rows="5" cols="30">テキスト内容</textarea>
</p>

テキスト入力が可能なテキストエリアです。

name=はリクエストを送信した時に「’text’の内容ですよー」という印です。

rowsは行、colsは幅です。

 

<input type="submit" value="送信"><input type="reset" value="リセット">

送信ボタンとリセットボタンです。

type='submit'とするとボタンを押すとform内容をPOST形式で飛ばします。

type='reset'とするとボタンを押すとformの内容が全てリセットされます。

</form>

 

とまあ、超単純なテキストの内容をリクエストするだけのフォームです。

ちなみに、GETリクエストは文字コードや文字数制限やらややこしいですが、POSTは文字コードや文字数は無制限で送信できますのでこのようなテキストエリアならPOSTが望ましいです。

 

で、このリクエストをDjangoではどのように受け取るのかといいますと、辞書形式でnameを指定するだけなのですごく簡単!

views.py

from . import forms

from django.shortcuts import render

def form(request):

  text = request.POST['test']

必用なのは、これだけ。

request.POSTで先ほどのフォームの中でname指定した値を辞書形式で取得出来ます。

これでtextにテキストエリアの内容が格納されます。

あとは煮るなり焼くなりプログラム次第でお好きにどうぞ!ってことです。

request.GETを指定するとGET形式で取得出来ます。

 

GETかPOSTかの判定は

if request.method == 'POST':

で判定できますので

同じアドレスでもGETとPOSTを混在させることが容易になります!面白い!

 

views.py(必用な部分だけ抜き出しているのでこのままじゃ動かないかも)

def form(request):
  if request.method == 'GET':
    d={
      'message': 'GET!',
      'text': 'テキスト内容',
    }
    return render(request, 'index.html',d)

  elif request.method == 'POST':

    text = request.POST['text']  

    result = 'text内容は'+text+'でした。'

    d={

      'message': 'POST!',

      'text':result,

    }

    return render(request, 'index.html',d)

 

こうすると、GETでのアクセスとPOSTでのアクセスの挙動を変えることができます。

結果の挙動を変えるため、最終的にrenderでテンプレートに貼付けています。

 

テンプレートの書き方はこんな感じです。

index.html

<form method="post" action="">
{% csrf_token %}
{{ message  }}<br>
<p>
<textarea name="text" rows="5" cols="30">{{ text }}</textarea>
</p>

<input type="submit" value="送信"><input type="reset" value="リセット">
</form>

※{% csrf_token %}の部分はDjangoが生成する不正アクセス予防の為の値になります。POSTリクエストを飛ばす際にはこれを書かないとエラーが出ます。

 

テンプレートは {{  }}で囲われた部分が、views.pyのd{}で指定していた値に置き換えられる便利な機能です。(ちなみに、軽量フレームワークのBottleでも同じような機能がありますが使いにくいです。)

これを利用すると、リストをそのままテンプレートに飛ばす事が出来ます!

フォームのselectを利用する場合、通常では

index.html

<select name="number">
 <option value='0'>0</option>

 <option value='1'>1</option>

 <option value='2'>2</option>

 <option value='3'>3</option>

 <option value='4'>4</option>
</select>

 

と書くと、このような選択ボタンが表示されます。

f:id:DreamerDream:20181012142056p:plain

Djangoのテンプレート利用では

index.html

<select name="number">
{% for num in nums %}
<option value='{{ num }}'>{{ num }}</option>
{% endfor %}
</select>

と書き、先ほどのtextへの代入と同様に

views.py

nums = ['0','1','2','3','4','100','200','300']

  d={

      'number': nums,

    }

    return render(request, 'index.html',d)

 

とnameを指定してリストを代入すれば、テンプレートのfor分で繰り返し処理して綺麗に並べてくれます。

ファイルの操作など、内容が変動するものを代入するにはうってつけの機能ですね。

f:id:DreamerDream:20181012155235p:plain

 

 

dreamerdream.hateblo.jp

 

<参考> 

https://eiry.bitbucket.io/tutorials/tutorial/forms.html

3Dプリンターのプリントヘッドを交換してみた

以前に弾性フィラメントの上手な使い方として記事を書いていました。 

dreamerdream.hateblo.jp

しかし、とうとうこの方法でも長時間の出力が怪しくなって来ましたのでメンテナンスすることにしました。

 

原因はおそらくプリントヘッドのバレル内にあるPTFEチューブ(テフロンチューブ)の寿命と考えられます。

以前、たまたまPTFEチューブが外れたときに結構焦げがついていました。

このところPLAでも安定しない時があったのでそろそろかなー?と思いながらもシリコンスプレーを吹いたりサラダ油を注したりと騙し騙し使っていたのですが、久しぶりにフレキシブルフィラメントを出力すると一発でNGでした。

 

ということでバレル中のPTFEチューブの耐熱260℃まで対応しているものを取り寄せました。

<詳細は画像クリック>

 

ところが、外径4mm内径2mmのこのチューブ、今使っているバレルには合いませんでした凹(使ってたバレルは外形3mmに合うタイプ)。

おそらく、このタイプ↓

<詳細は画像クリック>

 

このバレルを交換しようかとも思ったのですが、どのみち長時間同じように使っていたら同じようにチューブがヘタってくるので、もういっそのことプリントヘッドごと交換することにしました。

↓このプリントヘッドのセットであればバレルだけじゃなく、ノズルもヒートブロックもヒーターもサーミスタも全部付いてくるので万が一他が故障してもサイズが合えば交換できるよね?という発想でこちらを注文。 お値段も千円ちょいでこれだけセットならお得ですよね。

 

<詳細は画像クリック>

 

 

こちらが、新(上)旧(下)のヒートシンク+バレルを比べたものです。

f:id:DreamerDream:20181005083343p:plain

サイズは大体同じだけど、ヒートシンクの羽間隔も枚数も同じだけどが若干薄いです。

 

出力側新(上)旧(下)

f:id:DreamerDream:20181005083351p:plain

内部に使われているバレルの種類が違います。少し長いように見えます。

1mmほど長かったので最後にテーブルの高さ調整が必用でした。

 

入力側新(右)旧(左)

f:id:DreamerDream:20181005083409p:plain

使っている3Dプリンターはヘッドにエクストルーダーの部品に直付けタイプなので左の方が合っていますが、Amazonで見つけられなかったので今回はチューブ付きのタイプを購入しました。チューブを固定するねじ切りがされていて穴は邪魔なほど太すぎます。

(僕の3Dプリンターの構造は、エクストルーダーの直近までPTFEチューブを通せるのでこれで問題ありません)

 

新しいものは、このように外形4mmのPTFEチューブがズドーンと通せます。

入力からバレルまで穴径4mmです。前に購入したチューブが無駄にならずに済みそうです。

古い方は、入力側の穴が2mm程度しか開いていないので通せません。

f:id:DreamerDream:20181005083418p:plain

 

今回はヒートブロックのネジサイズが同じなのでこのヒートシンクとバレルだけ交換することにしました。

ヒートブロック、サーミスタ、ヒーター、ノズルはまた別の機会があれば交換します(サーミスタの精度は個体差があるので交換すると大幅な設定温度調整が必用になることがあります)

 

さて、古い方のバレルがどうなっているかバラしてみましょう。

f:id:DreamerDream:20181005083424p:plain

ゴム膜などで保護しながら(CDプレーヤー分解したときに出て来た防振部品)ペンチで回すとネジが傷つかず外れます。

f:id:DreamerDream:20181005083429p:plain

ヒートシンク内部も少し汚れているようです。おそらく少しフィラメントが漏れたのでしょう。

f:id:DreamerDream:20181005083435p:plain

バレル入力側、FTFEチューブは奥にひっそりと見えますがこちらからは引き出せそうにありません。

f:id:DreamerDream:20181005083439p:plain

バレル出力側から見るとPTFEチューブはかなり奥に追いやられていました。

PTFEチューブは出力側からしか外せません。

f:id:DreamerDream:20181005083445p:plain

 

 

今回の新しいバレルは上から下までズドーンと4mmなのでこのタイプ↓

<詳細は画像クリック>

 

クリップで押し出すとなんとか外れましたが、かなり摩耗している様子です。

徐々に溶けたのでしょうか?

f:id:DreamerDream:20181005083450p:plain

これではまともに出力できるハズがありませんね。

 

 

さて、図解です。

今までのエクストルーダーとプリントヘッドを図にするとこのような感じです。 

 

f:id:DreamerDream:20181005091752p:plain

上から、ピンクがエクストルーダー、緑がエクストルーダーの支え部品、黄色がヒートシンク、オレンジがバレル、水色がPTFEチューブ(バレルとノズル)、茶色がヒートブロック、赤がノズル、青がフィラメント

 

 

このプリントヘッドの構造には欠点がいくつかあります。

というか3Dプリンター自体が発展途上なので完ぺきなプリントヘッドなんてありません。

f:id:DreamerDream:20181005091801p:plain

フィラメントをエクストルーダーに通す時、入力で少し手間取ります。

赤丸の所が各部品の接合部ですので、フィラメントが引っかかる可能性のあるところです。また溶けたフィラメントが漏れるのもこの接合部です。

 

今回、バレル内のPTFEチューブが上部に追いやられていましたので、図解するとこのような型になります。

内部のチューブの途切れた箇所が広く出来てしまい押し出し抵抗が強くなり、エクストルーダーからの力が分散されてしまいます。上からの力を出来るだけ直に伝えないと押し出せない弾性フィラメントにとっては特に致命的です。

f:id:DreamerDream:20181005091811p:plain

 

で、交換した新しいものにするとこのいくつもあった部品の接合部の問題が改善されます。

溶けたフィラメントが漏れる可能性があるのはバレルとノズルの接合部だけです。

PTFEチューブをエクストルーダー近くにもっていけるのでより曲がりにくく押し出せます。エクストルーダーの部品の穴は2mm→4mmへドリルで広げました。

PTFEチューブの交換が必用な時はノズルを外して上からチューブを押し出せば簡単に交換することが出来ます。(古いものはバレル自体を取り外さないと抜けません)

f:id:DreamerDream:20181005091817p:plain

 さて、効果のほどは?

 

 

この交換のあと早速16時間の大物を出力しました。

その後でさらに1時間程度のものを追い打ちで2回出力しました。

(画像は2回目出力のもの)

f:id:DreamerDream:20181009083007p:plain

なかなか良い感じです。

 

が、残念なことにさらに1時間程度の稼動で詰まりが発生してしまいました。

計19時間程度は無問題で出力が出来ましたので前回のただシリコンスプレーを吹いただけのものよりかなり優秀だということは解りました。

で、詰まりの原因究明びためにチューブをそのまま抜いてみました。抜くのはすごく簡単!

少しフィラメントの焦げ?が出ているもののチューブ自体に損傷は無く、特に変な所で溶けている訳でも無さそうです。

(エクストルーダーの部分でフィラメントが曲がっています。)

f:id:DreamerDream:20181009083316p:plain

どこで詰まったんだろ?と観察しますと、ノズルの先端周りにベッタリとフィラメントが貼り付いてしかも焦げています。少し吐出量が多かったのかもしれません。

f:id:DreamerDream:20181009083513p:plain

余ったフィラメントがノズル周囲で固まってしまって押し出せなくなったのが原因だと思われます。

ともあれ、かなり優秀な結果に満足しましたのでコチラ↓の押し出し機、オススメ商品としておきます。

<詳細は画像クリック>

3Dプリンターの「反る」「サポート材の除去困難」なモデルをうまく出力するためのコツ

熱融解式3Dプリンターで出力していると定番の悩みに

「反り」「剥がれ」「底面の荒れ」「サポート材の除去不能

というのが付いて回ります。

 

スライサーでお馴染みの機能、「ラフト」を付けると反りは防げますが、ラフトを剥がすのに一苦労したりします。(緑の部分がラフト)

f:id:DreamerDream:20181003092535p:plain

そういう場合は僕は自分でサポート材をモデルに組み込んでしまいます。

 

サポート材は一層目のみ出力出来る高さの物を仕込みます。

例えば一層目を0.2mmで出力するのであれば0.2mmの高さの四角形を作ります。

f:id:DreamerDream:20181003091424p:plain

 

反りの定番である長いものに、このサポート材を組み込みます。

f:id:DreamerDream:20181003092102p:plain

 

このように両端に組み込めば面積を確保出来るので反りを防げます。

素材や大きさによってサポート材の大きさも変化が必用ですがそれは経験と感です。

このサポート材ならラフトと違って除去も簡単です。

f:id:DreamerDream:20181003092130p:plain

 

櫛型のものであれば

f:id:DreamerDream:20181003092142p:plain

このように細い部分に少し触れる程度にサポート材を補充してあげると先端の定着が良くなるので反りが防げます。

f:id:DreamerDream:20181003092150p:plain

 

 

 

次に、こちらのようなモデル。

上部が細い穴が開いており

f:id:DreamerDream:20181003091442p:plain

下は太い穴が開いています。

f:id:DreamerDream:20181003091451p:plain

断面にするとこのような型になります。ネジ穴等を作る時には欠かせない型です。

f:id:DreamerDream:20181003091505p:plain

 

これを普通にサポート材を付けてスライスするとサポート材(緑色の部分)はこのようになります。

細いパイプ形状であればこのサポートの除去は困難になります。

f:id:DreamerDream:20181003092225p:plain

このような悩みを解決する手段として2つのノズルを持つデュアルノズルタイプの3Dプリンターがありますが、プリンターも水溶性フィラメントもやはり高価。

デュアルでもシングルでもこのような場合、太い穴の上端を埋めるような型で”層の厚さ分だけ”のサポートを付けるのがオススメです。

f:id:DreamerDream:20181003091458p:plain

このようにサポート材が必用ではなくなります。(スライサーでサポート材は「ON」にしています)

f:id:DreamerDream:20181003092237p:plain

これは、1層だけの厚さでサポート部品を配置することでこのように「ブリッジ」として認識されるからです。

f:id:DreamerDream:20181003092248p:plain

これなら何かしらで突くだけでサポートが除去できます。

 

少し工夫すると無駄なサポート材を減らす事が出来ますのでオリジナルサポート材の作成はオススメです。

 

「プラットフォームシート」を使えばラフトなんてほぼ不要です↓

dreamerdream.hateblo.jp

 

 

 

3Dプリンターに関する過去記事もご覧ください。

dreamerdream.hateblo.jp

 

dreamerdream.hateblo.jp

  

dreamerdream.hateblo.jp

  

dreamerdream.hateblo.jp

 

 

Djangoの使い方⑥cssを含むstaticディレクトリのコピー

以前の記事のようにApacheDjangoのページを表示しようとするとレイアウトが崩れることがあります。 

dreamerdream.hateblo.jp

 

原因はデフォルトのスタイルシート、staticディレクトリが読み込めないということです。

 

本来、このような型で表示されるべきところが

f:id:DreamerDream:20180921135643p:plain

 

このようにレイアウトの崩れたページになります。

f:id:DreamerDream:20180921135653p:plain

 

まずはデフォルトのテンプレートが格納されているディレクトリを調べます

$ python3 -c "import django; print(django.__path__)"
['/usr/local/lib/python3.5/dist-packages/django']

 

そのままではapache用に/usr/以下のデフォルトのディレクトリの権限を変更しないといけないので、必要なファイルを含むディレクトリ(今回は求められているstatic/adminのスタイルシート)をプロジェクトのディレクトリに全コピーします。

f:id:DreamerDream:20181001165913p:plain

sudo cp -r /usr/local/lib/python3.5/dist-packages/django/contrib/admin/static/admin/ /home/django/draemon/draemon/static/

つまり、

/usr/local/lib/python3.5/dist-packages/django/contrib/admin/static/admin/

以下のものを全て

/home/django/draemon/draemon/static/admin/

として使います。

 

コピー先にApache2のサイト.confでAliasを設定し、権限を与えます。

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

下記を追加

Alias /static/admin/ /home/django/draemon/draemon/static/admin/
<Directory /home/django/draemon/draemon/static>
Require all granted
</Directory>

これで/static/admin/にアクセスしてきたものがプロジェクト内にコピーしたファイルにアクセス出来ることになります。

コピーなのでスタイルシートも好きに弄って大丈夫です。

 

ディレクトリの場所はややこしいですが、[プロジェクトディレクトリ]/[プロジェクト名ディレクトリ]/staticです。

解らなければApacheのエラーログを見れば良いです。

client denied by server configuration: /home/django/draemon/draemon/static, 

と出ていますのでここのstaticディレクトリが読めていないんだなーということが解ります。

 

 

 

次回 

dreamerdream.hateblo.jp

 

 

<参考サイト>

Djangoの管理画面作成 | 屋根裏の部屋

VPSの使い方 ⑤SWAP領域を拡大する

 前回記事

dreamerdream.hateblo.jp

 

 

僕はVPSの格安プランに申し込んだのでメモリ領域は512MBしかありません。

個人のWebサイトだけであれば充分ですが、それならレンタルサーバーの方が安いのでわざわざVPSにはしていません。もちろん他にもアプリを動かします。もし、何かしらでアクセスが集中するとサーバーが落ちてしまいます。そのための予防手段です。

 

システムで使用されているメモリーを調べるために再起動

sudo reboot

freeで確認すると

free
          total     used      free     shared     buff/cache     available
Mem: 499452 83992 281768 4596 133692 386772
Swap: 2097148 0 2097148

最初から約300MB弱しか余裕が無いのが解ります。

 

ここでhttpdを立ち上げてDjangoの初期ページにアクセスしてみました。

sudo systemctl start httpd

再度確認


free
          total     used     free     shared     buff/cache available
Mem: 499452 165212 178624 4684 155616 304212
Swap: 2097148 0 2097148

そうすると200MB弱しか余裕が無くなります。Apachedjangoを起動させたので当然です。

 

モリーは環境にもよりますが、Webページ1件のアクセスで約20MB〜30MB消費されるとされています。(今回はデフォルトページの表示だけで大したことはありませんが)

ベリーキュート Blog » Blog Archive » Webサイトのアクセス数増加と必要メモリ

そうなると同時に10件や20件のアクセスがあるとあっという間にメモリー不足に陥ります。

モリー不足に陥ったサーバーはSwap領域というストレージ上にメモリー領域を確保しにいきます。

 

上の表のSwapと表されているところがメモリー領域として確保されているストレージ領域です。メモリーが足りている場合は当然使用量は0です。

Swap領域は本来高速なRAMメモリーへのアクセスが必要な処理をストレージで補うのでRAMメモリーより低速です。

ですが、Conohaのストレージは全てHDDよりは高速なSSDです。

これを活かさない手はありません。

モリー不測の事態でも、遅くなっても仕事はしてくれます!

 

ということでSwap領域を拡大します。

Linux の SWAP 領域を増やす : まだプログラマーですが何か?

今、約2GBのswapが確保されているのでさらに+2GBの余裕を持たせることにします。

まずはddコマンドで2GBのファイルを作ります。

sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 4.59156 s, 468 MB/s

swapファイルとします。

sudo mkswap /var/swapfile
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=b865b7eb-584e-444e-age3-dc4fefei

swapとして登録します。

sudo swapon /var/swapfile
swapon: /var/swapfile: insecure permissions 0644, 0600 suggested.

 

fstabに作ったswap領域を追記します。

sudo nano /etc/fstab

 

/var/spool/swap/swapfile none swap defaults 0 0
/var/swapfile swap swap defaults 0 0 <=追記

これで再起動後もこのファイルがswapとして扱われます。

確認します。

free
total used free shared buff/cache available
Mem: 499452 270908 5876 4676 222668 198116
Swap: 4194296 0 4194296

 

これでSwapが4Gとして認識されています。

f:id:DreamerDream:20180928131757p:plain

 

 

Swapを解除するには

sudo swapoff /var/swapfile

として、追記したfstabファイルからも削除します。

 

実際にこんなに必用か?と問われると・・同時に100件アクセス?一生必用無いかもしれません。しかし、もしストレージいっぱいまで使ってしまってから確保するとなると難しいので予め確保しておきます。

実際に500MBを絶えず軽く超えてくるようなアクセスがある場合はサーバーの追加でWebページの移転作業となるでしょう。その際にも4GBもの余裕があると慌てずに済むでしょう。

ちなみにこの方法だとサーバーを再起動しなくてもswap確保できるのだそうです。

 

※過去記事では、RaspberryPiの場合はSwapを使うとSDカードの寿命に影響を及ぼす可能性があるのでSwapを無効にしていました。

dreamerdream.hateblo.jp

Conohaで使われているSSDフラッシュメモリですが、VPSの場合はミラー化してあったりと物理的に寿命がくるようなシステムは全て管理され定期的に交換されていますので、ユーザーはストレージ寿命を全く気にすることなくストレージを使う事が出来ます。このあたりも自宅サーバーよりVPSをオススメする重要な要素です。

 

全5回に渡ってVPS導入からセキュリティー対策等の使い方を備忘録として記しました。

またどなたかの約に立てば幸いです。

 

 

 

#memo:

ここまでの設定をイメージ保存

f:id:DreamerDream:20180928141108p:plain

SELinuxデフォ無効

VPSの使い方 ④必用なアプリをインストールする

 前回記事

dreamerdream.hateblo.jp

 

 

VPS必用なアプリは当然ながら目的によって異なりますが、僕はApacheDjangoでのwebサービスの構築を目指していますのでウェブサービスの為に必用なアプリをインストールします。

中盤のDNSの設定はssh接続だけでも必用かもしれません。

f:id:DreamerDream:20180928131621p:plain

 

 

Apacheインストール

Apache httpd 2.4 を CentOS 7 に yum でインストールする手順 | WEB ARCH LABO

RaspbianではApache2というパッケージでしたが、CenntOSではhttpdというパッケージなのですね。Apacheではなくhttpdと呼んだほうがいいのかな?

sudo yum info httpd

sudo yum -y install httpd

.

.

.

Complete!

 

で完了です。はやっ!

 

とりあえず起動

sudo systemctl start httpd.service

 

アクセスすると、おや?見れませんね。

f:id:DreamerDream:20180926163011p:plain

ファイアーウォールが関係していることがあるそうなので、ファイアーウォールを切ります。

sudo systemctl stop firewalld

再びアクセスすると、おおっ!初めて見るApacheだ!

f:id:DreamerDream:20180926163119p:plain

原因が判明したのでファイアーウォールを再起動させます。

sudo systemctl start firewalld

 

以下のコマンドでhttpの80番ポートの開放とファイアーウォールの再起動をするとちゃんと機能するようになります。

sudo firewall-cmd --add-service=http --zone=public --permanent

sudo firewall-cmd --reload

 

 

 

起動時にhttpdも起動させるにはサービスに設定する必用がありますがまだテストなので登録はしません。

systemctl enable httpd.service

テスト用として任意のポートを開く方法もググったので残します。

【すぐわかる】CentOSのポート開放のやり方

例えばポート8000番を開く場合

sudo firewall-cmd --zone=public --add-port=8000/tcp

恒久的に開く場合

sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent

設定したらリロードして完了

sudo firewall-cmd --reload

確認コマンド

sudo firewall-cmd --list-all

 

Webサーバーとして公開すると大量パケットを送りつけるDDOS攻撃というサイバー攻撃を受けることがあります。PVSではこのような攻撃を受けると、コチラに非が無くとも停止処分を食らうこともありますのでそのような対策ツールの導入も予め検討しておきましょう

dreamerdream.hateblo.jp

 

 

DNSの設定

IPアドレス直打ちでもアクセス出来るっちゃ出来るんだけど、何か気持ち悪いので仮のドメインが欲しいところ。

本気のドメインムームードメインで後ほど取得するとして、今回は過去に無料で取得して使っていない(ムームーに置き換えた)ドメインを転用すようにしました。(VPSは固定IPなのでcronで設定する必要性は無いけど長期間更新しないと消されるので1日置きぐらいで更新)

取得と設定はRaspberrypiと同じ方法で↓

dreamerdream.hateblo.jp

これでドメイン名でHPもSSHもアクセスできます。 

 

と思ったけど、ここでハマった。

 wget http://(マスターID):(パスワード)@www.mydns.jp/login.html

と打ったけど・・・

丸一日、待てども暮らせどもIPアドレスが更新出来ないという事態に陥ってしまった。

しかたがないのでもう一度新しいドメインを取得させてもらって同じように打ったんけど更新されない???

何かおかしい!と思って取得したHTMLファイルを見直すと(---は伏せ字)

<DT>MASTERID :</DT><DD>mydns------</DD>
<DT>REMOTE ADDRESS:</DT><DD>24--:----:---:---:---:---:---:---</DD>
<DT>ACCESS DAYTIME:</DT><DD>2018/09/--8 --:--:-- UTC</DD>
<DT>SERVER ADDRESS:</DT><DD>26--:18-:---:---:---:---</DD>

ちょ?これIPv6のアドレスじゃないの?って調べたら、同じようにハマってた人がいた!!ナマカマカマ

MyDNS.jp と IPv6 : GONGON の無線日誌

「www.mydns.jp」ではなく、「ipv4.mydns.jp」で接続しないとダメだったらしい。。。待ってた一日を返してくれ

てことで、V4アドレスの更新は

 wget http://(マスターID):(パスワード)@ipv4.mydns.jp/login.html

で更新できます。お間違えないよーに。

このドメイン更新のhttp-basicアクセスなのでセキュリティー的にはNGなんだろうけど、とりあえずwebページを作成してムームーで新しく取得するまでは仮のドメインとして使います。

追記) ムームーでドメイン取得しました。

dreamerdream.hateblo.jp

 

 

 

Python3インストール

CentOSは標準でpython2.7、python3はインストールが必用だそうです。こんなレベルからもRaspbianとは違うのか。

CentOS 7 + python3 + Djangoの本番環境を動かしてみる

python3とpip3のインストール

sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm

sudo yum install -y python36u python36u-libs python36u-devel python36u-pip

 

 

Djangoとpipのインストール

sudo pip3.6 install django

pipのアップグレードが促されたのでそれもインストール

sudo pip3.6 install --upgrade pip

 

wsgiのインストール

sudo yum install -y python36u-mod_wsgi

 

設定ファイル

/etc/httpd/conf.modules.d/10-wsgi-python3.6.conf

が作成されるので必用に応じて編集すればhttpdと連携出来るそうですが、もう少しCentOSに慣れたいのでそれはまた後日にします。

 

 

ざっくりとアプリをインストールしてみて、参考サイトの通りにDjangohttpdApache)も試してみました。

CentOS 7 + python3 + Djangoの本番環境を動かしてみる

RaspberryPiと比較した感想は

一言「はやっ!!!」です。

モリーが最低限の512MBプランなのでそんなに変わらんやろー。と思っていたのですが、サスガは大手の回線だけあってアプリのダウンロードものすごく早いしhttpdの起動もレスポンス早いし超キモチイー!!(古)です!

VPS導入してから殆ど待ち時間なくアプリのインストールまで完了しました。

 

 

 

dreamerdream.hateblo.jp

 

 

[memo]

1つのサーバで複数ドメインを運用したい! | Webサイト構築簡単メモ

VPSの使い方 ③不要なサービスとポートを閉じる

 前回記事

dreamerdream.hateblo.jp

 

 

ポートを閉じるにはまずは現段階の何もインストールしていない状態でどのポートが開いているか?を調べる為にポートスキャンソフト、NMAPをインストールします。

yum -y install nmap

nmapコマンドで覚えておきたい使い方11個 | 俺的備忘録 〜なんかいろいろ〜

とりあえずポートの開放状態の確認

nmap 127.0.0.1

 

Starting Nmap 6.40 ( http://nmap.org ) at 2018-09-26 15:12 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00060s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
25/tcp open smtp
111/tcp open rpcbind
50/tcp open ____

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

 

おや?sshで設定したポート以外に25と111が開いています。

111番はリフレクション攻撃の対象ポートだそうです。

リフレクション攻撃の増加でDDoS攻撃が大規模化 | さくらのナレッジ

ファイアーウォールから閉じるのでしょうか?

sudo firewall-cmd --permanent --remove-port=111/tcp
Warning: NOT_ENABLED: 111:tcp
success

止まりません!なんで??

9.6. NFS の起動と停止 - Red Hat Customer Portal

sudo service rpcbind status

でステータスが見れるとフムフム。

じゃあ

sudo service rpcbind stop

で停止できるんじゃないか?と推測

nmap localhost


PORT STATE SERVICE
25/tcp open smtp
50/tcp open ____

止まったようです。が、再起動で復活!なんやねん?これ?

とりあえずサービスで動いてるっぽいから

sudo systemctl stop rpcbind
Warning: Stopping rpcbind.service, but it can still be activated by:
rpcbind.socket

サービス自動起動を停めます。

sudo systemctl disable rpcbind
Removed symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service.

止まった。

 

次、25番はメールの受信ポートらしい。使わないのでもちろん閉じる!

25番ポートを開くという情報は多い物の閉じるという情報は少ないので苦労しました。

メールサーバー構築(Postfix+Dovecot) - CentOSで自宅サーバー構築

こちらの記事もメールサーバーの構築記事だけど、もしかして?と思って確認したら

sudo systemctl status postfix.service

postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2018-09-26 15:53:17 JST; 15min ago

 

はいはい、しっかりメールサーバが動いてましたとも。

sudo systemctl stop postfix.service

で停止して自動起動も停止。

sudo systemctl disable postfix.service

これでsshポート以外閉じることが出来ました。

 

f:id:DreamerDream:20180928131358p:plain

 

 

dreamerdream.hateblo.jp

 

 

kampa.me