Configuration du développement Magento

23

cette question est orientée vers la mise en place de l'environnement de développement. J'ai des exigences spécifiques:

  1. Je veux pouvoir utiliser ma solution sous Linux, Windows et Mac OS, car les membres de notre équipe utilisent tous ces systèmes d'exploitation (par exemple, les développeurs frontaux utilisent Windows / Mac, les développeurs backend utilisent principalement Linux)
  2. J'ai besoin d'utiliser modman
  3. J'ai besoin d'utiliser le compositeur
  4. J'ai besoin d'utiliser Github ainsi que mes dépôts Git privés
  5. J'ai besoin d'un IDE approprié comme Netbeans ou PHP Storm
  6. Je veux de très bonnes performances

Ma configuration actuelle est une image Ubuntu virtualisée dans Virtualbox. Les trois OS peuvent exécuter Virtualbox, donc les points 1) - 5) sont tous satisfaits.

Cependant, actuellement, je ne suis pas complètement satisfait de 6). Cela est particulièrement vrai lors de l'exécution de la solution à partir d'Ubuntu 12.04. La Virtualbox semble beaucoup plus stable et réactive sous Windows 7. Cependant, beaucoup de personnes dans notre équipe utilisent Linux, donc je voudrais améliorer la solution.

Quelqu'un a-t-il une configuration comparable dans VMWare ou peut-être même docker.io et peut-il indiquer s'il fonctionne plus stable? Ou est-ce que quelqu'un a d'autres solutions / idées comparables?

mpaepper
la source
bonne question! nous avons également travaillé sur une configuration similaire, mais nous ne l'avons pas encore ajoutée à notre flux de travail normal. dans l'attente des réponses.
Anna Völkl
juste une idée rapide: ne serait-il pas possible de travailler sans la VM sous Linux et d'installer directement tout ce qui s'exécute dans la VM? ou utilisez-vous une VM pour un projet?
Anna Völkl
Utilisez-vous la machine virtuelle sans tête ou avec une interface graphique? Et comment synchronisez-vous le système de fichiers VM Image avec le système hôte? Dossiers partagés? Samba? (Je suppose que l'IDE s'exécute sur l'hôte, pas sur la machine virtuelle). Cela peut faire une grande différence.
Vinai
@ AnnaVölkl oui, ce serait possible, mais cela détruirait certains des avantages. Par exemple, chaque fois que vous mettez à jour l'image de base, tous les utilisateurs Linux doivent mettre à jour manuellement les modifications. De plus, si vous voulez prendre votre boîte d'un ordinateur à un autre (par exemple, travailler à la maison ou ailleurs), les choses sont beaucoup plus difficiles.
mpaepper
1
Comme Anna l'a dit: nous travaillons également quelque chose comme ça. Nous utilisons Vagrant pour construire les images VM et cela fonctionne assez bien. Comme vous le dites, les performances (concernant la vitesse d'E / S des fichiers dans les dossiers partagés) sont la principale chose sur laquelle nous devons travailler avant de basculer. Pour les systèmes hôtes Linux, les partages NFS peuvent aider. Notre gros problème est que la plupart de nos développeurs utilisent des systèmes hôtes Windows et contrairement au lien, les performances de Windows ne sont pas bonnes du tout. J'ai entendu cela de différentes personnes maintenant, ce n'est pas seulement nous.
Matthias Zeis

Réponses:

8

J'utilise vagrant, git et un script de build sur le phing. La base de données et le serveur Web de la machine vagabonde, git utilisé localement pour suivre les changements dans mes extensions et le script de construction utilisé pour mettre à jour le /var/wwwrépertoire sur ma machine vagabonde (enfin, il est utilisé partout où j'ai besoin de créer un environnement).

Phing

La partie probablement la plus intéressante est le phing, qui fonctionne comme modman + composer pour moi. Il a peu de cibles définies, notamment la construction, la configuration et l'installation.

