Konfiguracja rozwoju Magento

23

pytanie to dotyczy stworzenia środowiska programistycznego. Mam określone wymagania:

  1. Chcę móc korzystać z mojego rozwiązania w systemach Linux, Windows i Mac OS, ponieważ ludzie z naszego zespołu używają wszystkich tych systemów operacyjnych (np. Programiści używają Windows / Mac, programiści używają głównie Linuksa)
  2. Potrzebuję użyć modmana
  3. Potrzebuję użyć kompozytora
  4. Muszę korzystać z Github, a także z moich prywatnych repozytoriów Git
  5. Potrzebuję odpowiedniego IDE, takiego jak Netbeans lub PHP Storm
  6. Chcę bardzo dobrej wydajności

Moja obecna konfiguracja to zwirtualizowany obraz Ubuntu w Virtualbox. Wszystkie trzy systemy operacyjne mogą obsługiwać Virtualbox, więc punkty 1) - 5) są spełnione.

Jednak obecnie nie jestem w pełni zadowolony z 6). Jest to szczególnie prawdziwe w przypadku uruchamiania rozwiązania z poziomu Ubuntu 12.04. Virtualbox wydaje się znacznie bardziej stabilny i responsywny w systemie Windows 7. Jednak wiele osób w naszym zespole używa Linuksa, więc chciałbym ulepszyć to rozwiązanie.

Czy ktoś ma porównywalną konfigurację w VMWare, a może nawet docker.io i może zgłosić, czy działa bardziej stabilnie? A może ktoś ma inne porównywalne rozwiązania / pomysły?

mpaepper
źródło
Fajne pytanie! pracowaliśmy również nad podobną konfiguracją, ale nie wprowadziliśmy jej jeszcze do naszego zwykłego przepływu pracy. czekam na odpowiedzi.
Anna Völkl,
szybki pomysł: czy nie byłoby możliwe pracować bez maszyny wirtualnej w systemie Linux i po prostu bezpośrednio instalować wszystko, co działa na maszynie wirtualnej? czy używasz jednej maszyny wirtualnej dla jednego projektu?
Anna Völkl,
Czy używasz maszyny wirtualnej bez głowy lub z graficznym interfejsem użytkownika? Jak synchronizujesz system plików VM Image z systemem hosta? Udostępnione foldery? Samba? (Zakładam, że IDE działa na hoście, a nie na maszynie wirtualnej). To może mieć dużą różnicę.
Vinai
@ AnnaVölkl tak, byłoby to możliwe, ale zniszczyłoby to niektóre zalety. Np. Za każdym razem, gdy aktualizujesz obraz podstawowy, wszyscy użytkownicy Linuksa musieliby ręcznie aktualizować zmiany. Ponadto, jeśli chcesz przenieść swoje urządzenie z jednego komputera na inny (np. Do pracy w domu lub w innym miejscu), sprawy są znacznie trudniejsze.
mpaepper
1
Jak powiedziała Anna: pracujemy też coś takiego. Używamy Vagrant do tworzenia obrazów maszyn wirtualnych, a to działa całkiem dobrze. Jak mówisz, wydajność (w odniesieniu do prędkości operacji we / wy plików w folderach udostępnionych) jest najważniejszą rzeczą, nad którą musimy popracować przed zmianą. W przypadku systemów hosta Linux pomocne mogą być udziały NFS . Naszym dużym problemem jest to, że większość naszych programistów używa systemów hosta Windows, a w przeciwieństwie do łącza wydajność systemu Windows wcale nie jest dobra. Słyszałem to teraz od różnych ludzi, to nie tylko my.
Matthias Zeis

Odpowiedzi:

8

Używam vagrant, git i trochę skryptu budowania na phing. Włóczęga uruchomiona przez maszynę baza danych i serwer WWW, git używał lokalnie do śledzenia zmian w moich rozszerzeniach i budował skrypt używany do aktualizacji /var/wwwkatalogu na mojej błędnej maszynie (właściwie właściwie wszędzie tam, gdzie muszę zbudować środowisko).

Phing

Prawdopodobnie najciekawszą częścią jest phing, który działa dla mnie jak modman + kompozytor. Ma kilka zdefiniowanych celów, w tym kompilację, konfigurację i instalację.

