Contents

如何使用 AWS S3 存儲桶在 Django 中託管靜態文件和媒體文件

開發 Django Web 應用程序時,靜態資產和用戶生成內容的有效管理至關重要,因為這些元素在確保最佳性能和無縫用戶體驗方面發揮著不可或缺的作用。

在開發環境中,Django 負責處理此類文件。然而,在製作環境中,隨著您的用戶群大幅擴展並且媒體資產(包括音頻和視頻內容)的規模變得越來越大,您有必要考慮替代解決方案。

利用 Amazon Web Services 簡單存儲解決方案 (S3) 提供了存儲靜態和多媒體內容的替代選項。通過與 Django 集成,這種方法通過將文件處理職責委託給 S3 來減輕服務器的壓力,從而最大限度地減少負載並確保快速且可靠的資產分配。

第 1 步:創建 AWS 賬戶

如果您還沒有 Amazon Web Services (AWS) 帳戶,請訪問 AWS 官方網站並按照提示創建一個新帳戶,以建立一個 Amazon Web Services (AWS) 帳戶。

作為服務包的一部分,新建立的 Amazon Web Services (AWS) 帳戶有權每年免費訪問 5 GB 標準存儲。

步驟 2:為您的項目創建 S3 存儲桶

⭐ 創建AWS賬戶後,登錄並在頂部搜索欄中搜索S3,然後選擇第一個選項。 /bc/images/create-an-aws-account.jpg

⭐ 選擇第一個選項後,您將看到一個新頁面。單擊創建存儲桶按鈕:/bc/images/select-create-bucket.jpg

⭐ 接下來,為您的 S3 存儲桶提供一個名稱。您可以將大部分配置保留為默認值。 /bc/images/create-an-s3-bucket.jpg

⭐ 向下滾動到此存儲桶的阻止公共訪問設置部分,取消選中阻止所有公共訪問設置,並確認顯示的警告。 /bc/images/uncheck-block-public-access.jpg

⭐ 完成後,單擊“創建存儲桶”按鈕。它會將您重定向到一個頁面,其中顯示您已創建的 S3 存儲桶的列表。 /bc/images/new-s3-bucket.jpg

步驟 3:在 AWS 上創建 IAM 用戶

AWS 提供了一種稱為身份和訪問管理 (IAM) 的解決方案,該解決方案可以創建量身定制的個人帳戶,以滿足尋求與 AWS 服務交互的人員或應用程序的要求。

AWS 通過其身份和訪問管理 (IAM) 服務提供對用戶訪問的精細控制。通過向IAM 用戶(可能是與您的AWS 資源交互的個人或應用程序)分配各種權限級別,您可以限制他們對特定資源的訪問,同時確保他們不會獲得對其他區域的未經授權的訪問。

為了確保應用程序的安全,必須在 Django 項目和 Amazon S3 存儲桶之間建立安全的交互方法。為了實現這一目標,我們需要在 Amazon Web Services (AWS) 平台內實施身份和訪問管理 (IAM) 用戶。請按照以下詳細說明在 AWS 中成功創建 IAM 用戶:

⭐ 在搜索欄中,輸入 IAM 並選擇第一個選項。將出現一個新頁面。 /bc/images/search-for-iam.jpg

⭐ 在 IAM 頁面左側,選擇“用戶”,然後單擊“添加用戶”按鈕。它將打開另一個頁面來填寫一些信息。 /bc/images/create-iam-user.jpg

⭐ 首先輸入 IAM 用戶的名稱,然後單擊底部的“下一步”按鈕:/bc/images/enter-iam-username.jpg 在下一頁上,您必須選擇 IAM 用戶的權限級別。按著這些次序:

首先選擇“權限”部分中的“直接附加策略”選項。

為了為 IAM 用戶建立權限框架,我們必須指定用戶有權在指定約束內執行的操作範圍。鑑於我們的應用程序需要能夠在 Amazon S3 存儲桶中檢索和存儲文件內容,因此謹慎的做法是授予 IAM 用戶對所述存儲庫的不受限制的訪問權限。

⭐ 在權限策略部分中,您應該搜索 S3FullAccess 並選擇該選項。完成後,單擊“下一步”按鈕。 /bc/images/select-permission-for-iam-user.jpg

⭐ 接下來,查看 IAM 用戶的策略並單擊創建用戶按鈕以創建您的 IAM 用戶。 /bc/images/review-iam-user.jpg

步驟 4:為您的 IAM 用戶創建訪問密鑰

在 Amazon Web Services (AWS) 中,訪問密鑰構成一組身份驗證憑證,可以以安全的方式以編程方式訪問 AWS 資源。要訪問 Django 應用程序中的 Amazon Simple Storage Service (S3) 存儲桶,您的項目必須提供必要的訪問憑證。

遵循一系列程序說明可以幫助您生成特定於您正在進行的工作的授權密碼。

⭐ 創建 IAM 用戶後,您將收到一條提醒消息,提示您查看該用戶。或者,您可以通過單擊用戶名來查看用戶。 /bc/images/select-new-iam-user.jpg

⭐ 接下來,選擇“安全憑證”選項卡,向下滾動以找到“訪問密鑰”部分,然後選擇“創建訪問密鑰”。 /bc/images/select-create-access-key.jpg

⭐ 您需要選擇一個訪問用例,以便 AWS 可以在適當的情況下推薦替代選項。它不會影響您的訪問密鑰。請隨意選擇一個選項,例如第三方服務或本地代碼,並確認彈出的警告。完成後,單擊“下一步”按鈕。 /bc/images/select-access-key-use-case.jpg

