djangoの最初とサーバ起動まで

表記の件において復習の為アウトプット。

djangoとは、、

pythonにおける代表的なWEBフレームワーク。

python言語においてWEBアプリなどが作成できるアイテムという解釈

なお、こちらのフレームワークはpipによってインストールする。

 

> pip install django

 

●pipとは

ライブラリ管理用のツール。

PyPIというサードパーティーライブラリよりインストールが簡単にできる。

こちらのpipはpython3.4以上であればプリインストールされている。

pip listにて一覧が確認できる為、djangoインストール後は確認できる。

 

●プロジェクトの作成

所定のディレクトリに移動して以下のコマンドを入力

> django-admin startproject mysite

現在のディレクトリにmysiteディレクトリが作成される

mysite/       プロジェクトのルートディレクト
  manage.py    プロジェクトに対する様々な操作を行うコマンドライン
  mysite/     プロジェクトの実際のpythonパッケージ
     __init__.py  Python パッケージであることを知らせるための空のファイル     

     settings.py Django プロジェクトの設定ファイル

     urls.py   Django プロジェクトの URL 宣言、目次

     asgi.py     ASGI 互換 Web サーバーのエントリポイント

     wsgi.py    WSGI互換Webサーバーとのエントリーポイント

 

 

●サーバの起動

以下のコマンドにてサーバを起動

python manage.py runserver

その後、下記のURLにてアクセスすると、確認できる

http://127.0.0.1:8000/

 

pythonのリスト、辞書と繰り返し処理など

pythonのリストと辞書機能について忘れないように備忘録

 

●リスト

・リストの追加

appendを使用

例:foods = ["apple","banana","grape"]

        foods.append("orange")

        print(foods)

       >>>foods = ["apple","banana","grape","orange"]

 

・繰り返し処理

例:foods = ["apple","banana","grape"]

        for food in foods:

            print(food)

 

●辞書

・値の更新

foods = {"a":"apple","b":"banana","c":"grape"}

foods["a"] = "orange"

>>> {"a":"orange","b":"banana","c":"grape"}

 

・値の追加

foods = {"a":"apple","b":"banana","c":"grape"}

foods["d"] = "orange"

>>> {"a":"orange","b":"banana","c":"grape","d":"orange"}

 

●while文

〜の間繰り返すという条件処理

例:

x=1

while X <= 100:

     print(x)

     x += 1

結果

1 2 3 4 .... 100

 

●break

繰り返し処理の途中で強制的に終了する

numbers = [1,2,3,4,5,6]

for number in numbers

     print(number)

     if number == 3:

        break

結果

1  2  3

 

●continue

条件の処理をスキップする

numbers = [1,2,3,4,5,6]

for number in numbers

     print(number)

     if number%2 == 0:

        continue

     print(number)

結果

1  3  5

 

他にも様々なものがある為、随時覚えていく

dockerイメージの共有について

作成したイメージをdockerで共有するには

リポジトリの作成

プッシュの為の実行コマンドを確認します

・Docker Hubにログイン

リポジトリの作成をクリック

・名前を入力(例としてgetting-started)、Publicであることを確認し、作成ボタンをクリック

すると、ページの右側にDockerコマンドというセクションがある。これはリポジトリをプッシュする時に必要なコマンド

 

●イメージをプッシュ

そのままコマンドを入力してもエラーが出てしまう。

これを避けるために、既存のイメージにタグ付をして別の名前をつける必要がある。

docker login -u YOUR-USER-NAMEコマンドにてDockerHubにログイン

・docker tagコマンドを使用して、getting-startedイメージに新しい名前を付ける

docker tag 新しい名前 YOUR-USER-NAME/getting-started

・プッシュコマンドを再試行

docker push YOUR-USER-NAME/getting-started

これで共有ができる。

 

 

docker起動、更新について

dockerダウンロード後の使用方法について備忘録。

 

●imageの作成をコンテナの起動

dockerにはimageを用意する必要があるが、2通りある。

・docker hubからの取得

 docker pull イメージ名

 

・Dockerfileの作成

 所定のファイルを作成し、textとして自作する。

 そこからbuild

 docker build -t ビルドしたイメージに付けるイメージ名 .

 

imageを用意した後にコンテナを作成する

・コンテナの作成

 docker create --name コンテナに付ける名前 イメージ名

・コンテナ起動

 docker start コンテナ名

 

●runコマンド

 以上のpull create startのコマンドを同時に実行できるのがrunコマンド

 docker run イメージ名

 

●データの更新

 アプリなどでソースコードの更新をした後は、

 イメージの更新をビルド⇨コンテナを削除⇨新しいコンテナを作成

 

・イメージの更新をビルド

 docker build -t ビルドしたイメージに付けるイメージ名 .

 

・コンテナを削除

 docker ps(コンテナの確認)

 docker stop <the-container-id>(コンテナの停止)

 docker rm <the-container-id>(コンテナの削除)

 

・更新したアプリの再起動

 docker run -dp 3000:3000

 

起動後、更新を確認。

dockerの概要、dockerLabs入門について

dockerについての知識がなかった為、備忘録として記載致します。

 

そもそもdockerとは?

マシン自体のOS上に別のマシンを立ち上げること。

 

