Pengaturan Pengembangan Magento

23

pertanyaan ini diarahkan untuk menyiapkan lingkungan pengembangan. Saya memiliki beberapa persyaratan khusus:

  1. Saya ingin dapat menggunakan solusi saya di Linux, Windows dan Mac OS, karena orang-orang dari tim kami menggunakan semua OS ini (misalnya pengembang front-end menggunakan Windows / Mac, pengembang back-end kebanyakan menggunakan Linux)
  2. Saya perlu menggunakan modman
  3. Saya perlu menggunakan komposer
  4. Saya perlu menggunakan Github serta repositori Git pribadi saya
  5. Saya membutuhkan IDE yang tepat seperti Netbeans atau PHP Storm
  6. Saya ingin kinerja yang sangat bagus

Setup saya saat ini adalah gambar Ubuntu tervirtualisasi dalam Virtualbox. Ketiga OS dapat menjalankan Virtualbox, jadi poin 1) - 5) semuanya puas.

Namun, saat ini, saya tidak sepenuhnya puas dengan 6). Ini terutama benar ketika menjalankan solusi dari dalam Ubuntu 12.04. Virtualbox tampaknya jauh lebih stabil dan responsif di bawah Windows 7. Namun, banyak orang di tim kami menggunakan Linux, jadi saya ingin meningkatkan solusinya.

Adakah yang memiliki setup yang sebanding di VMWare atau mungkin bahkan docker.io dan dapat melaporkan apakah itu berjalan lebih stabil? Atau apakah ada yang punya solusi / ide yang sebanding lainnya?

mpaepper
sumber
pertanyaan yang bagus! kami juga telah mengerjakan pengaturan serupa tetapi belum memasukkannya ke alur kerja reguler kami. menantikan jawaban.
Anna Völkl
hanya sebuah ide singkat: tidakkah mungkin untuk bekerja tanpa VM di Linux dan langsung menginstal semua yang berjalan di VM? atau apakah Anda menggunakan satu VM untuk satu proyek?
Anna Völkl
Apakah Anda menjalankan VM tanpa kepala atau dengan GUI? Dan bagaimana Anda menyinkronkan sistem file VM Image dengan sistem host? Folder bersama? Samba? (Saya mengasumsikan IDE berjalan pada host, bukan VM). Itu bisa membuat perbedaan besar.
Vinai
@ AnnaVölkl ya, itu mungkin, tapi itu akan menghancurkan beberapa keuntungan. Misalnya setiap kali Anda memperbarui gambar dasar, semua pengguna Linux harus memperbarui perubahan secara manual. Juga, jika Anda ingin membawa kotak Anda dari satu komputer ke komputer lain (mis. Bekerja di rumah atau di tempat lain), masalahnya akan jauh lebih sulit.
mpaepper
1
Seperti yang dikatakan Anna: kami juga mengerjakan sesuatu seperti ini. Kami menggunakan Vagrant untuk membangun gambar VM dan ini bekerja cukup baik. Seperti yang Anda katakan, kinerja (mengenai kecepatan file I / O di folder bersama) adalah hal utama yang harus kami kerjakan sebelum beralih. Untuk sistem host Linux, berbagi NFS dapat membantu. Masalah besar kami adalah bahwa sebagian besar pengembang kami menggunakan sistem host Windows dan berlawanan dengan tautan, kinerja Windows tidak baik sama sekali. Saya sudah mendengar ini dari orang yang berbeda sekarang, bukan hanya kita.
Matthias Zeis

Jawaban:

8

Saya menggunakan gelandangan, git dan beberapa skrip build di phing. Mesin gelandangan menjalankan database dan server web, git digunakan secara lokal untuk melacak perubahan dalam ekstensi saya dan membangun skrip yang digunakan untuk memperbarui /var/wwwdirektori pada mesin gelandangan saya (sebenarnya itu digunakan di mana-mana di mana saya perlu membangun sebuah lingkungan).

Phing

Mungkin bagian yang paling menarik adalah phing, yang berfungsi seperti modman + composer untuk saya. Ini memiliki beberapa target yang ditetapkan termasuk membangun, mengatur dan menginstal.

