---
# System prepended metadata

title: Deploy Flask App to AWS EC2
tags: [AWS]

---

# 簡介
部署一個Flask App到AWS EC2 Instance上
使外部能透過public ip連線到該雲端server訪問Flask App

# 建立AWS EC2 Instance
登入帳號後至EC2 啟動新執行個體
可選擇使用哪種OS
![](https://hackmd.io/_uploads/SkoWAGtga.png)

建立金鑰對可以讓外部透過SSH連線到此instance
![](https://hackmd.io/_uploads/ByazCzKgT.png)

建立安全群組來允許browser存取server
![](https://hackmd.io/_uploads/rkQNRfKxT.png)

Instance建立完成
![](https://hackmd.io/_uploads/ByFdAMteT.png)

有提供多種選項連線至Instance
此例使用EC2 Instance Connect連線
![](https://hackmd.io/_uploads/BkrLJXFga.png)

# 安裝相關軟體及套件
```shell=
#更新apt庫
sudo apt update 
#安裝python
sudo apt install python3
#安裝pip
sudo apt install python3-pip
#安裝git
sudo apt install git-all
#安裝 flask
sudo apt install python3-flask
```

# 開始部署
clone flask app下來
```shell
git clone https://github.com/leefangyu/EC2-Flaskapp.git
```

到安全群組新增傳入規則
![](https://hackmd.io/_uploads/Hy3ZFXYla.png)

新增port5000讓外部能透過port5000存取server
![](https://hackmd.io/_uploads/B1HUtQFla.png)

執行flask app
```shell
flask run --host=0.0.0.0
```

host參數可指定Flask App綁定的 IP 位址
預設為 127.0.0.1，表示只能從本機訪問該應用程式
如果將 host 設置為 0.0.0.0
表示該應用程式將會綁定到本機的所有網路介面
即可從本機任何 IP 位址訪問該應用程式

**執行結果**
可從外部透過public ip加上設定的port連到server
完成部署
![](https://hackmd.io/_uploads/H1azsmKlp.png)


# Reference
https://blog.csdn.net/FriendshipTang/article/details/110870647

https://cosinechen.medium.com/aws-ec2-%E4%B8%8A%E4%BD%BF%E7%94%A8-nginx-lets-encrypt-%E9%83%A8%E7%BD%B2-flask-%E6%87%89%E7%94%A8%E7%A8%8B%E5%BC%8F-8c04c0f44a6d