Quy trình triển khai Magento 2


8

Hiện tại chúng tôi cam kết composer.lockvới kho lưu trữ và sau đó chạy composer install --no-devtrên máy chủ sản xuất. Tôi không nghĩ rằng đây là cách tốt nhất để làm điều đó bởi vì phải mất vài phút để nhà soạn nhạc tạo ra tất cả các tệp và nó rất rủi ro.

Tôi tự hỏi liệu có tốt hơn để cam kết repo tất cả các tệp cần thiết để chạy trong chế độ sản xuất.

Làm thế nào để người khác quản lý quá trình triển khai với magento 2?


Tại sao nó có rủi ro? Nó chỉ cần được thực hiện một lần cho mỗi lần cài đặt / thiết lập và khi nhà soạn nhạc đã tải xuống một gói, nó được lưu trong bộ nhớ cache.
user3668514

có thể tôi đang thiếu một cái gì đó nhưng nếu bạn không có thư mục nhà cung cấp trong kho, làm thế nào bạn có thể cài đặt các mô-đun mới mà không chạy composer installtrên sản xuất? letcodejavascript.com/v3/blog/2014/03/the_npm_debacle
Claudiu Creanga

Vấn đề là chạy composer install. Bạn đã nhìn vào một git hook để tự động hóa quá trình?
dùng3668514

@ user3668514 điều gì xảy ra nếu, khi bạn chạy cài đặt trình soạn thảo khi sản xuất, một số gói từ xa bị hỏng, giống như đã xảy ra với npm?
Claudiu Creanga

điều đó có thường xuyên xảy ra không? Magento2 bây giờ đi kèm với một .gitignore mà rõ ràng bỏ qua / nhà cung cấp trong số những người khác. Vì đây là 'cách Magento mới', tôi đang theo dõi nó để đảm bảo các nhà phát triển khác có thể làm việc với dự án mà không gặp sự cố
user3668514

Câu trả lời:


5

Đồng ý 100% với claudiu-creanga về việc không cam kết nhà cung cấp và cũng tránh chạy cài đặt trình soạn thảo trong sản xuất.

Cách chúng tôi đã xử lý việc này là để có một thư mục trực tiếp và thư mục ứng viên phát hành. Trong thư mục ứng cử viên phát hành, chúng tôi chạy các lệnh git pull và trình soạn thảo cài đặt --no-dev. Quá trình của chúng tôi có thể được tóm tắt như thế này:

  1. Trong thư mục ứng viên phát hành:

    • Kiểm tra những thay đổi bất ngờ
    • Cập nhật repo
    • Trình soạn thảo cài đặt
  2. Đồng bộ hóa tập tin vào thư mục trang web trực tiếp

  3. Trong thư mục trang web trực tiếp:
    • Triển khai các tệp tĩnh
    • Bật chế độ bảo trì
    • Kích hoạt mô-đun
    • Chạy các kịch bản thiết lập
    • Biên dịch DI
    • Xóa bộ nhớ cache
    • Tắt chế độ bảo trì
    • Cập nhật quyền

Tôi đã viết một bài viết blog dài hơn đưa ra các lệnh thực tế và lý do đằng sau điều này: https://www.c3media.co.uk/blog/c3-news/deploying-magento-2-production-en môi /

CẬP NHẬT: Bây giờ chúng tôi sao chép cơ sở dữ liệu trực tiếp vào cơ sở dữ liệu dàn và sử dụng cơ sở dữ liệu này để chạy các tập lệnh thiết lập, triển khai các tệp tĩnh và biên dịch DI tất cả ngoại tuyến. Điều này sau đó có thể được triển khai để sống bao gồm các tệp pub / static và var. Chúng tôi vẫn nhanh chóng gỡ trang web xuống nếu tập lệnh thiết lập đang được chạy, nhưng nếu không thì trang web bị bỏ lại. Thêm chi tiết tại https://www.c3media.co.uk/blog/c3-news/magento-2-deployment-without-dftimeime/

CẬP NHẬT: Tôi đã thay đổi suy nghĩ về việc cam kết thư mục nhà cung cấp - bằng cách cam kết thư mục bạn có khả năng theo dõi lịch sử về cách các tệp này thay đổi, hãy xem bạn có vô tình thay đổi điều gì không và quan trọng nhất là bạn tránh phải chạy trình soạn thảo tại thời điểm triển khai. Điều thứ hai là rất quan trọng bây giờ chúng tôi đang dựa vào các nhà cung cấp bên ngoài của kho lưu trữ. Điều gì nếu một trong số họ không có sẵn? Đột nhiên bạn không thể triển khai. Nhược điểm là một kho lưu trữ lớn hơn, nguy cơ thực hiện các vụ hack cốt lõi và làm phiền các nhà phát triển như tôi :)