La cible de build télécharge une certaine version de magento (spécifiée dans la configuration de build) depuis le serveur web interne et l'extrait dans le répertoire de build. Exécutez ensuite d'autres cibles qui configurent les autorisations pour les fichiers et nettoient le cache. Ensuite, il crée des liens symboliques vers tous les fichiers du répertoire source. En conséquence, je reçois tous les fichiers prêts à l'emploi dans mon répertoire de construction. Si les fichiers de base de magento sont déjà dans le répertoire de construction, il saute le téléchargement et met simplement à jour les liens symboliques, donc j'utilise cette cible pour reconstruire l'environnement chaque fois que j'ai besoin de mettre à jour les liens symboliques. Pour le répertoire source de la machine vagabonde se trouve dans /vagrant/src(dossier partagé) et le répertoire de construction l'est /var/www.

Le téléchargement de la cible d' installation et le vidage de la base de données d'importation pour certaines versions de magento. Exécutez ensuite la configuration cible.

La cible de configuration crée simplement un fichier local.xml avec tous les paramètres.

Dans ma société, nous utilisons des tests unitaires et des outils CI, donc cette façon de construire un environnement magento nous permet de tester nos extensions sur différentes versions de magento, et de les exécuter avec et sans installation.

J'ai créé un "raccourci" sur une machine vagabonde qui simplifie l'accès à la construction. Par exemple, pour reconstruire un projet, il me suffit de taper vagrant ssh -c magebuildet il exécute automatiquement phing dans le /vagrantrépertoire.

Ensuite, j'ai attribué cette commande à une certaine combinaison de touches dans mon IDE PHPStorm et maintenant je peux reconstruire le projet simplement en appuyant sur Alt + B dans mon IDE. Mais puisque j'utilise des liens symboliques, ce n'est pas vraiment souvent une opération.

Vagabond

Une boîte pour vagabond c'est ma propre boîte avec Ubuntu 12.04 à bord, c'est en fait juste une précision 12.04 standard avec tous les logiciels préinstallés + raccourci et une configuration. Dans un fichier vagabond, je mets simplement les paramètres de redirection de port, le réseau privé pour pouvoir utiliser xDebug et mettre le raccourci de construction à disposition.

GIT

Dans git, je ne fais que suivre mes fichiers d'extension, build.xmlpour le phing et Vagrantfile. Ainsi, tous ceux qui veulent créer un environnement peuvent simplement cloner le référentiel et exécuter vagabonder. Ensuite, il mettra VM en marche et prêt à fonctionner. Tout ce processus prend 1-2 minutes. Si vous souhaitez créer un projet localement (sans utiliser de machine virtuelle), vous pouvez l'exécuter phing build install.

Sergey Kolodyazhnyy
la source
2

Actuellement, mon environnement de développement est Ubuntu v12.04 avec VMWare. Je travaille entièrement à l'intérieur de la machine virtuelle, avec une interface graphique complète et n'utilise le partage de fichiers samba dans Ubuntu que si j'ai besoin d'accéder aux fichiers à partir de mon système d'exploitation hôte qui est Windows 7. J'accède et mappe normalement un lecteur réseau via l'IP interne du VM via NAT pour la mise en réseau avec la VM. L'utilisation d'autres solutions s'est avérée beaucoup plus lente que les dossiers partagés de VMWare. Je l'ai désactivé dans mes paramètres d'image VMWare. J'installe cependant des outils VMWare pour permettre une copie / pâtes facile sur ma machine hôte et vice versa.

Comme l'a souligné Matthias Zeis, soyez prudent dans votre sélection de dossiers de mise en réseau / partagés avec votre machine virtuelle, car certains s'avéreront problématiques.

J'étais un ancien utilisateur de VirtualBox, mais j'ai trouvé que VMWare était plus stable et fonctionnait de manière acceptable (du moins pour moi). Je voudrais cependant effectuer vos propres tests pour mieux répondre à vos besoins et exigences, c'est-à-dire. Vagrant utilise VirtualBox.

IDE: J'utilisais Netbeans assez largement comme mon IDE de choix, mais j'ai depuis migré vers une solution plus légère comme Sublime Text 2 . J'ouvrirai rarement Netbeans principalement à des fins de X-Debug et de refactorisation plus facile. Netbeans, PHPStorm, Eclipse, etc. sont tous des IDE basés sur Java et peuvent être très gourmands en ressources.

