Installazione di sviluppo Magento


23

questa domanda è rivolta alla creazione dell'ambiente di sviluppo. Ho alcuni requisiti specifici:

  1. Voglio essere in grado di utilizzare la mia soluzione su Linux, Windows e Mac OS, poiché le persone del nostro team utilizzano tutti questi sistemi operativi (ad esempio gli sviluppatori front-end utilizzano Windows / Mac, gli sviluppatori back-end utilizzano principalmente Linux)
  2. Devo usare modman
  3. Devo usare il compositore
  4. Devo usare Github così come i miei repository Git privati
  5. Ho bisogno di un IDE adeguato come Netbeans o PHP Storm
  6. Voglio ottime prestazioni

La mia configurazione attuale è un'immagine Ubuntu virtualizzata all'interno di Virtualbox. Tutti e tre i sistemi operativi possono eseguire Virtualbox, quindi i punti 1) - 5) sono tutti soddisfatti.

Tuttavia, attualmente, non sono completamente soddisfatto di 6). Ciò è particolarmente vero quando si esegue la soluzione da Ubuntu 12.04. Virtualbox sembra molto più stabile e reattivo in Windows 7. Tuttavia, molte persone nel nostro team utilizzano Linux, quindi vorrei migliorare la soluzione.

Qualcuno ha un'impostazione simile in VMWare o forse docker.io e può segnalare se funziona in modo più stabile? O qualcuno ha altre soluzioni / idee comparabili?


bella domanda! abbiamo anche lavorato su una configurazione simile ma non l'abbiamo ancora inserita nel nostro normale flusso di lavoro. in attesa di risposte.
Anna Völkl,

solo una breve idea: non sarebbe possibile lavorare senza la VM su Linux e installare direttamente tutto ciò che viene eseguito nella VM? o usi una VM per un progetto?
Anna Völkl,

Stai eseguendo la VM senza testa o con una GUI? E come stai sincronizzando il filesystem di VM Image con il sistema host? Cartelle condivise? Samba? (Suppongo che l'IDE sia in esecuzione sull'host, non sulla VM). Questo può fare una grande differenza.
Vinai,

@ AnnaVölkl sì, sarebbe possibile, ma distruggerebbe alcuni dei vantaggi. Ad esempio, ogni volta che aggiorni l'immagine di base, tutti gli utenti Linux dovrebbero aggiornare manualmente le modifiche. Inoltre, se vuoi portare la tua scatola da un computer a un altro (ad esempio lavorare a casa o altrove), le cose sono molto più difficili.
mpaepper,

1
Come ha detto Anna: stiamo anche lavorando a qualcosa del genere. Stiamo usando Vagrant per creare immagini VM e questo funziona abbastanza bene. Come dici tu, le prestazioni (per quanto riguarda la velocità di I / O dei file nelle cartelle condivise) sono la cosa principale su cui dobbiamo lavorare prima di passare. Per i sistemi host Linux, le condivisioni NFS possono essere di aiuto. Il nostro grosso problema è che la maggior parte dei nostri sviluppatori utilizza sistemi host Windows e, al contrario del collegamento, le prestazioni di Windows non sono affatto buone. L'ho sentito da persone diverse ora, non siamo solo noi.
Matthias Zeis,

Risposte:


8

Uso Vagrant, Git e alcuni script di build su phing. La macchina vagabonda esegue database e web server, git usato localmente per tenere traccia delle modifiche nelle mie estensioni e costruire script usati per aggiornare la /var/wwwdirectory sulla mia macchina vagabonda (in realtà è usato ovunque dove ho bisogno di costruire un ambiente).

Phing

Probabilmente la parte più interessante è phing, che funziona come modman + compositore per me. Ha alcuni target definiti tra cui build, setup e installazione.

