Proses penyebaran Magento 2

8

Saat ini kami berkomitmen composer.lockuntuk repositori dan kemudian berjalan composer install --no-devdi server produksi. Saya tidak berpikir ini adalah cara terbaik untuk melakukannya karena butuh beberapa menit bagi komposer untuk menghasilkan semua file dan itu berisiko.

Saya bertanya-tanya apakah lebih baik komit ke repo semua file yang diperlukan untuk berjalan dalam mode produksi.

Bagaimana orang lain mengelola proses penyebaran dengan Magento 2?

Claudiu Creanga
sumber
Mengapa berisiko? Ini hanya perlu dilakukan sekali per pemasangan / pengaturan, dan setelah komposer mengunduh paket itu di-cache.
user3668514
mungkin saya kehilangan sesuatu tetapi jika Anda tidak memiliki folder vendor di repositori, bagaimana Anda menginstal modul baru tanpa menjalankan composer installproduksi? letscodejavascript.com/v3/blog/2014/03/the_npm_debacle
Claudiu Creanga
Intinya adalah menjalankan composer install. Sudahkah Anda melihat git hook untuk mengotomatisasi proses?
user3668514
@ user3668514 bagaimana jika, ketika Anda menjalankan pemasangan komposer pada produksi, beberapa paket jarak jauh turun, seperti yang terjadi pada npm?
Claudiu Creanga
seberapa sering hal itu terjadi? Magento2 sekarang hadir dengan .gitignore yang secara eksplisit mengabaikan / vendor. Karena ini adalah 'cara Magento' yang baru, saya mengikutinya untuk memastikan pengembang lain dapat mengerjakan proyek tanpa masalah
user3668514

Jawaban:

5

Setuju 100% dengan claudiu-creanga untuk tidak melakukan vendor dan juga menghindari pemasangan komposer yang sedang berjalan dalam produksi.

Cara kami menangani ini adalah memiliki folder langsung dan folder kandidat rilis. Di folder kandidat rilis kita menjalankan perintah git pull dan menginstal komposer --no-dev. Proses kami dapat diringkas seperti ini:

  1. Dalam folder kandidat rilis:

    • Periksa perubahan yang tidak terduga
    • Perbarui repo
    • Instal penggubah
  2. Sinkronkan file ke folder situs langsung

  3. Dalam folder situs langsung:
    • Menyebarkan file statis
    • Aktifkan mode pemeliharaan
    • Aktifkan modul
    • Jalankan skrip pengaturan
    • Kompilasi DI
    • Kosongkan cache
    • Nonaktifkan mode pemeliharaan
    • Perbarui izin

Saya telah menulis artikel blog yang lebih panjang memberikan perintah dan alasan yang sebenarnya di balik ini: https://www.c3media.co.uk/blog/c3-news/deploying-magento-2-production-environment/

PEMBARUAN: Kami sekarang menyalin basis data langsung ke basis data pementasan dan menggunakan ini untuk menjalankan skrip pengaturan, menyebarkan file-file statis dan mengkompilasi DI semua offline. Ini kemudian dapat digunakan untuk hidup termasuk file pub / statis dan var. Kami masih menghapus situs tersebut sebentar jika skrip pengaturan sedang dijalankan, tetapi jika tidak, situs tersebut akan ditinggalkan. Lebih detail di https://www.c3media.co.uk/blog/c3-news/magento-2-deployment-without-downtime/

UPDATE: Saya telah berubah pikiran tentang melakukan folder vendor - dengan melakukan folder Anda mendapatkan kemampuan untuk melacak sejarah bagaimana file-file ini berubah, lihat apakah Anda secara tidak sengaja mengubah apa pun, dan yang paling penting Anda menghindari keharusan menjalankan komposer pada waktu penempatan. Yang terakhir ini sangat penting sekarang karena kita mengandalkan pemasok eksternal dari repositori. Bagaimana jika salah satunya tidak tersedia? Tiba-tiba Anda tidak dapat menggunakan. Kelemahannya adalah repositori yang lebih besar, risiko melakukan peretasan inti, dan para pengembang seperti saya :)

Robert Egginton
sumber
Kami juga sudah mulai melakukan aplikasi / etc / config.php. Ini secara default diabaikan oleh .gitignore Magento 2, tetapi dengan melakukan mengaktifkan dan menonaktifkan ini dilakukan selama pengembangan dan keputusan itu kemudian dilakukan dan dapat disebarkan dan diuji melalui CI.
Robert Egginton
Anda serius mengubah offline situs web Anda? Itu bukan pilihan bagi kita. Perusahaan kami sebenarnya menghasilkan uang
TheBlackBenzKid
Saat ini, ya kami menempatkan situs offline sebentar karena kami tidak 100% yakin bahwa pengguna tidak akan melihat sebagian situs operasi. Dengan pengalaman M1 kami yang lebih besar, kami tahu dengan kepastian tingkat tinggi perubahan apa yang dapat ditayangkan tanpa menurunkan situs. Belum begitu dengan M2.
Robert Egginton
Terpilih. Namun, seperti @TheBlackBenzKid, saya ingin melihat sesuatu yang tidak membuat situs web Anda offline, terutama karena kompilasi DI memerlukan sedikit waktu. Saya pikir memahami apa yang sebenarnya dikompilasi oleh DI adalah kuncinya - alangkah baiknya jika langkah itu bisa dilakukan di folder kandidat rilis. Sementara itu, ada kemajuan sejak Anda memposting @Robert ini?
Erfan
1
Sunting yang menarik @RobertEgginton - Saya sedang menjelajahi ini dan telah mengikuti posting dan diskusi Anda. Saya berbagi keberatan tentang penggunaan komposer pada waktu penggunaan dan kemungkinan tidak dapat dilakukannya repo pihak ketiga, meskipun saya menganggap ini kurang menjadi perhatian dengan repo kemasan. Melakukan ./vendor tampaknya kurang dari ideal juga, tetapi setidaknya itu memberi Anda rilis lengkap yang dapat digunakan terlepas dari repo pihak ke-3. Sudahkah Anda mencoba ekstensi Capistrano Magento2? Ini menggunakan komposer instal tapi saya suka cap workflow github.com/davidalger/capistrano-magento2
BlueC
3

