LaravelのconfigをNginxの設定で開発環境と本番環境で切り分ける

Ads

start.php修正

1
2
3
4
5
6
7
8
$env = $app->detectEnvironment(function(){
// $SERVER['APP_ENV']が設定されていればその環境を利用。
// なければdev環境を返す
if(isset($_SERVER['APP_ENV'])){
return $_SERVER['APP_ENV'];
}
return 'dev';
});

環境別設定ファイルの作成

環境用のフォルダをapp/config内に作成します。今回はdev環境とprod環境にわけますのでdevフォルダとprodフォルダを作成します。
※ 本番環境との切り分けだけならprodフォルダの作成のみでも問題ありません。
※ 複数の環境を構築する場合があるかと思い今回は2つ環境を設定しています。(prod test dev等)

1
2
3
4
5
project
└──app
└──config
└──dev(環境フォルダ)
└──prod(環境フォルダ)

環境別設定ファイル作成

基本的に上書きしたい設定のみの記述で問題ありません。上書きしたい設定ファイルを環境フォルダ内に生成します。
自分は下記のようなファイルを作成しています。

app.php(prodフォルダ内に生成)

1
2
3
4
5
<?php
return array(
'debug' => false,
'url' => 'http://●●●.com',
);

database.php(prodフォルダ内に生成)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
return array(
'connections' => array(
'mysql' =>; array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'sample',
'username' => 'root',
'password' => '********',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
),
),
);

Nginx設定ファイル

$SERVER[‘APP_ENV’]が設定されていなければ自動的にdev環境になるようになっていますので、本番環境のNginxに下記設定を加えます。

1
2
3
4
5
6
7
8
9
10
11
location / {
try_files $uri /index.php?$query_string;
}
location ~ \.php {
fastcgi_param APP_ENV prod; /*環境を設定!*/
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
}

これで上記設定をいれたNginx上ではprod環境で動かすことが可能です。

Ads