学習する中で進めていき、dockerのインストールの完了後、

dockerLabsのチュートリアルを実施する。

http://localhost/tutorial/#the-command-you-just-ran

こちらにある入門編から。

 

●コンテナをバックグラウンドで実行

docker run -d -p 80:80 docker/getting-started

 

●コンテナイメージを構築

・こちらのページよりアプリをインストール

http://localhost/tutorial/our-application/

 

・アプリのコンテナイメージを構築

アプリ内のjsonファイルと同じ階層以下の内容のDockerfileを作成

※拡張子が付かないように注意

 

FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

 

その後ターミナルから先ほどダウンロードしたappディレクトリに移動後

docker buildコマンドにてコマンドイメージをビルド

docker build -t getting-started .

 

●アプリコンテナの起動

以下のコマンドにて

docker run -dp 3000:3000 getting-started

この後、http:// localhost:3000

にアクセスをすると、アプリケーションが開かれる。

 

コンテナイメージを構築した後、コンテナ(=アプリの実行環境)を起動するというイメージ。

 

ActionCableをデプロイ時に使用するために

Railsの非同期通信において使用するActionCableにおいて本番環境で使用する際はまた設定が必要な為、備忘録。

 

●config/cable.ymlにてadapterの設定

adapterとは

サーバーから送信された情報をクライアントへ提供する仕組みと連携するためのもの

 

adapterにはいくつか種類がある

・Asyncアダプタ  本番環境での利用は非推奨であるが、個人アプリの規模であれば、基本的に問題はない
・Redisアダプタ 本番環境での利用が推奨されているが、EC2を用いたデプロイを行う際に、幾らか料金がかかる
PostgreSQLアダプタ 本番環境での利用が推奨されているが、データベースとのやりとりには、PostgreSQLを使用していることが条件

 

下記のように記載

config/cable.yml

 
development:
adapter: async
test:
adapter: test
production:
adapter: async

url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
channel_prefix: mini_talk_app_production
 

 

AWSにてデプロイする際の設定

①本番環境の設定ファイルであるconfig/enviroments/production.rbにて設定

 

config/enviroments/production.rb

 

Rails.application.configure do

 

ActionCable.server.config.disable_request_forgery_protection = true
config.action_cable.url = "ws://【Elastic IP】/cable"
config.action_cable.allowed_request_origins = ['http://【Elastic IP】']

 

end

 上記の箇所にElastic IPと共に記載

 

②Nginxのrails.confを編集

ターミナル、EC2内にて

sudo vim /etc/nginx/conf.d/rails.conf

server内にて以下を追記

 

  location /cable {
  proxy_pass http://app_server/cable;
  proxy_http_version 1.1;
  proxy_set_header Upgrade websocket;
  proxy_set_header Connection Upgrade;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }

 

こちらの設定後、Nginxの再起動を行う。

sudo systemctl reload nginx

sudo systemctl restart nginx

 

この処理後、デプロイで反映実施。

 

 

Action Cableについてまとめ

RailsのAction Cableについて概要のまとめとして備忘録。

 

●Action Cableとは

Railsで即時更新機能を実装できるフレームワークのこと

利用にはチャネルが必要

 

●Channel(チャネル)とは

即時更新機能を実施するサーバ側の仕組みのこと

データの送受信の設定などを行う

 

・チャネルの作成

messageチャネルを作成するとしたらターミナルにて

rails g channel message

を実施

 

●message_channel.rbについて

app/channels/message_channel.rbに生成できたファイルについて

このファイルはサーバーとクライアントを繋ぐファイル。stream_fromメソッドを用いることで、サーバーとクライアントの関連付けを設定する。

 

・stream_from

stream_fromとは、サーバーとクライアントを関連付けるメソッド

app/channels/message_channel.rb

 

class MessageChannel < ApplicationCable::Channel
def subscribed
 stream_from "message_channel"
end

def unsubscribed
  # Any cleanup needed when channel is unsubscribed
end
end

stream_fromメソッドで関連付けられるデータの経路のことを、broadcast(ブロードキャスト)と呼ぶ

 

・broadcast

broadcastとは、サーバーから送られるデータの経路のことを指す
broadcastを介してデータをクライアントに送信する

 

app/controller/messages_controller.rb

class MessagesController < ApplicationController
def new
 @messages = Message.all
 @message = Message.new
end

def create
@message = Message.new(text: params[:message][:text])
 if @message.save
  ActionCable.server.broadcast 'message_channel', content: @message
  end
end
end

broadcastを通して、'message_channel'に向けて@messageを送信するという意味送信された情報は、message_channel.jsで受けとる

 

app/javascript/channels/message_channel.js

import consumer from "./consumer"

consumer.subscriptions.create("MessageChannel", {
connected() {
// Called when the subscription is ready for use on the server
},

disconnected() {
// Called when the subscription has been terminated by the server
},

received(data) {
 const html = `<p>${data.content.text}</p>`;
 const messages = document.getElementById('messages');
 const newMessage = document.getElementById('message_text');
 messages.insertAdjacentHTML('afterbegin', html);
 newMessage.value='';
}
});

 

こちらで簡易的な非同期の通信ができる。