Mengelola Magento / Komposer / Penempatan

18

Jadi, saya menikmati menggunakan installer Magento Composer hackathon, tapi saya berjuang untuk memahami bagaimana orang lain menggunakannya dalam kaitannya dengan layanan penempatan. Saat ini saya menggunakan DeployHQ, dan ya, saya dapat mengaturnya untuk menggunakan dan menjalankan komposer ketika ada pembaruan untuk repo, tetapi ini tidak masuk akal bagi saya sekarang.

Repo komposer utama saya, yang hanya berisi file json dari semua paket yang ingin saya sertakan dalam build saya, hanya akan diperbarui ketika saya menambahkan paket baru ke daftar.

Ketika saya memperbarui tema saya, atau ekstensi khusus (yang direferensikan dalam file json), tidak ada "kait" untuk memperbarui layanan penempatan saya. Jadi saya harus masuk ke server saya dan secara manual menjalankan komposer (yang membuat situs turun sampai selesai).

Jadi bagaimana orang lain mengelola ini? Haruskah saya hanya menjalankan komposer secara lokal dan memasukkan folder vendor di repo saya?

Setiap jawaban akan sangat dihargai.

JamesAllwood
sumber
4
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena ini tentang Komposer.
mbalparda
1
Hai, khususnya, ini terkait dengan penggunaan Magento dengan komposer, dan lebih khusus lagi fungsi hackathon Magento. Jadi saya pikir Anda sudah terlalu dini tentang maaf itu!
JamesAllwood
Ini sangat rumit untuk dijelaskan, tetapi saya akan coba: karena saya pikir pertanyaan ini tidak terkait dengan Magento dan Anda pikir itu, saya menandainya sebagai Off topic. Jika seorang moderator atau 4 anggota lainnya memutuskan perlu ditutup, maka ia akan melakukannya. Jika tidak, itu akan tetap terbuka. Pesan otomatis ketika Anda menandai pertanyaan sebagai di luar topik. Dan itu tentu saja di luar topik karena topik utama adalah komposer, terkait dengan Magento tetapi dapat diterapkan pada instalasi perangkat lunak lain dan mungkin milik situs tentang server / penyebaran dan bukan di Magento SE menurut pendapat saya.
mbalparda
1
Kawan, pertanyaan ini telah menerima 2 suara dan favorit. Tentunya membiarkan seseorang untuk menjawab pertanyaan ini tidak ada salahnya? Itu AKAN MEMBANTU orang lain di komunitas
MAGENTO
@ Jamesallwood bagaimana Anda melakukannya?
jharrison.au

Jawaban:

13

Saya telah membuat struktur di agensi kami yang memungkinkan kami menggunakan Komposer untuk menyebarkan semua situs Magento kami. Ini mungkin sedikit berlebihan untuk pertanyaan yang Anda ajukan, tetapi inilah gambaran dasar strukturnya:

Struktur repositori

Di bawah ini adalah struktur folder dari repositori 'induk'. Ini berisi komposer JSON dan file kunci dan konfigurasi lain yang diperlukan untuk penyebaran.

- 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
  • Semua penyesuaian khusus klien disimpan dalam modul "penyesuaian khusus" terpisah yang diinstal menggunakan Komposer
  • Inti Magento dimasukkan sebagai submodule Git ( code/magento)
  • Kustom index.phpdan folder lain seperti media dan kesalahan duduk di dalam folder publik di luar akar Magento
  • File khusus lingkungan (local.xml, robots.txt, dll) disinkronkan ke root Magento selama proses penyebaran
  • Folder vendor dikecualikan dari Git, tetapi file composer.lock disertakan.

Penyebaran

  • Kami menyebarkan menggunakan Capsitrano yang memungkinkan untuk beberapa server aplikasi dan lingkungan (pementasan / produksi)
  • Capistrano membangun seluruh basis kode pada server di folder baru, dan kemudian menukar symlink webroot di bagian paling akhir yang berarti tidak ada downtime untuk situs web Anda.
  • Capistrano beroperasi composer installselama proses pembangunan dan menyebarkan semua modul ke dalam submodule Magento.

