Chiến lược GIT và triển khai các dự án Magento2


92

Với Magento 1, tôi đã sử dụng một công cụ triển khai trong repo GIT, chạy các lệnh như modman deploy-allvà đảm bảo varthư mục có thể ghi được. Đối với .gitignoretôi đã sử dụng cái này hoạt động khá tốt.

Nhưng còn Magento 2 thì sao?

Gitignore nào hoạt động tốt nhất, làm thế nào để bạn triển khai dự án của mình và lệnh nào nên chạy triển khai trước và sau. Mong muốn được nghe một số hiểu biết từ cộng đồng.

Câu hỏi sẽ mở khá lâu


Câu hỏi hay @sander Mangel
Amit Bera

1
Theo định nghĩa, không thể có câu trả lời chính tắc cho vấn đề này, vì vậy nó có thể quá rộng và cũng không phù hợp với bản chất Q & A của trang web. Nên có khả năng là meta. Nhưng bạn đã biết điều này. Điều đó nói rằng, tôi sẽ cho phép nó cho đến khi tiền thưởng hết hạn.
philwinkle

@philwinkle nó có thể rộng nhưng dường như không quá rộng vì đã có 3 câu trả lời. Như đã thảo luận ở đây: meta.magento.stackexchange.com/questions/745/ Mạnh Meta sẽ được sử dụng cho các câu hỏi về MageSE, không phải các bài đăng / câu hỏi ngẫu nhiên Nếu bạn muốn xóa nó, tôi không thể dừng bạn nhưng có vẻ rất nhiều mọi người quan tâm đến câu hỏi và theo tôi đó là một câu hỏi hợp lệ, tất cả đều không quá cụ thể.
Sander Mangel

Hai điều: Thứ nhất, Sander đúng về Meta - nó chỉ nên được sử dụng cho các câu hỏi về nền tảng SE vì nó liên quan đến Magento SE (NB: chúng tôi có thể không kiểm soát Meta đủ tốt để củng cố quy tắc này). Thứ hai, "rất nhiều người [quan tâm đến" một câu hỏi không liên quan gì đến việc liệu một câu hỏi có thể được trả lời theo nguyên tắc hay không (và do đó có phù hợp với câu hỏi với định dạng StackExchange). Thật là bực bội (tôi đã tự mình chống lại điều này). Tôi đang có xu hướng xem chủ đề Q / A này đi đâu. Có lẽ một chữ A có thể được tuyên bố đủ tốt để chỉ "đúng" ...
đánh dấu

@benmark trong trường hợp đó tôi đã chọn sai lý do hoặc chủ đề cho tiền thưởng, động lực của tôi đằng sau đó là thưởng cho bất cứ ai đã dành thời gian để viết ra một câu trả lời đầy đủ cho việc này. Nếu chủ đề này không thuộc về ở đây tôi sẽ sao chép nó và đăng nó ở đâu đó trực tuyến tín dụng các tác giả vì tôi cảm thấy nó vẫn còn giá trị. Vui lòng thông báo cho tôi nếu trước khi xóa
Sander Mangel

Câu trả lời:


56

Các bước dưới đây mô tả cách thiết lập môi trường để phát triển mô-đun tùy chỉnh, không phải cho sản xuất.

Khởi tạo dự án

  1. Thêm thông tin repo.magento.comgithub access token để auth.json trong thư mục nhà soạn nhạc
  2. Tạo dự án bằng lệnh sau:

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

  3. Lấy .gitignore này và đưa vào gốc dự án của bạn. Hầu như tất cả các tệp / thư mục cốt lõi đã được thêm vào thư mục gốc .gitignore, nhưng tốt hơn hết là thêm 2 mục sau /update/phpserver(chỉ cần thêm 2 dòng này vào .gitignore)

  4. Khởi tạo kho git mới trong root dự án
  5. Thêm tất cả các tệp chưa được theo dõi vào git và cam kết chúng
  6. Bắt đầu phát triển các mô-đun của bạn như bình thường (đặt chúng bên dưới app/code/VendorName/ModuleName), bây giờ bạn sẽ chỉ có mã tùy chỉnh trong kho git của mình