Il target di build scarica determinate versioni di magento (specificate in build config) dal server web interno ed estrae la directory di build. Quindi eseguire altre destinazioni che impostano le autorizzazioni per i file e puliscono la cache. Quindi crea collegamenti simbolici a tutti i file nella directory di origine. Di conseguenza ottengo tutti i file pronti per l'uso nella mia directory di build. Se i file core di magento sono già nella directory build, salta il download e aggiorno semplicemente i symlink, quindi uso questo target per ricostruire l'ambiente ogni volta che devo aggiornare i symlink. Per la macchina del vagabondo, la directory di origine è in /vagrant/src(cartella condivisa) e la directory di creazione è /var/www.

Il target di installazione scarica e importa il dump del database per una determinata versione di Magento. Quindi eseguire la destinazione di installazione.

Il target di installazione crea semplicemente un file local.xml con tutte le impostazioni.

Nella mia azienda utilizziamo unit testing e strumenti CI, quindi in questo modo per creare un ambiente magento ci consente di testare le nostre estensioni su diverse versioni di magento ed eseguirlo con e senza installazione.

Ho creato un "collegamento" su una macchina vagabonda che semplifica l'accesso alla build. Ad esempio per ricostruire il progetto ho solo bisogno di digitare vagrant ssh -c magebuilded è automaticamente eseguito phing nella /vagrantdirectory.

Quindi ho assegnato questo comando a una determinata combinazione di tasti nel mio IDE PHPStorm e ora posso ricostruire il progetto semplicemente premendo Alt + B nel mio IDE. Ma dal momento che utilizzo i collegamenti simbolici non è un'operazione molto spesso.

Vagabondo

Una scatola per vagabondo è la mia scatola con Ubuntu 12.04 a bordo, in realtà è solo 12.04 preciso standard con tutto il software preinstallato + collegamento e alcune configurazioni. Nel file vagabondo ho messo solo le impostazioni di port forwarding, la rete privata per poter usare xDebug e mettere il collegamento di build alle disposizioni.

IDIOTA

In git seguo solo i miei file di estensione, build.xmlper phing e Vagrantfile. Quindi tutti coloro che vogliono creare un ambiente possono semplicemente clonare il repository ed eseguire il vagabondaggio. Quindi avvierà la VM pronta per funzionare. Tutto questo processo richiede 1-2 minuti. Se vuoi creare un progetto localmente (senza usare la VM) puoi eseguirlo phing build install.


2

Attualmente il mio ambiente di sviluppo è Ubuntu v12.04 con VMWare. Lavoro interamente all'interno della VM, con la GUI completa e utilizzo la condivisione di file samba in Ubuntu solo se devo accedere ai file dal mio sistema operativo host che è Windows 7. Normalmente accedo e mappa un'unità di rete tramite l'IP interno del VM via NAT per il collegamento in rete alla VM. L'uso di altre soluzioni si è rivelato molto più lento come le cartelle condivise di VMWare. L'ho disabilitato nelle impostazioni dell'immagine VMWare. Tuttavia, installo gli strumenti VMWare per consentire una facile copia / pasta sul mio computer host e viceversa.

Come ha sottolineato Matthias Zeis, fai attenzione nella scelta delle cartelle di rete / condivise con la tua VM, poiché alcune si riveleranno problematiche.

Ero un precedente utente di VirtualBox, ma trovavo VMWare più stabile e con prestazioni accettabili (almeno per me). Eseguirò comunque i tuoi test per soddisfare al meglio le tue esigenze e necessità, ad es. Vagrant utilizza VirtualBox.

IDE: stavo usando Netbeans abbastanza ampiamente come IDE di mia scelta, ma da allora sono passato a una soluzione più leggera come Sublime Text 2 . Raramente aprirò Netbeans principalmente per scopi di X-Debug e refactoring più semplice. Netbeans, PHPStorm, Eclipse, ecc. Sono tutti IDE basati su Java e possono essere molto affamati di risorse.

HARDWARE: per aggiungere altro, l'hardware sarà sempre un ruolo chiave nelle prestazioni (ovviamente). Se i tuoi sviluppatori stanno ancora utilizzando l'HDD piatto, proverei a investire in SSD per loro. Poiché Magento ha una grande quantità di file / cartelle accelererà notevolmente le prestazioni degli sviluppatori. Durante lo sviluppo: con tutta la memorizzazione nella cache disattivata e mentre attraversi semplicemente l'albero delle cartelle in SVN / GIT o il tuo IDE. Dare alla tua VM abbastanza RAM è altrettanto importante.

