2017-12-19 11 views
2

AWS에서 실행하는 여러 응용 프로그램의 응용 프로그램 소스 코드와 함께 CakePHP 라이브러리를 포함하지 않고 해당 코어 라이브러리를 AWS S3는 PHP 구성에서 allow_url_include를 설정 한 후 저장하고 포함합니다. 이 대답을 읽고 여기에 - including a remote file in PHP, 나는 그것이 나쁜 습관이라고 들었지만 민감한 데이터를로드하는 것과 관련이 있다면 여전히 적용될 수 있습니까?AWS S3에 여러 응용 프로그램 용 CakePHP 라이브러리 저장

다른 사람이이 유형의 배열을 했습니까? 내가 묻는 유일한 이유는 동일한 라이브러리를 모두 실행하는 약 5-6 개의 CakePHP 응용 프로그램을 가지고 있으며 배포 할 때마다 업로드하기가 번거롭다는 것입니다. 실제 응용 프로그램 별 코드는 약 3-4MB이지만 라이브러리가있을 때마다 업로드 할 때마다 13MB가 필요합니다.

동일한 결과를 얻을 수있는 다른 제안도 매우 감사하겠습니다.

미리 감사드립니다.

+0

빌드 할 때 앱과의 종속성을 묶는 것이 현명한 방법입니다. 런타임이 아니라 런타임을 배치하십시오. 물론 모든 요청에 ​​아닙니다. 불편한 경우 빌드를 자동화하십시오. 공유 종속성은 버전별로 긴 기간 동안 안정적으로 작동해야합니다. 대신 통합 된 빌드 프로세스를 작성하십시오. 그런 다음 종속성을 기회 주의적으로 캐시하면 두 가지 장점 모두를 얻을 수 있습니다. –

답변

0

내가 염려하는 점은 응용 프로그램을 변경할 때마다 내 소프트웨어 패키지를 계속 업로드해야한다는 것입니다. 전체 응용 프로그램의 80-90 % 업로드 패키지의 크기가 절대로 바뀌지 않았습니다. 그래서 실제로 업로드하지 않고도 클라우드의 최종 응용 프로그램에이 라이브러리를로드 할 수있는 방법이 있는지 알고 싶었습니다.

그래서 처음에는 S3에 라이브러리를 저장하고 거기에서로드 할 수 있는지 생각해 보았습니다. 그러나 @Dan Farrell이 지적했듯이, 응용 프로그램이 모든 요청과 함께 라이브러리를로드해야한다는 것을 의미합니다. 이는 확실히 올바른 방법이 아닙니다.

결국 Composer로 연구하고 손을 뻗어서 내가하고 싶은 것을 성취 할 수있었습니다. AWS는 업로드되는 응용 프로그램 패키지의 루트 폴더에 해당 구성이있는 경우 작곡가를 사용하여 자동으로 의존성을로드합니다. 라이브러리를 다른 종속성과 함께 응용 프로그램에 대한 종속성으로 추가 할 수 있었고 AWS는 배포시 종속성 다운로드를 실행하므로 응용 프로그램 패키지가 가볍고 내 도메인 전용 코드 만 포함한다는 것을 의미했습니다.

내 응용 프로그램 코드의 관점에서
{ 
    "require": { 
     "cakephp/cakephp": "2.10.*", 
     "aws/aws-sdk-php": "2.*", 
     "stripe/stripe-php": "^5.8", 
     "facebook/graph-sdk": "^5.6" 
    }, 
    "config": { 
     "vendor-dir": "./app/Vendor/" 
    } 
} 

, 나는 변경하는 데 필요한 유일한 것은이 케이크 도서관의 위치가 있었다 - 같은 내 최종 composer.json 파일이었다. App/Vendor 폴더에 의존성을로드하도록 컴포저를 구성 했으므로 app/webroot의 index.php 파일에서 라이브러리 경로를 변경해야했습니다.

그러나 놀랍게도, CakePHP 제작자는 이미 이것을 제공했습니다. 라이브러리가 app 폴더와 인라인 될 때 ​​기본적으로 사용되는 경로의 초기 선언이 있습니다.그건 그냥 주석 처리 할 필요가 - 아래를 참조 -

/** 
* The absolute path to the "cake" directory, WITHOUT a trailing DS. 
* 
* Un-comment this line to specify a fixed path to CakePHP. 
* This should point at the directory containing `Cake`. 
* 
* For ease of development CakePHP uses PHP's include_path. If you 
* cannot modify your include_path set this value. 
* 
* Leaving this constant undefined will result in it being defined in Cake/bootstrap.php 
* 
* The following line differs from its sibling 
* /lib/Cake/Console/Templates/skel/webroot/index.php 
*/ 
//define('CAKE_CORE_INCLUDE_PATH', ROOT .DS. 'lib'); <-- Comment this line out 

작곡가가 같은 다운로드했을 경로에 라이브러리 경로를 설정합니다 라인의 다음 몇 -

/** 
* This auto-detects CakePHP as a composer installed library. 
* You may remove this if you are not planning to use composer (not recommended, though). 
*/ 
$vendorPath = ROOT . DS . APP_DIR . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib'; 
$dispatcher = 'Cake' . DS . 'Console' . DS . 'ShellDispatcher.php'; 
if (!defined('CAKE_CORE_INCLUDE_PATH') && file_exists($vendorPath . DS . $dispatcher)) { 
    define('CAKE_CORE_INCLUDE_PATH', $vendorPath); 
} 

그리고는 내가 방법 업로드 속도가 느린 인터넷 연결의 경우 2.6MB로 매번 7.2MB를 업로드해야하는 번거 로움이 없으므로 동일한 출력으로 새 응용 프로그램 버전을 업로드하는 데 필요한 시간이 향상되었습니다.

희망이 도움이됩니다.

1

Jenkins 또는 CodePipeline을 사용하여 빌드 및 배포를 자동화하십시오. 빌드 할 때 모든 코드 종속성을 포함하고 배포 패키지를 만든 다음 CodeDeploy을 사용하여 패키지를 배포합니다. 각 응용 프로그램은 동일한 배포 프로세스를 따릅니다.

외부 종속성이있는 웹 응용 프로그램을 배포하는 데 매우 표준적인 방법입니다.