ubuntu AWS Django & Postgres デプロイ

■ EC2 インスタンスを作成する
 
ubuntu で 作成
 

 
テラタームで接続
 
・接続情報を、EC2インスタンスの 「接続」 で確認して、
 
アカウント名:ubuntu
 
パスワード: pemキー で 
 
接続をする。
 

 
■ テラタームでコマンドを打つ   
 
リポジトリー (Linuxでは データベースのこと)
 
$ sudo apt-get update   => データベースのカタログを更新する
 
#開発用の python3 をインストール & ポスグレ(libpq-dev postgresql  postgresql-contrib) &  nginx
$ sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx
 
###### ポスグレの設定(作成:夏目智徹)
 
# postgres という ユーザー名で psql を実行
$ sudo -u postgres psql
 
======= ポスグレ コマンド Start
 

ユーザ一覧を表示

postgres=# \du

データベース一覧を表示

postgres=# \l
 

接続中のデータベースの情報を表示

postgres=# \conninfo

テーブル一覧を表示

postgres=# \z

テーブル定義を確認

postgres=# \d tablenametablenameには任意のテーブル名を入れる。
 
======= ポスグレ コマンド END
 
### データベース作成
postgres  =# CREATE DATABASE create_DB;
 
### ユーザー 、パスワード 設定   
postgres  =# CREATE USER jim_user WITH PASSWORD 'jimjimjim';
 
### 日本語 設定
  postgres  =# ALTER ROLE jim_user  SET client_encoding TO 'utf-8';
 
### トランザクション設定    実行した結果だけを見に行く
  postgres  =#  ALTER ROLE jim_user SET default_transaction_isolation TO 'read commiited';
 
### timezone の設定
  postgres  =# ALTER ROLE jim_user  SET timezone TO 'UTC+9';
 
### ユーザー権限 設定
postgres  =# GRANT ALL PRIVILEGES ON DATABASE kanai_project TO jim_user ;
 
### ポスグレコマンドライン から 抜ける
\q
 
# ポスグレが 起動しているかの 確認
$ ps aux
 

■ テラターム (virtualenv) を インストールして 仮想環境を追加
 
# pip のインストール & アップグレード   
$ sudo -H pip3 install --upgrade pip
 
# virtualenv    追加
$ sudo -H pip3 install virtualenv
 
# virtualenv   作成
$ virtualenv py38
 
# activate ファイルの確認
$ ls py38/bin
 
# activate 実行
$ source py38/bin/activate
 
### django  gunicorn psycopg2 => djangoでポスグレを使うためのライブラリー
$ pip install django gunicorn psycopg2
 

 
■ ローカルファイル を クラウドへアップロード
 
・win-scp を 使う
 
・win-sqp
・転送プロトコル scp
 
・ホスト名: サーバーの パブリックip
 
・ユーザー名:ubuntu
 
・パスワード: 「設定」 ー> ssh  認証
 
〇接続ができたら、プロジェクトファイルをアップロードする。
 

 
Django 設定
 
Djangoマイグレーションを実行する際にインストール時の構成によっては、PostgreSQL接続アダプターのエラーが出ることがあります。
 
その場合は、以下のコマンドを実行して最新のパッケージを追加してみてください。
 
$ pip install psycopg2-binary
 
 
・$vi setting.py   => 開く
 
・setting.py
 
i =>  インサートモード
 
alt + v  で ペースト
 
# 接続先の IP を入れる
ALLOWED_HOSTS =
 
ALLOWED_HOSTS = ['13.115.228.94']
 
■ポスグレ設定   

 
esc キー
 
:wq  で保存
 
 
$python3 manage.py makemigrations
 
$python3 manage.py migrate
 
■ マイグレーションが通ったら、awsの 8000番ポートを開ける
 
インスタンス」 ー> 「セキュリティーグループ」 ー>「インバウンド」 ー> 「詳細」 ->
 
「ルールの追加」 ー>  タイプ:カスタムTCPルール  ,  port Range  :  8000 , ソース カスタム  0.0.0.0/0
 
 
python manage.py runserver 0.0.0.0:8000
 
*****パブリックipをブラウザに打ち込んで 表示*******
パブリックIP + :8000
 
 

 
■ 管理ユーザーの作成
 
# Django の 管理ユーザー作成
$python3 manage.py createsuperuser
 
tossy777
 
 
p:tossy
 

■ Gunicorn を 単体で動かす
 
Gunicorn が あるかの確認
 
$ which gunicorn
 
