---
# System prepended metadata

title: AWS EC2
tags: [AWS]

---

## AWS EC2

1. ### 選擇 EC2 並啟動新的 Instance：

* 登入 AWS 管理控制台，選擇 EC2 服務。
* 點擊「Launch Instance」以創建新的虛擬機器。
![截圖 2024-03-22 下午2.56.36](https://hackmd.io/_uploads/r1O3so9Cp.png)

* 選擇偏好的作業系統映像
![截圖 2024-03-22 下午2.58.00](https://hackmd.io/_uploads/Bkgznj9Rp.png)
* 選擇機器類型，建議選用 t2.micro 以利用 AWS 的免費額度。
![截圖 2024-03-22 下午2.58.07](https://hackmd.io/_uploads/HkuEnoc0T.png)

* 配置實例設定，設置網絡和安全組。
* 選擇一組密鑰，用於遠程訪問您的 EC2 實例。如果您沒有，需要創建個新的密鑰對並下載。

2.  ### 連線到 EC2 實例
從 AWS 控制台獲取您實例的公有 DNS 或 IP 地址。
在本地終端機使用 SSH 客戶端連線到 EC2 實例。這需要您的公有 IP 地址和之前下載的私鑰文件。
```bash=
ssh -i /path/to/your-key.pem ec2-user@your-instance-ip
```
3. ### 在 EC2 實例上安裝必要套件
   
* 更新套件管理工具:
```bash=
sudo apt update && sudo apt upgrade
```
   * 安裝 Git:
```bash=
sudo apt install git
```
   * 安裝 MySQL: 
```bash=
sudo apt install mysql-server
```
   * 安裝 Python 和必要的 Python 套件
```bash=
sudo apt install python3 python3-pip
pip3 install flask mysql-connector-python
```
4. ### 從 GitHub Clone 專案
```bash=
git clone <專案 Git URL>
```
您的意思是問我剛剛提供的內容是否使用了正確的 Markdown 格式嗎？讓我重新整理一下:

5. ### 設置 MySQL 資料庫
在 EC2 實例上安裝 MySQL 8.0:
```bash=
sudo apt-get install mysql-server
```
安裝後執行命令設定 root 密碼
```bash=
sudo mysql_secure_installation
```
啟動 MySQL 服務: 
```bash=
sudo systemctl start mysql
```
使用 `mysqldump` **匯出本機資料庫檔案**，並透過 `scp` 命令將其同步到 EC2 實例並匯入：
```bash=
mysqldump -u database_user -p database_name > database_backup.sql
```
```bash=
scp -i /path/to/private-key.pem backup.sql ubuntu@<EC2-IP>:~/
```
在 EC2 實例上**匯入**資料庫：
```bash
mysql -u root -p database_name < backup.sql
```

確認 EC2 實例上已安裝 Python3 和 pip3:
```bash=
sudo apt-get install python3
sudo apt-get install python3-pip
```
6. ###  安裝 Python 相關依賴庫

- 切換到您的專案目錄：

    ```bash
    cd <您的專案目錄>
    ```

- 安裝所需的 Python 庫：

    ```bash
    pip3 install -r requirements.txt
    ```
7. ###  執行網站程式

嘗試執行您專案中的 Python 網站程式，以確保一切運作正常。

8. ###  獲取彈性 IP 並關聯

- 在 AWS EC2 管理介面申請一個彈性 IP。
- 將彈性 IP 與您的實例關聯。
- 確認實例的 Security Group 已開放連線埠號 3000。

9. ### 訪問網站

在瀏覽器中訪問 `http://<彈性IP>:3000/` 確認網站已成功上線。

10. ### 設置後台運行

為了確保您的應用即使在終端機關閉後仍能持續運行，可以使用 `nohup` 命令在後台運行您的應用。

- 在終端機中執行以下命令：

    ```bash
    nohup python3 <程式檔案路徑> &
    ```

- 使用 `top` 查看後台進程，並可使用 `kill` 終止特定進程。

11. ### 配置安全組

- 在 EC2 控制台中，選擇您的實例。
- 點擊「安全組」標籤，並編輯入站規則。
- 允許 HTTP (80 端口) 和您應用所需的任何其他端口訪問。

12. ### 獲取彈性 IP 並關聯

- 在 EC2 控制台中，導航到「彈性 IP」。
- 分配一個新的彈性 IP 地址。
- 將該 IP 與您的實例關聯。

13. ### 運行您的應用

- 回到終端機連線，導航到您的應用目錄。
- 根據您的應用，執行運行命令，例如：`python3 app.py`。
- 在瀏覽器中訪問：`http://<您的彈性IP>:<端口>`。

14. ### 設置後台持續運行（可選）

- 在終端機中，使用以下命令使應用在後台運行：
```bash
nohup <運行命令> &
```
- 應用現在將持續在後台運行，即使終端關閉也不會中斷。
- 可使用 `top` 查看後台進程，並可使用 `kill` 終止特定進程。



---

## (http=>https)
是 ```Taipei-Day-Trip``` 專案中，採用 JavaScript (ES6+)、CSS、HTML 結合 Python + Flask 的技術棧。最終優化目標是將所有 HTTP 流量重定向到 HTTPS，是透過設置 Nginx、Let's Encrypt 以及 Cloudflare 來實現。



**[前置作業]**：在 Cloudflare 買好網域，並且在 AWS EC2 (ubuntu) 上安裝了 Python3、MySQL 及其依存套件，並建立了資料庫。

**[實作過程]**：藉由 Nginx, Let's Encrypt 與 Cloudflare 設定，使大家能用 https://ameliechen.app 造訪我的網站，即使使用 "http:"// ameliechen.app 也會自動導向 "https://" ameliechen.app (http=>https)

7. ### 安裝及配置 Nginx
安裝 Nginx 並配置重定向規則和代理設置：

```bash=
sudo apt update
sudo apt install nginx
sudo nano /etc/nginx/sites-available/default
sudo systemctl restart ngin
```
8. ### Let's Encrypt SSL 證書
安裝 Certbot 和 Nginx 插件，獲取並安裝證書：

```bash=
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
```

9. ### Cloudflare 設置
登錄到 Cloudflare，配置 DNS 設置以指向您的 EC2 實例 IP 地址。
開啟 Cloudflare 的 SSL/TLS 加密模式。

