{"id":2806,"date":"2018-12-18T14:23:45","date_gmt":"2018-12-18T13:23:45","guid":{"rendered":"https:\/\/blog.alwaysdata.com\/?p=2806"},"modified":"2020-02-11T15:24:51","modified_gmt":"2020-02-11T14:24:51","slug":"et-si-on-simplifiait-la-livraison-vous-etes-prets","status":"publish","type":"post","link":"https:\/\/blog.alwaysdata.com\/fr\/2018\/12\/18\/et-si-on-simplifiait-la-livraison-vous-etes-prets\/","title":{"rendered":"Et si on simplifiait la livraison&nbsp;: vous \u00eates&nbsp;pr\u00eats&nbsp;?"},"content":{"rendered":"<p>Voici le troisi\u00e8me article de cette s\u00e9rie consacr\u00e9e \u00e0&nbsp;notre nouvelle <a href=\"https:\/\/admin.alwaysdata.com\/site\/application\/\">applith\u00e8que<\/a>. Nous <a href=\"https:\/\/blog.alwaysdata.com\/fr\/2018\/11\/13\/etes-vous-prets-a-redemarrer-la-matrice\/\">vous en avons parl\u00e9<\/a> il y&nbsp;a quelques semaines, et nous avons depuis <a href=\"https:\/\/blog.alwaysdata.com\/fr\/2018\/11\/29\/frameworks-debutez-sur-de-bonnes-bases\/\">ajout\u00e9 de nombreux frameworks<\/a> pour simplifier la prise en main et le prototypage rapide.<\/p>\n<p>Pour ce dernier item,&nbsp;voici\u2026<\/p>\n<figure class=\"embed-media__giphy\" style=\"width:65%; padding-bottom:calc(65% * (224 + 12) \/ (400 + 12))\">\n    <video id=\"giphy-${token}\" autoplay loop muted playsinline>\n        <source src=\"https:\/\/media.giphy.com\/media\/P4EO3u0apt3PO\/giphy.mp4\" type=\"video\/mp4\">\n        <img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/P4EO3u0apt3PO\/giphy.gif\" alt=\" @Giphy\">\n    <\/video>\n<\/figure>\n<h2>\u2026 les scripts personnalis\u00e9s pour les \u00e9diteurs, les DevOps, et le reste du&nbsp;monde&nbsp;!<\/h2>\n<p>Nous souhaitions am\u00e9liorer la fa\u00e7on de cr\u00e9er et distribuer des scripts d\u2019installation, c\u2019\u00e9tait l\u2019une des raisons qui nous ont pouss\u00e9s \u00e0&nbsp;repenser notre applith\u00e8que de z\u00e9ro. Nous avions en t\u00eate le cas d\u2019usage o\u00f9 <em>vous<\/em>, d\u00e9veloppeur\u00b7euse\u00b7s d\u2019applications ou de services Web, avez besoin de d\u00e9ployer r\u00e9guli\u00e8rement un socle technique<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_1');\" onkeypress=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_1');\"><sup id=\"footnote_plugin_tooltip_2806_1_1\" class=\"footnote_plugin_tooltip_text\">1)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2806_1_1\" class=\"footnote_tooltip\"><\/span><\/span>, ou souhaitez distribuer votre app facilement en 1\u2011click<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_2');\" onkeypress=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_2');\"><sup id=\"footnote_plugin_tooltip_2806_1_2\" class=\"footnote_plugin_tooltip_text\">2)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2806_1_2\" class=\"footnote_tooltip\"><\/span><\/span>.<\/p>\n<p>Pour vous y&nbsp;aider, nous avons con\u00e7u cette nouvelle plateforme qui propulse notre applith\u00e8que. Comme nous <a href=\"https:\/\/blog.alwaysdata.com\/fr\/2018\/11\/13\/etes-vous-prets-a-redemarrer-la-matrice\/\">vous l\u2019expliquions pr\u00e9c\u00e9demment<\/a>, nous nous appuyons sur de simples scripts pour provisionner les nouvelles instances. Vous pouvez utiliser le langage de votre choix<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_3');\" onkeypress=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_3');\"><sup id=\"footnote_plugin_tooltip_2806_1_3\" class=\"footnote_plugin_tooltip_text\">3)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2806_1_3\" class=\"footnote_tooltip\"><\/span><\/span>, et nous l\u2019ex\u00e9cutons indiff\u00e9remment.<\/p>\n<h3>Configurez votre environnement<\/h3>\n<p>Chaque script cr\u00e9e une nouvelle instance de type <em>Sites<\/em> pour h\u00e9berger votre app. Vous aurez souvent besoin de la configurer un peu plus finement, notamment pour tout ce qui concerne la r\u00e9\u00e9criture d\u2019URL. Pour indiquer les configurations habituelles, vous devez d\u00e9clarer un <abbr title=\"YAML Front Matter\">YFM<\/abbr><span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_4');\" onkeypress=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_4');\"><sup id=\"footnote_plugin_tooltip_2806_1_4\" class=\"footnote_plugin_tooltip_text\">4)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2806_1_4\" class=\"footnote_tooltip\"><\/span><\/span> avec les jeux d\u2019options et de valeurs.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash\n\n# site:\n#     type: php\n#     path: '{INSTALL_PATH_RELATIVE}'\n#     php_version: '7.2'\n# database:\n#     type: mysql\n<\/code><\/pre>\n<p>Ici, nous d\u00e9clarons un nouveau site PHP, en version 7.2<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_5');\" onkeypress=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_5');\"><sup id=\"footnote_plugin_tooltip_2806_1_5\" class=\"footnote_plugin_tooltip_text\">5)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2806_1_5\" class=\"footnote_tooltip\"><\/span><\/span>, avec une base MySQL. Si vous ex\u00e9cutez ce script, il ne fera rien de plus que de cr\u00e9er un nouveau <em>Site<\/em> et une base <em>MySQL<\/em>.<\/p>\n<p>Ensuite, partez d\u2019un environnement d\u2019ex\u00e9cution propre<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_6');\" onkeypress=\"footnote_moveToReference_2806_1('footnote_plugin_reference_2806_1_6');\"><sup id=\"footnote_plugin_tooltip_2806_1_6\" class=\"footnote_plugin_tooltip_text\">6)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2806_1_6\" class=\"footnote_tooltip\"><\/span><\/span>, et ex\u00e9cutez votre processus d\u2019installation, comme de t\u00e9l\u00e9charger la derni\u00e8re <em>release<\/em>, installer et configurer l\u2019app, etc.<\/p>\n<pre><code class=\"bash\">set -e\n\n# https:\/\/wp-cli.org\n\n# Tools collection\nwget https:\/\/raw.githubusercontent.com\/wp-cli\/builds\/gh-pages\/phar\/wp-cli.phar\n<\/code><\/pre>\n<h3>Demander des informations utilisateur<\/h3>\n<p>Vous aurez parfois besoin de r\u00e9cup\u00e9rer quelques informations utilisateur, comme la langue principale, le mot de passe et le login administrateur, pour pr\u00e9configurer correctement l\u2019instance de votre application.<\/p>\n<p>Vous pouvez d\u00e9clarer une liste de champs de formulaire \u00e0&nbsp;remplir par l\u2019utilisateur\u00b7trice avant d\u2019ex\u00e9cuter le provisionnement. Utilisez le <abbr title=\"YAML Front Matter\">YFM<\/abbr> pour sp\u00e9cifier vos d\u00e9finitions de champs et leurs r\u00e8gles de validation&nbsp;:<\/p>\n<pre><code class=\"bash\"># form:\n#     language:\n#         type: choices\n#         label: Language\n#         initial: en_US\n#         choices:\n#             de_DE: German\n#             en_US: English\n#             es_ES: Spanish\n#             fr_FR: French\n#             it_IT: Italian\n#     email:\n#         type: email\n#         label: Email\n#     admin_username:\n#         label: Administrator username\n#         regex: ^[ a-zA-Z0-9.@_-]+$\n#         max_length: 255\n#     admin_password:\n#         type: password\n#         label: Administrator password\n#         max_length: 255\n<\/code><\/pre>\n<p>C\u2019est tout&nbsp;! Vous pouvez maintenant utiliser ces valeurs dans votre script, les variables \u00e9tant sourc\u00e9es par la plateforme au moment de lancer le script&nbsp;:<\/p>\n<pre><code class=\"bash\">php wp-cli.phar core download \\\n    --locale=\"$FORM_LANGUAGE\" \\\n    --path=\"$INSTALL_PATH\"\nphp wp-cli.phar core install \\\n    --url=\"$INSTALL_URL\"\n    --admin_user=\"$FORM_ADMIN_USERNAME\" \\\n    --admin_password=\"$FORM_ADMIN_PASSWORD\" \\\n    --admin_email=\"$FORM_EMAIL\" \\\n    --path=\"$INSTALL_PATH\"\n<\/code><\/pre>\n<div class=\"inset\" data-title=\"Limitez la collecte\">Nous souhaitons que l\u2019exp\u00e9rience de d\u00e9ploiement via les scripts soit la moins invasive possible. C\u2019est pourquoi nous vous recommandons de ne pas r\u00e9clamer trop d\u2019informations au provisionnement, mais de vous limiter aux champs obligatoires. De cette fa\u00e7on, les utilisateur\u00b7trice\u00b7s gardent la latitude n\u00e9cessaire pour configurer proprement leur instance une fois le d\u00e9ploiement termin\u00e9.<\/div>\n<h2>Distribuez vos sources<\/h2>\n<p>Que vous d\u00e9veloppiez un script pour d\u00e9ployer une solution <em>open source,<\/em> ou votre propre application, pourquoi ne pas le distribuer sur notre plateforme, et le rendre accessible \u00e0&nbsp;tou\u00b7te\u00b7s&nbsp;? C\u2019est exactement l\u2019objectif de notre applith\u00e8que&nbsp;: enrichir la communaut\u00e9&nbsp;!<\/p>\n<figure class=\"embed-media__giphy\" style=\"width:65%; padding-bottom:calc(65% * (225 + 12) \/ (399 + 12))\">\n    <video id=\"giphy-${token}\" autoplay loop muted playsinline>\n        <source src=\"https:\/\/media.giphy.com\/media\/yidUzriaAGJbsxt58k\/giphy.mp4\" type=\"video\/mp4\">\n        <img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/yidUzriaAGJbsxt58k\/giphy.gif\" alt=\" @Giphy\">\n    <\/video>\n<\/figure>\n<p>Rendez-vous simplement dans la vue <a href=\"https:\/\/admin.alwaysdata.com\/site\/application\/script\/\">ajouter un script d\u2019application<\/a> de votre interface d\u2019administration, remplissez le formulaire, et cochez la case <em>Application publique<\/em>. Votre script sera alors marqu\u00e9 pour relecture, et nous le publierons rapidement sur l\u2019applith\u00e8que.<\/p>\n<figure class=\"embed-media__ad__medium embed-media__ad__\">\n    <img decoding=\"async\" src=\"https:\/\/blog.alwaysdata.com\/wp-content\/uploads\/2018\/12\/administration-interface_create-script-view_FR.png\" alt=\"Interface d'administration : ajouter un nouveau script d'application\" class=\"aligncenter size-full wp-image-\">\n    <figcaption>Interface d\u2019administration&nbsp;: ajouter un nouveau script d\u2019application<\/figcaption>\n<\/figure>\n<div class=\"inset\" data-title=\"\u00c0 propos de la relecture\">Nous effectuons une relecture des scripts avant leur mise \u00e0&nbsp;disposition publique. Cette proc\u00e9dure nous garantit que personne ne cherchera \u00e0&nbsp;compromettre votre compte en vous laissant ex\u00e9cuter un script malicieux. N\u00e9anmoins, nous ne pouvons pas garantir la s\u00e9curit\u00e9 des sources distribu\u00e9es par le biais du script lui-m\u00eame, notamment lors du t\u00e9l\u00e9chargement des archives de <i>release<\/i>. En tant que d\u00e9tenteur\u00b7trice du compte, il vous revient de vous assurer des sources install\u00e9es. Si vous \u00e9crivez un script, nous vous recommandons vivement de r\u00e9aliser une v\u00e9rification des sources t\u00e9l\u00e9charg\u00e9es via un contr\u00f4le de <i>checksum<\/i> et de signature pour garantir leur int\u00e9grit\u00e9.<\/div>\n<hr>\n<p>Voil\u00e0 un nouveau moyen d\u2019enrichir un peu plus la communaut\u00e9 d\u2019<em>alwaysdata<\/em>, et nous esp\u00e9rons que vous y&nbsp;contribuerez en fournissant les scripts pour vos propres applications.<\/p>\n<p>Jetez un \u0153il \u00e0&nbsp;la <a href=\"https:\/\/help.alwaysdata.com\/fr\/applith\u00e8que\/cr\u00e9er-son-script-d-application\/\">documentation officielle<\/a> (vous y&nbsp;retrouverez le script pr\u00e9sent\u00e9 ici au complet), et faites-nous connaitre les scripts que vous aimeriez ajouter&nbsp;!<\/p>\n<div class=\"speaker-mute footnotes_reference_container\"> <div class=\"footnote_container_prepare\"><p><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_label pointer\" onclick=\"footnote_expand_collapse_reference_container_2806_1();\">Notes<\/span><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_collapse_button\" style=\"display: none;\" onclick=\"footnote_expand_collapse_reference_container_2806_1();\">[<a id=\"footnote_reference_container_collapse_button_2806_1\">+<\/a>]<\/span><\/p><\/div> <div id=\"footnote_references_container_2806_1\" style><table class=\"footnotes_table footnote-reference-container\"><caption class=\"accessibility\">Notes<\/caption> <tbody> \n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2806_1('footnote_plugin_tooltip_2806_1_1');\"><a id=\"footnote_plugin_reference_2806_1_1\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>1<\/a><\/th> <td class=\"footnote_plugin_text\">parce que vous \u00eates une agence et qu\u2019il s\u2019agit de votre plateforme maison<\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2806_1('footnote_plugin_tooltip_2806_1_2');\"><a id=\"footnote_plugin_reference_2806_1_2\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>2<\/a><\/th> <td class=\"footnote_plugin_text\">parce que vous distribuez une solution <em>open source<\/em> et souhaitez la rendre facilement accessible au plus grand nombre<\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2806_1('footnote_plugin_tooltip_2806_1_3');\"><a id=\"footnote_plugin_reference_2806_1_3\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>3<\/a><\/th> <td class=\"footnote_plugin_text\">de Bash \u00e0&nbsp;Python ou&nbsp;Ruby<\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2806_1('footnote_plugin_tooltip_2806_1_4');\"><a id=\"footnote_plugin_reference_2806_1_4\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>4<\/a><\/th> <td class=\"footnote_plugin_text\">qui se compose d\u2019un simple <em>dataset<\/em> YAML en commentaire en ent\u00eate<\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2806_1('footnote_plugin_tooltip_2806_1_5');\"><a id=\"footnote_plugin_reference_2806_1_5\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>5<\/a><\/th> <td class=\"footnote_plugin_text\">le script choisira automatiquement la derni\u00e8re version mineure de la branche 7.2<\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2806_1('footnote_plugin_tooltip_2806_1_6');\"><a id=\"footnote_plugin_reference_2806_1_6\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>6<\/a><\/th> <td class=\"footnote_plugin_text\">toujours mieux pour \u00e9viter les collisions de variables<\/td><\/tr>\n\n <\/tbody> <\/table> <\/div><\/div><script type=\"text\/javascript\"> function footnote_expand_reference_container_2806_1() { jQuery('#footnote_references_container_2806_1').show(); jQuery('#footnote_reference_container_collapse_button_2806_1').text('\u2212'); } function footnote_collapse_reference_container_2806_1() { jQuery('#footnote_references_container_2806_1').hide(); jQuery('#footnote_reference_container_collapse_button_2806_1').text('+'); } function footnote_expand_collapse_reference_container_2806_1() { if (jQuery('#footnote_references_container_2806_1').is(':hidden')) { footnote_expand_reference_container_2806_1(); } else { footnote_collapse_reference_container_2806_1(); } } function footnote_moveToReference_2806_1(p_str_TargetID) { footnote_expand_reference_container_2806_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } } function footnote_moveToAnchor_2806_1(p_str_TargetID) { footnote_expand_reference_container_2806_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } }<\/script>","protected":false},"excerpt":{"rendered":"<p>Vous voulez enrichir votre communaut\u00e9&nbsp;? D\u00e9couvrez un nouveau moyen de rendre votre solution accessible \u00e0&nbsp;tou\u00b7te\u00b7s&nbsp;!<\/p>\n","protected":false},"author":12,"featured_media":2798,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"wp_typography_post_enhancements_disabled":false,"footnotes":""},"categories":[230,1],"tags":[228,229,212,223,129,196,150,74],"class_list":["post-2806","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-fr","category-uncategorized","tag-features","tag-fonctionnalites-fr","tag-marketplace","tag-marketplace-fr","tag-script","tag-script-fr","tag-sites-web-fr","tag-websites"],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/posts\/2806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/comments?post=2806"}],"version-history":[{"count":0,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/posts\/2806\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/media\/2798"}],"wp:attachment":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/media?parent=2806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/categories?post=2806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/tags?post=2806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}