ubuntu@ip-172-31-40-206:~/kanai_project$ pwd
/home/ubuntu/kanai_project
 
(py38) ubuntu@ip-172-31-40-206:~/kanai_project$ which gunicorn
/home/ubuntu/py38/bin/gunicorn
(py38) ubuntu@ip-172-31-40-206:~/kanai_project$
 
### バインドする
$gunicorn --bind 0.0.0.0:8000 kanai_project.wsgi
 
バインドしたら、
deactivate
で、仮想環境から抜ける
 

■ 仮想環境からではなく、OS の起動時に 起動するように設定する
 
# 起動ファイル群 を確認
$ ls /etc/systemd/system
 
### gunicorn 設定ファイル 作成
$ sudo vi /etc/systemd/system/gunicorn.service
 
 
[Unit]
Description=gunicorn daemon
After=network.target
 
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/kanai_project
ExecStart=/home/ubuntu/py38/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/kanai_project/kanai_project.sock kanai_project.wsgi:application
 
[Install]
WantedBy=multi-user.target
 
### システムの起動
$sudo systemctl start gunicorn
 
$sudo systemctl enable gunicorn
 
### ※ システム設定が間違った場合のリロードコマンド
$sudo systemctl daemon-reload
 
###格納場
$ /etc/systemd/system
 
$ /etc/systemd/system/multi-user.target.wants/
 
### ソケット sock ができているかの確認
$ ls /home/ubuntu/kanai_project
 
$ sudo systemctl status gunicorn
 
### ログ確認
$ sudo journalctl -u gunicorn
 

■ Nginx から Gunicorn 経由で アプリを動かす
 
 

$ cd /etc/nginx
 
$ cd sites-available/
 
$ vi default
 
### ファイル追加
$ sudo vi kanai_project
 
server {
listen 80;
server_name 13.115.228.94;
 
location = /favicon.ico {access_log off; log_not_found off;}
location /static/ {
root /home/ubuntu/kanai_project;
}
location / {
include proxy_params;
}
 
}
 
client_max_body_size 20M; #追加。リクエスト送信の最大サイズを20Mバイトにします
 
 
 
### シンボリックリンク作成
$ sudo ln -s /etc/nginx/sites-available/kanai_project  /etc/nginx/sites-enabled/
 
### シンボリック確認
$ ls -la  /etc/nginx/sites-enabled/
 
### nginx 設定 テスト
$ sudo nginx -t
 
$ sudo systemctl restart nginx
 
### 8000番 ポートの無効化
$ sudo ufw delete allow 8000
 
11111番ポート(TCP)へのアクセス許可のルールを設定する。
root@server:~# ufw allow 11111
 
$sudo ufw allow 8000
 
### nginx のアクセス許可
$ sudo ufw allow 'Nginx Full'
 
###  再起動
$sudo systemctl restart nginx
 

aws の es2 のアクセスを許可する 80ポート
 
インバウンド
 
「セキュリティグループ」 -> 「編集」 ー> 「ルールの追加」 ->
 
タイプ:http  ポート 80
 
保存
 
$ sudo systemctl restart gunicorn
 

 
■ Apache や nginx を入れて 「テラターム」や「win-scp」 で ssh 接続できない場合の対処方
 
「セキュリティグループ」を追加して。
 

 
タイプ ssh    プロトコル TCP  ポート  22   ソース    0.0.0.0/0
 

■ /admin に cssを適用させる
 
$ cd sites-available/
 
$ vi default
 
### ファイル追加 文追加
$ sudo vi kanai_project
 
/py38/lib/python3.8/site-packages/django/contrib/admin/static/admin
 
**************** 追加
location /static/admin {
root /home/ubuntu/py38/lib/python3.8/site-packages/django/contrib/admin/static/admin;
 
}
************** **************
 
**************** 追加
location /static/summernote {
root /home/ubuntu/py38/lib/python3.8/site-packages/django_summernote/static/summernote;
 
}
************** **************
 
###  再起動
$sudo systemctl restart nginx
 

 
■ manage.py コマンド
 
### migration 結果 確認コマンド
$python3 manage.py showmigrations
 
### static ファイルが有効か確認するコマンド
$python3 manage.py findstatic .
 
■ static 本番環境へのデプロイ
本番環境へのデプロイ時はcollectstaticを実行します。
$python3 manage.py collectstatic
 
python manage.py collectstatic
 
 

 
nginx    ,  conf 設定
 
/etc/nginx/nginx.conf