Cài đặt Magento

  1. Đảm bảo rằng tất cả các quyền của hệ thống tệp được đặt như được nêu trong hướng dẫn chính thức
  2. Cài đặt Magento bằng dòng lệnh, vd:

    ${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. Cho phép công cụ lập chỉ mục cron, ví dụ trên Ubuntu:

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

  4. Magento sẽ chạy trong defaultchế độ và tất cả nội dung còn thiếu sẽ được tạo tự động theo yêu cầu đầu tiên. Vì vậy, không cần phải chạy trình biên dịch hoặc triển khai nội dung tĩnh
  5. [tùy chọn] Nếu sử dụng PHP Storm, hãy chạy lệnh sau để bật hỗ trợ XSD:

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


Chào Alex. Bước khởi tạo dự án 3 - bạn có thể mở rộng nó một chút không? Bạn có thấy bạn phải sao chép thủ công thư mục con đó vào thư mục gốc không? (Tôi tự hỏi liệu có thứ gì đó không hoạt động chính xác không - tôi không mong đợi bước đó.)
Alan Kent

@AlanKent hiện tại bạn nhận được tất cả các tệp liên quan đến Magento được tải xuống vendor, bao gồm magento2-base, đây chỉ là bộ xương cho một dự án mới. Không chắc chắn tại sao bước này không được cấu hình để thực hiện tự động bởi nhà soạn nhạc, sẽ cố gắng tìm hiểu. Liên quan đến .gitignoreviệc sao chép từ một repo khác, nó đã được thảo luận, làm thế nào để loại bỏ / đơn giản hóa bước này.
Alex Paliarush

Bước 3 là không bắt buộc. Việc sắp xếp các tập tin / thư mục được thực hiện trong bước 2.
Maddy

Cảm ơn @Maddy. @AlanKent, sao chép magento2-basevào thư mục gốc không còn cần thiết nữa (chỉ cần xác minh), dường như đã được sửa gần đây. Loại bỏ bước này khỏi câu trả lời.
Alex Paliarush

1) tôi đã đặt tất cả mã của mình vào repo, đã được hủy kết nối và mọi thứ, khi tôi lấy từ repo đó và chỉ cần thay đổi cài đặt, thông báo của quản trị viên và thông tin db, mọi thứ sẽ hoạt động chính xác chứ? 2) vì tôi quên loại trừ var / và pub / thư mục trong quá trình đẩy, tôi có thể xóa chúng hoàn toàn không, để chúng có thể xóa trên repo từ xa, liệu chúng có tái tạo lại không? Cảm ơn.
Lachezar Raychev

25

Đối với Khởi tạo và Cài đặt, hãy làm theo các bước từ câu trả lời của Alex cho hầu hết các bước, chỉ những khác biệt tôi muốn giới thiệu:

Cấu hình Git

Chỉ lưu trữ các tệp sau trong kho Git của bạn:

  • composer.json
  • nhà soạn nhạc.lock
  • ứng dụng / etc / config.php

Đối với mã tùy chỉnh dự án của bạn, cũng sử dụng các mô-đun riêng biệt mà bạn bao gồm nhà soạn nhạc thông qua. Việc quản lý trình soạn thảo thông qua này dễ dàng hơn khi bạn có thể khóa một phiên bản / bản phát hành cụ thể mà bạn muốn triển khai. Điều này cũng buộc bạn phải sử dụng cùng một cách tiếp cận cho các mô-đun bên trong và bên ngoài.

Triển khai

Trong quá trình phát triển, bạn cập nhật các mô-đun trên môi trường của mình (dev / test) bằng lệnh:

composer update

Điều này sẽ cập nhật tệp composer.lock với các phiên bản được cài đặt trên bản cài đặt đó.

Khi dàn dựng / tiền sản xuất / sản xuất, bạn có thể tạo / cài đặt cùng một thiết lập với lệnh:

git pull
composer install

Điều này sẽ cài đặt tất cả các mô-đun giống như được sử dụng trong dev / test để đảm bảo rằng thử nghiệm trước khi xuất bản thành sản xuất được thực hiện với cùng các phiên bản mô-đun như được phát triển cùng.

Sau khi cài đặt để chạy các lệnh sau:

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

Điều này sẽ cập nhật cơ sở dữ liệu (lược đồ và nâng cấp dữ liệu), tạo cấu hình DI và triển khai tất cả các tệp xem tĩnh.


Có lẽ nó có ý nghĩa để sử dụng dữ liệu mẫu thay vì tạo đồ đạc? Lịch thi đấu chỉ tập trung vào các mô-đun quan trọng nhất và dường như chỉ hữu ích cho việc kiểm tra hiệu suất.
Alex Paliarush

Cảm ơn, đã loại bỏ phần đó vì nó không cần thiết khi sử dụng một trang web trong sản xuất.
Vladimir Kerkhoff

Điều này theo rất sát cách tiếp cận mà tôi đang sử dụng là tốt. Điều này cũng hoạt động tốt với Magento 1 (với quy trình xây dựng ít phức tạp hơn) Hãy để nhà soạn nhạc thực hiện công việc của mình, nó hoạt động để triển khai thực sự tốt theo kinh nghiệm của tôi và chúng tôi chưa thấy nhiều nhược điểm khác ngoài sự phức tạp với chiến lược .gitignore khi bạn không theo dấu chân nhỏ hơn trong git.
Aepod

