GIT 및 배포 전략 Magento2 프로젝트


92

Magento 1에서는 GIT 저장소를 가져 와서 명령을 실행 modman deploy-all하고 var디렉토리를 쓸 수 있는지 확인 하는 배포 도구를 사용했습니다 . 를 들어 .gitignore내가 사용 이 하나 꽤 잘했다.

그러나 마 젠토 2는 어떻습니까?

gitignore가 가장 잘 작동하는 것, 프로젝트 배포 방법 및 배포 전후 실행 명령은 무엇입니까? 커뮤니티의 통찰력을 기다리겠습니다.

질문은 꽤 오랫동안 열려있을 것입니다


좋은 질문 @sander Mangel
Amit Bera

1
정의상 이에 대한 정식 답변은 없으므로 너무 광범위하고 사이트의 Q & A 특성에 적합하지 않을 수 있습니다. 메타 일 것입니다. 그러나 당신은 이미 이것을 알고 있습니다. 바운티가 만료 될 때까지 허용하겠습니다.
philwinkle

@ philwinkle 그것은 이미 3 가지 답변이 주어 졌기 때문에 광범위 할 수도 있지만 너무 넓지는 않을 것입니다. 여기에서 논의 된 바와 같이 : meta.magento.stackexchange.com/questions/745/… 메타는 임의의 게시물 / 질문이 아닌 MageSE에 대한 질문에 사용됩니다. 삭제하려는 경우 중지 할 수는 없지만 사람들은 질문에 관심이 있으며 내 의견으로는 그것이 유효한 것입니다. 모두 너무 구체적이지 않습니다.
Sander Mangel

두 가지 : 첫째, Sander는 Meta에 대해 정확 합니다. Magento SE와 관련하여 SE 플랫폼에 대한 질문 에만 사용해야 합니다 (NB :이 규칙을 강화하기에 Meta를 충분히 강화하지는 않았을 것입니다). 둘째, "많은 사람들이 관심이있다"는 질문이 정식으로 답변 될 수 있는지 여부와 관계가 없으며 따라서 질문이 StackExchange 형식에 적합하다는 것과 관련이 없습니다. 확실히 실망 스럽습니다 (내가 직접 반대했습니다). 이 Q / A 스레드가 어디로 가는지 궁금합니다. 아마도 A는 독점적으로 "올바른"것으로 충분히 언급 될 수있다.
benmarks

이 경우 @benmarks 나는 현상금에 대한 잘못된 이유 또는 주제를 선택했으며, 그 뒤에 내 동기는이 답변에 대한 전체 답변을 작성하는 데 걸린 시간을 가진 사람에게 보상하는 것이 었습니다. 이 글타래가 여기에 속하지 않는다면, 글이 여전히 가치가 있다고 생각하기 때문에 글을 복사하여 저자에게 크레딧을주는 어딘가에 게시 할 것입니다. 삭제하기 전에 알려주십시오
Sander Mangel

답변:


56

아래 단계에서는 프로덕션이 아닌 사용자 정의 모듈 개발 환경을 설정하는 방법에 대해 설명합니다.

프로젝트 초기화

  1. 추가 repo.magento.com 자격 증명GitHub의 액세스 토큰을 위해 auth.json 작곡가 홈 디렉토리에
  2. 다음 명령을 사용하여 프로젝트를 작성하십시오.

    composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .

  3. 이 .gitignore를 가져 와서 프로젝트 루트에 넣으십시오. 거의 모든 핵심 파일 / 디렉토리는 이미 루트에 추가됩니다 .gitignore하지만,뿐만 아니라 다음 2를 추가하는 것이 좋습니다 /update/phpserver(단지 .gitignore 이러한 두 줄을 추가)

  4. 프로젝트 루트에서 새 자식 저장소를 초기화하십시오.
  5. 추적되지 않은 모든 파일을 git에 추가하고 커밋하십시오.
  6. 평소와 같이 모듈 개발을 시작하십시오 (아래에 넣으 app/code/VendorName/ModuleName십시오) .git 저장소에 사용자 정의 코드 만 있습니다.

마 젠토 설치

  1. 모든 파일 시스템 권한이 공식 안내서에 설명 된대로 설정되어 있는지 확인하십시오
  2. 명령 행을 사용하여 Magento를 설치하십시오. 예 :

    ${project_root}/bin/magento setup:install \ --db-host=localhost \ --db-name=magento \ --db-user=root \ --backend-frontname=admin \ --base-url=http://base.url.goes.here/ \ --language=en_US \ --timezone=America/Chicago \ --currency=USD \ --admin-lastname=Admin \ --admin-firstname=Admin \ --admin-email=admin@example.com \ --admin-user=admin \ --admin-password=123123q \ --cleanup-database \ --use-rewrites=1

  3. Ubuntu에서 인덱서 cron 작업을 활성화하십시오.

    echo "* * * * * php ${project_root}/bin/magento cron:run &" | crontab -u www-data -

  4. Magento는 default모드 에서 실행되며 누락 된 모든 콘텐츠는 처음 요청시 자동 생성됩니다. 따라서 컴파일러 또는 정적 컨텐츠 배포를 실행할 필요가 없습니다.
  5. [선택 사항] PHP Storm을 사용하는 경우 다음 명령을 실행하여 XSD 지원을 활성화하십시오.

    bin/magento dev:urn-catalog:generate .idea/misc.xml