MATÉRIEL: Pour en ajouter plus, le matériel sera toujours un rôle clé dans les performances (évidemment). Si vos développeurs utilisent toujours le disque dur HDD, je chercherais à investir dans le SSD pour eux. Étant donné que Magento a une très grande quantité de fichiers / dossiers, cela accélérera considérablement les performances des développeurs. Pendant le développement: avec toute la mise en cache désactivée et en parcourant simplement l'arborescence des dossiers dans SVN / GIT ou votre IDE. Donner à votre machine virtuelle suffisamment de RAM est également tout aussi important.

Ma machine hôte: Samsung SSD 512 Go d'espace disque, Win7 (64 bits), 8 Go de RAM, i7 2,4 GHz (8 cœurs)

Ma machine virtuelle: Samsung SSD, 30 Go d'espace disque, Ubuntu 12.04 (32 bits), 3 Go de RAM, i7 (4 cœurs alloués).

QUESTIONS À POSER: La plus grande question est de créer une image VM de développeur légère et réutilisable sur plusieurs projets ou de créer une image par projet. Auparavant, j'essayais de faire des machines virtuelles plus petites sur une base par projet, mais la reconfiguration constante pour aller avec mon flux de travail de développement devenait trop une corvée, et maintenant j'utilise une machine virtuelle plus grande et fais de mon mieux pour garder chaque projet aussi isolé que possible.

La maintenance du système d'exploitation, de l'IDE, de la pile de LAMP, des mises à jour / configurations, etc. peut devenir une corvée si plusieurs machines virtuelles par projet sont l'itinéraire choisi. En fin de compte, cela entraîne un temps de développement plus long (et encore moins de temps non facturable pour les configurations d'environnement local).

Cela s'est également avéré utile, car j'ai rapidement pu accéder à d'autres fichiers de projet sans avoir à ouvrir une nouvelle machine virtuelle et à découper encore plus mon matériel hôte. L'inconvénient est idéalement, je voudrais que chaque projet soit séparé des autres projets pour éviter tout problème imprévu avec l'environnement (par exemple, php.ini, my.cnf, httpd.conf, etc.). Jusqu'à présent, le compromis d'avoir tous les projets facilement accessibles s'est avéré plus ingénieux.

Encore une fois, cela dépend de vos exigences et de vos besoins, alors évaluez-les au préalable.

RÉTROACTION: ce qui conduit à des commentaires. Obtenez autant de commentaires de vos développeurs que possible. En fin de compte, leurs besoins doivent être satisfaits et leurs problèmes compris avant qu'une solution appropriée puisse être mise en place et mise en place. Tout le monde a des flux de travail différents, et tout le monde n'est pas à l'aise avec le système d'exploitation que vous pouvez choisir pour le développement. Ma règle générale est de laisser le développeur choisir son système d'exploitation et son IDE dans lesquels il est le plus à l'aise et avec lequel il fonctionnera le mieux. Ainsi, même une machine virtuelle Linux sans tête légère peut s'avérer utile pour leurs besoins, mais peut évidemment se heurter au problème du partage des dossiers sur le réseau local entre l'hôte et la machine virtuelle.

PORTABILITÉ: J'ai également joué avec l'idée de garder mon image VM sur quelque chose comme Dropbox afin que je puisse facilement y accéder à tout moment dont j'ai besoin. Étant donné que des services comme Dropbox comparent peu à peu ce qui est stocké, il semblait logique que seuls les bits que j'ai modifiés soient synchronisés. Cependant, cela s'est avéré ne pas être le cas car je pense que cela a à voir avec les internes de la façon dont le fichier image est enregistré, et j'attendrais toute la journée / nuit juste pour que ma machine virtuelle se synchronise.

REMARQUES: Plus l'espace disque alloué à la machine virtuelle est grand, plus l'image deviendra grande, gardez cela à l'esprit lors de la distribution de l'image à vos développeurs. Le chargement frontal de vos fichiers de projet par projet peut être exagéré et je laisserais cela à chaque développeur à configurer après avoir créé l'image.

Ashley Schroder a un article connexe un peu ancien qui est une bonne lecture, ainsi que certains des commentaires de Fooman et Colin

J'espère que cela vous aidera à mieux comprendre votre problème répertorié, # 6.

B00MER
la source