Magento / Composer / Deployment 관리 수는 있지만 지금은 이치에

그래서 나는 hackathon Magento Composer 설치 프로그램을 사용하는 것을 좋아하지만 다른 사람들이 배포 서비스와 관련하여 어떻게 그것을 사용하는지 이해하려고 애 쓰고 있습니다. 현재 DeployHQ를 사용하고 있습니다. 예, repo에 대한 업데이트가있을 때 composer를 배포하고 실행하도록 설정할 수는 있지만 지금은 이치에 맞지 않습니다.

빌드에 포함하려는 모든 패키지의 json 파일 만 포함 된 내 주요 작곡가 저장소는 목록에 새 패키지를 추가 할 때만 업데이트됩니다.

내 테마 또는 사용자 정의 확장자 (json 파일에서 참조 됨)를 업데이트 할 때 배치 서비스를 업데이트 할 “후크”가 없습니다. 그래서 나는 서버에 로그인하고 composer를 수동으로 실행해야합니다 (완료 될 때까지 사이트를 중단시킵니다).

그래서 다른 사람들은 이것을 어떻게 관리합니까? 작곡가를 로컬에서만 실행하고 공급 업체 폴더를 리포지토리에 포함시켜야합니까?

모든 답변을 주시면 감사하겠습니다.



답변

대행사에서 Composer를 사용하여 모든 Magento 사이트를 배포 할 수있는 구조를 설정했습니다. 이것은 당신이 묻는 질문에 약간 과잉 일 수 있지만 어쨌든 구조의 기본 개요는 다음과 같습니다.

리포지토리 구조

아래는 ‘부모’리포지토리의 폴더 구조입니다. 작성기 JSON 및 잠금 파일 및 배치에 필요한 기타 구성이 포함되어 있습니다.

- code
   - magento
- deployment
- environmental
   - local
       - local.xml
       - robots.txt
   - staging
       - local.xml
       - robots.txt
   - production
       - local.xml
       - robots.txt
- provisioning
- public
   - index.php
- vendor
- composer.json
- composer.lock
  • 모든 클라이언트 별 사용자 정의는 Composer를 사용하여 설치되는 별도의 “사용자 정의”모듈에 저장됩니다.
  • Magento 코어는 Git 서브 모듈 ( code/magento) 로 포함됩니다
  • index.php미디어 및 오류와 같은 사용자 정의 및 기타 폴더는 Magento 루트 외부의 공용 폴더 안에 있습니다.
  • 배치 프로세스 중에 환경 특정 파일 (local.xml, robots.txt 등)이 Magento 루트로 심볼릭 링크됩니다.
  • 공급 업체 폴더는 Git에서 제외되지만 composer.lock 파일이 포함됩니다.

전개

  • 여러 앱 서버 및 환경 (스테이징 / 제작)을 허용 하는 Capsitrano 를 사용하여 배포
  • Capistrano는 서버의 전체 코드베이스를 새 폴더에 구축 한 다음 웹 루트 심볼릭 링크를 맨 끝에 교환하여 웹 사이트의 다운 타임이 없음을 의미합니다.
  • Capistrano는 composer install빌드 중에 실행되며 모든 모듈을 Magento 하위 모듈에 배포합니다.

이것은 여전히 ​​지속적인 통합 설정은 아니지만 Magento 사이트에서 잘 작동한다는 것을 알았습니다. 설정과 관련된 조언이 더 필요하면 언제든지 메시지를 보내주십시오.


답변

또 다른 방법은 magento hackathons copy deploy 전략을 사용하는 것입니다. composer.json 파일에서 다음과 같이 보입니다.

"extra": {
    "magento-root-dir": "./",
    "magento-deploystrategy": "copy",
    "magento-force": true
}

위의 방법을 사용하면 설치된 파일을 공급 업체에서 실제 설치로 복사하여 작곡가 설치를하지 않고도 Git에서 커밋하고 정상적으로 배포 할 수 있습니다.

라이브 배포를 수행하려고 할 때 타사 리포지토리에서 가져 오는 것에 열광하는 팬이 아니며 네트워크에 프록시 캐시가없는 한 타사 리포지토리에 의존하는 것은 다소 위험합니다. .

이 기사를 읽으면 다른 관점을 얻을 수 있습니다 : http://www.letscodejavascript.com/v3/blog/2014/03/the_npm_debacle

기본적으로 NPM은 다운 (정렬)되었고 모든 빌드 시스템은 NPM에 직접 의존하기 때문에 중요 배포를 위해 작동을 멈췄습니다. (NPM은 실제로 Packagist for Javascript와 비슷하지만 NPM이 실제로 파일을 호스팅하고 Packagist가 모듈의 Github 저장소를 가리킴을 제외하고는 잘못되었습니다.

편집 : 그냥 빨간 fschmengler의 응답 .. 이것은 그의 첫 번째 접근법에 대한 정교


답변

Composer는 배포 도구가 아니라 개발 도구라는 것을 이해해야합니다.

모든 종속성이있는 배포를 준비하는 방법에는 여러 가지가 있습니다.

  • 공급 업체 디렉토리 (또는 작곡가가 소스를 설치하는 모든 곳)를 프로젝트 저장소에 커밋
  • 실행 composer install하고 결과와 함께 아카이브를 작성 하는 빌드 서버를 사용 하여 다른 대상 시스템에 반복 가능하게 배치 할 수 있습니다.
    • composer install@ jharrison.au에서 제안한대로 서버에서 실행 한 다음 심볼릭 링크를 전환하면이 변종이 변형됩니다.

그 외에, 나는 모든 단일 모듈 작곡가를 사용하여 만 계속하지 않는 것이 좋습니다 composer.jsoncomposer.lock 프로젝트 저장소에. 이것은 그것을 과도하게 수행하고 개발을 불필요하게 복잡하게 만듭니다. 여러 프로젝트에서 재사용되는 코드에 적합하지만 왜 프로젝트 특정 코드를 별도의 리포지토리에 넣을까요?

현재 프로젝트 구조는 다음과 같습니다 ( AOE 의 대체 작성기 설치 프로그램 사용 ).

  • src모든 프로젝트 특정 모듈을 포함합니다. Composer는 여기에 다른 Magento 모듈도 설치합니다
  • .modmansrcmodman이 심볼릭 링크를 쉽게 처리 할 수 ​​있도록 링크
  • wwwwebroot입니다. Composer는 여기에 Magento 코어를 설치합니다

이 방법으로 저장소에 외부 모듈을 포함시킵니다. 그렇게하지 않으려면 다음과 같이 조정하십시오.

  • src모든 프로젝트 특정 모듈을 포함합니다. .modmanmodman이 심볼릭 링크를 생성하도록 그것들을 포함 시키려면modman link
  • .modman.gitignore있습니다. Composer는 여기에 Magento 모듈을 설치합니다
  • wwwwebroot입니다. Composer는 여기에 Magento 코어를 설치합니다