Cel kompilacji pobiera określoną wersję magento (określoną w build config) z wewnętrznego serwera WWW i rozpakowuje ją do katalogu kompilacji. Następnie uruchom inne cele, które konfigurują uprawnienia do plików i wyczyść pamięć podręczną. Następnie tworzy dowiązania symboliczne do wszystkich plików w katalogu źródłowym. W rezultacie otrzymuję wszystkie pliki gotowe do użycia w moim katalogu kompilacji. Jeśli pliki rdzenia Magento są już w katalogu kompilacji, pomijają pobieranie i po prostu aktualizują dowiązania symboliczne, więc używam tego celu do odbudowywania środowiska za każdym razem, gdy muszę aktualizować dowiązania symboliczne. Dla maszyny błędnej znajduje się katalog źródłowy /vagrant/src(folder współdzielony) i katalog kompilacji /var/www.

Zainstalować pobrania docelowy i zrzut bazy danych na przywóz niektórych wersji Magento. Następnie uruchom cel instalacji.

Cel instalacji wystarczy utworzyć plik local.xml ze wszystkimi ustawieniami.

W mojej firmie używamy testów jednostkowych i narzędzi CI, więc w ten sposób zbudujemy środowisko magento, pozwalając nam przetestować nasze rozszerzenia na różnych wersjach magento i uruchomić je z instalacją i bez.

Stworzyłem „skrót” na błędnej maszynie, który upraszcza dostęp do kompilacji. Na przykład, aby przebudować projekt, wystarczy wpisać vagrant ssh -c magebuildi automatycznie uruchomić phing w /vagrantkatalogu.

Następnie przypisałem to polecenie do pewnej kombinacji klawiszy w moim PHPStorm IDE, a teraz mogę odbudować projekt, naciskając Alt + B w moim IDE. Ale ponieważ używam dowiązań symbolicznych, tak naprawdę nie jest to często operacja.

Włóczęga

Pudełko dla włóczęgów to moje własne pudełko z Ubuntu 12.04 na pokładzie, w rzeczywistości jest to po prostu standardowa precyzyjna wersja 12.04 z zainstalowanym oprogramowaniem + skrótem i pewną konfiguracją. W błądzącym pliku umieściłem tylko ustawienia przekierowania portów, sieć prywatna, aby móc korzystać z xDebug i umieściłem skrót kompilacji do rezerw.

GIT

W git śledzę tylko moje pliki rozszerzeń, build.xmlphing i Vagrantfile. Tak więc każdy, kto chce stworzyć środowisko, może po prostu sklonować repozytorium i uruchomić włóczęgę. Następnie uruchomi maszynę wirtualną i będzie gotowy do pracy. Cały ten proces zajmuje 1-2 minuty. Jeśli chcesz budować projekt lokalnie (bez użycia maszyny wirtualnej), możesz uruchomić phing build install.

Siergiej Kolodyazhnyy
źródło
2

Obecnie moim środowiskiem programistycznym jest Ubuntu v12.04 z VMWare. Pracuję całkowicie na maszynie wirtualnej, z pełnym GUI i używam udostępniania plików samby w systemie Ubuntu tylko wtedy, gdy muszę dostać się do plików z mojego systemu operacyjnego hosta, którym jest Windows 7. Zwykle uzyskuję dostęp do dysku sieciowego i mapuję go za pomocą wewnętrznego adresu IP VM przez NAT do połączenia z maszyną wirtualną. Korzystanie z innych rozwiązań okazało się znacznie wolniejsze, jak na przykład foldery współdzielone VMWare. Mam to wyłączone w ustawieniach obrazu VMWare. Jednak instaluję narzędzia VMWare, aby umożliwić łatwe kopiowanie / makaron na maszynie hosta i odwrotnie.

Jak zauważył Matthias Zeis, zachowaj ostrożność przy wyborze folderów sieciowych / współdzielonych z maszyną wirtualną, ponieważ niektóre okażą się problematyczne.

Byłem poprzednim użytkownikiem VirtualBox, ale stwierdziłem, że VMWare jest bardziej stabilny i działa akceptowalnie (przynajmniej dla mnie). Wykonałbym jednak własne testy, aby jak najlepiej dostosować się do twoich potrzeb i wymagań, tj. Vagrant używa VirtualBox.

IDE: Używałem Netbeans dość szeroko jako mojego IDE, ale od tego czasu przeszedłem do bardziej lekkiego rozwiązania, jak Sublime Text 2 . Rzadko otwieram Netbeans jako głównie do celów X-Debugowania i łatwiejszego refaktoryzacji. Netbeans, PHPStorm, Eclipse itp. To IDE oparte na Javie i mogą być bardzo wymagające zasobów.

