Posted at

EC2でFlaskアプリを立ち上げる


はじめに

素人がEC2上でFlaskアプリを立ち上げた時のメモです。

いろいろツッコミどころあるかと思いますが、起動はできるはずです。

厳密にはこの他にAWS側のポートの開放などをやる必要がありますが、それらは省略します。

以下すべてsudoで実行しているのはport=80でFlaskアプリを起動しようとするとpermisson deniedになるためです。

もっといい方法はあると思います…


環境

インスタンスタイプ: t2.micro

OS: Amazon Linux AMI release 2018.03


pyenvの導入

まずはyumを最新のものにしておきます

$ sudo yum -y update

gitの導入

$ sudo yum install git -y

pyenvをインストールする

$ 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でもuserのパス設定を引き継げるように設定します

$ sudo visudo

以下の様に修正

- Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

+ # Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
+ Defaults env_keep += "PATH"
+ Defaults env_keep += "PYENV_ROOT"

pyenvが使えることを確認します

$ sudo pyenv -v

pyenv 1.2.8-5-gec9fb549


pythonの導入

pythonに必要な依存関係をインストール

$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel -y

pythonをインストール

$ sudo pyenv install 3.6.5

$ sudo pyenv global 3.6.5
$ sudo pyenv rehash

pythonが使えることを確認

$ sudo python --version

Python 3.6.5


Flaskの導入

Flaskをインストール

$ sudo pip install Flask

Flaskがインストールされていることを確認

$ sudo pip freeze

Flask==1.0.2

適当なapp.pyを作成します


app.py

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
return 'Hello World!'

if __name__ == '__main__':
app.run(host='0.0.0.0', port=80, threaded=True)


Flaskアプリを起動

$ sudo python app.py

これで完了です。

ここここを参考にしました。


おまけ

Flaskアプリを起動するときに

$ sudo nohup python app.py >> 20181203.txt &

みたいにやることでSSHから抜けてもプログラムが終了せず、20181203.txtに標準出力が書き出され、ログとしても使えます。

終了したいときは以下のように実行中のプログラムを確認し

$ ps aux | grep python

root 8216 0.0 0.4 188408 4680 ? S 10:17 0:00 sudo nohup python app.py
root 8217 0.0 2.8 317804 29060 ? S 10:17 0:00 python app.py
ec2-user 8540 0.0 0.2 110528 2200 pts/1 S+ 10:52 0:00 grep --color=auto python

プロセスを終了させます

$ sudo kill 8217

以上です。