알렉스 안녕하세요. 프로젝트 초기화 3 단계-조금 확장 할 수 있습니까? 해당 서브 디렉토리를 루트에 수동으로 복사해야한다는 것을 알았습니까? (정확하게 작동하지 않는 것이 있는지 궁금합니다. 그 단계를 기대하지 않았습니다.)
Alan Kent

@AlanKent는 현재을 (를 vendor) 포함한 모든 Magento 관련 파일을 다운로드 받았으며 magento2-base, 이는 새로운 프로젝트의 골격입니다. 이 단계가 작곡가가 자동으로 수행하도록 구성되지 않은 이유를 모르면 찾으려고 시도합니다. .gitignore다른 리포지토리에서 복사하는 것과 관련 하여 이미이 단계에서 제거 / 단순화하는 방법에 대해 논의 중입니다.
Alex Paliarush

3 단계는 필요하지 않습니다. 파일 / 폴더의 마샬링은 2 단계에서 수행됩니다.
Maddy

감사합니다 @Maddy. @AlanKent magento2-base는 루트에 복사 하는 것이 더 이상 필요하지 않습니다. 답변에서이 단계를 제거했습니다.
Alex Paliarush 2016

1) 나는 모든 코드를 이미 repo에 넣었으며, 그 저장소에서 가져 와서 관리자 pangel 및 db 자격 증명의 설정을 변경하면 모든 것이 올바르게 작동합니까? 2) 푸시 중에 var / 및 pub / 폴더를 제외하는 것을 잊었으므로 완전히 삭제할 수 있으므로 원격 저장소에서 삭제할 수 있습니다. 다시 재생성됩니까? 감사.
Lachezar Raychev

25

초기화 및 설치의 경우 대부분의 단계에 대한 Alex의 대답을 따르는 단계를 따르십시오.

힘내 구성

다음 파일 만 Git 저장소에 저장하십시오.

  • composer.json
  • 작곡가
  • app / etc / config.php

프로젝트 사용자 정의 코드의 경우 작곡가를 통해 포함 된 별도의 모듈도 사용하십시오. 배포하려는 특정 버전 / 릴리스를 잠글 수 있으므로 작곡가를 통해이 작업을보다 쉽게 ​​관리 할 수 ​​있습니다. 또한 내부 및 외부 모듈에 동일한 접근 방식을 사용해야합니다.

전개

개발하는 동안 다음 명령을 사용하여 환경 (dev / test)의 모듈을 업데이트하십시오.

composer update

그러면 해당 설치에 설치된 버전으로 composer.lock 파일이 업데이트됩니다.

스테이징 / 사전 프로덕션 / 프로덕션에서 다음 명령을 사용하여 동일한 설정을 생성 / 설치할 수 있습니다.

git pull
composer install

그러면 개발 / 테스트에서 사용 된 것과 동일한 모든 모듈이 설치되어 프로덕션에 게시하기 전에 테스트 할 때 개발 된 것과 동일한 모듈 버전으로 테스트를 수행합니다.

설치 후 다음 명령을 실행하십시오.

bin/magento setup:upgrade
bin/magento setup:di:compile (or setup:di:compile-multi-tenant)
bin/magento setup:static-content:deploy

그러면 데이터베이스 (스키마 및 데이터 업그레이드)가 업데이트되고 DI 구성이 생성되며 모든 정적 뷰 파일이 배포됩니다.


조명기를 생성하는 대신 샘플 데이터를 사용하는 것이 합리적일까요? 비품은 가장 중요한 모듈 만 채우고 성능 테스트에만 유용한 것으로 보입니다.
Alex Paliarush 2016

감사합니다. 프로덕션 사이트를 사용할 때 필요하지 않으므로 해당 부분을 제거했습니다.
Vladimir Kerkhoff

이것은 내가 사용하는 접근 방식과 매우 밀접한 관련이 있습니다. 이것은 또한 Magento 1에서도 잘 작동합니다 (덜 복잡한 빌드 프로세스 사용) 작곡가가 일을하고 내 경험에서 실제로 배포에 효과적이며 .gitignore 전략의 복잡성 외에도 많은 단점을 보지 못했습니다. 자식의 작은 발자국을 따르지 마십시오.
Aepod

