Contenu connexe
Similaire à Déployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTour (20)
Déployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTour
- 1. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
La tête dans les nuages avec
ZendServer, Magento2,
MS Azure et Docker !
- 2. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Pierre Fay
Expert technique Magento, @Itelios
Membre de la Z-Team
Blog : www.pierrefay.fr / www.pierrefay.com
Twitter : @pierrefay
- 3. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Spécialiste du commerce connecté et digital
Itelios c'est :
- Société de service et conseil
- Accompagne les distributeurs et les marques
Jules, Jennifer, Lacoste, Bizbee, Kenzo, Maje, Sandro…
- 100 experts répartis sur 4 sites
Lille, Paris, Macôn, Sao Paolo
- Plateformes ecommerce, mobile, tablettes magasins, crm,
marketplace ...
Site web : www.itelios.com
Twitter : @itelios
- 4. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
- 5. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Docker c'est quoi ?
- Une sorte de VM allégée
- Basée sur un système d'exploitation
- Installation uniquement de ce qui est nécessaire
- Création d'une « Image » permettant de lancer des « containers »
- Possibilité de partager un dossier, ouvrir un port, lier les containers entre eux, etc..
- 6. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
A faire :
En attente
En attente
En attente
En attente
- 7. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Container
Le process
Dockerfile Image
Container
BUILD RUN
Container
- 8. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Installer docker
wget qO https://get.docker.com/ | sh
Sur Ubuntu, se loguer dans Ubuntu avec les privilèges « sudo » puis :
- 9. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Les principales commandes
docker build t <nom_image> .
BUILD
RUN
STOP
RM
docker run d p 3306:3306 v /data/mysql:/var/lib/mysql
name <nom_image> <nom_du_container>
docker stop <nom_du_container>
docker rm <nom_du_container>
- 10. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Créer un container à partir d'une image
docker run busybox /bin/echo hi
On utilise docker run :
Docker va alors automatiquement récupérer l'image « busybox » et exécuter « /bin/echo hi » au
démarrage.
- 11. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Créer sa propre image
Rappel du process :
Dockerfile :
C'est le fichier qui décrit le container
● Sur quel système d'exploitation je me base ?
● Quels applications j'installe ?
● Quels fichier j'ajoute dans mon container et à quel endroit ?
● Quels ports je vais ouvrir ?
● Quels dossiers de mon container vont être partagés et avec quels dossiers de ma machine ?
● Quel port de ma machine va correspondre à un port de mon container ?
● Qu'est ce que je lance au démarrage ?
Container
Dockerfile Image
Container
BUILD RUN
Container
- 12. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Creer la base de donnée
Dockerfile
from ubuntu
RUN aptget update
RUN DEBIAN_FRONTEND=noninteractive aptget y distupgrade
RUN DEBIAN_FRONTEND=noninteractive aptget install y mysqlserver5.6
mysqlclient5.6 expect
ADD ./startup.sh /usr/local/bin/startup.sh
RUN chmod +x /usr/local/bin/startup.sh
VOLUME ["/var/lib/mysql"]
EXPOSE 3306
CMD ["/bin/bash","/usr/local/bin/startup.sh"]
- 13. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
startup.sh
#!/bin/bash
/usr/sbin/service mysql start
/usr/bin/mysqld_safe
sed i e"s/^bindaddresss*=s*127.0.0.1/bindaddress = 0.0.0.0/"
/etc/mysql/my.cnf
if [ ! f /usr/share/mysql/mydefault.cnf ] ; then
cp /etc/mysql/my.cnf /usr/share/mysql/mydefault.cnf
fi
mysql_install_db
echo "GRANT ALL ON *.* TO pfay@'%' IDENTIFIED BY 'pfay123' WITH GRANT
OPTION; FLUSH PRIVILEGES" | mysql
Creer la base de donnée
- 14. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
startup.sh
service mysql restart
echo "DROP DATABASE IF EXISTS magento2" > /createdb.sql
mysql < /createdb.sql
echo "CREATE DATABASE IF NOT EXISTS magento2" > /createdb.sql
mysql < /createdb.sql
tail f /var/log/*.log
Creer la base de donnée
- 15. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Build, Run, Exec
docker build t pierrefay/magento2cloud .
Les commandes à lancer depuis le dossier qui contient le Dockerfile.
Dabord on crée l'image avec la commande « build » :
Puis on lance le container avec la commande « run » à partir de l'image crée précédemment :
On vérifie ensuite que ma base de donnée « magento2 » a bien été crée.
docker run name magento2cloud p 3306:3306 pierrefay/magento2cloud
# docker exec i t magento2cloud mysql u pfay ppfay123 magento2
mysql> show databases;
++
| Database |
++
| information_schema |
| magento2 |
- 16. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Avancement…
√ OK
En attente
En attente
En attente
- 17. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Ajouter ZendServer
RUN DEBIAN_FRONTEND=noninteractive aptget install y wget
RUN wget http://repos.zend.com/zend.key O |aptkey add
RUN echo "deb http://repos.zend.com/zendserver/8.0.2/deb_apache2.4
server nonfree" >> /etc/apt/sources.list.d/zendserver.list
RUN DEBIAN_FRONTEND=noninteractive aptget update
RUN DEBIAN_FRONTEND=noninteractive aptget install y libapache2mod
php5.6zendserver zendserverphp5.6
RUN DEBIAN_FRONTEND=noninteractive /usr/local/zend/bin/zendctl.sh stop
A rajouter dans le Dockerfile les lignes suivantes:
- 18. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
EXPOSE 80
EXPOSE 10081
EXPOSE 10082
Dockerfile (suite)
Ajouter ZendServer
- 19. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Dans startup.sh, ajouter tout au début :
export PATH=/usr/local/zend/bin:$PATH
source /etc/zce.rc
Ajouter ZendServer
service zendserver restart
tail f /var/log/apache2/*.log > /var/www/html/logsserver.log
Puis à la fin du fichier, on redémarre le serveur et on change le tail -f pour prendre les logs apache.
- 20. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
On reteste
docker build t pierrefay/magento2cloud .
Les commandes à lancer depuis le dossier qui contient le Dockerfile.
Dabord on crée l'image avec la commande « build » :
Puis on lance le container avec la commande « run » à partir de l'image crée précédemment :
On voit :
Donc on vérifie que tout fonctionne en se connectant sur :
- http://172.17.0.9/
- http://172.17.0.9:10081/ZendServer/
docker run name magento2cloud pierrefay/magento2cloud
domain name, using 172.17.0.9. Set the 'ServerName' directive globally
- 21. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Avancement…
√ OK
√ OK
En attente
En attente
- 22. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Installer magento2
RUN DEBIAN_FRONTEND=noninteractive aptget install y wget php5 php5
cli git curl
RUN DEBIAN_FRONTEND=noninteractive curl sS
https://getcomposer.org/installer | php
RUN DEBIAN_FRONTEND=noninteractive mv composer.phar
/usr/local/bin/composer
ADD ./000default.conf /etc/apache2/sitesavailable/000default.conf
VOLUME ["/var/www/magento2"]
Dockerfile
- 23. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
#!/bin/bash
echo $BASE_URL
echo $TOKEN_GITHUB
Installer magento2
On affiche les variables d'environnements (qu'on passera via docker RUN)
startup.sh
- 24. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
if [ 'find /var/www/magento2 prune empty' ]
then
rm rf /var/www/magento2
cd /var/www/ && git clone https://github.com/magento/magento2.git
chmod 755 R /var/www/magento2/var/
chmod 755 R /var/www/magento2/pub/
chmod 755 R /var/www/magento2/app/etc/
chmod 755 R /var/www/magento2/media/
cd /var/www/magento2 && composer config g githuboauth.github.com
$TOKEN_GITHUB
cd /var/www/magento2 && composer install nointeraction
cd /var/www/magento2 && composer update
else
echo 'Directory magento2 not empty, skiping installation'
fi
Installer magento2
Si le dossier est vide, on télécharge depuis le repository public de magento2 et on installe avec composer.
startup.sh (suite)
- 25. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
php f bin/magento setup:install
baseurl=http://$BASE_URL/
backendfrontname=admin
dbhost=localhost
dbname=magento2
dbuser=pfay
dbpassword=pfay123
adminfirstname=Mage
adminlastname=Admin
adminemail=admin@example.com
adminuser=admin
adminpassword=admin123
language=fr_FR
currency=EUR
timezone=Europe/Paris
Installer magento2
On installe magento en CLI pour ne pas passer par l'installeur HTTP.
startup.sh (suite)
- 26. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
cd /var/www/magento2 && composer config repositories.magento composer
http://packages.magento.com
cd /var/www/magento2 && composer require magento/sampledata:0.74.0
beta12
cd /var/www/magento2 && php f bin/magento setup:upgrade
cd /var/www/magento2 && php f bin/magento sampledata:install admin
rm rf /var/www/magento2/var/cache/*
chmod 777 R /var/www/magento2/var/
chmod 777 R /var/www/magento2/pub/
chmod 777 R /var/www/magento2/app/etc/
chmod 777 R /var/www/magento2/media/
Installer magento2
On installe les samples datas, on redonne les droits puis on vide le cache.
startup.sh (suite et fin)
- 27. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
<VirtualHost *:80>
ServerName www.magento2cloud.lan
ServerAdmin webmaster@localhost
DocumentRoot /var/www/magento2
<Directory /var/www/magento2>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Installer magento2
On crée le fichier 000-default.conf pour faire pointer
- 28. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
On reteste
docker build t pierrefay/magento2cloud .
Les commandes à lancer depuis le dossier qui contient le Dockerfile.
Dabord on crée l'image avec la commande « build » :
Puis on lance le container avec la commande « run » à partir de l'image crée précédemment :
On voit :
On rajoute <mon ip> dans /etc/hosts et on se connecte sur www.magento2-cloud.lan
docker run name magento2cloud
env BASE_URL="www.magento2cloud.lan"
env TOKEN_GITHUB="<ma_clef_github_publique>"
pierrefay/magento2cloud
domain name, using <mon ip> Set the 'ServerName' directive globally
- 29. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Avancement…
√ OK
√ OK
√ OK
En attente
- 30. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Pourquoi Microsoft Azure ?
Crédit Photo : openclassrooms.com
- Déploiement de vos containers docker directement
- Améliorer les performances de votre site
- Adapter les capacités de l'hébergement à vos besoins réels (montée en charge)
temporaire (soldes) ou non, facturation en conséquence
- Avoir très bonne disponibilité
- Avoir une grande réactivité
évolution des capacités de votre hébergement très rapidement, à la demande
- Se concentrer sur l'application, plutôt que sur l'hébergement
- 31. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Rendre mon container accessible depuis l'extérieur
Environnement local
Magento2-cloud
:80 (http)
:10081 (zendserver)
:10082 (zendserver)
:3306 (mysql)
√ OK
Environnement Azure
Magento2-cloud
( ???)
:80 (http)
:10081 (zendserver)
:10082 (zendserver)
:3306 (mysql)
Connectes toi à
magento2-cloud.cloudapp.net
(ou magento2-cloud.lan)
X NOK
je retrouve le chemin
de mon container car
il est défini
manuellement
dans /etc/hosts
Environnement local
Je me connecte à la
machine OK,mais
comment je retrouve
ton container ?
- 32. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
La solution
Le container est sur un réseaux interne 172.17.0.XXX
Solution: on va « mapper » les ports exposés aux ports du serveur
docker run d name magento2cloud
p 80:80
p 10081:10081
p 10082:10082
env BASE_URL="magento2cloud.cloudapp.net"
env TOKEN_GITHUB="<ma_clef_github>"
pierrefay/magento2cloud
- 33. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Persistance des données
A chaque fois que je redémarre mon container, mes données sont réinitialisées
Solution: on va monter des « volumes » pour « sauvegarder » /var/www/html et /var/lib/mysql/
Puis on va vérifier dans startup.sh si les fichier existent déjà avant de refaire les opérations d'installation
v /data/magento2cloud/mysql/:/var/lib/mysql
v /data/magento2cloud/html/:/var/www/magento2
- 34. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Installer Azure CLI
sudo aptget install npm
sudo aptget install nodejslegacy
npm install azurecli g
Installer le programme pour se connecter via npm
Télécharger les données du compte
<mon_login_Azure> = mon adresse mail, <mon_mdp_Azure> = mon login itelios
azure account download
info: Executing command account download
info: Launching browser to http://go.microsoft.com/fwlink/?LinkId=254432
help: Save the downloaded file, then execute the command
help: account import <file>
info: account download command OK
azure account import <le_fichier_téléchargé.publishsettings>
azure account list
- 35. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Créer sa VM Azure
Pour lister les images disponibles pour créer ma VM :
azure vm docker create e 22 l "North Europe" magento2cloud
"<code_de_la_VM>" vmsize Basic_A3 itelios SecretPassword234!
Pour créer ma VM :
On démarre la VM :
azure vm image list | grep 'Ubuntu_DAILY_BUILDtrusty'
azure vm start magento2inthecloud
- 36. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Envoyer un premier container « hello world »
On utilise l'image busybox pour lancer « echo hello world »
L'image n'étant pas présente sur la VM docker va automatiquer faire un « docker pull » pour la récupérer depuis
le docker Hub.
docker H tcp://magento2cloud.cloudapp.net:4243 tls run busybox
/bin/echo hello world
- 37. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Envoyer son container docker sur docker Hub
Docker Hub :
● Repository d'images Docker
● Il est possible d'avoir un Hub privé
● Pour pousser sur le hub : « docker push »
docker push pierrefay/magento2cloud
- 38. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
Récupérer son container sur Azure
On récupère l'image depuis le docker hub :
docker H tcp://magento2cloud.cloudapp.net:4243 tls pull
pierrefay/magento2cloud
- 39. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
On lance notre container sur Azure
Docker Hub :
● Repository d'images Docker
● Il est possible d'avoir un Hub privé
● Pour pousser sur le hub : « docker push »
docker H tcp://magento2cloud.cloudapp.net:4243 tls run name
magento2cloud
env BASE_URL="magento2cloud.cloudapp.net"
env TOKEN_GITHUB="<TOKEN_GITHUB>"
v /data/magento2cloud/mysql/:/var/lib/mysql
v /data/magento2cloud/html/:/var/www/magento2
p 80:80
p 10081:10081
p 10082:10082
pierrefay/magento2cloud
- 40. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
On ouvre les ports sur la VM
azure vm endpoint create magento2cloud 80
azure vm endpoint create magento2cloud 3306
azure vm endpoint create magento2cloud 10081
azure vm endpoint create magento2cloud 10082
- 41. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservésCopyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
On lance notre container sur Azure
Pour relancer un container : stop + rm + run
run name magento2cloud
env BASE_URL="magento2cloud.cloudapp.net"
env TOKEN_GITHUB="<TOKEN_GITHUB>"
v /data/magento2cloud/mysql/:/var/lib/mysql
v /data/magento2cloud/html/:/var/www/magento2
p 80:80
p 10081:10081
p 10082:10082
pierrefay/magento2cloud
- 42. Copyright © 2003 - 2015 • ITELIOS SAS • Tous droits réservés
THE END
….maintenant à vous de tester !
Retrouvez les sources de cette conférence sur :
https://github.com/pierrefay/magento2-azure-demo
Retrouvez moi sur :
Twitter : @pierrefay
Blog : pierrefay.fr / pierrefay.com