La mia macchina host: Samsung SSD 512 GB di spazio su disco, Win7 (64 bit), 8 GB di RAM, i7 2,4 GHz (8 core)

La mia macchina virtuale: SSD Samsung, spazio su disco da 30 GB, Ubuntu 12.04 (32 bit), 3 GB di RAM, i7 (4 core assegnati).

DOMANDE DA CHIEDERE: La domanda più grande è: creare un'immagine VM per sviluppatori leggera e riutilizzabile su più progetti o creare un'immagine per progetto. In precedenza stavo provando a fare macchine virtuali più piccole in base al progetto, tuttavia la riconfigurazione costante per andare avanti con il mio flusso di lavoro di sviluppo è diventata troppo complicata e ora uso una macchina virtuale più grande e faccio del mio meglio per mantenere ogni progetto il più possibile isolato.

Mantenere OS, IDE, stack LAMP, aggiornamenti / configurazioni, ecc. Può diventare un compito ingrato se la route scelta è rappresentata da più VM per progetto. In definitiva, porta a tempi di sviluppo più lunghi (e anche a tempi non fatturabili ancora peggiori per le configurazioni dell'ambiente locale).

Anche questo mi è stato utile, dato che sono stato in grado di accedere rapidamente ad altri file di progetto senza la necessità di aprire una nuova macchina virtuale e tagliare ulteriormente l'hardware del mio host. Il rovescio della medaglia è idealmente vorrei che ogni progetto venisse messo a tacere da altri progetti per prevenire eventuali problemi imprevisti con l'ambiente (es. Php.ini, my.cnf, httpd.conf, ecc.). Finora il compromesso di avere tutti i progetti facilmente accessibili si è rivelato più intraprendente.

Ancora una volta questo dipende dalle vostre esigenze e necessità, quindi valutatele prima.

RISPOSTE: che porta al feedback. Ricevi il maggior numero possibile di input dai tuoi sviluppatori. In definitiva, i loro requisiti devono essere soddisfatti e i loro problemi devono essere compresi prima che una soluzione adeguata possa essere impostata e messa in atto. Ognuno ha flussi di lavoro diversi e non tutti sono a proprio agio nel lavorare nel sistema operativo che è possibile scegliere per lo sviluppo. La mia regola empirica è lasciare che lo sviluppatore scelga il proprio sistema operativo e l'IDE in cui si trova più a suo agio e con i migliori risultati. Quindi anche una VM Linux senza testa leggera può rivelarsi utile per le loro esigenze, ma ovviamente può incorrere nel problema della condivisione delle cartelle attraverso la rete locale tra l'host e la VM.

PORTABILITÀ: Ho anche giocato con l'idea di mantenere la mia immagine VM su qualcosa come Dropbox in modo da potervi accedere facilmente in qualsiasi momento potessi aver bisogno. Dal momento che servizi come Dropbox si confrontano bit per bit di ciò che è archiviato, mi è sembrato logico che solo i bit che ho cambiato sarebbero stati sincronizzati. Tuttavia, ciò si è rivelato non essere il caso, poiché credo che abbia a che fare con gli interni di come viene salvato il file Image, e aspetterei tutto il giorno / notte solo per la sincronizzazione della mia VM.

NOTE: maggiore è lo spazio su disco allocato alla VM, maggiore sarà l'immagine, tenere presente questo aspetto quando si distribuisce l'immagine ai propri sviluppatori. Il caricamento frontale dei file di progetto per progetto potrebbe essere eccessivo e lo lascerei a ogni sviluppatore per impostare dopo aver creato l'immagine.

Ashley Schroder ha un vecchio articolo correlato che è una buona lettura, così come alcuni dei commenti di Fooman e Colin

Speriamo che questo aiuti a comprendere il problema elencato, numero 6.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.