SPRZĘT: Aby dodać więcej, sprzęt zawsze będzie odgrywał kluczową rolę w wydajności (oczywiście). Jeśli Twoi programiści nadal korzystają z dysku twardego HDD, chciałbym zainwestować w SSD. Ponieważ Magento ma bardzo dużą liczbę plików / folderów, znacznie przyspieszy to wydajność programistów. Podczas opracowywania: Przy wyłączonym buforowaniu i Podczas przeglądania drzewa folderów w SVN / GIT lub w twoim IDE. Równie ważne jest zapewnienie maszynie wirtualnej wystarczającej ilości pamięci RAM.

My Host Machine: Samsung SSD 512 GB miejsca na dysku, Win7 (64-bitowy), 8 GB pamięci RAM, i7 2,4 GHz (8 rdzeni)

My VM Machine: Samsung SSD, 30 GB miejsca na dysku, Ubuntu 12.04 (32-bitowy), 3 GB pamięci RAM, i7 (przydzielone 4 rdzenie).

PYTANIA DO ZADANIA: Największe pytanie dotyczy utworzenia jednego obrazu VM dla deweloperów, który jest lekki i wielokrotnego użytku w wielu projektach, lub stworzenia obrazu dla każdego projektu. Wcześniej próbowałem tworzyć mniejsze maszyny wirtualne dla poszczególnych projektów, jednak ciągła rekonfiguracja, aby dostosować się do moich prac, stała się zbyt uciążliwa. Teraz używam jednej większej maszyny wirtualnej i staram się, aby każdy projekt był jak najbardziej odizolowany.

Utrzymanie OS, IDE, stosu LAMP, aktualizacji / konfiguracji itp. Może stać się obowiązkiem, jeśli wybraną trasą jest wiele maszyn wirtualnych na projekt. Ostatecznie prowadzi to do dłuższego czasu programowania (a nawet gorszego, nieobliczalnego czasu dla konfiguracji środowiska lokalnego).

Okazało się to również pomocne, ponieważ mogłem szybko uzyskać dostęp do innych plików projektu bez konieczności otwierania nowej maszyny wirtualnej i jeszcze bardziej kroić sprzęt Hosta. Minusem jest to, że chciałbym, aby każdy projekt został wyciszony przed innymi projektami, aby zapobiec nieprzewidzianym problemom ze środowiskiem (np. Php.ini, my.cnf, httpd.conf itp.). Jak dotąd kompromis polegający na tym, że wszystkie projekty były łatwo dostępne, okazał się bardziej zaradny.

Znowu zależy to od twoich wymagań i potrzeb, więc sprawdź je wcześniej.

INFORMACJE ZWROTNE: co prowadzi do opinii. Uzyskaj jak najwięcej informacji od programistów. Ostatecznie ich wymagania muszą zostać spełnione, a ich problemy zrozumiane, zanim możliwe będzie ustalenie i wdrożenie właściwego rozwiązania. Każdy ma inny obieg pracy i nie wszyscy czują się komfortowo pracując w systemie operacyjnym, który wybraliście na rozwój. Moją ogólną zasadą jest, aby deweloper wybrał system operacyjny i IDE, w których są najwygodniejsi i będą działać najlepiej. Tak więc nawet lekka wirtualna maszyna bez linuksa może okazać się przydatna dla ich potrzeb, ale oczywiście może wystąpić problem z udostępnianiem folderów w sieci lokalnej między hostem a maszyną wirtualną.

PRZENOŚNOŚĆ: Zastanawiałem się również nad tym, aby zachować mój obraz VM na czymś takim jak Dropbox, aby móc łatwo uzyskać do niego dostęp w dowolnym momencie. Ponieważ usługi takie jak Dropbox porównują krok po kroku to, co jest przechowywane, logiczne wydaje się, że synchronizowane będą tylko te bity, które zmieniłem. Jednak okazało się, że tak nie jest, ponieważ uważam, że ma to związek z wewnętrznym sposobem zapisywania pliku obrazu i czekałbym cały dzień / noc tylko na synchronizację mojej maszyny wirtualnej.

UWAGI: Im większe miejsce na dysku przydzielone maszynie wirtualnej, tym większy będzie obraz, należy o tym pamiętać przy dystrybucji obrazu do programistów. Ładowanie plików projektu z przodu na projekt może być przesadą i pozostawiłbym to każdemu programistowi, aby skonfigurował po utworzeniu obrazu.

Ashley Schroder ma nieco stary pokrewny artykuł, który jest dobrą lekturą, a także niektóre komentarze Foomana i Colina

Mam nadzieję, że to pomoże wglądu w problem z listą # 6.

B00MER
źródło