"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP에서 여러 환경 (개발, 준비, 생산)을 관리하는 방법

PHP에서 여러 환경 (개발, 준비, 생산)을 관리하는 방법

2025-02-06에 게시되었습니다
검색:794

How to Manage Multiple Environments (Development, Staging, Production) in PHP

PHP 응용 프로그램에서 여러 환경 관리 (개발, 준비, 생산)

최신 웹 개발에서 여러 환경 관리가 필수적이므로 응용 프로그램이 수명주기의 여러 단계에서 적절하게 작동하도록합니다. 이러한 환경 - Development , Staging 프로덕션 프로덕션 - 각각 특정 목적을 달성하며 해당 단계의 고유 한 요구를 충족시키기 위해 각각 다르게 구성되어야합니다. &&&]

예를 들어:

  • Development : 개발자가 작동하는 환경, 일반적으로 더 많은 장황한 벌목 및 디버깅 도구를 사용하는 환경.
  • Staging : 배포 전에 최종 테스트에 사용되는 생산 환경의 복제본, 일반적으로 생산을 반영하는 데이터와 함께.
  • 프로덕션 : 최종 사용자가 응용 프로그램에 액세스하는 라이브 환경.
PHP의 여러 환경을 효과적으로 관리하는 키는 구성 관리입니다. 이 기사에서는 환경 별 구성을 처리하고 원활한 배포를 보장하며 일반적인 함정을 피하기위한 모범 사례를 살펴 보겠습니다.


1. 환경 별 구성

여러 환경 관리의 가장 중요한 측면 중 하나는 애플리케이션의 구성이 환경에 따라 달라지는 것입니다. 데이터베이스 연결, API 키, 오류보고 및 캐싱 동작과 같은 설정은 개발, 준비 및 생산간에 크게 다를 수 있습니다.

에이. 환경 변수 사용

환경 변수는 환경 별 구성을 관리하는 일반적이고 안전한 방법입니다. 각 환경 (개발, 준비, 생산)에 대해 다양한 변수를 설정하고 getenv () 또는 $ _env.

를 사용하여 PHP 응용 프로그램 내에서 액세스 할 수 있습니다.

예를 들어:

  • . ENV 파일 :이 파일은 환경 변수를 사람이 읽을 수있는 형식으로 저장하는 데 사용할 수 있습니다. vlucas/phpdotenv 와 같은 라이브러리를 사용하여 이러한 변수를 PHP 응용 프로그램에로드 할 수 있습니다.

. Env :

app_env = 개발 db_host = localhost db_user = 루트 db_password = rootpassword
APP_ENV=development
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=rootpassword
PHP 코드에서 :

와 같은 이러한 변수에 액세스 할 수 있습니다.

php // .env 파일에서 환경 변수로드 (phpdotenv를 사용하는 경우) $ dotenv = dotenv \ dotenv :: createimmutable (__ dir__); $ dotenv-> load (); // 환경 변수에 액세스합니다 $ env = getenv ( 'app_env'); $ dbhost = getenv ( 'db_host'); $ dbuser = getenv ( 'db_user'); $ dbpassword = getenv ( 'db_password'); 에코 "현재 환경 : $ env"; ?>
APP_ENV=development
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=rootpassword

비. 각 환경에 대한 구성 파일

더 큰 응용 프로그램에서는 각 환경마다 별도의 파일에 구성 설정을 저장하는 것이 일반적입니다. 예를 들어 :

와 같은 구성 파일이 포함 된 구성 디렉토리를 가질 수 있습니다.

    config/dev.php
  • config/staging.php
  • config/prod.php
각 파일에는 해당 환경에 특정한 설정이 포함됩니다. APP_ENV 환경 변수의 값에 따라 이러한 구성을 동적으로로드 할 수 있습니다.

:

php // config.php $ env = getenv ( 'app_env')? : '생산'; // 설정되지 않은 경우 생산 기본값 스위치 ($ env) { 사례 '개발': $ config = 요구 사항 'config/dev.php'; 부서지다; 케이스 '준비': $ config = 요구 사항 'config/staging.php'; 부서지다; 사례 '생산': $ config = 요구 사항 'config/prod.php'; 부서지다; 기본: 새로운 예외를 던지십시오 ( '알 수없는 환경 :'. $ env); } // $ 구성 배열을 사용합니다 ?>
APP_ENV=development
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=rootpassword

기음. 데이터베이스 구성 처리

데이터베이스 구성은 일반적으로 환경마다 다릅니다. 개발중인 로컬 데이터베이스, 별도의 스테이징 데이터베이스 및 프로덕션 데이터베이스가있을 수 있습니다. 환경 변수에 이러한 세부 사항을 저장하면 코드베이스에서 분리하는 데 도움이됩니다.


php // db.php $ dbhost = getenv ( 'db_host'); $ dbuser = getenv ( 'db_user'); $ dbpassword = getenv ( 'db_password'); $ dbname = getenv ( 'db_name'); 노력하다 { $ pdo = new pdo ( "mysql : host = $ dbhost; dbname = $ dbname", $ dbuser, $ dbpassword); // PDO 오류 모드를 예외로 설정합니다 $ pdo-> stattribute (pdo :: attr_errmode, pdo :: errmode_exception); } catch (pdoexception $ e) { Echo '연결 실패 :'. $ e-> getMessage (); } ?>
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

2. 오류보고 및 디버깅

