Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

Django-storages 配置:環境變數設定

最後更新:2024年12月18日Python

本文為 圖片上傳 AWS S3 系列教學,第 17 篇:

  1. AWS S3 是什麼?
  2. boto3 與 django-storages:如何在 Django 中對接 AWS S3
  3. AWS S3 與 IAM:圖片上傳功能的權限管理指南
  4. S3 與 Postgres 的比較與應用
  5. Amazon S3 物件所有權設定解析
  6. AWS S3「阻止所有公開訪問」設定說明
  7. Amazon S3 儲存桶版本控制完整指南
  8. 如何設定 S3 儲存桶的「預設加密」?—— 初學者指南
  9. S3 儲存桶標籤(Tags)簡單介紹:讓你的 S3 管理更輕鬆!
  10. AWS S3 物件鎖定功能入門指南
  11. AWS S3 公開存取權完整指南
  12. AWS CORS 預檢請求與設定指南
  13. AWS IAM 設定教學:生成訪問密鑰以用於 S3 配置
  14. django-storages 基本配置:讓應用程式連接 S3 存儲桶
  15. Django-storages 的完整配置教學:從隱密性到快取控制
  16. Django-storages 完整配置指南:從文件存儲到訪問路徑
  17. Django-storages 配置:環境變數設定 👈 所在位置
  18. Django-storages 與 STORAGES 配置:未來相容性的最佳實踐
  19. 如何在 Django 中移除 DEBUG URL 的靜態檔案配置

建議閱讀本文前,先閱讀完 圖片上傳功能 系列文

在開發和部署 Django 應用程式時,使用 .env 文件來管理敏感資訊(例如 AWS 憑證)是一種最佳實踐。

配合 django-storages 和 AWS S3,可以實現安全高效的文件存儲與訪問。

本篇文章將詳細介紹如何使用 .env 文件及 python-dotenv 工具來管理環境變數,並進一步結合 AWS S3 的設置,打造完善的文件存儲方案。


為什麼需要 .env 文件

.env 文件的主要作用是集中管理敏感的環境變數,例如:

  • AWS 憑證 (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
  • S3 Bucket 名稱 (AWS_STORAGE_BUCKET_NAME)
  • 自定義域名或其他相關配置

好處

  1. 安全性:避免將敏感資訊硬編碼到程式碼中。
  2. 靈活性:能輕鬆切換不同環境的配置,例如開發環境與生產環境。
  3. 可共享性:通過 .env.example 為其他開發者提供配置範本。

配置 .env 文件

創建 .env 文件

在專案根目錄下建立 .env 文件,並填入 AWS 的相關憑證:

AWS_ACCESS_KEY_ID=your-access-key-id  
AWS_SECRET_ACCESS_KEY=your-secret-access-key  
AWS_STORAGE_BUCKET_NAME=your-bucket-name  
AWS_S3_REGION_NAME=ap-northeast-1  

創建 .env.example 文件(非必須,但建議)

.env.example 是 .env 文件的模板,供其他開發者參考,內容示例如下:

AWS_ACCESS_KEY_ID=your-access-key-id  
AWS_SECRET_ACCESS_KEY=your-secret-access-key  
AWS_STORAGE_BUCKET_NAME=your-bucket-name  
AWS_S3_REGION_NAME=your-region-name  

注意:不要將 .env 文件提交到版本控制系統,而應提交 .env.example 文件,指導團隊如何設置環境變數。


確保 Django 能讀取 .env 文件中的變數

加載 .env 文件

方法一:手動設置環境變數

手動將 .env 文件中的變數加載到系統環境中:

  1. Linux/macOS:
    將 .env 文件內容添加到 ~/.bashrc 或 ~/.zshrc,然後運行: source ~/.bashrc # 或 source ~/.zshrc
  2. Windows:
    在系統「環境變數」設置界面,手動添加每個變數。

方法二:使用 python-dotenv 工具(推薦)

python-dotenv 是一個工具,能自動將 .env 文件中的變數加載到系統環境變數中。

步驟如下:

  1. 安裝 python-dotenv:
pip install python-dotenv
  1. 在 settings.py 文件的開頭加載 .env 文件:
from dotenv import load_dotenv
import os

# 加載 .env 文件
load_dotenv()

AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.getenv('AWS_STORAGE_BUCKET_NAME')
AWS_S3_REGION_NAME = os.getenv('AWS_S3_REGION_NAME')

注意事項與常見問題

確保 .env 文件被正確加載

  • 如果未使用 python-dotenv,請手動檢查 .env 文件中的變數是否已載入系統環境: echo $AWS_ACCESS_KEY_ID 如果未返回正確值,請確認是否正確加載 .env 文件。

.env.example 的作用

  • .env.example 不會影響程式運行,它僅作為範本,指導開發者正確設置 .env 文件。
  • 在部署專案時,需將 .env.example 文件的內容複製到 .env 文件,並填寫實際值。

測試環境變數讀取

啟動 Django 開發伺服器,並檢查變數是否正確讀取:

python manage.py runserver

如果一切正確,應該可以正常上傳文件至 S3,並生成可訪問的文件 URL。


設定總結與最佳實踐

.env 文件設定

AWS_ACCESS_KEY_ID=your-access-key-id
AWS_SECRET_ACCESS_KEY=your-secret-access-key
AWS_STORAGE_BUCKET_NAME=your-bucket-name
AWS_S3_REGION_NAME=ap-northeast-1

Django 配置範例

from dotenv import load_dotenv
import os

load_dotenv()

AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.getenv('AWS_STORAGE_BUCKET_NAME')
AWS_S3_REGION_NAME = os.getenv('AWS_S3_REGION_NAME')
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'

AWS_DEFAULT_ACL = None
AWS_QUERYSTRING_AUTH = False

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/media/'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

最佳實踐

  1. 使用 .env 管理敏感資訊,避免硬編碼到程式碼中。
  2. 提供 .env.example 作為配置範本,幫助團隊快速部署。
  3. 使用 python-dotenv 自動加載 .env 文件,簡化本地開發環境配置。

結論

通過 .env 文件和 python-dotenv 的結合,你可以輕鬆管理環境變數,並將 AWS S3 文件存儲功能無縫集成到 Django 中。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

Python

目錄

  • 為什麼需要 .env 文件
  • 好處
  • 配置 .env 文件
  • 創建 .env 文件
  • 創建 .env.example 文件(非必須,但建議)
  • 確保 Django 能讀取 .env 文件中的變數
  • 加載 .env 文件
  • 注意事項與常見問題
  • 確保 .env 文件被正確加載
  • .env.example 的作用
  • 測試環境變數讀取
  • 設定總結與最佳實踐
  • .env 文件設定
  • Django 配置範例
  • 最佳實踐
  • 結論