AWS EC2、Amazon Linux2でDjango+Nginx+uWSGIで
開発できるような環境を作ってみました
行う事
1,EC2インスタンス作成
2,SSH接続
3,OS最新にupdate
4,Pythonインストール
5,仮想環境(venv)インストール
6,PIPアップバージン
7,Djangoインストール
8,プロジェクト作成
9,マイグレーション
10,サーバ起動
11,外部アクセス確認
12、ポート解放
13、外部アクセス確認
14.Nginxインストール
15,Nginx外部接続確認
16,ポート解放
17,uWSGIインストール
18,終わりに
1,EC2インスタンス作成
まず、EC2のインスタンスを作成します。
https://console.aws.amazon.com/console/
「コンソールへ」からログイン
AWS のサービスのサービスのEC2を選択
インスタンスの作成
1年間無料版でまずは、ためしので、Amazon Linux2を選択します。
Amazon Linux 2 AMI (HVM), SSD Volume Type 64 ビット (x86)
を選択 タイプt2.microを選択
2,SSH接続
端末からSSH接続にて作業を行います。
キーをダウンロードして、キーファイルの設定として
属性を読み込み専用にして、
chmod 0600
SSHで接続します
ssh -i "ダウンロードキー.pem" ec2-user@(パブリックDNS名)
(パブリックDNS名)は、ec2-x-x-x-x.us-east-2.compute.amazonaws.com
のようなものです。
3,OS最新にupdate
sudo yum update
4,Pythonインストール
Gitをインストール
sudo yum install git -y
Gitでpyenv読み込み、Pathを設定する
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
関連をインストール
sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel -y
pythonをインストール
pyenv install 3.6.2
3分ぐらいかかる場合もあります
pyenv global 3.6.2 pyenv rehash python -V Python 3.6.2 ←表示
仮想環境構築と有効化
python -m venv env source env/bin/activate
pyenvを入れてから、venvで仮想は、なにか変な感じもしますが
venvで、バージョン毎の環境が作りやすいので。。。
6,PIPアップバージン
pip install -U pip
7,Djangoインストール
pip install django==1.11.17
インストールされたか確認
python >>> import django >>> django.get_version() '1.11.17' ←表示 >>> exit()
一応djangoのバージョンは1.11.17にしました
8,プロジェクト作成
django-admin startproject proj cd proj ls manage.py proj ←表示 cd proj vim settings.py
i 挿入モード(iを入力)
ALLOWED_HOSTS = [] 変更(25行あたり、全てOKで。。) ALLOWED_HOSTS = ['*']
ESC :wq (書き込み終了)
cd cd proj python manage.py makemigrations python manage.py migrate python manage.py runserver (パブリックDNS名):8000 http://(パブリックDNS名):8000
で、ブラウザでアクセスしてみる
時計が周り続けて、なにも表示されない「このサイトにアクセスできません」
ポートを開けないといけない
awsダッシュボードのセキュルティ-グループから
インバウンド編集、ルール追加、
プロトコール:TCP,ポート範囲:8000、保存
http://(パブリックDNS名):8000
で、ブラウザでアクセスしてみる
It worked! Congratulations on your first Django-powered page.
無事、Djangoの画面が表示された
14.Nginxインストール
python manage.py runserverで、キー入力できない時は
CTR-Cで、終了
sudo yum install -y nginx エラー To use, run # sudo amazon-linux-extras install nginx1.12
指示に従いこちらで
sudo amazon-linux-extras install nginx1.12
nginxを起動する
sudo systemctl start nginx
http://(パブリックDNS名)
で、ブラウザでアクセスしてみる
「このサイトにアクセスできません」
ポートを開けないといけない
awsダッシュボードのセキュルティ-グループから
インバウンド編集、ルール追加、80、保存
8000はそのままにしておく
(後で閉じるように)
http://(パブリックDNS名)
で、ブラウザでアクセスしてみる
Welcome to nginx on Amazon Linux!
nginxの画面
それでは、Djangoとnginxを繋げるためにuWSGIを使ってみる
17,uWSGIインストール
pip install uwsgi
https://qiita.com/xKxAxKx/items/da9dcc8caa36e1c303c7
を参考にして、
nginx.conf
を変更
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org バックアップしてから 編集 sudo vi /etc/nginx/nginx.conf
追加、削除を行う
http { . . . . include /etc/nginx/conf.d/*.conf; #以下3行追加 upstream app_server { server 127.0.0.1:8000 fail_timeout=0; } server { #以下4行はコメントアウト #listen 80 default_server; #listen [::]:80 default_server; #server_name localhost; #root /usr/share/nginx/html; # 以下3行を追加 listen 80; server_name (パブリックDNS名); client_max_body_size 4G; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { # 以下4行を追加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server; }
ESC+:wq
で書き込み終了
sudo nginx -t
文法チェック
sudo systemctl stop nginx sudo systemctl start nginx
設定ファイルを修正したのでnginxを起動(一度停止してから起動)
cd cd proj uwsgi --http :8000 --module proj.wsgi
http://(パブリックDNS名)
で、ブラウザでアクセスしてみる
It worked! Congratulations on your first Django-powered page.
と表示された
18,おわりに
不要なポート閉じる
awsダッシュボードのセキュルティ-グループから
インバウンド編集、8000を削除、保存