다중 환경 설정하기

Submitted by river - 등록 10 years ago - 수정 10 years ago

개발, 스테이징, 서비스 등 Laravel 동작 환경을 여러 개로 나누고 각각의 환경에 맞게 설정을 따로 가져가는 방법을 알아보자.

1. 환경변수를 이용하는 방법

bootstrap/start.php 파일에서 환경 체크하는 소스를 다음과 같이 수정하면 LARAVEL_ENV 환경변수에 따라 환경 설정이 변경된다. LARAVEL_ENV 환경변수는 아파치 웹서버인 경우 가상 호스팅 설정 파일이나 .htaccess 파일에서 환경변수를 설정하면 된다.

bootstrap/start.php

$env = $app->detectEnvironment(function() {
    // Default to local if LARAVEL_ENV is not set
    return getenv('LARAVEL_ENV') ?: 'local';
});

apache를 사용하는 경우

apache의 가상호스팅 설정파일이나 .htaccess 파일

# Set local environment variable
SetEnv LARAVEL_ENV local

nginx를 사용하는 경우

nginx 가상호스팅 설정파일 수정

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param LARAVEL_ENV local;
}

2. hostname을 이용하는 방법

bootstrap/start.php

$env = $app->detectEnvironment(array(
    'local' => array('hostname1'),
    'production' => array('hostname2')
));

머신의 hostname은 터미널에서 hostname을 실행하면 알수 있다.

$ hostname

참고 : 도메인에 의한 환경 체크는 Laravel 4.1부터 지원하지 않는다.

3. 환경설정 파일과 환경변수를 같이 쓰는 방법

bootstrap/environment.php 파일을 생성하고 여기에 동작 환경을 설정한다. 이 파일은 동작 환경에 따라 변경되므로 VCS에 의해 관리되지 않도록 한다.

bootstrap/environment.php

<?php return 'local'; ?>

bootstrap/start.php

$env = $app->detectEnvironment(function ()
{
    if (file_exists(__DIR__.'/environment.php'))
    {
        return require __DIR__.'/environment.php';
    }
    else if (isset($_SERVER['LARAVEL_ENV']))
    {
        return $_SERVER['LARAVEL_ENV'];
    } 
    else 
    {
        return 'local';
    }
});
comments powered by Disqus