You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Dash应用Azure部署多环境.env配置及本地运行问题求助

问题解决与环境配置建议

一、本地运行环境变量读取修复

当前env.py仅加载.env文件,未读取.env.development,导致ENVIRONMENT变量为空。修改代码,按优先级加载配置文件:基础.env先加载,再加载对应环境的配置文件(开发环境加载.env.development),环境文件会覆盖基础文件的同名变量。

修改后的env.py代码:

from dotenv import load_dotenv
import os

# 先加载基础.env文件
load_dotenv()
# 再加载开发环境配置,开发配置覆盖基础配置
load_dotenv('.env.development', override=True)

environment = os.getenv('ENVIRONMENT')
print("ENV: ", environment)

如果需要支持动态环境切换,可通过系统变量指定环境:

from dotenv import load_dotenv
import os

# 优先加载基础.env
load_dotenv()
# 从系统变量获取环境标识,默认dev
target_env = os.getenv('TARGET_ENV', 'dev')
# 加载对应环境的配置文件
env_file = f'.env.{target_env}'
if os.path.exists(env_file):
    load_dotenv(env_file, override=True)

environment = os.getenv('ENVIRONMENT')
print("ENV: ", environment)

二、Azure DevOps CI/CD环境配置(DEV/PROD区分)

方案1:部署阶段替换.env文件

在Dev和Prod部署步骤中,将对应环境的配置文件重命名为.env,确保应用加载正确配置。修改build&deploy.yml的部署阶段:

Dev环境部署步骤修改

- stage: DeployDev
  displayName: 'Deploy to Dev'
  dependsOn: ArchiveArtifact
  jobs:
  - deployment: DevDeploy
    pool: 'dev-agent-pool'
    environment: 'dev'
    strategy:
     runOnce:
       deploy:
        steps:
        - task: ExtractFiles@1
          inputs:
            archiveFilePatterns: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
            destinationFolder: '$(Pipeline.Workspace)/temp-dev'
            cleanDestinationFolder: true
        - script: |
            cd $(Pipeline.Workspace)/temp-dev
            cp .env.development .env
          displayName: 'Replace .env with dev config'
        - task: ArchiveFiles@2
          inputs:
            rootFolderOrFile: '$(Pipeline.Workspace)/temp-dev'
            includeRootFolder: false
            archiveType: 'zip'
            archiveFile: '$(Pipeline.Workspace)/temp-dev/$(Build.BuildId)-dev.zip'
            replaceExistingArchive: true
        - task: AzureWebApp@1
          inputs:
            azureSubscription: 'subscription'
            appType: 'webAppLinux'
            appName: 'web-app-dev-name'
            package: '$(Pipeline.Workspace)/temp-dev/$(Build.BuildId)-dev.zip'
            deploymentMethod: 'auto'

Prod环境部署步骤修改

- stage: DeployProd
  displayName: 'Deploy to Prod'
  dependsOn: DeployDev
  condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/main') , eq(variables['Build.SourceBranch'], 'refs/heads/release/*')))
  jobs:
  - deployment: ProdDeploy
    pool: 'agent-pool'
    environment: 'prod'
    strategy:
     runOnce:
       deploy:
        steps:
        - task: ExtractFiles@1
          inputs:
            archiveFilePatterns: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
            destinationFolder: '$(Pipeline.Workspace)/temp-prod'
            cleanDestinationFolder: true
        - script: |
            cd $(Pipeline.Workspace)/temp-prod
            cp .env.production .env
          displayName: 'Replace .env with prod config'
        - task: ArchiveFiles@2
          inputs:
            rootFolderOrFile: '$(Pipeline.Workspace)/temp-prod'
            includeRootFolder: false
            archiveType: 'zip'
            archiveFile: '$(Pipeline.Workspace)/temp-prod/$(Build.BuildId)-prod.zip'
            replaceExistingArchive: true
        - task: AzureWebApp@1
          inputs:
            azureSubscription: 'prod_subscription'
            appType: 'webAppLinux'
            appName: 'web-app-prod-name'
            package: '$(Pipeline.Workspace)/temp-prod/$(Build.BuildId)-prod.zip'
            deploymentMethod: 'auto'

方案2:Azure App Service直接设置环境变量(更安全)

不打包.env文件到部署包,直接在Azure Portal为Dev/Prod环境设置应用变量:

  1. 进入对应App Service的「配置」→「应用程序设置」
  2. Dev环境添加ENVIRONMENT=dev、REACT_VERSION=18.2.0
  3. Prod环境添加ENVIRONMENT=prod、REACT_VERSION=18.2.0

修改env.py,系统环境变量会自动覆盖.env文件的配置:

from dotenv import load_dotenv
import os

# 本地开发加载.env,线上环境优先读取系统变量
load_dotenv()
environment = os.getenv('ENVIRONMENT')
print("ENV: ", environment)

此方式无需修改部署流程,且敏感配置不会随代码包泄露。

三、Python Web应用环境处理技巧

  • 配置优先级:系统环境变量 > 环境专属配置文件 > 基础配置文件,确保生产环境配置不被本地文件覆盖。
  • 敏感信息隔离:将包含密钥、密码的.env文件加入.gitignore,仅提交.env.example作为模板,本地开发时复制后填写真实值。
  • 环境自动识别:通过CI/CD变量、命令行参数自动切换环境,比如本地默认dev,Pipeline中根据部署阶段设置TARGET_ENV变量。
  • 配置验证:应用启动时打印非敏感的配置摘要,确认环境加载正确。
  • 分层配置:将通用配置放在.env,环境专属配置放在.env.dev/.env.prod,敏感配置通过云服务环境变量设置,便于维护。

内容的提问来源于stack exchange,提问作者Jason Susanto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:07:05