Cài đặt này trông giống như cách 'tích hợp'. Nó thêm các repos trong nhà cung cấp / magento / *. Không có mã sẽ có trong ứng dụng / mã / .. và các thư mục khác. Làm thế nào tôi có các thư mục Magento 2 lõi như trong kho lưu trữ .zip. Có thể thêm thông qua trình soạn thảo một mô-đun (repo git khác) và tự động kết thúc trong ứng dụng / mã / ... không?
che khuất

4
rủi ro, nhà soạn nhạc không phải là một công cụ triển khai. nếu có lỗi gì đó khi cài đặt trình soạn thảo khi chạy trong sản xuất ...
Claudiu Creanga

3

Re .gitignore, 2.2 trở đi câu trả lời chính thức của Magento sẽ là "config.php đi vào git, env.php thì không".

Chúng tôi đang xem xét các plugin của nhà soạn nhạc như Mediawiki để có được nhà phát triển nội bộ gần hơn với các trang web phát triển mở rộng và khách hàng. Vẫn đang khám phá, chưa phải là cuối cùng.

Tôi khá thích sử dụng loại kho lưu trữ "Đường dẫn" của Trình soạn thảo với đường dẫn ../othergitrepo/app/code/*/*để nhận các mô-đun, nhưng nó sử dụng các liên kết tượng trưng không hoạt động tốt với môi trường dev sử dụng Unison hoặc tương tự.


3

chúng tôi chạy một cách tiếp cận khác không liên quan đến một máy chủ / quy trình xây dựng riêng biệt , chúng tôi phát triển cục bộ như thể đang sản xuất

sau đó chúng tôi cam kết tất cả các tập tin cần thiết cho sản xuất . sau đó chúng tôi chỉ cần triển khai các bộ thay đổi đến máy chủ và chạy lệnh nâng cấp.

Đến một phiên bản phù hợp để phát triển nhưng cũng chạy trong chế độ sản xuất là phần khó khăn và vẫn chưa hoàn hảo nhưng bây giờ chúng tôi đã có một công thức hoạt động.

Lý do là chúng tôi muốn kiểm soát 100% mã sản xuất. vì magento2 tạo ra một tấn mã, chúng ta phải chạy nó cục bộ để có thể hiểu tất cả các hiệu ứng và có thể gỡ lỗi như thể trong sản xuất.

Tôi biết rằng đây không phải là điều mà nhiều người khuyên nên làm nhưng đối với chúng tôi nó hoạt động tốt nhất.

các bước thiết lập frontend

Để các tập lệnh này hoạt động, hãy đặt cửa hàng của bạn ở chế độ sản xuất trong env.php và thiết lập chủ đề của bạn dev/tools/grunt/configs/themes.js. (các bước sau đây đã được đưa vào một playbook ansible)

  1. xóa bỏ var/cache
  2. xóa bỏ var/view_preprocessed
  3. xóa pub/static/*(không xóa .htaccess)
  4. xóa bỏ var/composer_home
  5. chạy php bin/magento cache:flush
  6. chạy php bin/magento setup:static-content:deploy %your_languages%
  7. xóa tất cả các chủ đề / ngôn ngữ bạn không thực sự sử dụng từ pub / static / frontend
  8. xóa các bản sao cứng của ít tệp khỏi pub/static/frontend
  9. chạy 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. tùy chọn: chúng tôi sử dụng tập lệnh bash để thay đổi các liên kết tuyệt đối, được tạo ở bước 9, thành các liên kết tương đối, để có thể chạy grunt từ bên ngoài vm
  11. chạy grunt less:your_theme

các bước phụ trợ / di-setup

  1. xóa bỏ var/cache
  2. xóa bỏ var/generation
  3. xóa bỏ var/composer_home
  4. xóa bỏ var/di
  5. chạy php bin/magento cache:flush
  6. chạy php bin/magento setup:di:compile

Cảm ơn vì điều này @ greenone83, đây là cách tiếp cận mà tôi đã áp dụng cơ bản mặc dù tôi tạo phần phụ trợ của mình như một phần của giao diện người dùng. Tôi KHÔNG BAO GIỜ sử dụng setup: di: biên dịch khi tôi thấy nó làm hỏng mọi thứ! Một điều tôi không hiểu là tại sao thiết lập: static-content: triển khai tạo các tệp trong mã được tạo / mã (vị trí đã thay đổi từ bài đăng của bạn)? Tôi thấy rằng nếu tôi xóa tất cả mã được tạo / mã, với trang web của tôi ở chế độ sản xuất, các tệp này sẽ tự động được tạo khi tôi duyệt qua trang web.
PedroKTFC

2

Bạn cũng nên bỏ qua các tệp này
/app/etc/config.php
/app/etc/env.php
/.idea/workspace.xml // phpstorm


2
Nếu bạn bỏ qua config.php, bạn sẽ cần bật lại tiện ích mở rộng mới sau khi chuyển sang môi trường khác, do đó tốt hơn là đưa nó vào kho lưu trữ của bạn.
Vladimir Kerkhoff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.