場景
在項目開發過程中,經常會有多個配置文件需要修改,例如想調試測試testing環境,每次都需要修改.env文件中的數據庫等相關配置。測試完之后,又要切換到本地開發環境local。這樣很不方便,能不能本地有很多個配置文件.env.local,本地有.env.testing文件,每次調試只要動態切換讀取哪個env文件呢?本身laravel支持動態讀取.env.xx后綴的env文件。但是是通過讀取系統環境變量APP_ENV來的
在docker環境中
docker一鍵化部署非常方便,很適合這種場景。在docker創建的時候設置好APP_ENV環境變量。
.docker.env
# PHP配置
PHP_NET_ADDR=192.158.0.3
PHP_CONFIG_DIR=/code/docker-lnmp/config/php/
PHP_CODE_DIR=/code/
PHP_APP_ENV=local
docker-compose.yml
version: '3'
services:
fpm:
build:
context: ./build
dockerfile: fpm
# image: php:7.2.21-fpm-alpine3.10
container_name: fpm
restart: always
environment:
APP_ENV: ${PHP_APP_ENV}
volumes:
- ${PHP_CONFIG_DIR}php-fmp.conf:/usr/local/etc/php/php-fpm.conf
- ${PHP_CONFIG_DIR}conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
- ${PHP_CODE_DIR}:/code
working_dir: /code
networks:
lnmpnet:
ipv4_address: ${PHP_NET_ADDR}
networks:
lnmpnet:
driver: bridge
ipam:
config:
- subnet: 192.158.0.0/16
使用
- 修改.docker.env中的APP_ENV變量
- 刪除fpm鏡像,然后啟動
docker-compose stop fpm && docker-compose rm fpm
或者docker-compose down fpm
- 啟動
docker-compose up -d fpm
可以將上面的三步操作寫成一個shell腳本./swhitch local
方式2
通過修改文件
bootstrap/app.php
// 動態切換多個環境變量
$envPath = dirname(app_path()) . '/';
$environmentPath = $envPath . '.env';
$envContent = trim(file_get_contents($environmentPath));
$envFile = '.env.' . $envContent;
if (file_exists($envPath . $envFile)) {
$app->loadEnvironmentFrom($envFile);
}
使用
在本地.env文件中寫local,testing等后綴就行