Chúng tôi cũng đã bắt đầu cam kết ứng dụng / etc / config.php. Điều này theo mặc định bị bỏ qua bởi .gitignore của Magento 2, nhưng bằng cách cam kết việc bật và tắt này được thực hiện trong quá trình phát triển và sau đó quyết định đó được cam kết và có thể được tuyên truyền và kiểm tra thông qua CI.
Robert Egginton

Bạn nghiêm túc biến trang web của mình nhé? Đó không phải là một lựa chọn cho chúng tôi. Công ty chúng tôi thực sự đang kiếm tiền
TheBlackBenzKid

Hiện tại, có, chúng tôi đặt các trang web ngoại tuyến một cách ngắn gọn vì chúng tôi không chắc chắn 100% rằng người dùng sẽ không thấy một trang web hoạt động một phần. Với kinh nghiệm lớn hơn về M1, chúng tôi biết với mức độ chắc chắn cao, những thay đổi có thể diễn ra mà không cần gỡ trang web xuống. Chưa như vậy với M2.
Robert Egginton

Bình chọn lên. Tuy nhiên, như @TheBlackBenzKid, tôi muốn thấy một cái gì đó không đưa trang web của bạn ngoại tuyến, đặc biệt là khi quá trình biên dịch DI mất một chút thời gian. Tôi nghĩ việc hiểu những gì trình biên dịch DI thực sự là chính - sẽ thật tuyệt nếu bước đó có thể được thực hiện trong thư mục ứng viên phát hành. Có tiến triển nào trong thời gian này kể từ khi bạn đăng bài này @Robert không?
Erfan

1
Chỉnh sửa thú vị @RobertEgginton - Tôi hiện đang khám phá điều này và đã theo dõi các bài đăng và thảo luận của bạn. Tôi chia sẻ các bảo lưu về việc sử dụng nhà soạn nhạc tại thời điểm triển khai và khả năng không khả thi của các repos bên thứ ba, mặc dù tôi cho rằng điều này ít quan tâm hơn với các reposist packagist. Cam kết ./vendor dường như ít hơn lý tưởng nhưng ít nhất nó mang đến cho bạn một bản phát hành hoàn chỉnh có thể được triển khai độc lập với các repos của bên thứ 3. Bạn đã thử mở rộng Capistrano Magento2 chưa? Điều này sử dụng cài đặt trình soạn thảo nhưng tôi thích quy trình làm việc giới hạn github.com/davidalger/capistrano-magento2
BlueC

3

Cho đến nay, chúng tôi cũng cam kết thư mục nhà cung cấp, tất nhiên sẽ thêm rất nhiều tệp vào repo của bạn. (Hãy chắc chắn xóa mọi thư mục .git trong tệp nhà soạn nhạc của nhà cung cấp, vì nếu không nội dung thư mục sẽ không được cam kết - ví dụ như firegento). Nhưng symlinking thư mục nhà cung cấp không hoạt động, chỉnh sửa đường dẫn trong tệp của nhà cung cấp_path.php cũng không hoạt động và chúng tôi không có thời gian để tìm kiếm một giải pháp tốt hơn cho đến nay.

Chúng tôi không có máy chủ xây dựng và chúng tôi không chạy trình soạn thảo trên máy chủ, chúng tôi chạy và kiểm tra tất cả các cập nhật cục bộ và cam kết chúng. Điều này lần lượt kích hoạt kịch bản triển khai của chúng tôi.

Tập lệnh triển khai của chúng tôi thay thế tệp env.php, thực hiện một số điều tùy chỉnh và sau đó cũng kích hoạt setup:upgradesetup:static-content:deploytrước khi chuyển liên kết trực tiếp sang thư mục mới.

Thư mục duy nhất chúng tôi symlink là pub / media.


Cảm ơn các đầu vào. ngoài việc thay đổi env.php, những thay đổi khác mà bạn muốn thực hiện là gì?
Claudiu Creanga