Ini masih bukan pengaturan integrasi berkelanjutan tetapi saya merasa ini berfungsi dengan baik untuk situs Magento. Jangan ragu untuk mengirim saya pesan jika Anda membutuhkan saran lain yang khusus untuk pengaturan Anda.

jharrison.au
sumber
1
itu dan jawaban lama, tapi harap kamu bisa menjawabnya. 1 Bukankah penyimpanan produksi lokal.xml masalah keamanan? 2 Pada tahap apa dan bagaimana Anda mengimpor basis data?
MployBy
5

Metode lain adalah dengan menggunakan strategi penyebaran salinan magento hackathons, yang terlihat seperti ini di file composer.json Anda:

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

Menggunakan metode di atas menyalin file yang diinstal dari vendor ke instalasi yang sebenarnya, memungkinkan untuk dilakukan di Git dan digunakan seperti biasa, tanpa harus melakukan pemasangan komposer.

Saya bukan penggemar berat menarik dari repositori pihak ketiga ketika Anda akan melakukan penyebaran langsung, dan menjadi tergantung pada repositori pihak ketiga agak berisiko, kecuali Anda memiliki semacam cache proxy untuk jaringan Anda .

Baca artikel ini dan itu akan memberi Anda perspektif yang berbeda: http://www.letscodejavascript.com/v3/blog/2014/03/the_npm_debacle

Pada dasarnya, NPM turun (semacam ..) dan sistem pembangunan semua orang berhenti bekerja (untuk penyebaran kritis!) Karena mereka langsung bergantung pada NPM. (NPM seperti Packagist untuk Javascript, kecuali bahwa NPM sebenarnya meng-host file dan Packagist hanya menunjuk ke repositori modul Github - koreksi saya jika saya salah)

sunting: hanya respon red fschmengler .. Ini adalah penjabaran dari pendekatan pertamanya

Erfan
sumber
4

Penting untuk dipahami bahwa Komposer bukanlah alat penyebaran, tetapi alat pengembangan.

Ada beberapa pendekatan berbeda tentang cara mempersiapkan penyebaran dengan semua dependensi:

  • komit direktori vendor (atau di mana pun komposer menginstal sumber) ke repositori proyek
  • menggunakan server build yang menjalankan composer installdan membuat arsip dengan hasilnya, yang dapat Anda gunakan berulang untuk sistem target yang berbeda
    • berjalan composer installdi server dan kemudian beralih symlink seperti yang disarankan oleh @ jharrison.au adalah variasi dari yang ini

Selain itu, saya tidak merekomendasikan menggunakan komposer untuk setiap modul tunggal dan hanya menyimpan composer.jsondan composer.lock dalam repositori proyek. Ini berlebihan dan membuat pembangunan menjadi rumit. Masuk akal untuk kode yang digunakan kembali pada beberapa proyek tetapi mengapa Anda memasukkan kode spesifik proyek ke dalam repositori terpisah?

Struktur proyek saya saat ini terlihat seperti ini (menggunakan installer komposer alternatif oleh AOE ):

  • srcberisi semua modul khusus proyek. Komposer juga memasang modul Magento lainnya di sini
  • .modmantautan ke srcsehingga modman dapat menangani symlinking dengan mudah
  • wwwadalah webroot. Komposer memasang inti Magento di sini

Dengan cara ini saya memasukkan modul eksternal ke dalam repositori. Jika Anda memilih untuk tidak melakukannya, sesuaikan seperti ini:

  • srcberisi semua modul khusus proyek. Untuk memasukkannya ke dalam .modmansehingga modman membuat symlink, gunakanmodman link
  • .modmanadalah di .gitignore. Komposer memasang modul Magento di sini
  • wwwadalah webroot. Komposer memasang inti Magento di sini
Fabian Schmengler
sumber