The build Target Download versi tertentu dari Magento (ditentukan dalam membangun config) dari webserver internal dan ekstrak ke direktori build. Kemudian jalankan target lain yang mengatur izin untuk file dan membersihkan cache. Kemudian ia membuat symlink ke semua file di direktori sumber. Sebagai hasilnya, saya menyiapkan semua file untuk digunakan di direktori build saya. Jika file inti magento sudah ada dalam direktori bangunan, ia melewatkan pengunduhan dan hanya memperbarui symlink, jadi saya menggunakan target ini untuk membangun kembali lingkungan setiap kali saya perlu memperbarui symlink. Untuk direktori sumber mesin gelandangan ada di /vagrant/src(folder bersama) dan direktori bangunan adalah /var/www.

The menginstal Target men-download dan database dump impor untuk versi Magento tertentu. Kemudian jalankan target setup.

The Setup Target hanya membuat file local.xml dengan semua pengaturan.

Di perusahaan saya, kami menggunakan pengujian unit dan alat CI, jadi cara ini untuk membangun lingkungan magento memungkinkan kami menguji ekstensi kami pada versi magento yang berbeda, dan menjalankannya dengan dan tanpa menginstal.

Saya telah membuat "pintasan" pada mesin gelandangan yang menyederhanakan akses untuk membangun. Sebagai contoh untuk membangun kembali proyek, saya hanya perlu mengetik vagrant ssh -c magebuilddan secara otomatis menjalankan /vagrantdirektori phing .

Kemudian saya telah menetapkan perintah ini untuk kombinasi tombol tertentu di PHPStorm IDE saya dan sekarang saya dapat membangun kembali proyek hanya dengan menekan Alt + B di IDE saya. Tetapi karena saya menggunakan symlink, ini tidak terlalu sering beroperasi.

Gelandangan

Sebuah kotak untuk gelandangan itu adalah kotak saya sendiri dengan Ubuntu 12,04 on board, itu sebenarnya hanya tepat 12,04 standar dengan semua perangkat lunak yang diinstal + cara pintas dan beberapa konfigurasi. Dalam file gelandangan saya menempatkan pengaturan port forwarding saja, jaringan pribadi untuk dapat menggunakan xDebug dan menempatkan pintasan build ke ketentuan.

GIT

Di git saya hanya melacak file ekstensi saya, build.xmluntuk phing dan Vagrantfile. Jadi setiap orang yang ingin membuat lingkungan hanya bisa mengkloning repositori, dan menjalankan gelandangan. Kemudian dia akan membuat VM berdiri dan berjalan siap untuk bekerja. Semua proses ini memakan waktu 1-2 menit. Jika Anda ingin membangun proyek secara lokal (tanpa menggunakan VM), Anda dapat menjalankannya phing build install.

Sergey Kolodyazhnyy
sumber
2

Saat ini lingkungan pengembangan saya adalah Ubuntu v12.04 dengan VMWare. Saya bekerja sepenuhnya di dalam VM, dengan GUI penuh dan hanya menggunakan berbagi file samba dalam Ubuntu jika saya perlu untuk mendapatkan file dari OS host saya yang adalah Windows 7. Saya biasanya mengakses dan memetakan drive jaringan melalui IP internal dari VM via NAT untuk jaringan ke VM. Menggunakan solusi lain terbukti jauh lebih lambat seperti Shared Folder VMWare. Saya menonaktifkan ini di pengaturan VMWare Image saya. Namun saya menginstal alat VMWare untuk memudahkan penyalinan / pasta ke mesin host saya dan sebaliknya.

Seperti yang ditunjukkan Matthias Zeis, berhati-hatilah dalam memilih jaringan / folder bersama dengan VM Anda karena beberapa akan terbukti bermasalah.

Saya sebelumnya adalah pengguna VirtualBox tetapi menemukan VMWare lebih stabil dan berkinerja dapat diterima (setidaknya untuk saya). Namun saya akan melakukan tes Anda sendiri yang paling sesuai dengan kebutuhan dan persyaratan Anda, yaitu. Vagrant menggunakan VirtualBox.

IDE: Saya menggunakan Netbeans cukup luas sebagai IDE pilihan saya tetapi sejak itu pindah ke solusi yang lebih ringan seperti Sublime Text 2 . Saya jarang akan membuka Netbeans terutama untuk keperluan X-Debug dan Refactoring yang lebih mudah. Netbeans, PHPStorm, Eclipse, dll. Semuanya adalah IDE berbasis Java dan dapat sangat membutuhkan sumber daya.