Đó là tất cả phụ thuộc vào máy chủ của riêng bạn và thiết lập dự án tôi đoán. Đối với các nhánh dev & staging, chúng tôi cũng xóa .htaccess và sao chép các tập tin .htaccess & htpassword của riêng chúng tôi vào thư mục, chúng tôi đảm bảo bin / magento có thể được thực thi như một biện pháp phòng ngừa trước khi chạy các lệnh cli trên nó, chúng tôi đảm bảo chúng tôi chạy với tư cách là chủ sở hữu tệp magento (người dùng triển khai là root) và chúng tôi liên kết thư mục phương tiện vào thư mục pub. Tất nhiên bạn có thể thêm bất cứ điều gì khác mà bạn muốn làm khi triển khai hơn là trước đó.
tecjam 17/2/2016

Các tệp cam kết trong / nhà cung cấp thường được khuyên chống lại vì nó đánh bại mục tiêu của người quản lý thành phần. Xem tài liệu tổng hợp.
user3668514

Điều đó là rõ ràng. Vậy làm thế nào để bạn quản lý triển khai của bạn sau đó?
tecjam

1
Cẩn thận @ user3668514 - Tôi nghĩ bạn có nghĩa là cài đặt nhà soạn nhạc. Thật dễ dàng để vô tình chạy cập nhật và thực sự sửa đổi các thành phần thay vì cài đặt chúng.
Robert Egginton

2

Cuối cùng, chúng tôi đã chọn không tham gia một dịch vụ như deploybot( http://deploybot.com/ ). Bạn có thể sử dụng capistranomiễn phí. Deploybot tạo một thùng chứa docker trong khi cài đặt trình soạn thảo đang chạy và nếu lệnh thành công thì nó sẽ triển khai mã, nếu không nó sẽ không triển khai bất cứ điều gì để môi trường sản xuất của bạn sẽ an toàn.

Tôi coi đây là cách tiếp cận tốt nhất bởi vì:

1) có thư mục nhà cung cấp trong repo git của bạn không được các nhà soạn nhạc khuyên dùng vì lý do chính đáng:

The general recommendation is no. The vendor directory (or wherever your dependencies are installed) should be added to .gitignore/svn:ignore/etc.

Thông tin thêm: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md

2) Chạy composer install in productionkhông có lưới an toàn là rủi ro , các gói có thể bị hỏng (xem npm), bạn có thể gặp sự cố về bộ nhớ hoặc bất kỳ lỗi nào có thể xảy ra trong khi nhà soạn nhạc tạo tệp và bạn sẽ phải xử lý môi trường sản xuất bị hỏng.


1

Tôi cũng đang xem xét điều này, cách tiếp cận tôi đã thực hiện cho đến nay là:

Khởi động máy chủ:

  1. Thiết lập dự án với composer --create-project ... --no-devmột srcthư mục (mặc dù tôi vẫn thấy rất nhiều dev cruft đi qua)
  2. Cài đặt ứng dụng, Biên dịch tệp tĩnh, nâng cấp db, v.v.
  3. Đặt tất cả các quyền chính xác

Cái nào sẽ cho tôi một cổ phiếu, chạy cửa hàng từ thư mục src của tôi (nhưng webroot của tôi không trỏ đến đó)

Sau đó, quá trình triển khai của tôi:

  1. Tạo một thư mục phát hành mới
  2. rsync các tập tin src vào bản phát hành của tôi (không bao gồm cruft)
  3. triển khai và giải nén các tùy chỉnh của tôi trên đầu trang (một số ít tệp chủ đề và mô-đun)
  4. cài đặt bất kỳ mô-đun magento của bên thứ ba thông qua kết nối magento
  5. trỏ máy chủ lưu trữ web của tôi vào bản phát hành mới của tôi (với một liên kết tượng trưng)
  6. duyên dáng tải lại máy chủ web của tôi

Điều này cho phép tôi duy trì mã lõi Magento tách biệt với mã riêng của mình, sử dụng trình soạn thảo để cập nhật mã .. và tôi không cần gửi 39.102 !!! các tệp với mỗi lần triển khai hoặc chạy các lệnh tổng hợp tại thời điểm triển khai ..

... Muốn nghe về các phương pháp khác hoặc để thực hành tốt nhất về vấn đề này, và id cũng thích biết những tập tin nào thực sự cần thiết cho sản xuất và đó là dev .. vì vậy tôi có thể giữ sạch webroot của mình.

Sau khi tôi kết thúc, tôi sẽ có một playbook ansible và một số lệnh Fabric để sắp xếp cấu hình và triển khai, tôi rất vui được chia sẻ.

Mong rằng sẽ giúp


Tôi rất thích xem các vở kịch và kịch bản.
JM Becker
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.