Sejauh ini kami juga mengkomit folder vendor, yang tentu saja menambahkan banyak file ke repo Anda. (Pastikan untuk menghapus folder .git dalam file komposer vendor, karena jika tidak, konten folder tidak akan dikomitmenkan - firegento misalnya). Tapi symlinking folder vendor tidak berfungsi, mengedit path di file vendor_path.php juga tidak berfungsi dan kami belum punya waktu untuk mencari solusi yang lebih baik sejauh ini.

Kami tidak memiliki server build dan kami tidak menjalankan komposer di server, kami menjalankan dan menguji semua pembaruan secara lokal dan mengkomitnya. Ini pada gilirannya memicu skrip penerapan kami.

Skrip penerapan kami menggantikan file env.php, melakukan beberapa hal khusus dan kemudian juga memicu setup:upgradedan setup:static-content:deploysebelum beralih tautan langsung ke folder baru.

Satu-satunya folder yang kami symlink adalah pub / media.

tecjam
sumber
terima kasih atas masukannya. Selain mengubah env.php, perubahan apa lagi yang ingin Anda lakukan?
Claudiu Creanga
Itu semua tergantung pada server Anda sendiri dan pengaturan proyek saya kira. Untuk cabang dev & staging, kami juga menghapus .htaccess dan menyalin file .htaccess & htpassword kami sendiri ke direktori, kami memastikan bin / magento dapat dieksekusi hanya sebagai tindakan pencegahan sebelum menjalankan perintah cli di atasnya, yang kami pastikan kami menjalankan sebagai pemilik file magento (pengguna penyebaran root) dan kami menyinkronkan folder media ke dalam folder pub. Tentu saja Anda bisa menambahkan hal lain yang juga Anda sukai ketika menggunakan daripada sebelumnya.
tecjam
Mengkomit file dalam / vendor umumnya disarankan karena mengalahkan tujuan manajer komponen. Lihat dokumentasi komposer.
user3668514
Itu sudah jelas. Jadi, bagaimana Anda mengelola penyebaran Anda?
tecjam
1
Hati-hati @ user3668514 - Saya pikir maksud Anda komposer instal. Sangat mudah menjalankan pembaruan secara tidak sengaja dan benar-benar memodifikasi komponen daripada menginstalnya.
Robert Egginton
2

Akhirnya kami memilih keluar untuk layanan seperti deploybot( http://deploybot.com/ ). Anda dapat menggunakan capistranoyang gratis. Deploybot membuat wadah buruh pelabuhan saat pemasangan komposer berjalan dan jika perintah berhasil maka ia menyebarkan kode, jika tidak maka tidak akan menyebarkan apa pun sehingga lingkungan produksi Anda akan aman.

Saya menganggap ini pendekatan terbaik karena:

1) memiliki folder vendor di git repo Anda tidak direkomendasikan oleh komposer karena alasan yang baik:

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

Info lebih lanjut: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md

2) Berjalan composer install in productiontanpa jaring pengaman berisiko , paket bisa turun (lihat npm), Anda bisa mengalami masalah memori atau kesalahan apa pun yang terjadi saat komposer membuat file dan Anda harus berurusan dengan lingkungan produksi yang rusak.

Claudiu Creanga
sumber
1

Saya juga melihat ke dalam ini, pendekatan yang saya ambil sejauh ini adalah:

Bootstrap server:

  1. Setup proyek dengan composer --create-project ... --no-devke dalam srcfolder (meskipun saya masih melihat banyak dev dev datang melalui)
  2. Setup aplikasi, Kompilasi file statis, tingkatkan db dll.
  3. Tetapkan semua izin yang benar

Yang akan memberi saya stok, menjalankan toko dari direktori src saya (tetapi webroot saya tidak menunjuk ke sana)

Maka proses penerapan saya:

  1. Buat folder rilis baru
  2. rsync file src ke dalam rilis saya (tidak termasuk cruft)
  3. menyebarkan dan membongkar penyesuaian saya di atas (beberapa file tema, dan modul)
  4. instal modul magento pihak ketiga mana pun melalui magento connect
  5. arahkan webroot host saya ke rilis baru saya (dengan symlink)
  6. memuat ulang server web saya dengan anggun

Hal ini memungkinkan saya untuk mempertahankan kode inti Magento terpisah dari saya sendiri, menggunakan komposer untuk tetap memperbarui .. dan saya tidak perlu mengirimkan 39.102 !!! file dengan setiap penyebaran, atau jalankan perintah komposer pada waktu penyebaran ..

... Tertarik untuk mendengar pendekatan lain atau untuk praktik terbaik tentang ini, dan id juga senang mengetahui file apa yang sebenarnya diperlukan untuk produksi dan yang dev .. sehingga saya dapat menjaga webroot saya tetap bersih.

Setelah saya selesai, saya akan memiliki buku pedoman yang memungkinkan dan beberapa perintah Fabric untuk mengatur konfigurasi dan penyebaran, yang saya senang untuk berbagi.

Semoga itu bisa membantu

farridav
sumber
Saya ingin melihat buku pedoman, dan skrip.
JM Becker