LoginSignup
2
1

More than 5 years have passed since last update.

AWS Beanstalk(Multi-Container Docker)をPythonで試してみた ! Web編その4 / python-uwsgi環境作成

Last updated at Posted at 2019-04-02

第4回はDockerリポジトリを使わずに

Python*uWSGI*flaskの環境の作る方法です。

連載一覧

構築の前提

本来はECRなどのDockerリポジトリを使うべきですが

検証の為にリポジトリを用意せずに対応する方法になります。

 

AWSの公式ドキュメントではシングル構成のDocker時に

amazon/aws-eb-python:3.4.2-onbuild-3.5.1

というイメージを利用する記載がありますが

  • Pythonのバージョンが古い

  • multi container構成(Dockerrun.aws.json)ではイメージのカスタマイズができない

という理由により、GITで公開されている

amazon/aws-eb-python:3.4.2-onbuild-3.5.1のDockerfileを元に

シェルにてコンテナ作成時にセットアップを実行します。

start-docker.shの配備

eb createをするカレントディレクトリにstart-docker.shという名前の

シェルスクリプトを作成します。

#!/bin/bash

# virtualenvのインストールをして
# 仮想環境(xxxdemo)を作成
pip3 install virtualenv
virtualenv /var/xxxdemo

# virtualenv環境にuwsgiをインストール
/var/xxxdemo/bin/pip install uwsgi

# volumeの共有ディレクトリから
# プログラム一式を仮想環境のディレクトリにコピー
cp -PR /var/app/* /var/xxxdemo/

# uWSGI用の実行ユーザーの作成
useradd uwsgi -s /bin/false

# ログディレクトリの作成と権限を付与
mkdir /var/log/uwsgi
mkdir /var/log/xxxdemo
chown -R uwsgi:uwsgi /var/log/uwsgi
chown -R uwsgi:uwsgi /var/log/xxxdemo

# uwsgiの起動関連の設定
chmod 700 /var/xxxdemo/uwsgi-start.sh
if [ -f /var/xxxdemo/requirements.txt ]; then /var/xxxdemo/bin/pip install -r /var/xxxdemo/requirements.txt; fi

# uwsgiの起動シェルを実行
sh /var/xxxdemo/uwsgi-start.sh

uwsgi-start.shの配備

eb createをするカレントディレクトリにuwsgi-start.shという名前の

シェルスクリプトを作成します。

#!/bin/bash

cd /var/xxxdemo

. bin/activate

# Flask support
if cat requirements.txt | grep -q -i Flask && [ -z "$WSGI_MODULE" ]; then
        WSGI_MODULE=application:app
fi

[ -n "$WSGI_MODULE" ] && UWSGI_MODULE="--module $WSGI_MODULE"

# defaulting to application.py if not explicitly set
[ -z "$WSGI_PATH" ] && WSGI_PATH=application.py

uwsgi --http :8080 --chdir /var/app --wsgi-file $WSGI_PATH $UWSGI_MODULE --master --processes $UWSGI_NUM_PROCESSES --threads $UWSGI_NUM_THREADS --uid $UWSGI_UID --gid $UWSGI_GID --logto2 $UWSGI_LOG_FILE

上記のファイルを配備するとDockerrun.aws.jsonの

entryPointの指定よりシェルスクリプトが起動してuWSGIが起動します。

flaskの起動モジュールはeb createのカレントディレクトリの

application.pyという名前ファイルで配備する必要があります。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1