Skip to main content

PHP .env 多环境部署

在 Laravel 中,可以通过 .env 文件中的 APP_ENV 来区分不同的环境。虽然 Laravel 没有直接类似于 Spring Boot 的多环境配置文件(如 application-dev.ymlapplication-prod.yml),但可以使用 .env 文件以及一些环境管理技巧来实现相似的效果。

实现步骤

  1. 创建多个环境配置文件: Laravel 默认加载项目根目录下的 .env 文件,你可以为不同环境创建多个 .env 文件,如:

    • .env.local
    • .env.testing
    • .env.production
  2. 切换环境: 在部署时将所需环境的配置文件内容复制到 .env 中,或使用特定的 .env 文件替换当前的 .env 文件。可以通过设置 APP_ENV 变量来指定环境类型。例如:

    env
    复制代码
    APP_ENV=local
    APP_ENV=production
    
  3. 自动加载特定的 .env 文件: 若需要动态加载不同环境的 .env 文件,可以在 bootstrap/app.php 中配置加载逻辑。例如:

    php
    复制代码
    $app = new Illuminate\Foundation\Application(
        $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
    );
    
    $appEnv = $_SERVER['APP_ENV'] ?? 'local';
    $dotenv = Dotenv\Dotenv::createMutable(base_path(), ".env.{$appEnv}");
    $dotenv->safeLoad();
    
  4. 使用环境变量: 使用 env('APP_ENV') 来检测当前环境,例如,在代码中区分生产和测试环境:

    php
    复制代码
    if (env('APP_ENV') === 'production') {
        // 生产环境的配置
    } else {
        // 非生产环境的配置
    }
    

自动化的环境切换

可以在部署时通过脚本或 CI/CD 管理工具(如 Jenkins、GitLab CI)动态切换到对应的 .env 文件,或者指定环境变量 APP_ENV 来自动匹配相应的配置文件。