Actuellement, nous nous engageons composer.lock
dans le référentiel, puis nous exécutons composer install --no-dev
sur le serveur de production. Je ne pense pas que ce soit la meilleure façon de le faire car il faut quelques minutes au compositeur pour générer tous les fichiers et c'est risqué.
Je me demande s'il est préférable de valider le dépôt tous les fichiers nécessaires pour fonctionner en mode production.
Comment les autres gèrent-ils le processus de déploiement avec magento 2?
magento2
composer
deployment
Claudiu Creanga
la source
la source
composer install
en production? letscodejavascript.com/v3/blog/2014/03/the_npm_debaclecomposer install
. Avez-vous cherché un crochet git pour automatiser le processus?Réponses:
D'accord à 100% avec claudiu-creanga pour ne pas engager le vendeur et éviter également d'exécuter l'installation du compositeur en production.
La façon dont nous avons géré cela est d'avoir un dossier actif et un dossier de version candidate. C'est dans le dossier release-candidate que nous exécutons les commandes git pull et composer install --no-dev. Notre processus peut se résumer ainsi:
Dans le dossier de version candidate:
Synchroniser les fichiers avec le dossier du site en direct
J'ai écrit un article de blog plus long donnant les commandes et le raisonnement réels derrière cela: https://www.c3media.co.uk/blog/c3-news/deploying-magento-2-production-environment/
MISE À JOUR: Nous copions maintenant la base de données en direct dans une base de données intermédiaire et nous l'utilisons pour exécuter des scripts de configuration, déployer des fichiers statiques et compiler DI tous hors ligne. Cela peut ensuite être déployé pour vivre, y compris les fichiers pub / statiques et var. Nous supprimons encore brièvement le site si des scripts de configuration sont en cours d'exécution, mais sinon le site est laissé en place. Plus de détails sur https://www.c3media.co.uk/blog/c3-news/magento-2-deployment-without-downtime/
MISE À JOUR: J'ai changé d'avis sur la validation du dossier du fournisseur - en validant le dossier, vous avez la possibilité de suivre l'historique de la façon dont ces fichiers changent, voyez si vous avez accidentellement changé quoi que ce soit, et surtout, vous évitez d'avoir à exécuter le compositeur au moment du déploiement. Ce dernier est vital maintenant que nous comptons sur des fournisseurs externes de référentiels. Et si l'un d'eux n'est pas disponible? Soudain, vous ne pouvez pas vous déployer. Les inconvénients sont un plus grand référentiel, le risque de commettre des hacks de base et la méfiance instable des développeurs comme moi :)
la source
Jusqu'à présent, nous validons également le dossier du fournisseur, qui bien sûr ajoute beaucoup de fichiers à votre référentiel. (Assurez-vous de supprimer tous les dossiers .git dans les fichiers du compositeur du fournisseur, sinon le contenu des dossiers ne sera pas validé - firegento par exemple). Mais la liaison symbolique du dossier du fournisseur ne fonctionne pas, la modification du chemin dans le fichier vendor_path.php ne fonctionne pas non plus et nous n'avons pas eu le temps de chercher une meilleure solution jusqu'à présent.
Nous n'avons pas de serveur de build et nous n'exécutons pas Composer sur le serveur, nous exécutons et testons toutes les mises à jour localement et les validons. Cela déclenche à son tour notre script de déploiement.
Notre script de déploiement remplace le fichier env.php, effectue quelques opérations personnalisées, puis déclenche également
setup:upgrade
etsetup:static-content:deploy
avant de basculer le lien actif vers le nouveau dossier.Le seul dossier que nous lions symboliquement est pub / media.
la source
Enfin, nous avons opté pour un service comme
deploybot
( http://deploybot.com/ ). Vous pouvez utilisercapistrano
ce qui est gratuit. Deploybot crée un conteneur Docker pendant que l'installation de Composer est en cours d'exécution et si la commande réussit, il déploie le code, sinon il ne déploiera rien pour que votre environnement de production soit sécurisé.Je considère que c'est la meilleure approche car:
1) avoir le dossier vendeur dans votre dépôt git n'est pas recommandé par les compositeurs pour de bonnes raisons:
Plus d'informations: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md
2) L'exécution
composer install in production
sans filets de sécurité est risquée , les packages peuvent être en panne (voir npm), vous pouvez rencontrer des problèmes de mémoire ou toute erreur qui pourrait se produire pendant que le compositeur génère des fichiers et vous devrez faire face à un environnement de production cassé.la source
J'examine également la question, l'approche que j'ai adoptée jusqu'à présent est la suivante:
Amorçage du serveur:
composer --create-project ... --no-dev
dans unsrc
dossier (même si je vois encore beaucoup de dev cruft à travers)Ce qui me donnera un stock, un magasin en cours d'exécution à partir de mon répertoire src (mais mon webroot ne pointe pas là)
Ensuite, mon processus de déploiement:
Cela me permet de maintenir le code de base de Magento séparé du mien, d'utiliser le compositeur pour le mettre à jour .. et je n'ai pas besoin d'en expédier 39 102 !!! fichiers avec chaque déploiement ou exécutez les commandes de composition au moment du déploiement.
... Je suis impatient d'entendre parler d'autres approches ou des meilleures pratiques à ce sujet, et j'aime aussi savoir quels fichiers sont réellement requis pour la production et lesquels sont dev .. afin que je puisse garder mon webroot propre.
Une fois que j'aurai fini, je n'aurai pas un playbook ansible et quelques commandes Fabric pour orchestrer la configuration et le déploiement, que je suis heureux de partager.
J'espère que cela pourra aider
la source