はじめに
素人が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
を作成します
#!/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
以上です。