yoraba build

備忘録を兼ねた技術ブログ

AWSのEC2インスタンスでnginx+uwsgiサーバーを立てる

EC2インスタンスの作成

f:id:yoraba:20200620191553p:plain  AMIとしてAmazon Linux 2を選びました。

Elastic IP

 EC2インスタンスは再起動の度に動的にパブリックIPが変動するとのことで、 Elastic IPというサービスで固定IPを作成し、EC2インスタンスに関連付けます。 インスタンスを複製して冗長性を持たせる構成でも、複数インスタンスに対して同一のIPを関連付けることが出来ます。

EC2のセキュリティグループ設定

f:id:yoraba:20200620191812p:plain  まずは、http通信が出来るように構成します。セキュリティグループ設定で、インバウンドルールにhttpを追加します。

サーバーへのファイル配置

色々と方法はあると思いますが、シェルスクリプトrsyncコマンドでアップロードとダウンロードが出来るようにしました。

  • アップロード
rsync -auz --delete -e "sudo ssh -i {秘密鍵PATH}" {ローカルディレクトリ} {EC2ユーザー}@{パブリック DNS }:~/
  • ダウンロード
rsync -auz --delete -e "sudo ssh -i {秘密鍵PATH}" {EC2ユーザー}@{パブリック DNS }:~/ {ローカルディレクトリ} 

サーバーセットアップスクリプト

  • nginxインストール
sudo yum install gcc git
sudo amazon-linux-extras install nginx1
  • python仮想環境の構築とuwsgiのインストール
sudo yum install python3
sudo yum -y install python3-devel
python3 -m venv python_venv
source ./python_venv/bin/activate
pip3 install uwsgi

サーバー設定

 今回は、/var/www/uwsgiをWEBサイトのルートディレクトリとします。 動作確認の為に以下のファイルを配置します。

  • /var/www/uwsgi/index.py
def application(env, start_response):
    main()
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World!"]

 以下、サーバーを動作させるための設定を行います。

  • /etc/nginx/nginx.conf  以下の部分の設定を変更します。
        root         /var/www/uwsgi;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            include uwsgi_params;
            uwsgi_pass unix:/var/www/uwsgi/socket.sock;
        }

 rootにルートディレクトリを入力し、トップlocationのincludeにuwsgi_params、uwsgi_passにsockファイル出力PATHを設定します。 sockファイルは自動的に作成されるため予め用意する必要はありません。

  • /var/www/uwsgi/uwsgi.ini
[uwsgi]
master = True
socket = /var/www/uwsgi/socket.sock
chmod-socket = 666
wsgi-file = /var/www/uwsgi/index.py
stats = 127.0.0.1:9191
logto = /var/www/uwsgi/uwsgi.log
pidfile = /var/www/uwsgi/uwsgi.pid

 socketをnginx.confのuwsgi_passで指定したファイルPATHと一致させて下さい。

サーバー起動

 nginxとuwsgiを起動します。

sudo systemctl -l enable nginx
sudo systemctl -l start nginx
uwsgi --ini /var/www/uwsgi/uwsgi.ini

動作確認

 http://{パブリックDNS}でWebサイトにアクセス出来ます。 f:id:yoraba:20200620200300p:plain