⭐ 在下一頁上,輸入訪問密鑰的描述標籤,然後單擊創建訪問密鑰按鈕。 /bc/images/add-description-for-access-key.jpg

⭐ 創建訪問密鑰後,您可以復制您的憑據或將其下載為 CSV 文件。無論哪種方式,請確保確保這些數據的安全。 /bc/images/get-access-key-credentials.jpg

步驟 5:為 S3 存儲桶配置 Django 項目

為了將 Amazon S3 存儲桶與 Django 項目集成,需要安裝有助於此集成的特定包。這些包如下:

Django Storages 是一個插件,可以在 Django Web 開發框架內創建自定義文件存儲後端。它允許開發人員配置和實施他們喜歡的存儲解決方案,提供管理數字資產和簡化數據管理流程的靈活性。

Boto3 是一個軟件開發工具包 (SDK),是促進基於 Python 的項目與 Amazon Web Services (AWS) 之間無縫交互的重要工具。

要在 Python 虛擬環境中安裝上述包,請通過終端執行以下命令來使用 pip 包管理器:

 pip install django-storages boto3

有效安裝這些軟件包後,必須訪問“settings.py”文件並將“boto3”附加到上述配置文件中的集成應用程序列表中。

為了在 Django 項目中使用 Amazon Web Services (AWS) Simple Storage Service (S3) 存儲桶,需要執行特定配置。以下是此過程所需的步驟:

 AWS_ACCESS_KEY_ID = 'AWS_ACCESS_KEY_ID '
AWS_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY'
AWS_STORAGE_BUCKET_NAME = 'AWS_STORAGE_BUCKET_NAME'
AWS_S3_SIGNATURE_NAME = 's3v4',
AWS_S3_REGION_NAME = 'AWS_S3_REGION_NAME'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
AWS_S3_VERITY = True
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

將提供的配置合併到您的“settings.py”文件中,確保每個指定字段都得到適當更新。具體來說,將相關密鑰(例如您的 AWS 訪問密鑰 ID、秘密訪問密鑰、S3 存儲桶名稱和 S3 區域名稱)替換為之前獲取或檢索到的相應密鑰。

要獲取 Amazon S3 存儲桶的區域名稱,可以導航到相應的存儲容器並仔細閱讀“AWS 區域”列中的最終條目以獲取所述信息。

/bc/images/s3-bucket-region-name.jpg

步驟 6:測試您的 AWS 配置

執行上述所有步驟後,您現在就可以通過文件測試來評估應用程序的功能。隨後的代碼示例演示了可以通過管理界面執行的文件上傳;但是,您可以隨意從其他位置執行您自己的上傳。

為了提供適當的上下文,此類模型的一個可能的示例如下:

 class Post(models.Model):
    title = models.CharField(max_length=225, blank=False, null=False)
    content = models.TextField('Post Body', blank=False, null=False)
    author = models.CharField(max_length=225, blank=False, null=False)
    date_published = models.DateTimeField(auto_now=True)
    image = models.ImageField(upload_to='posts')

    def __str__(self):
        return self.title

確保執行所有必需的任務,包括遷移數據、將功能合併到管理界面中、制定適當的顯示方法以及完成成功執行項目所必需的任何其他步驟。此外,請確保在開發應用程序時遵循 Django 的模型-視圖-模板 (MVT) 範例。

完成任務後,請繼續訪問您的管理儀表板或使用您為媒體提交建立的特定界面。隨後,在指定區域上傳圖形文件。

/bc/images/testing-s3-bucket.jpg

請訪問您的主網站並驗證指定的圖像是否按預期顯示。如果存在,請使用鼠標光標單擊所述圖像,同時按下鍵盤上的“Ctrl”鍵(或 Mac 上的“Command”鍵)。然後,從出現的上下文菜單中選擇“在新選項卡中打開圖像”選項。在單獨的瀏覽器窗口或選項卡中打開圖像後,記下瀏覽器頂部顯示的 URL。它應與之前建立的 Amazon S3 存儲桶的位置相對應。

/bc/images/test-aws-image-config-1.jpg

驗證您的配置是否正常運行的另一種方法是訪問 Amazon Web Services (AWS) 控制台並查看您指定的存儲容器,您應該在其中發現您的視覺媒體文件。

/bc/images/confirm-aws-config-2.jpg

步驟 7:將靜態文件收集到您的 S3 存儲桶

到目前為止,您已成功將媒體文件上傳到您的 Amazon S3 存儲桶;但是,為了完成您的項目要求,您還需要上傳靜態文件。

為了實現此功能,需要對“settings.py”文件進行一定的修改,添加特定的配置。這些配置將實現所需的結果並確保系統的最佳性能。

 STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_LOCATION = 'static'

訪問命令行界面 (CLI) 後,請執行以下命令:

 python manage.py collectstatic --noinput

為了確保您的 Amazon Simple Storage Service (S3) 存儲桶正常運行,請導航到 AWS 管理控制台並訪問您的 S3 存儲桶。在存儲桶的列表中,您應該看到一個名為“static”的目錄。

/bc/images/confirm-static-folder.jpg

使用 AWS S3 存儲桶進行更多操作

Amazon Web Services 的簡單存儲服務 (S3) 具有巨大的潛力,值得您理解和掌握如何利用其超出傳統對象存儲功能的功能。例如,您可以使用 S3 作為託管靜態網站的理想平台,從而充分利用其可擴展性和可靠性。

熟練地利用 Amazon Simple Storage Service (S3) 存儲桶的功能可以在效率和產品開發方面產生巨大的好處。然而,必須認識到 S3 可能並不總是符合特定的項目需求,因此在實施之前評估項目的需求至關重要。