다른 환경에는 다른 수준의 오류보고가 필요할 수 있습니다.

  • Development : 디버깅을위한 세부 오류 메시지, 경고 및 로그를 원합니다.
  • Staging : 일반적으로 오류가 중요하거나 오류를 기록하지만 사용자에게 표시하지 않는 경우에만 오류를 표시하려고합니다.
  • 제작 : 제작의 최종 사용자에게 오류 메시지가 표시되어서는 안됩니다. 대신 sentry 또는 loggly . 와 같은 외부 서비스에 오류를 기록합니다.

에이. 환경에 따라 display_errors를 설정하십시오

환경을 확인하고 적절한 수준의 오류 처리를 설정하여 오류보고를 제어 할 수 있습니다.


php $ env = getenv ( 'app_env')? : '생산'; if ($ env === 'Development') { ini_set ( 'display_errors', 1); error_reporting (e_all); } elseif ($ env === 'Staging') { ini_set ( 'display_errors', 0); error_reporting (e_all); } else {// 제작 ini_set ( 'display_errors', 0); error_reporting (0); // 사용자에게 오류가 표시되지 않습니다 // 파일 또는 외부 서비스에 오류를 기록합니다. ini_set ( 'log_errors', 1); ini_set ( 'error_log', '/path/to/logs/php_errors.log'); } ?>
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

3. 배포 및 버전 제어

배포 관리는 여러 환경 관리의 또 다른 중요한 측면입니다.

git , ci/cd 파이프 라인 와 같은 도구 및 배포 자동화가 프로세스를 간소화하는 데 도움이됩니다.

에이. git 분기 전략

다른 환경에서 코드를 관리하기 위해

git flow 또는 github flow 와 같은 분기 전략을 사용하는 것이 중요합니다.

  • Development : 모든 새로운 기능과 버그 수정은 기능 분기에 추가되어 개발에 병합됩니다.
  • 준비 : 스테이징 브랜치는 종종 출시 후보와 함께 생산 준비에 사용됩니다.
  • 프로덕션 : 철저한 테스트 된 코드 만 메인 또는 마스터로 병합되어 생산에 배포됩니다.

비. 지속적인 통합 및 배포 (CI/CD)

jenkins

, github action , , gitlab ci 또는 circleci 와 같은 도구 해당 환경에 배포합니다. 이것은 인적 오류를 줄이고 환경 간의 일관성을 보장합니다.

여러 환경을위한 일반적인 CI/CD 파이프 라인은 다음과 같습니다.

  1. 코드가 스테이징 브랜치로 푸시됩니다 : 자동화 된 테스트가 실행됩니다.
  2. 테스트가 통과하는 경우 스테이징 환경에 배포됩니다.
  3. 코드는 프로덕션 브랜치 로 병합됩니다 : 배포 스크립트가 실행하여 라이브 환경으로 푸시됩니다.

4. 환경 별 서비스

API, 캐싱 메커니즘 및 파일 스토리지 시스템과 같은 일부 서비스는 환경마다 다를 수 있습니다. 제작에서는 파일 스토리지에

Amazon S3 와 같은 서비스를 사용할 수 있지만 개발 중에는 로컬 파일 시스템을 사용할 수 있습니다.

구성 파일 또는 환경 변수에서 환경에 따라 다른 서비스 구성을 정의하십시오. 예를 들어:


// 파일 스토리지 설정 if (getenv ( 'app_env') === 'production') { 정의 ( 'file_storage_path', 's3 : // my-bucket/files/'); } 또 다른 { 정의 ( 'file_storage_path', '/var/www/app/files/'); }
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

5. 캐싱 및 성능 최적화

캐싱 전략 및 성능 최적화는 환경마다 다릅니다. 개발 중에는 더 빠른 피드백을 위해 캐싱을 비활성화 할 수 있지만, 생산에서는 성능 향상을 위해 공격적인 캐싱을 원할 것입니다.

당신은 세션 스토리지 또는 쿼리 캐싱을 위해

redis memcached 와 같은 도구를 사용하여 적절한 캐시 헤더를 설정하여이를 제어 할 수 있으며, 제작에서만 파일 또는 데이터 캐싱을 활성화합니다. ]]

6. 보안

다른 환경에서 보안 조치는 또한 다양해야합니다.

Development
    : 개발 편의성을 위해 편안한 보안 설정이있을 수 있습니다 (예 : 크로스 오리핀 리소스 공유 허용).
  • 준비 및 생산
  • : HTTPS, 크로스 사이트 스크립팅 보호 및 SQL 주입 보호를 포함한 엄격한 보안 정책을 시행합니다.
  • 비밀 관리 도구 (예 :
  • Hashicorp Vault
또는

AWS 비밀 관리자 )를 사용하여 특히 제작 환경에서 민감한 키 및 자격 증명을 안전하게 관리 할 수 ​​있습니다.

결론

PHP 응용 프로그램에서 여러 환경을 관리하는 것은 개발, 테스트 및 생산 중에 앱이 예상대로 동작하도록하는 데 중요합니다. 환경 별 구성을 분리하고, 오류보고를 제어하고, 버전 제어 및 CI/CD를 사용하고, 각 환경에 대한 캐싱 및 서비스를 조정하면 개발 프로세스를 간소화하고 단계 간의 원활한 전환을 보장 할 수 있습니다.

궁극적으로, 여러 환경을 관리하기위한 확실한 전략은 응용 프로그램의 수명주기 동안 높은 수준의 코드 품질, 안정성 및 보안을 유지하는 데 도움이됩니다.

릴리스 선언문 이 기사는 https://dev.to/abhay_yt_52a8e72b213be229/how-to-manage-multiple-environmentments-develople-staging-production-in-php-1o4?1에서 재현됩니다. 163.com 삭제
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3