PERANGKAT KERAS: Untuk menambahkan lebih banyak, Perangkat Keras akan selalu menjadi peran kunci dalam kinerja (jelas). Jika pengembang Anda masih menggunakan piring HDD saya akan mencari untuk berinvestasi di SSD untuk mereka. Karena Magento memiliki jumlah file / folder yang sangat besar, Magento akan sangat mempercepat kinerja pengembang. Saat mengembangkan: Dengan semua caching off, dan While hanya melintasi pohon folder di SVN / GIT, atau IDE Anda. Memberikan VM Anda RAM yang cukup juga sama pentingnya.

My Host Machine: Samsung SSD 512GB Drive space, Win7 (64bit), 8GB RAM, i7 2.4GHz (8 core)

Mesin VM saya: Samsung SSD, 30GB Drive space, Ubuntu 12.04 (32bit), 3GB RAM, i7 (dialokasikan 4 core).

PERTANYAAN UNTUK DIMINTA: Pertanyaan terbesar adalah, untuk membuat satu Gambar VM Pengembang yang ringan dan dapat digunakan kembali di beberapa proyek, atau untuk membuat Gambar per proyek. Sebelumnya saya mencoba untuk melakukan VM kecil pada basis per proyek namun konfigurasi ulang terus menerus untuk mengikuti alur kerja pengembangan saya menjadi terlalu banyak tugas, dan sekarang menggunakan satu VM yang lebih besar dan mencoba yang terbaik untuk menjaga setiap proyek terisolasi seperti mungkin.

Mempertahankan OS, IDE, LAMP Stack, pembaruan / konfigurasi, dll. Dapat menjadi tugas jika banyak VM per proyek adalah rute yang dipilih. Pada akhirnya mengarah ke waktu pengembangan yang lebih lama (dan bahkan lebih buruk waktu yang tidak dapat ditagih untuk pengaturan lingkungan lokal).

Ini juga terbukti membantu, karena saya dengan cepat dapat mengakses file proyek lain tanpa perlu membuka VM baru dan mengiris perangkat keras Host saya bahkan lebih. Kelemahannya adalah idealnya saya ingin setiap proyek dibungkam dari proyek lain untuk mencegah masalah yang tidak terduga dengan lingkungan (mis. Php.ini, my.cnf, httpd.conf, dll.). Sejauh ini tradeoff dari memiliki semua proyek mudah diakses telah terbukti lebih banyak akal.

Sekali lagi ini terserah kebutuhan dan kebutuhan Anda, jadi evaluasi terlebih dahulu.

UMPAN BALIK: Yang mengarah pada umpan balik. Dapatkan input sebanyak mungkin dari pengembang Anda. Pada akhirnya persyaratan mereka perlu dipenuhi dan masalah mereka dipahami sebelum solusi yang tepat dapat dibuat dan diterapkan. Setiap orang memiliki alur kerja yang berbeda, dan tidak semua orang merasa nyaman bekerja di OS yang Anda pilih untuk pengembangan. Aturan praktis saya adalah membiarkan pengembang memilih OS dan IDE yang paling nyaman bagi mereka dan akan berkinerja terbaik. Jadi, bahkan VM ringan tanpa kepala Linux mungkin terbukti bermanfaat untuk kebutuhan mereka, tetapi jelas dapat mengalami masalah berbagi folder di jaringan lokal antara Host dan VM.

KEMAMPUAN: Saya juga bermain-main dengan gagasan menjaga VM Image saya pada sesuatu seperti Dropbox sehingga saya dapat dengan mudah mengaksesnya kapan saja saya butuhkan. Karena layanan seperti Dropbox membandingkan sedikit demi sedikit dari apa yang disimpan, tampaknya logis bahwa hanya bit yang saya ubah yang akan disinkronkan. Namun ini terbukti tidak menjadi masalah karena saya percaya itu ada hubungannya dengan internal tentang bagaimana file gambar disimpan, dan saya akan menunggu sepanjang hari / malam hanya untuk VM saya untuk melakukan sinkronisasi.

CATATAN: Semakin besar ruang drive yang dialokasikan untuk VM, semakin besar gambar tersebut, ingatlah ini saat mendistribusikan Gambar ke pengembang Anda. Front memuat file proyek Anda per proyek mungkin berlebihan dan saya akan membiarkan ini untuk setiap pengembang untuk mengatur setelah mereka memiliki gambar yang dibuat.

Ashley Schroder memiliki artikel terkait agak lama yang merupakan bacaan yang baik, serta beberapa komentar oleh Fooman dan Colin

Semoga ini membantu dengan wawasan untuk item masalah Anda yang tercantum, # 6.

B00MER
sumber