如何部署aws EC2 deploy

分享如何將Flask專案部署到ec2上,計劃將這個專案部署上去

首先要去申請一個aws帳號,按照官方步驟執行即可。

接著可以進入建置流程

啟用Instance,連上EC2

  1. 作業系統建議選擇 Ubuntu Server 或 Red Hat Enterprise Linux 或任何其他 Linux 作業,個人使用Ubuntu
  2. AMI機器等級選擇 t2.micro 享有⼀年的免費額度。
  3. Key pair name請不要有空格,這個名稱在後續進入終端機時會需要。Create key pair後,會自動下載一個檔案,這個檔案是進入ec2會用到的鑰匙,請妥善保存,也不要放到Github之類的公開資源上。
  4. cd desktop 先來到桌面,因為我的鑰匙在桌面上,確切位置要看pem檔放在哪裡
  5. ssh -i "Key_pair_name.pem" [ubuntu@ec2-52-197-169-187.ap-northeast-1.compute.amazonaws.com]執行這串就連上雲端伺服器,這串代碼在aws後台可以找到。 路徑:EC2 > Instances >點擊Instances ID > 點擊connect,就可以找到這段程式碼。

EC2上安裝程式

我在專案中有用到Python、MySQL及Git,所以要安裝這三個

  1. Python安裝完後要將所有需要用到的python套件都安裝完畢,這邊跟在自己電腦裡安裝Python套件方法一樣:pip install (套件名稱)

    • 安裝python3 sudo apt-get install python3
    • 檢查是否安裝成功:python3 --version
    • Python安裝套件
      • python套件管理工具:sudo apt update && sudo apt install python3-pip
      • pip3 install mysql-connector-python
      • pip3 install python-dotenv
      • pip3 install -U Flask
  2. 安裝Git,安裝完畢後可以試著去git clone github上的專案
  3. MySQL安裝,這步驟當時遇到比較多問題
  • sudo apt update
  • sudo apt install mysql-server
  • sudo systemctl status mysql
    • MySQL安裝完成後,你可能會想執行命令mysql -u root -p登錄到MySQL服務器。如果你登錄到Ubuntu的用戶不是root用戶你將不能訪問MySQL服務器。
      如果你嘗試使用密碼登錄也將被拒絕連接,MySQL root用戶默認是沒有密碼。
  • sudo mysql
  • 將身份驗證方法從auth_socket更改為mysql_native_password 可以通過運行以下ALTER USER SQL語句命令來做到
    • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '想要設定的密碼'; FLUSH PRIVILEGES;
  • 最後運行 mysql -u root -p登入就好了
    • ⚠️ ec2的資料我是從Github Clone過來的,所以當時github中沒有.env檔紀錄帳號密碼 所以另外上傳至ec2或直接在雲端伺服器建立.env檔案。
      linux建立檔案指令:touch 檔案名稱,以及vi 檔案名稱修改檔案內容。

指定Port

我本身在flask中有指定port,要另外去security group rule設定

嘗試執行程式

以上都完成後嘗試在ec2上執行python程式,有問題根據跳出的錯誤碼慢慢排除。
網址要用下方的網址,終端機跳出的網址會連不上喔!

Elastic IP

在EC2管理介面上,申請一個Elastic IP,並且將此 IP 與你的 Instance 建立關連。
綁定Elastic IP後,終端機會被重啟,因為要執行的程式碼會變不一樣,ip那段會改變。

⚠️申請Elastic IP後,一定要記得Associate,不然會被收錢喔!

nohup執行

必須在背景執⾏ Python 程式,要使用nohup,讓程式可以在本機端的終端機關閉後繼續執行。 nohup python3 /home/ubuntu/depoly_Ec2_test/app.py &