Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

素人が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

以上です。

2355
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away