이 설치는 '통합 자'방식처럼 보입니다. 이것은 repos를 vendor / magento / *에 추가합니다. app / code / .. 및 기타 디렉토리에는 코드가 없습니다. .zip 아카이브에서와 같이 Magento 2 코어 디렉토리를 어떻게 사용합니까? 작곡가를 통해 모듈 (다른 git repo)을 추가하고 app / code / ...로 자동 종료하는 것이 가능합니까?
불분명

4
위험한 작곡가는 배포 도구가 아닙니다. 프로덕션에서 실행할 때 composer 설치에서 무언가 실패하는 경우 ...
Claudiu Creanga

3

Re .gitignore, 2.2 이후 공식 Magento의 대답은 "config.php가 git로 들어가고 env.php는 그렇지 않습니다"입니다.

우리는 내부 개발을 확장 개발 및 고객 사이트에 더 가깝게하기 위해 Mediawiki와 같은 작성기 플러그인을보고 있습니다. 아직 최종 탐험이 아닌 아직 탐험 중입니다.

../othergitrepo/app/code/*/*모듈을 선택 하는 경로와 함께 Composer "Path"리포지토리 유형을 사용하는 것이 좋았지 만 Unison 또는 이와 유사한 것을 사용하는 개발 환경에서는 제대로 작동하지 않는 심볼릭 링크를 사용합니다.


3

별도의 빌드 서버 / 프로세스를 포함하지 않는 다른 접근 방식을 실행하고 프로덕션 에서처럼 로컬로 개발합니다.

그런 다음 프로덕션에 필요한 모든 파일커밋합니다 . 그런 다음 변경 세트 를 서버에 배치 하고 upgrade 명령을 실행하십시오.

개발에 적합하지만 생산 모드에서 실행되는 버전에 도달하는 것은 까다로운 부분이며 여전히 완벽하지는 않지만 이제는 작동하는 레시피를 얻었습니다.

그 이유는 우리가 생산하는 코드를 100 % 제어하기를 원하기 때문입니다. magento2는 많은 양의 코드를 생성하므로 모든 효과를 이해하고 프로덕션 에서처럼 디버깅 할 수 있도록 로컬에서 실행해야합니다.

나는 이것이 많은 사람들이 권장하는 것이 아니라 우리에게 가장 효과적이라는 것을 알고 있습니다.

프런트 엔드 설정 단계

이 스크립트가 작동하려면 env.php에서 상점을 생산 모드로 설정하고에서 테마를 설정하십시오 dev/tools/grunt/configs/themes.js. (다음 단계는 훌륭한 플레이 북에 들어갔습니다)

  1. 지우다 var/cache
  2. 지우다 var/view_preprocessed
  3. 삭제 pub/static/*(.htaccess를 삭제하지 마십시오)
  4. 지우다 var/composer_home
  5. 운영 php bin/magento cache:flush
  6. 운영 php bin/magento setup:static-content:deploy %your_languages%
  7. 실제로 사용하지 않는 모든 테마 / 언어를 pub / static / frontend에서 삭제하십시오.
  8. 적은 파일의 하드 카피 제거 pub/static/frontend
  9. 운영 php bin/magento dev:source-theme:deploy --locale="%your_language%" --theme="%your_theme%" css/styles-m css/styles-l css/email css/email-inline
  10. 선택 사항 : bash 스크립트를 사용하여 9 단계에서 생성 된 절대 심볼릭 링크를 상대 심볼릭 링크로 변경하여 VM 외부에서 grunt를 실행할 수 있습니다.
  11. 운영 grunt less:your_theme

백엔드 / di-setup 단계

  1. 지우다 var/cache
  2. 지우다 var/generation
  3. 지우다 var/composer_home
  4. 지우다 var/di
  5. 운영 php bin/magento cache:flush
  6. 운영 php bin/magento setup:di:compile

이 @ greenone83에 감사드립니다. 이것은 프런트 엔드의 일부로 백엔드를 생성하지만 기본적으로 채택한 접근 방식입니다. 나는 결코 나사를 찾는 것으로 setup : di : compile을 사용하지 않는다! 내가 이해하지 못하는 한 가지 이유는 setup : static-content : deploy가 생성 된 / 코드로 파일을 생성하는 이유입니다 (위치가 게시물에서 변경됨)? 내 사이트에서 프로덕션 모드로 생성 된 / 코드를 모두 삭제하면 사이트를 탐색 할 때 이러한 파일이 자동으로 생성됩니다.
PedroKTFC

2

이 파일들도 무시해야합니다
/app/etc/config.php
/app/etc/env.php
/.idea/workspace.xml // phpstorm


2
config.php를 무시하면 다른 환경으로 푸시 한 후 새 확장을 다시 활성화해야하므로 저장소에 포함시키는 것이 좋습니다.
Vladimir Kerkhoff 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.