<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>William's Blog</title> <link>http://www.willdurand.fr</link> <description>Développeur web indépendant, étudiant et passionné ! #symfony #Diem #Git #Nginx #WebPerfs</description> <lastBuildDate>Fri, 27 Aug 2010 09:51:54 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/WilliamDurand-WebDeveloper-RecentPosts" /><feedburner:info uri="williamdurand-webdeveloper-recentposts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>WilliamDurand-WebDeveloper-RecentPosts</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><title>symfony rencontre Hudson, Mantis et les autres</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/-vC70PNVDMo/</link> <comments>http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/#comments</comments> <pubDate>Fri, 27 Aug 2010 09:51:53 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Boulot]]></category> <category><![CDATA[symfony]]></category> <category><![CDATA[Checkstyle]]></category> <category><![CDATA[Couverture de code]]></category> <category><![CDATA[Hudson]]></category> <category><![CDATA[Mantis]]></category> <category><![CDATA[Pdepend]]></category> <category><![CDATA[Phing]]></category> <category><![CDATA[PhpDocumentor]]></category> <category><![CDATA[PHP_CodeSniffer]]></category> <category><![CDATA[Symfony]]></category> <category><![CDATA[Tests fonctionnels]]></category> <category><![CDATA[Tests unitaires]]></category><guid isPermaLink="false">http://www.willdurand.fr/?p=608</guid> <description><![CDATA[Bonjour, depuis un certain temps déjà, je me pose deux questions : &#171;&#160;comment améliorer mon travail ?&#160;&#187; et&#8230; &#171;&#160;Comment améliorer mon travail ?&#160;&#187;. La première question traite essentiellement de ce que je produis, du code écrit, des fonctionnalités que je mets en place, &#8230; tandis que la deuxième question définit mes conditions de travail. Autrement dit, [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Bonjour, depuis un certain temps déjà, je me pose deux questions : &laquo;&nbsp;comment améliorer mon travail ?&nbsp;&raquo; et&#8230; &laquo;&nbsp;Comment améliorer mon travail ?&nbsp;&raquo;. La première question traite essentiellement de ce que je produis, du code écrit, des fonctionnalités que je mets en place, &#8230; tandis que la deuxième question définit mes <span
style="text-decoration: underline;">conditions de travail</span>. Autrement dit, qu&#8217;est-ce qui va faire <span
style="text-decoration: underline;">la différence</span> entre tout le monde et moi (jeune entrepreneur) ? Et qu&#8217;est-ce qui va <span
style="text-decoration: underline;">me faciliter la vie</span> et ainsi impacter la première question ?</p><p
style="text-align: justify;">C&#8217;est là que les outils que je vais présenter dans cet article interviennent. Aujourd&#8217;hui je parlerai de <strong>Hudson</strong>, <strong>Mantis</strong>, <strong>Phing</strong>, <strong>Checkstyle</strong>, <strong>PhpDocumentor</strong>, <strong>Pdepend</strong> et je montrerai l&#8217;interconnexion de tout ça sur un projet <strong>symfony</strong>.</p><p
style="text-align: justify;"><h2>Mantis</h2><p
style="text-align: center;"><a
rel="attachment wp-att-626" href="http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/mantis/"><img
class="aligncenter size-large wp-image-626" title="mantis" src="http://www.willdurand.fr/wp-content/uploads/2010/08/mantis-1024x107.png" alt="" width="700" /></a></p><p
style="text-align: justify;"><strong>Mantis</strong> est un <strong>bug tracker</strong>, c&#8217;est-à-dire un <span
style="text-decoration: underline;">rapporteur de défaillances</span>. Il permet de consigner tous les problèmes survenus sur une application, de déclarer des <span
style="text-decoration: underline;">priorités</span> plus ou moins importantes mais surtout d&#8217;avoir un réel <span
style="text-decoration: underline;">échange</span> entre le rapporteur (le client) et l&#8217;équipe technique (composée de&#8230; moi). L&#8217;avantage d&#8217;avoir ce type d&#8217;outil dépasse ce que je viens de dire mais je m&#8217;en sers essentiellement pour avoir un endroit adapté où récolter les défaillances de mes applications. <strong>Mantis</strong> s&#8217;occupe d&#8217;avertir tous les gens concernés par <span
style="text-decoration: underline;">mail</span>, lorsqu&#8217;un bug est ajouté ou résolu par exemple. Ainsi, je ne perds aucun retour client auparavant stocké dans ma boîte mail sous forme de dizaines de mails et lorsque je résous un bug, le rapporteur concerné est <span
style="text-decoration: underline;">prévenu automatiquement</span>.</p><p
style="text-align: justify;">Nous allons voir pourquoi c&#8217;est si intéressant.</p><p
style="text-align: justify;"><h2>Hudson</h2><p
style="text-align: justify;">J&#8217;ai déjà parlé d&#8217;<strong>Hudson</strong>, sans vraiment rentrer dans les détails parce que je ne vais pas réécrire ce qui a déjà été publié <em>x</em> fois, mais cette fois-ci je vais rentrer plus dans les détails. Au passage, <strong>Hudson</strong> est un <span
style="text-decoration: underline;">serveur d&#8217;intégration continue</span>.</p><p
style="text-align: justify;">Pour un projet <strong>symfony</strong>, je crée un projet <em>freestyle</em>, connecté à <strong>Git</strong> avec un déclencheur sur tout changement dans le <em>repository </em>distant. J&#8217;ajoute ensuite une succession de tâches <strong>symfony</strong> :</p><p
style="text-align: justify;">- création du répertoire <em>log/</em></p><p
style="text-align: justify;">- suppression de la base de tests <strong>SQLite</strong></p><p
style="text-align: justify;">- création de la base de tests</p><p
style="text-align: justify;">- tests</p><p
style="text-align: justify;"><p
style="text-align: justify;">Ceci est un projet basique qui me permet d&#8217;avoir une intégration continue et une alerte rapide par mail si un problème survient.</p><p
style="text-align: justify;">Oui mais voilà, ce n&#8217;est pas suffisant, on peut mieux faire. J&#8217;ai parlé de <strong>Mantis</strong> juste avant, il serait bien de pouvoir connecter <strong>Hudson</strong> avec <strong>Mantis</strong>. C&#8217;est justement ce que fait le <a
href="http://wiki.hudson-ci.org/display/HUDSON/Mantis+Plugin"><strong>Mantis Plugin</strong></a> pour <strong>Hudson</strong>. Ainsi, si je &laquo;&nbsp;commit&nbsp;&raquo; une modification qui a résolue un bug, exemple :</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">fix issue 0000007</div></div><p
style="text-align: justify;">Le plugin va pouvoir lier ce changement avec la page <strong>Mantis</strong> du bug et ajouter les informations liées au commit. Dorénavant, lorsque je &laquo;&nbsp;commiterai&nbsp;&raquo; un fix, le rapporteur sera prévenu de la résolution du bug qu&#8217;il aura soumis. Le gain de temps est indéniable.</p><p
style="text-align: justify;">Configuration Hudson :</p><p
style="text-align: center;"><a
rel="attachment wp-att-625" href="http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/mantis_hudson/"><img
class="size-large wp-image-625 aligncenter" title="mantis_hudson" src="http://www.willdurand.fr/wp-content/uploads/2010/08/mantis_hudson-1024x83.png" alt="" width="700" /></a></p><p
style="text-align: justify;"><p
style="text-align: justify;"><p
style="text-align: justify;">Mais on peut (encore) faire mieux d&#8217;une autre manière, c&#8217;est-à-dire que si la <em>build</em> est un succès, pourquoi ne pas la déployer. Pour avoir un changement, je dois faire un &laquo;&nbsp;push&nbsp;&raquo; vers le <em>repository</em> distant. Or, on ne &laquo;&nbsp;push&nbsp;&raquo; pas tous les jours ou du moins, pas derrière chaque commit. Ce serait un peu perdre l&#8217;avantage du mode décentralisé de <strong>Git</strong>. Ainsi, quand je choisis de faire un &laquo;&nbsp;push&nbsp;&raquo; c&#8217;est que j&#8217;estime avoir suffisamment modifié mon projet. Ceci m&#8217;amène à penser qu&#8217;il devient intéressant de le déployer.</p><p
style="text-align: justify;">Merci à <strong>Capistrano</strong> (<a
href="http://www.willdurand.fr/deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem/">lire ici mon article sur le déploiement d&#8217;applis symfony et diem avec Capistrano</a>) et au <a
href="http://wiki.hudson-ci.org/display/HUDSON/SSH+plugin">S<strong>SH Plugin</strong></a> d&#8217;<strong>Hudson</strong>. Ce plugin n&#8217;est pas des plus parfaits mais il fonctionne. Si la build passe, je lance mon déploiement. Normalement, le déploiement n&#8217;échoue pas, si c&#8217;était le cas alors : capistrano ferait un rollback sur la dernière version fonctionnelle et les logs Hudson m&#8217;indiqueraient le problème. Je peux donc être rassuré de ce côté-là.</p><p
style="text-align: justify;">Jusqu&#8217;à présent, je n&#8217;ai parlé que d&#8217;automatisation des aspects &laquo;&nbsp;après développement&nbsp;&raquo; à savoir les <em>feedbacks</em> client et le déploiement. Ce sont les deux points essentiels après réussite des tests. Pour autant, <strong>Hudson</strong> peut aider l&#8217;équipe de développeurs en effectuant une série d&#8217;analyses.</p><p
style="text-align: justify;"><h2>Phing : l&#8217;Ant des temps modernes (ou pas)</h2><p
style="text-align: justify;"><strong>Phing</strong>, c&#8217;est <strong>Ant</strong> (utilisé dans le monde Java) version PHP, en quelques mots, un outil d&#8217;automatisation de tâches répétitives. Il faut connaître Ant pour comprendre qu&#8217;il est génial de disposer d&#8217;un outil semblable pour PHP. C&#8217;est grâce à cet outil que je génère des rapports d&#8217;analyse.</p><p
style="text-align: justify;"><strong>Phing</strong> s&#8217;installe via <strong>PEAR</strong>.</p><p
style="text-align: justify;"><h2>Checkstyle : mon code a du style !</h2><p
style="text-align: justify;"><strong>Checkstyle</strong> est un outil de contrôle de code. Il vérifie le style du code écrit (indentation, commentaires, &#8230;). Pour l&#8217;utiliser avec PHP, il faut <a
href="http://pear.php.net/package/PHP_CodeSniffer"><strong>PHP_CodeSniffer</strong></a> (on abrège en <em>phpcs</em>) et le <strong><a
href="http://wiki.hudson-ci.org/display/HUDSON/Checkstyle+Plugin">Checkstyle Plugin</a></strong> d&#8217;<strong>Hudson</strong>. Pour l&#8217;utiliser avec <strong>symfony</strong>, on ajoutera le <em>standard</em> symfony : <a
href="http://github.com/denderello/phpcs-symfony">http://github.com/denderello/phpcs-symfony</a> ou si vous utilisez la toute dernière version : <a
href="http://github.com/willdurand/phpcs-symfony">http://github.com/willdurand/phpcs-symfony</a>.</p><p
style="text-align: justify;">Configuration Hudson :</p><p
style="text-align: center;"><a
rel="attachment wp-att-612" href="http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/checkstyle/"><img
class="aligncenter size-large wp-image-612" title="checkstyle" src="http://www.willdurand.fr/wp-content/uploads/2010/08/checkstyle-1024x127.png" alt="" width="700" /></a></p><p
style="text-align: justify;">Configuration du <em>build.xml</em> (Phing) :</p><div
class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #808080; font-style: italic;">&lt;!-- PHP CodeSniffer --&gt;</span><br
/> <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;target</span> <span
style="color: #000066;">name</span>=<span
style="color: #ff0000;">&quot;phpcs&quot;</span><span
style="color: #000000; font-weight: bold;">&gt;</span></span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;echo</span> <span
style="color: #000066;">msg</span>=<span
style="color: #ff0000;">&quot;PHP CodeSniffer...&quot;</span> <span
style="color: #000000; font-weight: bold;">/&gt;</span></span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;exec</span> <span
style="color: #000066;">command</span>=<span
style="color: #ff0000;">&quot;phpcs --standard=Symfony --report=checkstyle ${workspace}/apps ${workspace}/lib/filter ${workspace}/lib/form ${workspace}/lib/model ${workspace}/lib/validator ${workspace}/test&quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;</span></span> ${workspace}/log/checkstyle.xml&quot; escape=&quot;false&quot;&gt;<span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;/exec<span
style="color: #000000; font-weight: bold;">&gt;</span></span></span><br
/> <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;/target<span
style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></div><p
style="text-align: justify;">Et aperçu du résultat :</p><p
style="text-align: justify;"><a
rel="attachment wp-att-622" href="http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/checkstyle_report/"><img
class="aligncenter size-full wp-image-622" title="checkstyle_report" src="http://www.willdurand.fr/wp-content/uploads/2010/08/checkstyle_report.png" alt="" width="505" height="222" /></a></p><p
style="text-align: justify;"><h2>Pdepend : analyse de code statique</h2><p
style="text-align: justify;"><strong><a
href="http://pdepend.org/news.html">Pdepend</a></strong>, analyseur de code statique, permet de calculer des indices (couplage, instabilité, &#8230;) afin de déterminer la qualité du code de la <em>build</em>. Pour cela, il nous faut le <strong><a
href="http://wiki.hudson-ci.org/display/HUDSON/JDepend+Plugin">Jdepend Plugin</a></strong> d&#8217;<strong>Hudson</strong> et avoir installé <strong>pdepend</strong>.</p><p
style="text-align: justify;">Configuration Hudson :</p><p
style="text-align: center;"><a
rel="attachment wp-att-621" href="http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/pdepend/"><img
class="aligncenter size-large wp-image-621" title="pdepend" src="http://www.willdurand.fr/wp-content/uploads/2010/08/pdepend-1024x95.png" alt="" width="700" /></a></p><p
style="text-align: justify;">Configuration du <em>build.xml</em> :</p><div
class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #808080; font-style: italic;">&lt;!-- PHP dependency checker --&gt;</span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;target</span> <span
style="color: #000066;">name</span>=<span
style="color: #ff0000;">&quot;pdepend&quot;</span><span
style="color: #000000; font-weight: bold;">&gt;</span></span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;echo</span> <span
style="color: #000066;">msg</span>=<span
style="color: #ff0000;">&quot;PHP Depend...&quot;</span> <span
style="color: #000000; font-weight: bold;">/&gt;</span></span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;exec</span> <span
style="color: #000066;">command</span>=<span
style="color: #ff0000;">&quot;pdepend --jdepend-xml=${workspace}/log/jdepend.xml ${workspace}/apps,${workspace}/lib/filter,${workspace}/lib/form,${workspace}/lib/model,${workspace}/lib/validator,${workspace}/test&quot;</span> <span
style="color: #000066;">escape</span>=<span
style="color: #ff0000;">&quot;false&quot;</span> <span
style="color: #000000; font-weight: bold;">/&gt;</span></span><br
/> <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;/target<span
style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></div><p
style="text-align: justify;"><h2>DRY ! Analyser les répétitions de code</h2><p>Don&#8217;t Repeat Yourself, adage <strong>symfony</strong>, on souhaite ici analyser le code dupliqué. Pour cela, on utilise <strong>phpcpd</strong> (toujours via <strong>PEAR</strong>) ainsi que le <strong><a
href="http://wiki.hudson-ci.org/display/HUDSON/DRY+Plugin">DRY Plugin</a></strong> d&#8217;<strong>Hudson</strong>.</p><p>Configuration Hudson :</p><p
style="text-align: justify;"><a
rel="attachment wp-att-623" href="http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/pmd/"><img
class="aligncenter size-large wp-image-623" title="pmd" src="http://www.willdurand.fr/wp-content/uploads/2010/08/pmd-1024x200.png" alt="" width="700" /></a>Configuration du <em>build.xml</em> :</p><div
class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #808080; font-style: italic;">&lt;!-- PHP copy/paste analysis --&gt;</span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;target</span> <span
style="color: #000066;">name</span>=<span
style="color: #ff0000;">&quot;phpcpd&quot;</span><span
style="color: #000000; font-weight: bold;">&gt;</span></span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;echo</span> <span
style="color: #000066;">msg</span>=<span
style="color: #ff0000;">&quot;PHP Copy/Paste...&quot;</span> <span
style="color: #000000; font-weight: bold;">/&gt;</span></span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;exec</span> <span
style="color: #000066;">command</span>=<span
style="color: #ff0000;">&quot;phpcpd --log-pmd ${workspace}/log/pmd.xml ${workspace}/apps ${workspace}/lib/filter ${workspace}/lib/form ${workspace}/lib/model ${workspace}/lib/validator ${workspace}/test&quot;</span> <span
style="color: #000066;">escape</span>=<span
style="color: #ff0000;">&quot;false&quot;</span> <span
style="color: #000000; font-weight: bold;">/&gt;</span></span><br
/> <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;/target<span
style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></div><p
style="text-align: justify;">Et aperçu du résultat :</p><p
style="text-align: justify;"><a
rel="attachment wp-att-624" href="http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/pmd_report/"><img
class="aligncenter size-full wp-image-624" title="pmd_report" src="http://www.willdurand.fr/wp-content/uploads/2010/08/pmd_report.png" alt="" width="506" height="217" /></a></p><p
style="text-align: justify;"><h2>PhpDocumentor : génération de la documentation du projet</h2><p
style="text-align: justify;">PhpDocumentor permet de générer la documentation d&#8217;un projet, tout comme Javadoc le ferait. Voici la configuration du<em> build.xml </em>:</p><div
class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #808080; font-style: italic;">&lt;!-- PHP API Documentation --&gt;</span><br
/> <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;target</span> <span
style="color: #000066;">name</span>=<span
style="color: #ff0000;">&quot;phpdoc&quot;</span><span
style="color: #000000; font-weight: bold;">&gt;</span></span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;echo</span> <span
style="color: #000066;">msg</span>=<span
style="color: #ff0000;">&quot;PHP Documentor...&quot;</span> <span
style="color: #000000; font-weight: bold;">/&gt;</span></span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;phpdoc</span> <span
style="color: #000066;">title</span>=<span
style="color: #ff0000;">&quot;API Documentation&quot;</span></span><br
/> <span
style="color: #009900;"> &nbsp; &nbsp;<span
style="color: #000066;">destdir</span>=<span
style="color: #ff0000;">&quot;${workspace}/doc&quot;</span></span><br
/> <span
style="color: #009900;"> &nbsp; &nbsp;<span
style="color: #000066;">sourcecode</span>=<span
style="color: #ff0000;">&quot;yes&quot;</span></span><br
/> <span
style="color: #009900;"> &nbsp; &nbsp;<span
style="color: #000066;">defaultpackagename</span>=<span
style="color: #ff0000;">&quot;sfProjetsGagnants&quot;</span></span><br
/> <span
style="color: #009900;"> &nbsp; &nbsp;<span
style="color: #000066;">output</span>=<span
style="color: #ff0000;">&quot;HTML:Smarty:PHP&quot;</span><span
style="color: #000000; font-weight: bold;">&gt;</span></span><br
/> &nbsp; &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;fileset</span> <span
style="color: #000066;">dir</span>=<span
style="color: #ff0000;">&quot;./apps&quot;</span><span
style="color: #000000; font-weight: bold;">&gt;</span></span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;include</span> <span
style="color: #000066;">name</span>=<span
style="color: #ff0000;">&quot;**/*.class.php&quot;</span> <span
style="color: #000000; font-weight: bold;">/&gt;</span></span><br
/> &nbsp; &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;/fileset<span
style="color: #000000; font-weight: bold;">&gt;</span></span></span><br
/> &nbsp; &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;fileset</span> <span
style="color: #000066;">dir</span>=<span
style="color: #ff0000;">&quot;./lib/model&quot;</span><span
style="color: #000000; font-weight: bold;">&gt;</span></span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;include</span> <span
style="color: #000066;">name</span>=<span
style="color: #ff0000;">&quot;**/*.class.php&quot;</span> <span
style="color: #000000; font-weight: bold;">/&gt;</span></span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;exclude</span> <span
style="color: #000066;">name</span>=<span
style="color: #ff0000;">&quot;**/Base*&quot;</span> <span
style="color: #000000; font-weight: bold;">/&gt;</span></span><br
/> &nbsp; &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;/fileset<span
style="color: #000000; font-weight: bold;">&gt;</span></span></span><br
/> &nbsp; <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;/phpdoc<span
style="color: #000000; font-weight: bold;">&gt;</span></span></span><br
/> <span
style="color: #009900;"><span
style="color: #000000; font-weight: bold;">&lt;/target<span
style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></div><p
style="text-align: justify;"><p
style="text-align: justify;">On pourrait ajouter le <strong><a
href="http://wiki.hudson-ci.org/display/HUDSON/DocLinks+Plugin">DocLinks Plugin</a></strong> pour <strong>Hudson</strong> afin de lier la documentation générée à chaque <em>build</em>.</p><p
style="text-align: justify;"><h2>Invoquer Phing</h2><p
style="text-align: justify;">Pour invoquer <strong>Phing</strong> dans <strong>Hudson</strong>, on peut soit utiliser le plugin qui gère Phing soit utiliser une commande shell. Je préfère la commande shell pour pouvoir passer des paramètres à mon script.</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #7a0874; font-weight: bold;">cd</span> <span
style="color: #007800;">$WORKSPACE</span> <span
style="color: #000000; font-weight: bold;">&amp;&amp;</span> phing main <span
style="color: #660033;">-Dworkspace</span>=<span
style="color: #007800;">$WORKSPACE</span></div></div><h2>Couverture de code</h2><p
style="text-align: justify;">Là je vous laisse lire <a
href="http://www.pmsipilot.org/2010/06/16/code-coverage-des-tests-unitaires-dun-projet-symfony-et-integration-dans-hudson-ci/">cet article</a> qui explique comment obtenir des rapports de couverture de code <strong>symfony</strong> dans <strong>Hudson</strong>.</p><h2 style="text-align: justify;">Conclusion</h2><p
style="text-align: justify;">En plus d&#8217;automatiser un certain nombre de tâches, j&#8217;obtiens des retours sur mon projet : des retours client grâce à <strong>Mantis</strong> et des retours sur la qualité de mon travail. Aujourd&#8217;hui, des outils pour PHP sont là, il est clair que PHP s&#8217;industrialise et grâce à la qualité du framework <strong>symfony</strong>, il devient intéressant d&#8217;adopter les bonnes méthodes et d&#8217;utiliser ces outils. PHP, ce n&#8217;est plus &laquo;&nbsp;<em>Un mini-chat en PHP</em>&nbsp;&raquo; par le <a
href="http://www.siteduzero.com/tutoriel-3-14668-concevez-votre-site-web-avec-php-et-mysql.html">Site du Zéro</a>.</p><p
style="text-align: center;"><object
id="__sse2083732" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param
name="allowFullScreen" value="true" /><param
name="allowScriptAccess" value="always" /><param
name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=php-unetechnologieauservicedelagilit-090928134735-phpapp01&#038;stripped_title=php-une-technologie-au-service-de-lagilit" /><param
name="name" value="__sse2083732" /><param
name="allowfullscreen" value="true" /><embed
id="__sse2083732" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=php-unetechnologieauservicedelagilit-090928134735-phpapp01&#038;stripped_title=php-une-technologie-au-service-de-lagilit" name="__sse2083732" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p
style="text-align: right;"><p
style="text-align: right;"><p
style="text-align: right;"><em>Il n&#8217;est jamais trop tard pour commencer à bien travailler.</em></p><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li><a
href='http://www.willdurand.fr/faut-il-tester-les-tests/' title='Faut-il tester&#8230; les tests ?'>Faut-il tester&#8230; les tests ?</a></li><li><a
href='http://www.willdurand.fr/creation-automatique-dun-projet-symfony-mysql-git-et-apache2/' title='Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2'>Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2</a></li><li><a
href='http://www.willdurand.fr/deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem/' title='Déploiement automatisé avec Capistrano et Git pour symfony et Diem'>Déploiement automatisé avec Capistrano et Git pour symfony et Diem</a></li><li><a
href='http://www.willdurand.fr/lerreur-suexec-policy-violation-avec-symfony-chez-ovh/' title='L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)'>L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)</a></li><li><a
href='http://www.willdurand.fr/integrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin/' title='Intégrer un gestionnaire de fichiers dans dmCkEditorPlugin'>Intégrer un gestionnaire de fichiers dans dmCkEditorPlugin</a></li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;title=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres&amp;bodytext=Bonjour%2C%C2%A0depuis%20un%20certain%20temps%20d%C3%A9j%C3%A0%2C%20je%20me%20pose%20deux%20questions%20%3A%20%22comment%20am%C3%A9liorer%20mon%20travail%20%3F%22%20et...%20%22Comment%20am%C3%A9liorer%20mon%20travail%20%3F%22.%20La%20premi%C3%A8re%20question%20traite%20essentiellement%20de%20ce%20que%20je%20produis%2C%20du%20code%20%C3%A9crit%2C%20des%20fonctionnalit%C3%A9s'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;title=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;title=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres&amp;notes=Bonjour%2C%C2%A0depuis%20un%20certain%20temps%20d%C3%A9j%C3%A0%2C%20je%20me%20pose%20deux%20questions%20%3A%20%22comment%20am%C3%A9liorer%20mon%20travail%20%3F%22%20et...%20%22Comment%20am%C3%A9liorer%20mon%20travail%20%3F%22.%20La%20premi%C3%A8re%20question%20traite%20essentiellement%20de%20ce%20que%20je%20produis%2C%20du%20code%20%C3%A9crit%2C%20des%20fonctionnalit%C3%A9s'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;t=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres%20-%20http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;title=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres&amp;annotation=Bonjour%2C%C2%A0depuis%20un%20certain%20temps%20d%C3%A9j%C3%A0%2C%20je%20me%20pose%20deux%20questions%20%3A%20%22comment%20am%C3%A9liorer%20mon%20travail%20%3F%22%20et...%20%22Comment%20am%C3%A9liorer%20mon%20travail%20%3F%22.%20La%20premi%C3%A8re%20question%20traite%20essentiellement%20de%20ce%20que%20je%20produis%2C%20du%20code%20%C3%A9crit%2C%20des%20fonctionnalit%C3%A9s'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;title=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=Bonjour%2C%C2%A0depuis%20un%20certain%20temps%20d%C3%A9j%C3%A0%2C%20je%20me%20pose%20deux%20questions%20%3A%20%22comment%20am%C3%A9liorer%20mon%20travail%20%3F%22%20et...%20%22Comment%20am%C3%A9liorer%20mon%20travail%20%3F%22.%20La%20premi%C3%A8re%20question%20traite%20essentiellement%20de%20ce%20que%20je%20produis%2C%20du%20code%20%C3%A9crit%2C%20des%20fonctionnalit%C3%A9s'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;t=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;title=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres&amp;body=Bonjour%2C%C2%A0depuis%20un%20certain%20temps%20d%C3%A9j%C3%A0%2C%20je%20me%20pose%20deux%20questions%20%3A%20%22comment%20am%C3%A9liorer%20mon%20travail%20%3F%22%20et...%20%22Comment%20am%C3%A9liorer%20mon%20travail%20%3F%22.%20La%20premi%C3%A8re%20question%20traite%20essentiellement%20de%20ce%20que%20je%20produis%2C%20du%20code%20%C3%A9crit%2C%20des%20fonctionnalit%C3%A9s'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&title=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Fsymfony-rencontre-hudson-mantis-et-les-autres%2F&amp;submitHeadline=symfony%20rencontre%20Hudson%2C%20Mantis%20et%20les%20autres&amp;submitSummary=Bonjour%2C%C2%A0depuis%20un%20certain%20temps%20d%C3%A9j%C3%A0%2C%20je%20me%20pose%20deux%20questions%20%3A%20%22comment%20am%C3%A9liorer%20mon%20travail%20%3F%22%20et...%20%22Comment%20am%C3%A9liorer%20mon%20travail%20%3F%22.%20La%20premi%C3%A8re%20question%20traite%20essentiellement%20de%20ce%20que%20je%20produis%2C%20du%20code%20%C3%A9crit%2C%20des%20fonctionnalit%C3%A9s&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/-vC70PNVDMo" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/feed/</wfw:commentRss> <slash:comments>2</slash:comments> <feedburner:origLink>http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=symfony-rencontre-hudson-mantis-et-les-autres</feedburner:origLink></item> <item><title>Réplication MySQL maître-esclave</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/KrEOq1JwtH0/</link> <comments>http://www.willdurand.fr/replication-mysql-maitre-esclave/#comments</comments> <pubDate>Fri, 20 Aug 2010 14:10:36 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Boulot]]></category> <category><![CDATA[Serveur]]></category> <category><![CDATA[Sysadmin]]></category> <category><![CDATA[base de données]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[Réplication]]></category><guid isPermaLink="false">http://www.willdurand.fr/?p=592</guid> <description><![CDATA[Bonjour, je laisse ici une petite note d&#8217;un système de secours que j&#8217;ai mis en place récemment : la réplication de bases de données MySQL. Il y a beaucoup d&#8217;autres articles sur le sujet donc je ne m&#8217;y étendrai pas, seul petite différence, j&#8217;ai fait la réplication d&#8217;une base de prod vers un autre serveur [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Bonjour, je laisse ici une petite note d&#8217;un système de secours que j&#8217;ai mis en place récemment :<strong> la réplication de bases de données MySQL</strong>. Il y a beaucoup d&#8217;autres articles sur le sujet donc je ne m&#8217;y étendrai pas, seul petite différence, j&#8217;ai fait la réplication d&#8217;une base de prod vers un autre serveur de prod utilisé pour tout à fait autre chose (<em>ie.</em> contenant d&#8217;autres bases). C&#8217;est l&#8217;essentiel de mon article d&#8217;aujourd&#8217;hui. Je remercie <a
href="http://twitter.com/n_vogel">Nicolas Vogel</a> de m&#8217;avoir mis sur le bon chemin <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><p
style="text-align: justify;"><p
style="text-align: justify;">La réplication en place me permet de sauvegarder les données contenues de <span
style="text-decoration: underline;">manière instantanée</span>. Si un crash est détecté au niveau du serveur de prod, d&#8217;une part il y a fort à parier que, peu voire aucune donnée n&#8217;aura été perdue (l&#8217;application est déployée sur un serveur unique), et d&#8217;autre part, je pourrais lancer un <span
style="text-decoration: underline;">système de secours</span> sur le serveur &laquo;&nbsp;<em>esclave</em>&laquo;&nbsp;.</p><p
style="text-align: justify;">Voilà ce qu&#8217;il y avait à lire : <a
href="http://dev.mysql.com/doc/refman/5.0/fr/replication-howto.html">http://dev.mysql.com/doc/refman/5.0/fr/replication-howto.html</a></p><p
style="text-align: justify;">Et pour résumer :</p><p
style="text-align: justify;">On commence par la partie <em>Maître</em>, c&#8217;est-à-dire le serveur de prod numéro 1. On modifie le fichier de configuration <em>/etc/mysql/my.cnf</em> de la manière suivante (on veillera à relancer le service <strong>mysql</strong>) :</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #7a0874; font-weight: bold;">&#91;</span>mysqld<span
style="color: #7a0874; font-weight: bold;">&#93;</span><br
/> bind-address&nbsp; = IP serveur maître<br
/> server-id &nbsp; &nbsp; = <span
style="color: #000000;">1</span><br
/> log_bin &nbsp; &nbsp; &nbsp; = <span
style="color: #000000; font-weight: bold;">/</span>var<span
style="color: #000000; font-weight: bold;">/</span>log<span
style="color: #000000; font-weight: bold;">/</span>mysql<span
style="color: #000000; font-weight: bold;">/</span>mysql-bin.log<br
/> <span
style="color: #666666; font-style: italic;"># Dans mon cas, c'est la ligne suivante qui spécifie quelle base répliquer</span><br
/> binlog_do_db&nbsp; = databaseName</div></div><p
style="text-align: justify;">﻿﻿﻿</p><p
style="text-align: justify;">Une fois ceci fait on crée un utilisateur &laquo;&nbsp;<em>replicateur</em>&nbsp;&raquo; pour le deuxième serveur (l&#8217;esclave) :</p><div
class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #993333; font-weight: bold;">GRANT</span> REPLICATION SLAVE <span
style="color: #993333; font-weight: bold;">ON</span> <span
style="color: #66cc66;">*.*</span> <span
style="color: #993333; font-weight: bold;">TO</span> replicateur@<span
style="color: #ff0000;">'%'</span> <span
style="color: #993333; font-weight: bold;">IDENTIFIED</span> <span
style="color: #993333; font-weight: bold;">BY</span> <span
style="color: #ff0000;">'replicateur'</span>;</div></div><p
style="text-align: justify;"><p
style="text-align: justify;">On va devoir s&#8217;assurer qu&#8217;aucune nouvelle donnée ne soit enregistrée pendant un petit laps de temps. Cette partie est critique puisque il s&#8217;agit de <strong>bloquer l&#8217;écriture</strong> sur la base que l&#8217;on souhaite répliquer.</p><div
class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #993333; font-weight: bold;">FLUSH</span> <span
style="color: #993333; font-weight: bold;">TABLES</span> <span
style="color: #993333; font-weight: bold;">WITH</span> <span
style="color: #993333; font-weight: bold;">READ</span> <span
style="color: #993333; font-weight: bold;">LOCK</span>;</div></div><p
style="text-align: justify;"><p
style="text-align: justify;">Il nous faut deux informations que l&#8217;on retrouve avec la commande ci-après : la <strong>position</strong> et le <strong>nom du fichier binaire</strong>.</p><div
class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #993333; font-weight: bold;">SHOW</span> MASTER <span
style="color: #993333; font-weight: bold;">STATUS</span>;</div></div><p
style="text-align: justify;"><p
style="text-align: justify;">Pour finir, on fait un <strong>dump</strong> de la base (<strong>mysqldump</strong>) et on l&#8217;envoie sur le serveur <em>esclave</em> (<strong>scp</strong>). C&#8217;est tout pour le serveur <em>maître</em>, on y reviendra à la fin pour le <span
style="text-decoration: underline;">déverrouiller</span> en écriture.</p><p
style="text-align: justify;">Au niveau du second serveur, les manip&#8217; sont semblables. On commence par modifier le fichier de conf <em>/etc/mysql/my.cnf</em> puis on redémarre le service <strong>mysql</strong>.</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #7a0874; font-weight: bold;">&#91;</span>mysqld<span
style="color: #7a0874; font-weight: bold;">&#93;</span><br
/> server-id &nbsp; &nbsp; &nbsp; = <span
style="color: #000000;">2</span><br
/> master-host﻿&nbsp; &nbsp; = IP serveur maître<br
/> master-user &nbsp; &nbsp; = replicateur<br
/> master-password = replicateur<br
/> master-port &nbsp; &nbsp; = <span
style="color: #000000;">3306</span><br
/> <span
style="color: #666666; font-style: italic;"># Je rappelle ici la base à répliquer</span><br
/> replicate-do-db = databaseName</div></div><p
style="text-align: justify;"><p
style="text-align: justify;">On va ensuite se servir des deux infos relevées plus haut en exécutant la commande :</p><div
class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #993333; font-weight: bold;">CHANGE</span> MASTER <span
style="color: #993333; font-weight: bold;">TO</span><br
/> MASTER_LOG_FILE<span
style="color: #66cc66;">=</span><span
style="color: #ff0000;">'FILENAME'</span><span
style="color: #66cc66;">,</span><br
/> MASTER_LOG_POS<span
style="color: #66cc66;">=</span>POSITION;</div></div><p
style="text-align: justify;">Puis on démarre le process <em>maître/esclave</em> depuis l&#8217;esclave :</p><div
class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">START SLAVE;</div></div><p
style="text-align: justify;">Soit ça marche, soit ça ne marche pas&#8230; Par exemple, pour 1 warning détecté, on devra reprendre les paramètres de conf dans une requête de la forme :</p><div
class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #993333; font-weight: bold;">CHANGE</span> MASTER <span
style="color: #993333; font-weight: bold;">TO</span><br
/> MASTER_HOST<span
style="color: #66cc66;">=</span>IP serveur maître<span
style="color: #66cc66;">,</span><br
/> MASTER_USER<span
style="color: #66cc66;">=</span>replicateur<span
style="color: #66cc66;">,</span><br
/> <span
style="color: #66cc66;">....</span>;</div></div><p
style="text-align: justify;">A partir de là, <span
style="text-decoration: underline;">la replication est prête</span>. Seulement il faut effectuer le <span
style="text-decoration: underline;">rattrapage</span> sur le serveur <em>esclave</em>. La réplication est démarrée mais notre deuxième serveur n&#8217;est qu&#8217;un <em>esclave</em> qui ne peut recréer la base et se mettre à niveau du <em>maître</em>. Vous comprenez ? Non, tant pis, je recommence. C&#8217;est le <em>maître</em> qui donne les ordres donc comme on vient de commencer notre process <em>maître/esclave</em>, le <em>maître</em> ne sait pas que la base de <em>l&#8217;esclave</em> est vide. Voilà pour la petite histoire et pourquoi un <strong>dump</strong> était utile. Il suffit maintenant d&#8217;insérer le dump transféré au début.</p><p
style="text-align: justify;"><p
style="text-align: justify;">On retourne sur le serveur <em>maître</em> et on enlève le verrou d&#8217;écriture :</p><div
class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #993333; font-weight: bold;">UNLOCK</span> <span
style="color: #993333; font-weight: bold;">TABLES</span>;</div></div><p
style="text-align: justify;"><p
style="text-align: justify;">La réplication est en place. On peut tester l&#8217;ajout d&#8217;une ligne dans une table pour voir si la réplication fonctionne parfaitement. Dorénavant, tout changement de la base maître (structures, données) sera répercuté sur la base esclave.</p><p
style="text-align: justify;">A noter qu&#8217;un peu de sécurité ne fait pas de mal. On veillera à créer une liaison très restreinte entre les deux serveurs sur le port <em>3306</em>, port par défaut de <strong>MySQL</strong>.</p><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li><a
href='http://www.willdurand.fr/dedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql/' title='Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL'>Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL</a></li><li><a
href='http://www.willdurand.fr/connaissiez-vous-replace-en-sql/' title='Connaissiez-vous … REPLACE en SQL ?'>Connaissiez-vous … REPLACE en SQL ?</a></li><li><a
href='http://www.willdurand.fr/optimiser-son-application-web-en-jouant-sur-php-mysql-et-apache2/' title='Optimiser son application web en jouant sur PHP, MySQL et Apache2'>Optimiser son application web en jouant sur PHP, MySQL et Apache2</a></li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;title=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave&amp;bodytext=Bonjour%2C%20je%20laisse%20ici%20une%20petite%20note%20d%27un%20syst%C3%A8me%20de%20secours%20que%20j%27ai%20mis%20en%20place%20r%C3%A9cemment%20%3A%20la%20r%C3%A9plication%20de%20bases%20de%20donn%C3%A9es%20MySQL.%20Il%20y%20a%20beaucoup%20d%27autres%20articles%20sur%20le%20sujet%20donc%20je%20ne%20m%27y%20%C3%A9tendrai%20pas%2C%20seul%20petite%20diff%C3%A9rence%2C%20j%27ai%20'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;title=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;title=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave&amp;notes=Bonjour%2C%20je%20laisse%20ici%20une%20petite%20note%20d%27un%20syst%C3%A8me%20de%20secours%20que%20j%27ai%20mis%20en%20place%20r%C3%A9cemment%20%3A%20la%20r%C3%A9plication%20de%20bases%20de%20donn%C3%A9es%20MySQL.%20Il%20y%20a%20beaucoup%20d%27autres%20articles%20sur%20le%20sujet%20donc%20je%20ne%20m%27y%20%C3%A9tendrai%20pas%2C%20seul%20petite%20diff%C3%A9rence%2C%20j%27ai%20'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;t=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave%20-%20http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;title=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave&amp;annotation=Bonjour%2C%20je%20laisse%20ici%20une%20petite%20note%20d%27un%20syst%C3%A8me%20de%20secours%20que%20j%27ai%20mis%20en%20place%20r%C3%A9cemment%20%3A%20la%20r%C3%A9plication%20de%20bases%20de%20donn%C3%A9es%20MySQL.%20Il%20y%20a%20beaucoup%20d%27autres%20articles%20sur%20le%20sujet%20donc%20je%20ne%20m%27y%20%C3%A9tendrai%20pas%2C%20seul%20petite%20diff%C3%A9rence%2C%20j%27ai%20'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;title=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=Bonjour%2C%20je%20laisse%20ici%20une%20petite%20note%20d%27un%20syst%C3%A8me%20de%20secours%20que%20j%27ai%20mis%20en%20place%20r%C3%A9cemment%20%3A%20la%20r%C3%A9plication%20de%20bases%20de%20donn%C3%A9es%20MySQL.%20Il%20y%20a%20beaucoup%20d%27autres%20articles%20sur%20le%20sujet%20donc%20je%20ne%20m%27y%20%C3%A9tendrai%20pas%2C%20seul%20petite%20diff%C3%A9rence%2C%20j%27ai%20'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;t=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;title=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave&amp;body=Bonjour%2C%20je%20laisse%20ici%20une%20petite%20note%20d%27un%20syst%C3%A8me%20de%20secours%20que%20j%27ai%20mis%20en%20place%20r%C3%A9cemment%20%3A%20la%20r%C3%A9plication%20de%20bases%20de%20donn%C3%A9es%20MySQL.%20Il%20y%20a%20beaucoup%20d%27autres%20articles%20sur%20le%20sujet%20donc%20je%20ne%20m%27y%20%C3%A9tendrai%20pas%2C%20seul%20petite%20diff%C3%A9rence%2C%20j%27ai%20'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&title=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Freplication-mysql-maitre-esclave%2F&amp;submitHeadline=R%C3%A9plication%20MySQL%20ma%C3%AEtre-esclave&amp;submitSummary=Bonjour%2C%20je%20laisse%20ici%20une%20petite%20note%20d%27un%20syst%C3%A8me%20de%20secours%20que%20j%27ai%20mis%20en%20place%20r%C3%A9cemment%20%3A%20la%20r%C3%A9plication%20de%20bases%20de%20donn%C3%A9es%20MySQL.%20Il%20y%20a%20beaucoup%20d%27autres%20articles%20sur%20le%20sujet%20donc%20je%20ne%20m%27y%20%C3%A9tendrai%20pas%2C%20seul%20petite%20diff%C3%A9rence%2C%20j%27ai%20&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/KrEOq1JwtH0" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/replication-mysql-maitre-esclave/feed/</wfw:commentRss> <slash:comments>3</slash:comments> <feedburner:origLink>http://www.willdurand.fr/replication-mysql-maitre-esclave/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=replication-mysql-maitre-esclave</feedburner:origLink></item> <item><title>Création automatique d’un projet symfony + MySQL + Git et Apache2</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/db_n2wdI8iY/</link> <comments>http://www.willdurand.fr/creation-automatique-dun-projet-symfony-mysql-git-et-apache2/#comments</comments> <pubDate>Sun, 15 Aug 2010 19:23:02 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Serveur]]></category> <category><![CDATA[Tips]]></category> <category><![CDATA[symfony]]></category> <category><![CDATA[Apache2]]></category> <category><![CDATA[Script shell]]></category> <category><![CDATA[Symfony]]></category> <category><![CDATA[vhost]]></category><guid isPermaLink="false">http://www.willdurand.fr/?p=573</guid> <description><![CDATA[On ne crée pas de projets symfony tous les jours c&#8217;est vrai, mais le processus est souvent le même. En plus de cela, je trouve les manip&#8217; un peu pénible quand il faut toucher à la configuration Apache2. Inspiré de cet article http://www.nacho-martin.com/automating-the-creation-of-new-symfony-1-4-projects-doctrine-git, j&#8217;ai écrit ma propre commande incluant la configuration d&#8217;un vhost Apache2. Je [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">On ne crée pas de projets <strong>symfony</strong> tous les jours c&#8217;est vrai, mais le processus est souvent le même. En plus de cela, je trouve les manip&#8217; un peu pénible quand il faut toucher à la configuration Apache2. Inspiré de cet article <a
href="http://www.nacho-martin.com/automating-the-creation-of-new-symfony-1-4-projects-doctrine-git">http://www.nacho-martin.com/automating-the-creation-of-new-symfony-1-4-projects-doctrine-git</a>, j&#8217;ai écrit ma propre commande incluant la configuration d&#8217;un vhost Apache2. Je la partage ici.</p><p
style="text-align: justify;">Voici donc le script <em>mkSfProject</em> :</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #666666; font-style: italic;">#!/bin/bash</span><br
/> <br
/> <span
style="color: #007800;">SYMFREPO</span>=<span
style="color: #ff0000;">&quot;http://github.com/vjousse/symfony-1.4.git&quot;</span><br
/> <span
style="color: #007800;">DBUSER</span>=<span
style="color: #ff0000;">&quot;us3r&quot;</span><br
/> <span
style="color: #007800;">DBPASS</span>=<span
style="color: #ff0000;">&quot;p4ssw0rd&quot;</span><br
/> <span
style="color: #007800;">VENDOR_DIR</span>=<span
style="color: #ff0000;">&quot;lib/vendor/symfony&quot;</span><br
/> <span
style="color: #007800;">AUTHOR</span>=<span
style="color: #ff0000;">&quot;William DURAND &lt;william .durand1@gmail.com&gt;&quot;</span><br
/> <span
style="color: #007800;">PHP</span>=<span
style="color: #ff0000;">&quot;/usr/bin/php&quot;</span><br
/> <br
/> <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-z</span> <span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$DBPASS</span>&quot;</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span>; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp;<span
style="color: #7a0874; font-weight: bold;">echo</span> edit <span
style="color: #007800;">$0</span> to add your mysql password on line <span
style="color: #000000;">4</span>: <span
style="color: #007800;">DBPASS</span>=<span
style="color: #000000; font-weight: bold;">\&quot;</span>password<span
style="color: #000000; font-weight: bold;">\&quot;</span><br
/> &nbsp;<span
style="color: #7a0874; font-weight: bold;">exit</span><br
/> <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <br
/> <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-z</span> <span
style="color: #ff0000;">&quot;$1&quot;</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span>; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp;<span
style="color: #7a0874; font-weight: bold;">echo</span> usage: <span
style="color: #007800;">$0</span> project_name<br
/> &nbsp;<span
style="color: #7a0874; font-weight: bold;">exit</span><br
/> <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Create the project directory</span><br
/> <span
style="color: #c20cb9; font-weight: bold;">mkdir</span> <span
style="color: #007800;">$1</span><br
/> <span
style="color: #7a0874; font-weight: bold;">cd</span> <span
style="color: #007800;">$1</span><br
/> <br
/> <span
style="color: #c20cb9; font-weight: bold;">git</span> init<br
/> <span
style="color: #c20cb9; font-weight: bold;">git</span> clone <span
style="color: #007800;">$SYMFREPO</span> <span
style="color: #007800;">$VENDOR_DIR</span><br
/> <span
style="color: #c20cb9; font-weight: bold;">git</span> submodule add <span
style="color: #007800;">$SYMFREPO</span> <span
style="color: #007800;">$VENDOR_DIR</span><span
style="color: #000000; font-weight: bold;">/</span><br
/> <br
/> <span
style="color: #c20cb9; font-weight: bold;">git</span> submodule foreach <span
style="color: #ff0000;">'git submodule init &amp;&amp; git submodule update'</span><br
/> <br
/> <span
style="color: #c20cb9; font-weight: bold;">git</span> commit <span
style="color: #660033;">-m</span> <span
style="color: #ff0000;">'Initial commit; initialized symfony-git (1.4)'</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Generate the project</span><br
/> <span
style="color: #007800;">$PHP</span> <span
style="color: #007800;">$VENDOR_DIR</span><span
style="color: #000000; font-weight: bold;">/</span>data<span
style="color: #000000; font-weight: bold;">/</span>bin<span
style="color: #000000; font-weight: bold;">/</span>symfony generate:project <span
style="color: #007800;">$1</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Configure the author</span><br
/> <span
style="color: #007800;">$PHP</span> symfony configure:author <span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$AUTHOR</span>&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Create the .gitignore file</span><br
/> <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;config/databases.yml&quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;</span> .gitignore<br
/> <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;cache/*&quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> .gitignore<br
/> <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;log/*&quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> .gitignore<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Fix permissions</span><br
/> <span
style="color: #007800;">$PHP</span> symfony project:permissions<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Commit</span><br
/> <span
style="color: #c20cb9; font-weight: bold;">git</span> add .<br
/> <span
style="color: #c20cb9; font-weight: bold;">git</span> commit <span
style="color: #660033;">-m</span> <span
style="color: #ff0000;">'Initialized symfony project'</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Generate a default app and commit</span><br
/> <span
style="color: #007800;">$PHP</span> symfony generate:app frontend<br
/> <span
style="color: #c20cb9; font-weight: bold;">git</span> add .<br
/> <span
style="color: #c20cb9; font-weight: bold;">git</span> commit <span
style="color: #660033;">-m</span> <span
style="color: #ff0000;">'Initialized frontend application'</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Create the database and configure it in symfony</span><br
/> mysqladmin -u<span
style="color: #007800;">$DBUSER</span> -p<span
style="color: #007800;">$DBPASS</span> create <span
style="color: #007800;">$1</span><br
/> <span
style="color: #007800;">$PHP</span> symfony configure:database <span
style="color: #ff0000;">&quot;mysql:dbname=$1;hostname=localhost&quot;</span> <span
style="color: #007800;">$DBUSER</span> <span
style="color: #007800;">$DBPASS</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Create the local URL</span><br
/> <span
style="color: #007800;">URL_PROJECT</span>=<span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;$1.local&quot;</span> <span
style="color: #000000; font-weight: bold;">|</span> <span
style="color: #c20cb9; font-weight: bold;">tr</span> <span
style="color: #ff0000;">'[[:upper:]]'</span> <span
style="color: #ff0000;">'[[:lower:]]'</span><span
style="color: #000000; font-weight: bold;">`</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># vhost config</span><br
/> <span
style="color: #c20cb9; font-weight: bold;">sudo</span> <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;<br
/> &lt;virtualhost *:80&gt;<br
/> &nbsp; ServerName <span
style="color: #007800;">$URL_PROJECT</span><br
/> <br
/> &nbsp; DocumentRoot <span
style="color: #000099; font-weight: bold;">\&quot;</span><span
style="color: #780078;">`pwd`</span>/web<span
style="color: #000099; font-weight: bold;">\&quot;</span><br
/> &nbsp; DirectoryIndex index.php<br
/> <br
/> &nbsp; &lt;directory <span
style="color: #000099; font-weight: bold;">\&quot;</span><span
style="color: #780078;">`pwd`</span><span
style="color: #000099; font-weight: bold;">\&quot;</span>&gt;<br
/> &nbsp; &nbsp; AllowOverride All<br
/> &nbsp; &nbsp; Allow from all<br
/> &nbsp; &lt;/directory&gt;<br
/> <br
/> &nbsp; Alias /sf <span
style="color: #000099; font-weight: bold;">\&quot;</span><span
style="color: #780078;">`pwd`</span>/lib/vendor/symfony/data/web/sf<span
style="color: #000099; font-weight: bold;">\&quot;</span><br
/> &nbsp; &lt;directory <span
style="color: #000099; font-weight: bold;">\&quot;</span><span
style="color: #780078;">`pwd`</span>/lib/vendor/symfony/data/web/sf<span
style="color: #000099; font-weight: bold;">\&quot;</span>&gt;<br
/> &nbsp; &nbsp; AllowOverride All<br
/> &nbsp; &nbsp; Allow from All<br
/> &nbsp; &lt;/directory&gt;<br
/> &lt;/virtualhost&gt;<br
/> &quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;</span> <span
style="color: #ff0000;">&quot;/etc/apache2/sites-available/$1&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Add local url in /etc/hosts</span><br
/> <span
style="color: #c20cb9; font-weight: bold;">sudo</span> <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;127.0.0.1 &nbsp;<span
style="color: #007800;">$URL_PROJECT</span>&quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #000000; font-weight: bold;">/</span>etc<span
style="color: #000000; font-weight: bold;">/</span>hosts<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Enable the vhost</span><br
/> <span
style="color: #c20cb9; font-weight: bold;">sudo</span> a2ensite <span
style="color: #007800;">$1</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Reload Apache2</span><br
/> <span
style="color: #c20cb9; font-weight: bold;">sudo</span> <span
style="color: #000000; font-weight: bold;">/</span>etc<span
style="color: #000000; font-weight: bold;">/</span>init.d<span
style="color: #000000; font-weight: bold;">/</span>apache2 reload</div></div><p
style="text-align: justify"><p
style="text-align: justify">Je lance cette commande et en moins d&#8217;une minute, j&#8217;ai accès à un projet <strong>symfony</strong> fonctionnel dans mon navigateur. Voilà <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><p></william><br
/><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li><a
href='http://www.willdurand.fr/lerreur-suexec-policy-violation-avec-symfony-chez-ovh/' title='L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)'>L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)</a></li><li><a
href='http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/' title='symfony rencontre Hudson, Mantis et les autres'>symfony rencontre Hudson, Mantis et les autres</a></li><li><a
href='http://www.willdurand.fr/deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem/' title='Déploiement automatisé avec Capistrano et Git pour symfony et Diem'>Déploiement automatisé avec Capistrano et Git pour symfony et Diem</a></li><li><a
href='http://www.willdurand.fr/faut-il-tester-les-tests/' title='Faut-il tester&#8230; les tests ?'>Faut-il tester&#8230; les tests ?</a></li><li><a
href='http://www.willdurand.fr/dedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql/' title='Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL'>Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL</a></li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;title=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2&amp;bodytext=On%20ne%20cr%C3%A9e%20pas%20de%20projets%20symfony%20tous%20les%20jours%20c%27est%20vrai%2C%20mais%20le%20processus%20est%20souvent%20le%20m%C3%AAme.%20En%20plus%20de%20cela%2C%20je%20trouve%20les%20manip%27%20un%20peu%20p%C3%A9nible%20quand%20il%20faut%20toucher%20%C3%A0%20la%20configuration%20Apache2.%20Inspir%C3%A9%20de%20cet%20article%20http%3A%2F%2Fwww.nacho-ma'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;title=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;title=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2&amp;notes=On%20ne%20cr%C3%A9e%20pas%20de%20projets%20symfony%20tous%20les%20jours%20c%27est%20vrai%2C%20mais%20le%20processus%20est%20souvent%20le%20m%C3%AAme.%20En%20plus%20de%20cela%2C%20je%20trouve%20les%20manip%27%20un%20peu%20p%C3%A9nible%20quand%20il%20faut%20toucher%20%C3%A0%20la%20configuration%20Apache2.%20Inspir%C3%A9%20de%20cet%20article%20http%3A%2F%2Fwww.nacho-ma'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;t=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2%20-%20http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;title=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2&amp;annotation=On%20ne%20cr%C3%A9e%20pas%20de%20projets%20symfony%20tous%20les%20jours%20c%27est%20vrai%2C%20mais%20le%20processus%20est%20souvent%20le%20m%C3%AAme.%20En%20plus%20de%20cela%2C%20je%20trouve%20les%20manip%27%20un%20peu%20p%C3%A9nible%20quand%20il%20faut%20toucher%20%C3%A0%20la%20configuration%20Apache2.%20Inspir%C3%A9%20de%20cet%20article%20http%3A%2F%2Fwww.nacho-ma'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;title=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=On%20ne%20cr%C3%A9e%20pas%20de%20projets%20symfony%20tous%20les%20jours%20c%27est%20vrai%2C%20mais%20le%20processus%20est%20souvent%20le%20m%C3%AAme.%20En%20plus%20de%20cela%2C%20je%20trouve%20les%20manip%27%20un%20peu%20p%C3%A9nible%20quand%20il%20faut%20toucher%20%C3%A0%20la%20configuration%20Apache2.%20Inspir%C3%A9%20de%20cet%20article%20http%3A%2F%2Fwww.nacho-ma'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;t=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;title=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2&amp;body=On%20ne%20cr%C3%A9e%20pas%20de%20projets%20symfony%20tous%20les%20jours%20c%27est%20vrai%2C%20mais%20le%20processus%20est%20souvent%20le%20m%C3%AAme.%20En%20plus%20de%20cela%2C%20je%20trouve%20les%20manip%27%20un%20peu%20p%C3%A9nible%20quand%20il%20faut%20toucher%20%C3%A0%20la%20configuration%20Apache2.%20Inspir%C3%A9%20de%20cet%20article%20http%3A%2F%2Fwww.nacho-ma'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&title=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Fcreation-automatique-dun-projet-symfony-mysql-git-et-apache2%2F&amp;submitHeadline=Cr%C3%A9ation%20automatique%20d%27un%20projet%20symfony%20%2B%20MySQL%20%2B%20Git%20et%20Apache2&amp;submitSummary=On%20ne%20cr%C3%A9e%20pas%20de%20projets%20symfony%20tous%20les%20jours%20c%27est%20vrai%2C%20mais%20le%20processus%20est%20souvent%20le%20m%C3%AAme.%20En%20plus%20de%20cela%2C%20je%20trouve%20les%20manip%27%20un%20peu%20p%C3%A9nible%20quand%20il%20faut%20toucher%20%C3%A0%20la%20configuration%20Apache2.%20Inspir%C3%A9%20de%20cet%20article%20http%3A%2F%2Fwww.nacho-ma&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/db_n2wdI8iY" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/creation-automatique-dun-projet-symfony-mysql-git-et-apache2/feed/</wfw:commentRss> <slash:comments>7</slash:comments> <feedburner:origLink>http://www.willdurand.fr/creation-automatique-dun-projet-symfony-mysql-git-et-apache2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=creation-automatique-dun-projet-symfony-mysql-git-et-apache2</feedburner:origLink></item> <item><title>Déploiement automatisé avec Capistrano et Git pour symfony et Diem</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/Z4tnj0W4nHM/</link> <comments>http://www.willdurand.fr/deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem/#comments</comments> <pubDate>Wed, 11 Aug 2010 09:09:24 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Diem Project]]></category> <category><![CDATA[Sysadmin]]></category> <category><![CDATA[symfony]]></category> <category><![CDATA[Capistrano]]></category> <category><![CDATA[Déploiement]]></category> <category><![CDATA[Diem]]></category> <category><![CDATA[Git]]></category> <category><![CDATA[Murder]]></category> <category><![CDATA[Symfony]]></category><guid isPermaLink="false">http://www.willdurand.fr/?p=550</guid> <description><![CDATA[Hier, j&#8217;introduisais mes directives de travail. Aujourd&#8217;hui je vais introduire un sujet souvent sensible : la mise en production. C&#8217;est une tâche qui peut être critique mais si l&#8217;on prend toutes les précautions, nous limitons les risques. On notera bien que le facteur chance est laissé à la porte pour ce genre de manipulation&#8230; La [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;"><em>Hier, j&#8217;introduisais mes directives de travail. Aujourd&#8217;hui je vais introduire un sujet souvent sensible : la mise en production. C&#8217;est une tâche qui peut être critique mais si l&#8217;on prend toutes les précautions, nous limitons les risques. On notera bien que le facteur chance est laissé à la porte pour ce genre de manipulation&#8230;</em></p><p
style="text-align: justify;"><p
style="text-align: justify;"><p
style="text-align: justify;">La <strong>mise en production</strong> c&#8217;est passer un projet sur le serveur du client pour le rendre accessible aux utilisateurs finaux. Facile ? Non, très souvent les architectures sont différentes et il convient d&#8217;utiliser plusieurs environnements. Pour ma part, je dispose de 3 environnements : <em>dev </em>(sur ma machine), <em>test </em>(sur serveur distant) et <em>préprod </em>(sur serveur distant également). Ces environnements me permettent de tester mes projets sur plusieurs OS, plusieurs types de machine et sur deux SGBDR (bases de données) : j&#8217;ai pris l&#8217;habitude d&#8217;effectuer mes tests sous <strong><a
href="http://www.sqlite.org/">SQLite</a></strong>, j&#8217;ai ainsi  deux sons de cloche (en plus de <strong><a
href="http://www.mysql.com/">MySQL</a></strong>) me permettant de corriger des étourderies lors de la configuration de la base.</p><p
style="text-align: justify;">Ok, tout ce speech pourquoi ? Pour pouvoir comprendre mon intérêt à <strong>automatiser le process de mise en prod&#8217;</strong>. En effet, mes trois environnements me garantissent une certaine <strong>stabilité </strong>de mon application, je n&#8217;ai donc pas à jongler avec les serveurs de chacun de mes clients (pas toujours&#8230;). Je peux donc déployer (mettre en prod&#8217;) mon application presque les yeux fermés. Et ça, ça n&#8217;a pas de prix !</p><p
style="text-align: justify;">Mais je ne joue pas le lanceur de couteaux sans avoir de lames bien aiguisées. J&#8217;utilise des outils éprouvés comme <a
href="http://www.capify.org/index.php/Capistrano"><strong>Capistrano</strong></a> et <a
href="http://git-scm.com/"><strong>Git</strong></a>.</p><p
style="text-align: justify;"><p
style="text-align: justify;"><strong>Capistrano </strong>est l&#8217;outil par excellence pour déployer des applis <strong>Rails</strong>. Le problème c&#8217;est que je ne m&#8217;y suis pas encore mis&#8230; Mais qu&#8217;importe, il déploiera mes applications <strong>symfony </strong>et <strong>Diem</strong>. La souplesse de configuration via <span
style="text-decoration: underline;">redéfinition</span> des méthodes permet de déployer à peu près ce que l&#8217;on souhaite. De plus, l&#8217;interconnexion avec <strong>Git </strong>se fait sans problème.</p><p
style="text-align: justify;">Maintenant, courte description :</p><ul><li>Capistrano va <span
style="text-decoration: underline;">cloner votre projet</span> (Git inside) ;</li><li>Capistrano peut compresser votre projet (tar) et l&#8217;envoyer à vos X serveurs  ;</li><li>ou Capistrano va demander à X serveurs de récupérer la dernière version de votre projet ;</li><li>Capistrano va lier (symboliquement) la dernière version en tant que version courante ;</li><li>Capistrano va <span
style="text-decoration: underline;">migrer les bases de données</span> (la migration ici, ce n&#8217;est pas l&#8217;histoire avec les oiseaux&#8230; C&#8217;est plutôt la mise à jour structurelle de vos bases) ;</li><li>Capistrano va <span
style="text-decoration: underline;">déployer votre appli très rapidement</span> sur autant de serveurs que vous le souhaiter ;</li><li>Capistrano <span
style="text-decoration: underline;">exécute des commandes</span> avant ou après le déploiement, pratique pour un<em> sf cc </em>;</li><li>Enfin, <span
style="text-decoration: underline;">Capistrano ne fait pas le café</span> (il ne faut pas abuser quand même&#8230;)</li></ul><p
style="text-align: justify;"><p
style="text-align: justify;">Intéressant non ? Une fois <strong>Capistrano </strong>installé (<a
href="http://www.capify.org/index.php/Getting_Started">explications ici</a>), on va pouvoir commencer à travailler.</p><p
style="text-align: justify;">Ce que je fais généralement, je crée un répertoire <em>project_name</em> et je tape la commande :</p><p
style="text-align: justify;"><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">capify .</div></div></p><p
style="text-align: justify;"><p
style="text-align: justify;">Ceci me crée un fichier <em>Capfile</em>, un répertoire <em>config/</em> avec un fichier <em>deploy.rb</em>. C&#8217;est ce dernier qui nous intéresse. Le mieux est de partir d&#8217;un fichier vide. Pour pouvoir utiliser <strong>Git</strong>, il faut écrire ceci :</p><div
class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">set <span
style="color:#ff3333; font-weight:bold;">:scm</span>, <span
style="color:#996600;">&quot;git&quot;</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:repository</span>, &nbsp;<span
style="color:#996600;">&quot;~/#{application}.git&quot;</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:branch</span>, <span
style="color:#996600;">&quot;master&quot;</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:checkout</span>, <span
style="color:#996600;">&quot;export&quot;</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:deploy_via</span>, <span
style="color:#ff3333; font-weight:bold;">:remote_cache</span></div></div><p
style="text-align: justify;">J&#8217;indique le chemin de mon dépôt, ici local et la branche (par défaut master). Les paramètres <em>:checkout </em>et <em>:deploy_via </em>ainsi défini permettent de faire un clone complet du projet. Ensuite, quelques paramètres nécessaires :</p><div
class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color:#008000; font-style:italic;"># Port</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:port</span>, <span
style="color:#006666;">9999</span><br
/> <span
style="color:#008000; font-style:italic;"># App ?</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:application</span>, <span
style="color:#996600;">&quot;project_name&quot;</span><br
/> <br
/> <span
style="color:#008000; font-style:italic;"># Where ?</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:deploy_to</span>, <span
style="color:#996600;">&quot;/var/www/#{application}&quot;</span><br
/> <br
/> <span
style="color:#008000; font-style:italic;"># Which server ?</span><br
/> role <span
style="color:#ff3333; font-weight:bold;">:app</span>, <span
style="color:#996600;">&quot;localhost&quot;</span><br
/> role <span
style="color:#ff3333; font-weight:bold;">:web</span>, <span
style="color:#996600;">&quot;localhost&quot;</span><br
/> role <span
style="color:#ff3333; font-weight:bold;">:db</span>, <span
style="color:#996600;">&quot;localhost&quot;</span>, <span
style="color:#ff3333; font-weight:bold;">:primary</span> <span
style="color:#006600; font-weight:bold;">=&gt;</span> <span
style="color:#0000FF; font-weight:bold;">true</span><br
/> <br
/> <span
style="color:#008000; font-style:italic;"># Who ?</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:user</span>, <span
style="color:#996600;">&quot;myUs3r&quot;</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:password</span>, <span
style="color:#996600;">&quot;p4ssw0rd&quot;</span><br
/> <br
/> <span
style="color:#008000; font-style:italic;"># More config</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:keep_releases</span>, <span
style="color:#006666;">3</span><br
/> ssh_options<span
style="color:#006600; font-weight:bold;">&#91;</span><span
style="color:#ff3333; font-weight:bold;">:forward_agent</span><span
style="color:#006600; font-weight:bold;">&#93;</span> = <span
style="color:#0000FF; font-weight:bold;">true</span><br
/> <br
/> <span
style="color:#008000; font-style:italic;"># Path to php executable</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:php</span>, <span
style="color:#996600;">&quot;/usr/bin/php&quot;</span><br
/> <br
/> <span
style="color:#008000; font-style:italic;"># Symfony application name (used for migrations)</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:sf_app</span>, <span
style="color:#996600;">&quot;front&quot;</span><br
/> <span
style="color:#008000; font-style:italic;"># Symfony web directory (www, web, public_html, ...)</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:sf_webdir</span>, <span
style="color:#996600;">&quot;www&quot;</span></div></div><p
style="text-align: justify;"><p
style="text-align: justify;">Maintenant, une petite chose à savoir. <strong><span
style="text-decoration: underline;">Capistrano </span></strong><span
style="text-decoration: underline;">versionne les déploiements</span> et ça, c&#8217;est bon ! Mon déploiement plante, <span
style="text-decoration: underline;">rollback </span><span
style="text-decoration: underline;">automatique</span> vers la version précédente. Je m&#8217;aperçois que j&#8217;ai fait une grosse faute d&#8217;orthographe, je lance un rollback et l&#8217;appli passe en version précédente. Pour cela, <strong>Capistrano </strong>construit sa propre structure dans le répertoire défini par <em>:deploy_to</em> :</p><p
style="text-align: justify;"><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #000000; font-weight: bold;">/</span>var<span
style="color: #000000; font-weight: bold;">/</span>www<span
style="color: #000000; font-weight: bold;">/</span>project_name<br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">`</span>_ current <span
style="color: #7a0874; font-weight: bold;">&#40;</span>symlink<span
style="color: #7a0874; font-weight: bold;">&#41;</span><br
/> &nbsp; &nbsp;<span
style="color: #000000; font-weight: bold;">|</span>_ releases<br
/> &nbsp; &nbsp;<span
style="color: #000000; font-weight: bold;">|</span>_ shared</div></div></p><p
style="text-align: justify;"><em>current </em>est le lien symbolique qui pointe toujours vers la version active de l&#8217;application. Le répertoire <em>releases/ </em>possède X répertoires correspondant aux différents déploiements passés. Vous l&#8217;aurez compris, le lien symbolique <em>current </em>pointe vers l&#8217;un de ces répertoires. Le répertoire <em>shared/</em> quant à lui contient des fichiers partagés par toutes les releases. Exemple : le fichier <em>databases.yml</em> de <strong>symfony </strong>qui définit les identifiants de connexion à la base de données ou encore le répertoire <em>uploads/</em> qui contient des données utilisateurs.</p><p
style="text-align: justify;"><p
style="text-align: justify;">On peut désormais <span
style="text-decoration: underline;">personnaliser les actions de déploiement</span>. Pour cela, on va redéfinir les actions de <em>:deploy</em>, qui contient les tâches de déploiement appelées lors de tout déploiement.</p><div
class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">namespace <span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#ff3333; font-weight:bold;">:deploy</span><span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;</span> <span
style="color:#006600; font-weight:bold;">&lt;-</span>DESC<br
/> &nbsp; &nbsp; <span
style="color:#006600; font-weight:bold;">&#91;</span>internal<span
style="color:#006600; font-weight:bold;">&#93;</span> Overriding original task to fit to symfony project needs<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:finalize_update</span>, <span
style="color:#ff3333; font-weight:bold;">:except</span> <span
style="color:#006600; font-weight:bold;">=&gt;</span> <span
style="color:#006600; font-weight:bold;">&#123;</span> <span
style="color:#ff3333; font-weight:bold;">:no_release</span> <span
style="color:#006600; font-weight:bold;">=&gt;</span> <span
style="color:#0000FF; font-weight:bold;">true</span> <span
style="color:#006600; font-weight:bold;">&#125;</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; <span
style="color:#008000; font-style:italic;"># Fix permissions</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;cd #{latest_release} &amp;&amp; find * -type f -exec chmod 644 {} <span
style="color:#000099;">\\</span>;&quot;</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;cd #{latest_release} &amp;&amp; find * -type d -exec chmod 705 {} <span
style="color:#000099;">\\</span>;&quot;</span><br
/> &nbsp; <br
/> &nbsp; &nbsp; run <span
style="color:#006600; font-weight:bold;">&lt;</span> <span
style="color:#006600; font-weight:bold;">&lt;-</span>CMD<br
/> &nbsp; &nbsp; &nbsp; rm <span
style="color:#006600; font-weight:bold;">-</span>rf <span
style="color:#008000; font-style:italic;">#{latest_release}/log &amp;&amp;</span><br
/> &nbsp; &nbsp; &nbsp; ln <span
style="color:#006600; font-weight:bold;">-</span>s <span
style="color:#008000; font-style:italic;">#{shared_path}/log #{latest_release}/log</span><br
/> &nbsp; &nbsp; CMD<br
/> <br
/> &nbsp; &nbsp; run <span
style="color:#006600; font-weight:bold;">&lt;&lt;-</span>CMD<br
/> &nbsp; &nbsp; &nbsp; rm <span
style="color:#006600; font-weight:bold;">-</span>rf <span
style="color:#008000; font-style:italic;">#{latest_release}/cache &amp;&amp;</span><br
/> &nbsp; &nbsp; &nbsp; ln <span
style="color:#006600; font-weight:bold;">-</span>s <span
style="color:#008000; font-style:italic;">#{shared_path}/cache #{latest_release}/cache</span><br
/> &nbsp; &nbsp; CMD<br
/> <br
/> &nbsp; &nbsp; stamp = <span
style="color:#CC00FF; font-weight:bold;">Time</span>.<span
style="color:#9900CC;">now</span>.<span
style="color:#9900CC;">utc</span>.<span
style="color:#9900CC;">strftime</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#996600;">&quot;%Y%m%d%H%M.%S&quot;</span><span
style="color:#006600; font-weight:bold;">&#41;</span><br
/> &nbsp; &nbsp; asset_paths = <span
style="color:#006600; font-weight:bold;">%</span>w<span
style="color:#006600; font-weight:bold;">&#40;</span>images css js<span
style="color:#006600; font-weight:bold;">&#41;</span>.<span
style="color:#9900CC;">map</span> <span
style="color:#006600; font-weight:bold;">&#123;</span> <span
style="color:#006600; font-weight:bold;">|</span>p<span
style="color:#006600; font-weight:bold;">|</span> <span
style="color:#996600;">&quot;#{latest_release}/#{sf_webdir}/#{p}&quot;</span> <span
style="color:#006600; font-weight:bold;">&#125;</span>.<span
style="color:#9900CC;">join</span><span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#996600;">&quot; &quot;</span><span
style="color:#006600; font-weight:bold;">&#41;</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;find #{asset_paths} -exec touch -t #{stamp} {} ';'; true&quot;</span>, <span
style="color:#ff3333; font-weight:bold;">:env</span> <span
style="color:#006600; font-weight:bold;">=&gt;</span> <span
style="color:#006600; font-weight:bold;">&#123;</span> <span
style="color:#996600;">&quot;TZ&quot;</span> <span
style="color:#006600; font-weight:bold;">=&gt;</span> <span
style="color:#996600;">&quot;UTC&quot;</span> <span
style="color:#006600; font-weight:bold;">&#125;</span><br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span><br
/> &nbsp; <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;</span> <span
style="color:#006600; font-weight:bold;">&lt;-</span>DESC<br
/> &nbsp; &nbsp; Overriding original task to exclude restart<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:default</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; update<br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span><br
/> &nbsp; <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;&lt;-</span>DESC<br
/> &nbsp; &nbsp; Overriding original task to use symfony migrations<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:migrations</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; update<br
/> &nbsp; &nbsp; <span
style="color:#008000; font-style:italic;">#sf.migrate</span><br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span> &nbsp;<br
/> &nbsp; <br
/> &nbsp; after <span
style="color:#996600;">&quot;deploy:update&quot;</span>, <span
style="color:#996600;">'deploy:customize'</span><br
/> &nbsp; <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;&lt;-</span>DESC<br
/> &nbsp; &nbsp; Custom tasks<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:customize</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; sf.<span
style="color:#9900CC;">symlinks</span><br
/> &nbsp; &nbsp; sf.<span
style="color:#9900CC;">remove_dev_environments</span><br
/> &nbsp; &nbsp; <span
style="color:#008000; font-style:italic;"># clear cache</span><br
/> &nbsp; &nbsp; sf.<span
style="color:#9900CC;">cc</span><br
/> &nbsp; &nbsp; <span
style="color:#008000; font-style:italic;"># Diem</span><br
/> &nbsp; &nbsp; dm.<span
style="color:#9900CC;">cc</span><br
/> &nbsp; &nbsp; dm.<span
style="color:#9900CC;">setup</span><br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span><br
/> &nbsp;<br
/> <span
style="color:#9966CC; font-weight:bold;">end</span></div></div><p
style="text-align: justify;"><p
style="text-align: justify;">Après déploiement, on va créer fixer les droits, les répertoires de logs et de cache. Ensuite on met à jour la base de données (Doctrine migration). Pour finir on exécute une série de tâches &laquo;&nbsp;<em>custom</em>&nbsp;&raquo; qui permettent de supprimer les contrôleurs de développement (frontend_dev, backend_dev, &#8230;), de recréer les liens symboliques pour les fichiers partagés, de vider le cache <strong>symfony </strong>ou <strong>Diem</strong>, &#8230;</p><p
style="text-align: justify;">Voyons la suite de commandes pour <strong>symfony </strong>:</p><div
class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">namespace <span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#ff3333; font-weight:bold;">:sf</span><span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;</span> <span
style="color:#006600; font-weight:bold;">&lt;-</span>DESC<br
/> &nbsp; &nbsp; Run the <span
style="color:#996600;">&quot;doctrine migration&quot;</span> task<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:migrate</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;cd #{current_path} &amp;&amp; #{php} symfony doctrine:generate-migrations-diff &amp;&amp; #{php} symfony doctrine:migrate&quot;</span> &nbsp; &nbsp;<br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span><br
/> <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;&lt;-</span>DESC<br
/> &nbsp; &nbsp; Run the <span
style="color:#996600;">&quot;symfony cc&quot;</span> task<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:cc</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;cd #{current_path} &amp;&amp; #{php} symfony cc&quot;</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;cd #{current_path} &amp;&amp; rm -rf cache/*&quot;</span><br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span><br
/> <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;&lt;-</span>DESC<br
/> &nbsp; &nbsp; Create symlink to symfony specific targets<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:symlinks</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; <span
style="color:#008000; font-style:italic;"># symlink to database.yml</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;rm -rf #{current_path}/config/databases.yml&quot;</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;ln -s #{shared_path}/databases.yml #{current_path}/config/databases.yml&quot;</span><br
/> &nbsp; &nbsp;<br
/> &nbsp; &nbsp; <span
style="color:#008000; font-style:italic;"># symlink to uploads</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;rm -rf #{current_path}/#{sf_webdir}/uploads&quot;</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;ln -s #{shared_path}/uploads #{current_path}/#{sf_webdir}/uploads&quot;</span><br
/> &nbsp; &nbsp; &nbsp;<br
/> &nbsp; &nbsp; <span
style="color:#008000; font-style:italic;"># symlink to .htaccess</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;rm -rf #{current_path}/#{sf_webdir}/.htaccess&quot;</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;ln -s #{shared_path}/.htaccess #{current_path}/#{sf_webdir}/.htaccess&quot;</span><br
/> <br
/> &nbsp; &nbsp; <span
style="color:#008000; font-style:italic;"># symlink to app.yml</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;rm -rf #{current_path}/apps/#{sf_app}/config/app.yml&quot;</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;ln -s #{shared_path}/app.yml #{current_path}/apps/#{sf_app}/config/app.yml&quot;</span><br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span> <br
/> &nbsp; <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;&lt;-</span>DESC<br
/> &nbsp; &nbsp; Remove DEV environments<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:remove_dev_environments</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;rm -rf #{current_path}/#{sf_webdir}/*dev.php&quot;</span> &nbsp; &nbsp;<br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span> <br
/> &nbsp; <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;&lt;-</span>DESC<br
/> &nbsp; &nbsp; Disable symfony application<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:disable</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;cd #{current_path} &amp;&amp; #{php} symfony project:disable #{sf_app} prod&quot;</span> &nbsp; &nbsp;<br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span> <br
/> &nbsp; <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;&lt;-</span>DESC<br
/> &nbsp; &nbsp; Enable symfony application<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:enable</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;cd #{current_path} &amp;&amp; #{php} symfony project:enable #{sf_app} prod&quot;</span> &nbsp; &nbsp;<br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span> &nbsp; <br
/> <span
style="color:#9966CC; font-weight:bold;">end</span></div></div><p
style="text-align: justify;">Et voilà la suite de commandes pour <strong>Diem </strong>:</p><div
class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">namespace <span
style="color:#006600; font-weight:bold;">&#40;</span><span
style="color:#ff3333; font-weight:bold;">:dm</span><span
style="color:#006600; font-weight:bold;">&#41;</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;</span> <span
style="color:#006600; font-weight:bold;">&lt;-</span>DESC<br
/> &nbsp; &nbsp; Run the <span
style="color:#996600;">&quot;Diem setup&quot;</span> task<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:setup</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;cd #{current_path} &amp;&amp; #{php} symfony dm:setup&quot;</span> &nbsp; &nbsp;<br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span><br
/> <br
/> &nbsp; desc <span
style="color:#006600; font-weight:bold;">&lt;&lt;-</span>DESC<br
/> &nbsp; &nbsp; Clear Diem cache <span
style="color:#9966CC; font-weight:bold;">and</span> fix permissions<br
/> &nbsp; DESC<br
/> &nbsp; task <span
style="color:#ff3333; font-weight:bold;">:cc</span> <span
style="color:#9966CC; font-weight:bold;">do</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;rm -rf #{current_path}/#{sf_webdir}/cache&quot;</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;mkdir #{current_path}/#{sf_webdir}/cache&quot;</span><br
/> &nbsp; &nbsp; run <span
style="color:#996600;">&quot;chmod 777 #{current_path}/#{sf_webdir}/cache&quot;</span> &nbsp; &nbsp;<br
/> &nbsp; <span
style="color:#9966CC; font-weight:bold;">end</span><br
/> &nbsp; <br
/> <span
style="color:#9966CC; font-weight:bold;">end</span></div></div><p
style="text-align: justify;">Et voilà ! Un simple <strong>cap deploy</strong> fait tout le reste. Vous pouvez ajouter autant de serveurs que vous le souhaiter et lancer également toutes les commandes qui vous font plaisir.</p><p
style="text-align: justify;">Si vous avez des problèmes d&#8217;hébergement, exemple chez OVH qui ne laisse pas d&#8217;accès externe sur leurs serveurs Plan (&#8230;), vous pouvez utiliser la configuration suivante qui va archiver votre projet et l&#8217;envoyer en SFTP :</p><div
class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">set <span
style="color:#ff3333; font-weight:bold;">:deploy_via</span>, <span
style="color:#ff3333; font-weight:bold;">:copy</span><br
/> <br
/> <span
style="color:#008000; font-style:italic;"># Use copy to bypass firewall...</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:copy_strategy</span>, <span
style="color:#ff3333; font-weight:bold;">:export</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:copy_cache</span>, <span
style="color:#996600;">&quot;/tmp/#{application}&quot;</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:copy_exclude</span>, <span
style="color:#006600; font-weight:bold;">&#91;</span><span
style="color:#996600;">&quot;.git/*&quot;</span><span
style="color:#006600; font-weight:bold;">&#93;</span><br
/> set <span
style="color:#ff3333; font-weight:bold;">:copy_compression</span>, <span
style="color:#ff3333; font-weight:bold;">:gzip</span></div></div><p
style="text-align: justify;"><p
style="text-align: justify;">Cette configuration est largement inspirée de ces articles :</p><ul
style="text-align: justify;"><li
style="text-align: justify;"><a
href="http://refineweb.co.uk/2010/01/18/preparing-a-symfony-project-ready-for-deployment-into-production-using-capistrano/">http://refineweb.co.uk/2010/01/18/preparing-a-symfony-project-ready-for-deployment-into-production-using-capistrano/</a></li><li><a
href="http://blog.servergrove.com/2010/07/12/symfony-git-capistrano-capifony/">http://blog.servergrove.com/2010/07/12/symfony-git-capistrano-capifony/</a></li><li><a
href="http://blog.codingspree.net/2008/5/12/deploying-symfony-project-with-capistrano/">http://blog.codingspree.net/2008/5/12/deploying-symfony-project-with-capistrano/</a></li></ul><p
style="text-align: justify;"><p
style="text-align: justify;">Pour terminer, hier je vous parlais d&#8217;<strong>Hudson</strong>, un serveur d&#8217;intégration continue. En liant les deux, j&#8217;obtiens une <span
style="text-decoration: underline;">automatisation complète</span> de mon &laquo;&nbsp;<em>after code</em>&laquo;&nbsp;. C&#8217;est-à-dire que j&#8217;écris mon code comme un barbu (et mes tests). Lorsque j&#8217;ai bien commité et que je push mes modifs, <strong>Hudson </strong>voit ces mises à jour, il va relancer les tests. Si tout passe la build estampillée &laquo;&nbsp;<em>success</em>&nbsp;&raquo; va être déployée automatiquement par <strong>Capistrano</strong>.</p><p
style="text-align: justify;">Et moi dans l&#8217;histoire ? Je n&#8217;ai rien à faire. Au pire, je suis alerté par mail si un test ne passe pas et si la build ne peut être déployée, <strong>Capistrano </strong>fera un rollback automatiquement sur sa dernière version stable. Manquerait plus qu&#8217;une cafetière USB et une tâche Hudson pour lancer le café et là&#8230; utopie !</p><p
style="text-align: justify;"><p
style="text-align: justify;">A noter qu&#8217;un projet nommé <strong>Capifony </strong>a vu le jour depuis quelques temps. C&#8217;est un <strong>Capistrano </strong>réécrit pour gérer nativement les projets <strong>symfony</strong>, je n&#8217;ai pas testé mais cela me semble une excellente option : <a
href="http://github.com/everzet/capifony">http://github.com/everzet/capifony</a>. Pour <strong>Diem</strong>, j&#8217;ai vu passé quelque chose dans le Google Groups, à suivre donc.</p><p
style="text-align: justify;">Vous pouvez, si vous le voulez, utiliser <a
href="http://github.com/lg/murder"><strong>Murder</strong></a>, un projet développé par Twitter pour déployer via <strong>Bittorent </strong>leurs applications sur tous leurs serveurs. C&#8217;est pas une mauvaise idée si vous avez beaucoup de serveurs, leurs temps de déploiements sont assez phénoménales. En parlant de temps, mes temps de déploiements sont de l&#8217;ordre de 2 minutes&#8230;</p><p
style="text-align: justify;"><p
style="text-align: justify;">C&#8217;est tout, pour le moment <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li><a
href='http://www.willdurand.fr/integrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin/' title='Intégrer un gestionnaire de fichiers dans dmCkEditorPlugin'>Intégrer un gestionnaire de fichiers dans dmCkEditorPlugin</a></li><li><a
href='http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/' title='symfony rencontre Hudson, Mantis et les autres'>symfony rencontre Hudson, Mantis et les autres</a></li><li><a
href='http://www.willdurand.fr/creation-automatique-dun-projet-symfony-mysql-git-et-apache2/' title='Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2'>Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2</a></li><li><a
href='http://www.willdurand.fr/faut-il-tester-les-tests/' title='Faut-il tester&#8230; les tests ?'>Faut-il tester&#8230; les tests ?</a></li><li><a
href='http://www.willdurand.fr/lerreur-suexec-policy-violation-avec-symfony-chez-ovh/' title='L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)'>L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)</a></li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;title=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem&amp;bodytext=Hier%2C%20j%27introduisais%20mes%20directives%20de%20travail.%20Aujourd%27hui%20je%20vais%20introduire%20un%20sujet%20souvent%20sensible%20%3A%20la%20mise%20en%20production.%20C%27est%20une%20t%C3%A2che%20qui%20peut%20%C3%AAtre%20critique%20mais%20si%20l%27on%20prend%20toutes%20les%20pr%C3%A9cautions%2C%20nous%20limitons%20les%20risques.%20On%20noter'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;title=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;title=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem&amp;notes=Hier%2C%20j%27introduisais%20mes%20directives%20de%20travail.%20Aujourd%27hui%20je%20vais%20introduire%20un%20sujet%20souvent%20sensible%20%3A%20la%20mise%20en%20production.%20C%27est%20une%20t%C3%A2che%20qui%20peut%20%C3%AAtre%20critique%20mais%20si%20l%27on%20prend%20toutes%20les%20pr%C3%A9cautions%2C%20nous%20limitons%20les%20risques.%20On%20noter'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;t=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem%20-%20http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;title=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem&amp;annotation=Hier%2C%20j%27introduisais%20mes%20directives%20de%20travail.%20Aujourd%27hui%20je%20vais%20introduire%20un%20sujet%20souvent%20sensible%20%3A%20la%20mise%20en%20production.%20C%27est%20une%20t%C3%A2che%20qui%20peut%20%C3%AAtre%20critique%20mais%20si%20l%27on%20prend%20toutes%20les%20pr%C3%A9cautions%2C%20nous%20limitons%20les%20risques.%20On%20noter'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;title=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=Hier%2C%20j%27introduisais%20mes%20directives%20de%20travail.%20Aujourd%27hui%20je%20vais%20introduire%20un%20sujet%20souvent%20sensible%20%3A%20la%20mise%20en%20production.%20C%27est%20une%20t%C3%A2che%20qui%20peut%20%C3%AAtre%20critique%20mais%20si%20l%27on%20prend%20toutes%20les%20pr%C3%A9cautions%2C%20nous%20limitons%20les%20risques.%20On%20noter'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;t=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;title=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem&amp;body=Hier%2C%20j%27introduisais%20mes%20directives%20de%20travail.%20Aujourd%27hui%20je%20vais%20introduire%20un%20sujet%20souvent%20sensible%20%3A%20la%20mise%20en%20production.%20C%27est%20une%20t%C3%A2che%20qui%20peut%20%C3%AAtre%20critique%20mais%20si%20l%27on%20prend%20toutes%20les%20pr%C3%A9cautions%2C%20nous%20limitons%20les%20risques.%20On%20noter'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&title=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Fdeploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem%2F&amp;submitHeadline=D%C3%A9ploiement%20automatis%C3%A9%20avec%20Capistrano%20et%20Git%20pour%20symfony%20et%20Diem&amp;submitSummary=Hier%2C%20j%27introduisais%20mes%20directives%20de%20travail.%20Aujourd%27hui%20je%20vais%20introduire%20un%20sujet%20souvent%20sensible%20%3A%20la%20mise%20en%20production.%20C%27est%20une%20t%C3%A2che%20qui%20peut%20%C3%AAtre%20critique%20mais%20si%20l%27on%20prend%20toutes%20les%20pr%C3%A9cautions%2C%20nous%20limitons%20les%20risques.%20On%20noter&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/Z4tnj0W4nHM" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem/feed/</wfw:commentRss> <slash:comments>4</slash:comments> <feedburner:origLink>http://www.willdurand.fr/deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem</feedburner:origLink></item> <item><title>Faut-il tester… les tests ?</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/RtL7ckLuDPM/</link> <comments>http://www.willdurand.fr/faut-il-tester-les-tests/#comments</comments> <pubDate>Tue, 10 Aug 2010 11:39:33 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Boulot]]></category> <category><![CDATA[Ma vie]]></category> <category><![CDATA[symfony]]></category> <category><![CDATA[Hudson]]></category> <category><![CDATA[Lime]]></category> <category><![CDATA[Symfony]]></category> <category><![CDATA[TDD]]></category> <category><![CDATA[Tests fonctionnels]]></category> <category><![CDATA[Tests unitaires]]></category><guid isPermaLink="false">http://www.willdurand.fr/?p=538</guid> <description><![CDATA[Avec ce titre très accrocheur, vous allez surement penser que je vais vous parler de tests et vous avez raison&#8230; Mais de quels tests et pourquoi d&#8217;abord ? Il y a un presque deux ans maintenant, j&#8217;apprenais à écrire des tests unitaires et fonctionnels en Java, à l&#8217;aide de JUnit, JMeter, et compagnie. J&#8217;ai appris [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Avec ce titre très accrocheur, vous allez surement penser que je vais vous parler de tests et vous avez raison&#8230; Mais de quels tests et pourquoi d&#8217;abord ?</p><p
style="text-align: justify;">Il y a un presque deux ans maintenant, j&#8217;apprenais à écrire des <strong>tests unitaires et fonctionnels</strong> en Java, à l&#8217;aide de <strong>JUnit</strong>, <strong>JMeter</strong>, et compagnie. J&#8217;ai appris à écrire des scénarios de tests avec un logiciel dont je ne me souviens plus du nom, une alternative gratuite à <strong>HP Test Director</strong>. On écrit des <strong>scénarios de tests</strong>, des gens suivent les instructions et fournissent le résultat qu&#8217;ils obtiennent. C&#8217;est bien gentil tout ça mais je n&#8217;ai pas 50 personnes sous la main pour les faire exécuter mes tests et ce n&#8217;est pas mon associé qui voudrait suivre mes procédures&#8230;</p><p
style="text-align: justify;"><p
style="text-align: justify;">Comme mon boulot consiste à écrire uniquement des sites web, j&#8217;ai cherché un outil qui pourrait faire ce boulot à ma place. Il ne m&#8217;a pas fallu longtemps pour trouver <a
href="http://seleniumhq.org/"><strong>Selenium</strong></a>, une suite d&#8217;outils permettant d&#8217;enregistrer un enchaînement d&#8217;actions dans le navigateur, de rejouer cet enchaînement autant qu&#8217;on le souhaite, sur plusieurs navigateurs, en parallèle (test de &laquo;&nbsp;<em>scalabilité</em>&laquo;&nbsp;), &#8230;</p><p
style="text-align: justify;">C&#8217;est donc l&#8217;outil parfait pour gérer les scénarios fonctionnels. J&#8217;enregistre mes tests et je les rejoue. Je vérifie ainsi que mon appli réponds correctement et que je n&#8217;ai rien cassé en modifiant une partie du code. Exemple avec <strong>symfony</strong>, la mise à jour du <em>schema.yml</em>.</p><p
style="text-align: justify;"><p
style="text-align: justify;">D&#8217;ailleurs avec <strong>symfony</strong>, on peut faire des tests fonctionnels et c&#8217;est une chose que je ne faisais pas. Pour être franc, je ne faisais pas trop de tests en PHP, enfin si mais pas formellement. Maintenant cette période est terminée. J&#8217;adopte une nouvelle approche, l&#8217;approche <strong>TDD </strong>que j&#8217;expliciterai plus tard.<br
/> En <strong>symfony</strong>, on peut donc faire des <strong>tests fonctionnels</strong> avec les classes <em>sfTestFunctional </em>et <em>sfBrowser </em>(qui simule un navigateur). Pourquoi utiliser <strong>Selenium </strong>alors ? Et bien parce que ces tests sont bons mais ne remplacent pas <strong>Selenium</strong>, par exemple, on ne peut pas tester les appels Ajax. Voici un aperçu d&#8217;un test fonctionnel écrit en symfony :</p><div
class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #009933; font-style: italic;">/**<br
/> * Functional test file<br
/> *<br
/> * @author William DURAND<br
/> */</span><br
/> <br
/> <span
style="color: #b1b100;">include</span><span
style="color: #009900;">&#40;</span><a
href="http://www.php.net/dirname"><span
style="color: #990000;">dirname</span></a><span
style="color: #009900;">&#40;</span><span
style="color: #009900; font-weight: bold;">__FILE__</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">.</span><span
style="color: #0000ff;">'/../../bootstrap/functional.php'</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">;</span><br
/> <span
style="color: #b1b100;">include</span><span
style="color: #009900;">&#40;</span><a
href="http://www.php.net/dirname"><span
style="color: #990000;">dirname</span></a><span
style="color: #009900;">&#40;</span><span
style="color: #009900; font-weight: bold;">__FILE__</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">.</span><span
style="color: #0000ff;">'/../../bootstrap/doctrine.php'</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">;</span><br
/> <br
/> <span
style="color: #000088;">$browser</span> <span
style="color: #339933;">=</span> <span
style="color: #000000; font-weight: bold;">new</span> sfTestFunctional<span
style="color: #009900;">&#40;</span><span
style="color: #000000; font-weight: bold;">new</span> sfBrowser<span
style="color: #009900;">&#40;</span><span
style="color: #009900;">&#41;</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">// Auto-generated</span><br
/> <span
style="color: #000088;">$test</span> <span
style="color: #339933;">=</span> <span
style="color: #000088;">$browser</span><span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">test</span><span
style="color: #009900;">&#40;</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">;</span><br
/> <span
style="color: #000088;">$conn</span> <span
style="color: #339933;">=</span> Doctrine<span
style="color: #339933;">::</span><span
style="color: #004000;">getConnectionByTableName</span><span
style="color: #009900;">&#40;</span><span
style="color: #0000ff;">'Commande'</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">;</span><br
/> <br
/> <span
style="color: #000088;">$conn</span><span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">beginTransaction</span><span
style="color: #009900;">&#40;</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">// Get the form</span><br
/> <span
style="color: #000088;">$browser</span><br
/> &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">call</span><span
style="color: #009900;">&#40;</span><span
style="color: #0000ff;">'/commande/new'</span><span
style="color: #339933;">,</span> <span
style="color: #0000ff;">'GET'</span><span
style="color: #339933;">,</span> <a
href="http://www.php.net/array"><span
style="color: #990000;">array</span></a><span
style="color: #009900;">&#40;</span><span
style="color: #009900;">&#41;</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">with</span><span
style="color: #009900;">&#40;</span><span
style="color: #0000ff;">'request'</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">begin</span><span
style="color: #009900;">&#40;</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">isParameter</span><span
style="color: #009900;">&#40;</span><span
style="color: #0000ff;">'module'</span><span
style="color: #339933;">,</span> <span
style="color: #0000ff;">'commande'</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">isParameter</span><span
style="color: #009900;">&#40;</span><span
style="color: #0000ff;">'action'</span><span
style="color: #339933;">,</span> <span
style="color: #0000ff;">'new'</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">end</span><span
style="color: #009900;">&#40;</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">with</span><span
style="color: #009900;">&#40;</span><span
style="color: #0000ff;">'response'</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">begin</span><span
style="color: #009900;">&#40;</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">info</span><span
style="color: #009900;">&#40;</span><span
style="color: #0000ff;">'1.1 - Get the &quot;Commande&quot; form'</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">isStatusCode</span><span
style="color: #009900;">&#40;</span><span
style="color: #cc66cc;">200</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">checkElement</span><span
style="color: #009900;">&#40;</span><span
style="color: #0000ff;">'#content &gt; p'</span><span
style="color: #339933;">,</span> <span
style="color: #0000ff;">'#Nouvelle commande#'</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; <span
style="color: #339933;">-&gt;</span><span
style="color: #004000;">end</span><span
style="color: #009900;">&#40;</span><span
style="color: #009900;">&#41;</span><br
/> &nbsp; <span
style="color: #339933;">;</span></div></div><p
style="text-align: justify;">C&#8217;est très intuitif, les tests sont formés de &laquo;&nbsp;blocs&nbsp;&raquo; commençant par <em>with()</em> et terminant par <em>end()</em>. Il y a déjà beaucoup d&#8217;articles sur le sujet donc je ne m&#8217;y étendrait pas. Par contre petit tuyau, pour aller plus vite j&#8217;utilise le plugin <a
href="http://github.com/rande/swFunctionalTestGenerationPlugin"><strong>swFunctionalTestGenerationPlugin</strong></a><strong> </strong>qui permet de générer un &laquo;&nbsp;stub&nbsp;&raquo; de test fonctionnel symfony directement depuis les actions que l&#8217;on effectue dans la navigateur, pratique !</p><p
style="text-align: justify;"><p
style="text-align: justify;">Il n&#8217;y a pas que les tests fonctionnels dans la vie, il y a également les tests unitaires. Comme <strong>JUnit </strong>pour Java, on a le droit à <strong>PHPUnit </strong>pour PHP mais je ne l&#8217;ai pas encore essayé. J&#8217;utilise <a
href="http://www.symfony-project.org/book/1_2/15-Unit-and-Functional-Testing#The%20Lime%20Testing%20Framework"><strong>Lime</strong></a>, un framework de tests embarqué dans <strong>symfony</strong>, écrit par Maître <a
href="http://www.twitter.com/fabpot">@fapbot</a>. Au lieu des classiques <em>assertTrue()</em>, <em>assertFalse()</em>, on dispose des méthodes <em>is()</em>, <em>isnt()</em>, &#8230; Comme pour les tests fonctionnels, l&#8217;écriture de tests unitaires est très intuitive.</p><p
style="text-align: justify;">Grâce à ces tests unitaires, mon code est contrôlé et je n&#8217;ai plus à me soucier d&#8217;éventuels effets de bord. Je sais exactement comment se comportent mes méthodes et mes objets. Je blinde ainsi mon modèle, ce qui fait une chose de moins à me soucier. Je passe 50% de mon temps à écrire du code dans mes actions et vues, 20% de mon temps à écrire du code dans mon modèle, 20% à écrire mes tests et le reste à boire du café&#8230; Je ne me soucis pas du reste, mon environnement de <em>test </em>est complètement découplé de mon environnement de <em>dev </em>et l&#8217;environnement de <em>prod </em>est distant.</p><p
style="text-align: justify;"><p
style="text-align: justify;">Sauf que&#8230; lancer les tests c&#8217;est long et j&#8217;aime pas trop attendre. Je me suis tourné vers des outils qui font le boulot à ma place. C&#8217;est ce que l&#8217;on appelle des <strong>serveurs d&#8217;intégration continue</strong>. Je regrette de ne pas avoir pu tester <strong>Sismo</strong>, le serveur d&#8217;intégration continue (CI) de Sensio Labs (vous savez, le même que plus haut, décidément !).</p><p
style="text-align: justify;">J&#8217;ai testé <strong>Hudson </strong>et <strong>phpUnderControl </strong>(<strong>cruiseControl</strong>). Pour ce dernier, je n&#8217;en suis pas très satisfait avec <strong>symfony </strong>et <strong>Lime</strong>. Il fonctionne bien, l&#8217;utilisation de <strong>Ant </strong>fait plaisir mais je n&#8217;ai pas pu profiter de toutes les possibilités de ce serveur. Je l&#8217;ai donc laissé tombé au profit d&#8217;<strong>Hudson</strong>. C&#8217;est un serveur plaisant, rapide à prendre en main, très lisible et parfaitement customisable avec le nombre incommensurable de plugins dont il dispose. Pour savoir comment le faire fonctionner avec symfony, on lit <a
href="http://prendreuncafe.com/blog/post/2009/10/06/Simple-Continuous-Integration-of-a-Symfony-Project-using-Hudson">cet article</a> de Nicolas Perriault. Pour ma part, je n&#8217;utilise pas SVN mais <strong>Git</strong>, il suffit d&#8217;installer le plugin qui va bien.</p><p
style="text-align: justify;"><p
style="text-align: justify;">Voilà, sachant que mon Gmail est tout le temps ouvert et que j&#8217;ai le checker qui va bien dans Chrome, je suis alerté assez rapidement par mail si je casse tout. Encore quelque chose de moins à me soucier. C&#8217;est ce qu&#8217;on appelle, je crois, l&#8217;efficience et la productivité s&#8217;en porte beaucoup mieux.</p><p
style="text-align: justify;"><p
style="text-align: justify;">Il me reste cependant quelque chose à éclaircir : <strong>TDD</strong>. <a
href="http://fr.wikipedia.org/wiki/Test_Driven_Development"><strong>Test Driven Development</strong></a> ou <strong>Développement piloté par les tests</strong>. Pour faire simple, avant de développer une fonctionnalité, je réfléchis. Oui mais je réfléchis deux fois puis trois fois même. C&#8217;est-à-dire que je cherche comment l&#8217;écrire, comment elle pourrait mal se comporter et comment la tester. Ensuite, je prends le chemin inverse. J&#8217;écris mes tests, je veille à son comportement lors de son écriture. Et voilà, ma fonctionnalité est écrite, les tests passent, je continue mon travail. Je ne passe pas 30 minutes à chercher ce qui ne va pas&#8230;</p><p
style="text-align: justify;"><p
style="text-align: justify;">Au fait, pourquoi cet intitulé d&#8217;article ? C&#8217;est une interrogation qui vient des cours de qualité logiciel que j&#8217;ai pu avoir auparavant. J&#8217;ai toujours gardé cette phrase à l&#8217;esprit lorsqu&#8217;on me parle de tests. La question n&#8217;est pas si simple qu&#8217;elle en a l&#8217;air. Si vous avez une idée, les commentaires sont fait pour cela. Moi, je garde mon idée <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p><p
style="text-align: justify;"><p
style="text-align: justify;">En résumé, j&#8217;ai passé de bonnes vacances <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /></p><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li><a
href='http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/' title='symfony rencontre Hudson, Mantis et les autres'>symfony rencontre Hudson, Mantis et les autres</a></li><li><a
href='http://www.willdurand.fr/creation-automatique-dun-projet-symfony-mysql-git-et-apache2/' title='Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2'>Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2</a></li><li><a
href='http://www.willdurand.fr/deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem/' title='Déploiement automatisé avec Capistrano et Git pour symfony et Diem'>Déploiement automatisé avec Capistrano et Git pour symfony et Diem</a></li><li><a
href='http://www.willdurand.fr/lerreur-suexec-policy-violation-avec-symfony-chez-ovh/' title='L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)'>L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)</a></li><li><a
href='http://www.willdurand.fr/integrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin/' title='Intégrer un gestionnaire de fichiers dans dmCkEditorPlugin'>Intégrer un gestionnaire de fichiers dans dmCkEditorPlugin</a></li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;title=Faut-il%20tester...%20les%20tests%20%3F&amp;bodytext=Avec%20ce%20titre%20tr%C3%A8s%20accrocheur%2C%20vous%20allez%20surement%20penser%20que%20je%20vais%20vous%20parler%20de%20tests%20et%20vous%20avez%20raison...%20Mais%20de%20quels%20tests%20et%20pourquoi%20d%27abord%20%3F%0D%0AIl%20y%20a%20un%20presque%20deux%20ans%20maintenant%2C%20j%27apprenais%20%C3%A0%20%C3%A9crire%20des%20tests%20unitaires%20et%20fonctio'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;title=Faut-il%20tester...%20les%20tests%20%3F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;title=Faut-il%20tester...%20les%20tests%20%3F&amp;notes=Avec%20ce%20titre%20tr%C3%A8s%20accrocheur%2C%20vous%20allez%20surement%20penser%20que%20je%20vais%20vous%20parler%20de%20tests%20et%20vous%20avez%20raison...%20Mais%20de%20quels%20tests%20et%20pourquoi%20d%27abord%20%3F%0D%0AIl%20y%20a%20un%20presque%20deux%20ans%20maintenant%2C%20j%27apprenais%20%C3%A0%20%C3%A9crire%20des%20tests%20unitaires%20et%20fonctio'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;t=Faut-il%20tester...%20les%20tests%20%3F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Faut-il%20tester...%20les%20tests%20%3F%20-%20http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;title=Faut-il%20tester...%20les%20tests%20%3F&amp;annotation=Avec%20ce%20titre%20tr%C3%A8s%20accrocheur%2C%20vous%20allez%20surement%20penser%20que%20je%20vais%20vous%20parler%20de%20tests%20et%20vous%20avez%20raison...%20Mais%20de%20quels%20tests%20et%20pourquoi%20d%27abord%20%3F%0D%0AIl%20y%20a%20un%20presque%20deux%20ans%20maintenant%2C%20j%27apprenais%20%C3%A0%20%C3%A9crire%20des%20tests%20unitaires%20et%20fonctio'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Faut-il%20tester...%20les%20tests%20%3F&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;title=Faut-il%20tester...%20les%20tests%20%3F&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=Avec%20ce%20titre%20tr%C3%A8s%20accrocheur%2C%20vous%20allez%20surement%20penser%20que%20je%20vais%20vous%20parler%20de%20tests%20et%20vous%20avez%20raison...%20Mais%20de%20quels%20tests%20et%20pourquoi%20d%27abord%20%3F%0D%0AIl%20y%20a%20un%20presque%20deux%20ans%20maintenant%2C%20j%27apprenais%20%C3%A0%20%C3%A9crire%20des%20tests%20unitaires%20et%20fonctio'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;t=Faut-il%20tester...%20les%20tests%20%3F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=Faut-il%20tester...%20les%20tests%20%3F&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;title=Faut-il%20tester...%20les%20tests%20%3F&amp;body=Avec%20ce%20titre%20tr%C3%A8s%20accrocheur%2C%20vous%20allez%20surement%20penser%20que%20je%20vais%20vous%20parler%20de%20tests%20et%20vous%20avez%20raison...%20Mais%20de%20quels%20tests%20et%20pourquoi%20d%27abord%20%3F%0D%0AIl%20y%20a%20un%20presque%20deux%20ans%20maintenant%2C%20j%27apprenais%20%C3%A0%20%C3%A9crire%20des%20tests%20unitaires%20et%20fonctio'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&title=Faut-il%20tester...%20les%20tests%20%3F&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Ffaut-il-tester-les-tests%2F&amp;submitHeadline=Faut-il%20tester...%20les%20tests%20%3F&amp;submitSummary=Avec%20ce%20titre%20tr%C3%A8s%20accrocheur%2C%20vous%20allez%20surement%20penser%20que%20je%20vais%20vous%20parler%20de%20tests%20et%20vous%20avez%20raison...%20Mais%20de%20quels%20tests%20et%20pourquoi%20d%27abord%20%3F%0D%0AIl%20y%20a%20un%20presque%20deux%20ans%20maintenant%2C%20j%27apprenais%20%C3%A0%20%C3%A9crire%20des%20tests%20unitaires%20et%20fonctio&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/RtL7ckLuDPM" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/faut-il-tester-les-tests/feed/</wfw:commentRss> <slash:comments>4</slash:comments> <feedburner:origLink>http://www.willdurand.fr/faut-il-tester-les-tests/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=faut-il-tester-les-tests</feedburner:origLink></item> <item><title>L’erreur « suexec policy violation » avec symfony (chez OVH…)</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/WBvzZCFcU9s/</link> <comments>http://www.willdurand.fr/lerreur-suexec-policy-violation-avec-symfony-chez-ovh/#comments</comments> <pubDate>Fri, 16 Jul 2010 12:57:12 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Serveur]]></category> <category><![CDATA[symfony]]></category> <category><![CDATA[Apache2]]></category> <category><![CDATA[Symfony]]></category><guid isPermaLink="false">http://www.willdurand.fr/?p=533</guid> <description><![CDATA[Bonjour, je laisse ici un petit rappel pour avoir lutté quelques heures avec une erreur 500, au début incompréhensible&#8230; Il s&#8217;agit de l&#8217;erreur : suexec policy violation: see suexec log for more details Cette erreur engendre une erreur 500. C&#8217;est un peu dommage&#8230; Il s&#8217;agit simplement d&#8217;un problème de droits sur les fichiers mais aussi [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Bonjour, je laisse ici un petit rappel pour avoir lutté quelques heures avec une erreur 500, au début incompréhensible&#8230; Il s&#8217;agit de l&#8217;erreur :</p><div
class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">suexec policy violation: see suexec log for more details</div></div><p
style="text-align: justify;">Cette erreur engendre une erreur 500. C&#8217;est un peu dommage&#8230; Il s&#8217;agit simplement d&#8217;un problème de droits sur les fichiers mais aussi sur les dossiers.</p><p
style="text-align: justify;">Les fichiers doivent posséder les droits <em>644</em> (<em>-rw-r&#8211;r&#8211;</em>) et les dossiers les droits <em>705</em> (<em>drwx&#8212;r-x</em>). Pour les fichiers, ces droits sont classiques, pour les dossiers on peut surement faire mieux mais là, ça marche, c&#8217;est testé. Pour faire ça vite :</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #c20cb9; font-weight: bold;">find</span> <span
style="color: #000000; font-weight: bold;">*</span> <span
style="color: #660033;">-type</span> f <span
style="color: #660033;">-exec</span> <span
style="color: #c20cb9; font-weight: bold;">chmod</span> <span
style="color: #000000;">644</span> <span
style="color: #7a0874; font-weight: bold;">&#123;</span><span
style="color: #7a0874; font-weight: bold;">&#125;</span> \;</div></div><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #c20cb9; font-weight: bold;">find</span> <span
style="color: #000000; font-weight: bold;">*</span> <span
style="color: #660033;">-type</span> d <span
style="color: #660033;">-exec</span> <span
style="color: #c20cb9; font-weight: bold;">chmod</span> <span
style="color: #000000;">705</span> <span
style="color: #7a0874; font-weight: bold;">&#123;</span><span
style="color: #7a0874; font-weight: bold;">&#125;</span> \;</div></div><p
style="text-align: justify;"><p
style="text-align: justify;">Ensuite, on passe un coup de <em>project:permissions</em> et le tour est joué. On notera que la seule commande :</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">php symfony project:permissions</div></div><p
style="text-align: justify;"><strong>ne suffit pas</strong> à résoudre les problèmes de droits.</p><p
style="text-align: justify;"><p
style="text-align: justify;">On fixera les droits du .htaccess à <em>604</em>. Voilà <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li><a
href='http://www.willdurand.fr/creation-automatique-dun-projet-symfony-mysql-git-et-apache2/' title='Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2'>Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2</a></li><li><a
href='http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/' title='symfony rencontre Hudson, Mantis et les autres'>symfony rencontre Hudson, Mantis et les autres</a></li><li><a
href='http://www.willdurand.fr/deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem/' title='Déploiement automatisé avec Capistrano et Git pour symfony et Diem'>Déploiement automatisé avec Capistrano et Git pour symfony et Diem</a></li><li><a
href='http://www.willdurand.fr/faut-il-tester-les-tests/' title='Faut-il tester&#8230; les tests ?'>Faut-il tester&#8230; les tests ?</a></li><li><a
href='http://www.willdurand.fr/dedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql/' title='Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL'>Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL</a></li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;title=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29&amp;bodytext=Bonjour%2C%20je%20laisse%20ici%20un%20petit%20rappel%20pour%20avoir%20lutt%C3%A9%20quelques%20heures%20avec%20une%20erreur%20500%2C%20au%20d%C3%A9but%20incompr%C3%A9hensible...%20Il%20s%27agit%20de%20l%27erreur%20%3A%0D%0A%5Bcc%20lang%3D%27text%27%20%5Dsuexec%20policy%20violation%3A%20see%20suexec%20log%20for%20more%20details%5B%2Fcc%5D%0D%0ACette%20erreur%20engendr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;title=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;title=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29&amp;notes=Bonjour%2C%20je%20laisse%20ici%20un%20petit%20rappel%20pour%20avoir%20lutt%C3%A9%20quelques%20heures%20avec%20une%20erreur%20500%2C%20au%20d%C3%A9but%20incompr%C3%A9hensible...%20Il%20s%27agit%20de%20l%27erreur%20%3A%0D%0A%5Bcc%20lang%3D%27text%27%20%5Dsuexec%20policy%20violation%3A%20see%20suexec%20log%20for%20more%20details%5B%2Fcc%5D%0D%0ACette%20erreur%20engendr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;t=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29%20-%20http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;title=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29&amp;annotation=Bonjour%2C%20je%20laisse%20ici%20un%20petit%20rappel%20pour%20avoir%20lutt%C3%A9%20quelques%20heures%20avec%20une%20erreur%20500%2C%20au%20d%C3%A9but%20incompr%C3%A9hensible...%20Il%20s%27agit%20de%20l%27erreur%20%3A%0D%0A%5Bcc%20lang%3D%27text%27%20%5Dsuexec%20policy%20violation%3A%20see%20suexec%20log%20for%20more%20details%5B%2Fcc%5D%0D%0ACette%20erreur%20engendr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;title=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=Bonjour%2C%20je%20laisse%20ici%20un%20petit%20rappel%20pour%20avoir%20lutt%C3%A9%20quelques%20heures%20avec%20une%20erreur%20500%2C%20au%20d%C3%A9but%20incompr%C3%A9hensible...%20Il%20s%27agit%20de%20l%27erreur%20%3A%0D%0A%5Bcc%20lang%3D%27text%27%20%5Dsuexec%20policy%20violation%3A%20see%20suexec%20log%20for%20more%20details%5B%2Fcc%5D%0D%0ACette%20erreur%20engendr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;t=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;title=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29&amp;body=Bonjour%2C%20je%20laisse%20ici%20un%20petit%20rappel%20pour%20avoir%20lutt%C3%A9%20quelques%20heures%20avec%20une%20erreur%20500%2C%20au%20d%C3%A9but%20incompr%C3%A9hensible...%20Il%20s%27agit%20de%20l%27erreur%20%3A%0D%0A%5Bcc%20lang%3D%27text%27%20%5Dsuexec%20policy%20violation%3A%20see%20suexec%20log%20for%20more%20details%5B%2Fcc%5D%0D%0ACette%20erreur%20engendr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&title=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Flerreur-suexec-policy-violation-avec-symfony-chez-ovh%2F&amp;submitHeadline=L%27erreur%20%22suexec%20policy%20violation%22%20avec%20symfony%20%28chez%20OVH...%29&amp;submitSummary=Bonjour%2C%20je%20laisse%20ici%20un%20petit%20rappel%20pour%20avoir%20lutt%C3%A9%20quelques%20heures%20avec%20une%20erreur%20500%2C%20au%20d%C3%A9but%20incompr%C3%A9hensible...%20Il%20s%27agit%20de%20l%27erreur%20%3A%0D%0A%5Bcc%20lang%3D%27text%27%20%5Dsuexec%20policy%20violation%3A%20see%20suexec%20log%20for%20more%20details%5B%2Fcc%5D%0D%0ACette%20erreur%20engendr&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/WBvzZCFcU9s" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/lerreur-suexec-policy-violation-avec-symfony-chez-ovh/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://www.willdurand.fr/lerreur-suexec-policy-violation-avec-symfony-chez-ovh/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=lerreur-suexec-policy-violation-avec-symfony-chez-ovh</feedburner:origLink></item> <item><title>Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/AcMb39JwQNI/</link> <comments>http://www.willdurand.fr/dedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql/#comments</comments> <pubDate>Sun, 11 Jul 2010 22:55:31 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Serveur]]></category> <category><![CDATA[Sysadmin]]></category> <category><![CDATA[Apache2]]></category> <category><![CDATA[APC]]></category> <category><![CDATA[Dedibox]]></category> <category><![CDATA[Memcached]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[Nginx]]></category> <category><![CDATA[PHP-FPM]]></category> <category><![CDATA[PHP5]]></category> <category><![CDATA[Postfix]]></category><guid isPermaLink="false">http://www.willdurand.fr/?p=520</guid> <description><![CDATA[Bonjour J&#8217;ai récemment pris une Dédibox v3 et pour le moment j&#8217;en suis très satisfait. On m&#8217;a pas mal sollicité ces derniers temps pour que j&#8217;explique comment j&#8217;ai configuré ce serveur ainsi que les services que j&#8217;ai pu mettre en place. C&#8217;est l&#8217;objet de cet article. Premièrement, j&#8217;utilise Debian depuis toujours et c&#8217;est logiquement ce [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Bonjour <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><p
style="text-align: justify;">J&#8217;ai récemment pris une Dédibox v3 et pour le moment j&#8217;en suis très satisfait. On m&#8217;a pas mal sollicité ces derniers temps pour que j&#8217;explique comment j&#8217;ai configuré ce serveur ainsi que les services que j&#8217;ai pu mettre en place. C&#8217;est l&#8217;objet de cet article.</p><p
style="text-align: justify;"><p
style="text-align: justify;">Premièrement, j&#8217;utilise Debian depuis toujours et c&#8217;est logiquement ce qui tourne sur la Dédibox (en version 64 bits).</p><p
style="text-align: justify;"><p
style="text-align: justify;"><img
class="alignright" src="http://wiki.nginx.org/local/nginx-logo.png" alt="" width="350" height="90" /></p><p
style="text-align: justify;">Le serveur HTTP frontal n&#8217;est pas Apache2 mais <a
href="http://nginx.org/">Nginx</a> (<a
href="http://wiki.nginx.org/Main">wiki</a>) que j&#8217;ai appréhendé seulement depuis l&#8217;obtention de ce serveur. Et je dois avouer que j&#8217;en suis très satisfait, terriblement surpris d&#8217;ailleurs. Apache2 est bien en place mais sert de proxy à Nginx.</p><p
style="text-align: justify;">Nginx est couplé à <a
href="http://php-fpm.org/">php-fpm</a>. La paire formée est excellente et permet l&#8217;utilisation de <a
href="http://memcached.org/">Memcached</a> ou <a
href="http://php.net/manual/fr/book.apc.php">APC</a> sans soucis. Notons que l&#8217;excellent <a
href="http://www.dotdeb.org/">repository Dotdeb</a> fournit un package .deb de php-fpm. Ce repository est certainement un <strong>must-have</strong> puisque Debian n&#8217;est pas forcément très en avance sur les versions de PHP. Pour ma part, j&#8217;ai installé, via ce repository, PHP 5.3.2 ainsi que la dernière version d&#8217;APC (3.1.2 via <a
href="http://pecl.php.net/">pecl</a>). Comme je l&#8217;ai dit plus haut j&#8217;ai installé Memcached avec l&#8217;extension PHP qui va bien. Passons à la configuration.</p><p
style="text-align: justify;"><h2>Nginx</h2><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">user www-data;<br
/> worker_processes <span
style="color: #000000;">1</span>;<br
/> <br
/> error_log &nbsp;<span
style="color: #000000; font-weight: bold;">/</span>var<span
style="color: #000000; font-weight: bold;">/</span>log<span
style="color: #000000; font-weight: bold;">/</span>nginx<span
style="color: #000000; font-weight: bold;">/</span>error.log;<br
/> pid &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #000000; font-weight: bold;">/</span>var<span
style="color: #000000; font-weight: bold;">/</span>run<span
style="color: #000000; font-weight: bold;">/</span>nginx.pid;<br
/> <br
/> events <span
style="color: #7a0874; font-weight: bold;">&#123;</span><br
/> worker_connections <span
style="color: #000000;">1024</span>;<br
/> <span
style="color: #7a0874; font-weight: bold;">&#125;</span><br
/> <br
/> http <span
style="color: #7a0874; font-weight: bold;">&#123;</span><br
/> include &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">/</span>etc<span
style="color: #000000; font-weight: bold;">/</span>nginx<span
style="color: #000000; font-weight: bold;">/</span>mime.types;<br
/> default_type &nbsp;application<span
style="color: #000000; font-weight: bold;">/</span>octet-stream;<br
/> <br
/> client_max_body_size 8M;<br
/> <br
/> sendfile &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;on;<br
/> keepalive_timeout &nbsp; <span
style="color: #000000;">15</span>;<br
/> tcp_nodelay &nbsp; &nbsp; &nbsp; &nbsp; on;<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Enable Gzip compression</span><br
/> <span
style="color: #c20cb9; font-weight: bold;">gzip</span> on;<br
/> gzip_disable <span
style="color: #ff0000;">&quot;MSIE [1-6].(?!.*SV1)&quot;</span>;<br
/> gzip_vary on;<br
/> gzip_comp_level <span
style="color: #000000;">3</span>;<br
/> gzip_proxied any;<br
/> gzip_types text<span
style="color: #000000; font-weight: bold;">/</span>plain text<span
style="color: #000000; font-weight: bold;">/</span>html text<span
style="color: #000000; font-weight: bold;">/</span>css application<span
style="color: #000000; font-weight: bold;">/</span>x-javascript text<span
style="color: #000000; font-weight: bold;">/</span>xml application<span
style="color: #000000; font-weight: bold;">/</span>xml application<span
style="color: #000000; font-weight: bold;">/</span>xml+rss text<span
style="color: #000000; font-weight: bold;">/</span>javascript;<br
/> gzip_buffers <span
style="color: #000000;">16</span> 8k;<br
/> <br
/> include <span
style="color: #000000; font-weight: bold;">/</span>etc<span
style="color: #000000; font-weight: bold;">/</span>nginx<span
style="color: #000000; font-weight: bold;">/</span>conf.d<span
style="color: #000000; font-weight: bold;">/*</span>.conf;<br
/> include <span
style="color: #000000; font-weight: bold;">/</span>etc<span
style="color: #000000; font-weight: bold;">/</span>nginx<span
style="color: #000000; font-weight: bold;">/</span>sites-enabled<span
style="color: #000000; font-weight: bold;">/*</span>;<br
/> <span
style="color: #7a0874; font-weight: bold;">&#125;</span></div></div><p
style="text-align: justify;">Le paramètre <em>worker_processes</em> dépend de votre processeur (multi-coeurs ou non). Dans le cas d&#8217;une Dédibox, on ne dispose que d&#8217;un processeur mono-coeur donc on fixe ce paramètre à <em>1</em>. Ensuite j&#8217;active la compression gzip, ce qui permettra de gagner un peu en performances (moins de données à envoyer d&#8217;un coup = plus de données envoyées en même temps).</p><p
style="text-align: justify;">Nginx va servir tous les fichiers statiques, les &laquo;&nbsp;assets&nbsp;&raquo; mais également les pages en cache. Il s&#8217;interface très bien avec <em>Memcached</em>. Il est aussi capable de servir n&#8217;importe quel fichier sur disque.</p><p
style="text-align: justify;"><p
style="text-align: justify;">Voici les deux autres fichiers de configuration de Nginx : <em>proxy.conf</em> pour configurer Apache2 en proxy et fastcgi_params pour php-fpm.</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #666666; font-style: italic;"># /etc/nginx/proxy.conf</span><br
/> proxy_redirect &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;off;<br
/> proxy_set_header &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Host &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #007800;">$host</span>;<br
/> proxy_set_header &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;X-Real-IP &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">$remote_addr</span>;<br
/> proxy_set_header &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;X-Forwarded-For &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">$proxy_add_x_forwarded_for</span>;<br
/> client_max_body_size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10m;<br
/> client_body_buffer_size &nbsp; &nbsp; &nbsp; &nbsp; 128k;<br
/> proxy_connect_timeout &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #000000;">90</span>;<br
/> proxy_send_timeout &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #000000;">90</span>;<br
/> proxy_read_timeout &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #000000;">90</span>;<br
/> proxy_buffer_size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4k;<br
/> proxy_buffers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #000000;">4</span> 32k;<br
/> proxy_busy_buffers_size &nbsp; &nbsp; &nbsp; &nbsp; 64k;<br
/> proxy_temp_file_write_size &nbsp; &nbsp; &nbsp;64k;</div></div><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #666666; font-style: italic;"># /etc/nginx/factcgi_params</span><br
/> fastcgi_param &nbsp;QUERY_STRING &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">$query_string</span>;<br
/> fastcgi_param &nbsp;REQUEST_METHOD &nbsp; &nbsp; <span
style="color: #007800;">$request_method</span>;<br
/> fastcgi_param &nbsp;CONTENT_TYPE &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">$content_type</span>;<br
/> fastcgi_param &nbsp;CONTENT_LENGTH &nbsp; &nbsp; <span
style="color: #007800;">$content_length</span>;<br
/> <br
/> fastcgi_param &nbsp;SCRIPT_NAME &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #007800;">$fastcgi_script_name</span>;<br
/> fastcgi_param &nbsp;REQUEST_URI &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #007800;">$request_uri</span>;<br
/> fastcgi_param &nbsp;DOCUMENT_URI &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">$document_uri</span>;<br
/> fastcgi_param &nbsp;DOCUMENT_ROOT &nbsp; &nbsp; &nbsp;<span
style="color: #007800;">$document_root</span>;<br
/> fastcgi_param &nbsp;SERVER_PROTOCOL &nbsp; &nbsp;<span
style="color: #007800;">$server_protocol</span>;<br
/> <br
/> fastcgi_param &nbsp;GATEWAY_INTERFACE &nbsp;CGI<span
style="color: #000000; font-weight: bold;">/</span><span
style="color: #000000;">1.1</span>;<br
/> fastcgi_param &nbsp;SERVER_SOFTWARE &nbsp; &nbsp;nginx<span
style="color: #000000; font-weight: bold;">/</span><span
style="color: #007800;">$nginx_version</span>;<br
/> <br
/> fastcgi_param &nbsp;REMOTE_ADDR &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #007800;">$remote_addr</span>;<br
/> fastcgi_param &nbsp;REMOTE_PORT &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #007800;">$remote_port</span>;<br
/> fastcgi_param &nbsp;SERVER_ADDR &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #007800;">$server_addr</span>;<br
/> fastcgi_param &nbsp;SERVER_PORT &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #007800;">$server_port</span>;<br
/> fastcgi_param &nbsp;SERVER_NAME &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #007800;">$server_name</span>;<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># PHP only, required if PHP was built with --enable-force-cgi-redirect</span><br
/> fastcgi_param &nbsp;REDIRECT_STATUS &nbsp; &nbsp;<span
style="color: #000000;">200</span>;<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Custom settings</span><br
/> fastcgi_connect_timeout <span
style="color: #000000;">60</span>;<br
/> fastcgi_send_timeout <span
style="color: #000000;">180</span>;<br
/> fastcgi_read_timeout <span
style="color: #000000;">180</span>;<br
/> fastcgi_buffer_size 128k;<br
/> fastcgi_buffers <span
style="color: #000000;">4</span> 256k;<br
/> fastcgi_busy_buffers_size 256k;<br
/> fastcgi_temp_file_write_size 256k;<br
/> fastcgi_intercept_errors on;</div></div><p
style="text-align: justify;">Pour utiliser <em>Apache2 </em>en proxy ou <em>php-fpm</em>, il suffit d&#8217;insérer quelques lignes dans vos configurations de vhosts. C&#8217;est suffisamment détaillé ailleurs, je n&#8217;y reviendrai donc pas.</p><p
style="text-align: justify;"><h2>APC</h2><p
style="text-align: justify;">Voilà ma configuration APC, fonctionne bien pour Symfony. Pour certaines applis dont le code laisse à désirer, je suggère de passer le paramètre <em>include_once_override</em> à 0. Cette config provient en grande partie de chez <a
href="http://romain.cambien.net/20564234">Romain Cambien</a>.</p><div
class="codecolorer-container ini vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #000066; font-weight:bold;"><span
style="">&#91;</span>apc<span
style="">&#93;</span></span><br
/> apc.enabled<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">1</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">; 1 segments of 256Mo</span><br
/> apc.shm_segments<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">1</span><br
/> apc.shm_size<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">256</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">; No optimization</span><br
/> apc.optimization<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">0</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">; Never expire</span><br
/> apc.ttl<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">0</span><br
/> apc.user_ttl<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">0</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">; workaround for CLI</span><br
/> apc.enable_cli<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">1</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">; Symfony make lot of path lookups, try to optimize</span><br
/> apc.include_once_override<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">1</span><br
/> apc.canonicalize<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">1</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">; Wait 2 seconds to rebuild cache</span><br
/> apc.file_update_protection<span
style="color: #000066; font-weight:bold;">=</span><span
style="color: #660066;">2</span></div></div><h2>PHP</h2><p
style="text-align: justify;">La configuration de PHP est celle par défaut aux <em>best practices</em> près (short_tags off, magic quote gpc off, &#8230;). J&#8217;ai surtout calqué sur les &laquo;&nbsp;requirements&nbsp;&raquo; de <a
href="http://diem-project.org/diem-5-0/doc/en/reference-book/requirements">Diem</a>. A noter que l&#8217;on gère 3 fichiers php.ini : pour <em>Apache2</em>, pour <em>php-fpm </em>et pour <em>cli</em>.</p><p
style="text-align: justify;"><h2>Memcached</h2><p
style="text-align: justify;">Aucun besoin de modifier la configuration par défaut. Par contre, on peut modifier la taille (64Mo par défaut) si besoin.</p><p
style="text-align: justify;"><h2>Apache2</h2><p
style="text-align: justify;">Pour utiliser Apache2 en proxy, on doit nécessairement lui attribuer un port différent du port par défaut (80). Pour cela, on modifie le fichier <em>/etc/apache2/ports.conf</em> :</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #666666; font-style: italic;"># If you just change the port or add more ports here, you will likely also</span><br
/> <span
style="color: #666666; font-style: italic;"># have to change the VirtualHost statement in</span><br
/> <span
style="color: #666666; font-style: italic;"># /etc/apache2/sites-enabled/000-default</span><br
/> <span
style="color: #666666; font-style: italic;"># This is also true if you have upgraded from before 2.2.9-3 (i.e. from</span><br
/> <span
style="color: #666666; font-style: italic;"># Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and</span><br
/> <span
style="color: #666666; font-style: italic;"># README.Debian.gz</span><br
/> <br
/> Listen <span
style="color: #000000;">9999</span><br
/> NameVirtualHost <span
style="color: #000000; font-weight: bold;">*</span>:<span
style="color: #000000;">9999</span><br
/> <span
style="color: #666666; font-style: italic;"># SSL name based virtual hosts are not yet supported, therefore no</span><br
/> <span
style="color: #666666; font-style: italic;"># NameVirtualHost statement here</span><br
/> Listen <span
style="color: #000000;">443</span></div></div><p
style="text-align: justify;">J&#8217;ai choisi le prefork MPM d&#8217;Apache2, la directive KeepAlive est désactivé car Apache2 ne sert que du PHP. Après quelques tests, voici la configuration retenue :</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #666666; font-style: italic;"># Timeout: The number of seconds before receives and sends time out.</span><br
/> Timeout <span
style="color: #000000;">10</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># KeepAlive: Whether or not to allow persistent connections (more than</span><br
/> <span
style="color: #666666; font-style: italic;"># one request per connection). Set to &quot;Off&quot; to deactivate.</span><br
/> KeepAlive Off<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># MaxKeepAliveRequests: The maximum number of requests to allow</span><br
/> <span
style="color: #666666; font-style: italic;"># during a persistent connection. Set to 0 to allow an unlimited amount.</span><br
/> <span
style="color: #666666; font-style: italic;"># We recommend you leave this number high, for maximum performance.</span><br
/> MaxKeepAliveRequests <span
style="color: #000000;">100</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># KeepAliveTimeout: Number of seconds to wait for the next request from the</span><br
/> <span
style="color: #666666; font-style: italic;"># same client on the same connection.</span><br
/> KeepAliveTimeout <span
style="color: #000000;">2</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># prefork MPM</span><br
/> <span
style="color: #666666; font-style: italic;"># StartServers: number of server processes to start</span><br
/> <span
style="color: #666666; font-style: italic;"># MinSpareServers: minimum number of server processes which are kept spare</span><br
/> <span
style="color: #666666; font-style: italic;"># MaxSpareServers: maximum number of server processes which are kept spare</span><br
/> <span
style="color: #666666; font-style: italic;"># MaxClients: maximum number of server processes allowed to start</span><br
/> <span
style="color: #666666; font-style: italic;"># MaxRequestsPerChild: maximum number of requests a server process serves</span><br
/> StartServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span
style="color: #000000;">8</span><br
/> MinSpareServers &nbsp; &nbsp; &nbsp; <span
style="color: #000000;">5</span><br
/> MaxSpareServers &nbsp; &nbsp; &nbsp;<span
style="color: #000000;">15</span><br
/> MaxClients &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #000000;">80</span><br
/> MaxRequestsPerChild &nbsp; <span
style="color: #000000;">0</span></div></div><h2>MySQL</h2><p
style="text-align: justify;">En SGBD, j&#8217;ai installé MySQL et <a
href="http://www.postgresql.org/">PostgreSQL</a> qui ne sert pas pour le moment. La configuration MySQL est d&#8217;origine à l&#8217;exception d&#8217;un Ramdisk pour le répertoire temporaire. L&#8217;explication pour la création d&#8217;un Ramdisk est expliqué ici : <a
href="http://www.willdurand.fr/optimiser-son-application-web-en-jouant-sur-php-mysql-et-apache2/">http://www.willdurand.fr/optimiser-son-application-web-en-jouant-sur-php-mysql-et-apache2/</a>. MySQL est également protégé par une couche Memcached, ce qui permet de faire tenir une charge correcte sans envoyer MySQL dans les choux.</p><p
style="text-align: justify;"><h2>Postfix</h2><p
style="text-align: justify;">Configuré en &laquo;&nbsp;Site Internet&nbsp;&raquo;, rien n&#8217;a été touché et les mails transitent bien. Je n&#8217;ai pas besoin de faire de gestion de mail autre.</p><p
style="text-align: justify;"><h2>Getmail</h2><p
style="text-align: justify;">Dernière petite chose qui n&#8217;avait pas été relevé dans l&#8217;article précédent : <a
href="http://www.willdurand.fr/sauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql/">http://www.willdurand.fr/sauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql/</a>, la sauvegarde de mes emails. Tout est dit <a
href="http://maxime.sh/2010/06/sauvegarder-son-gmail-grace-a-linux/">ici</a>. J&#8217;envoie toutes mes sauvegardes sur un autre serveur privé et inaccessible excepté le temps du transfert.</p><p
style="text-align: justify;"><p
style="text-align: justify;">Voilà.</p><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li><a
href='http://www.willdurand.fr/optimiser-son-application-web-en-jouant-sur-php-mysql-et-apache2/' title='Optimiser son application web en jouant sur PHP, MySQL et Apache2'>Optimiser son application web en jouant sur PHP, MySQL et Apache2</a></li><li><a
href='http://www.willdurand.fr/replication-mysql-maitre-esclave/' title='Réplication MySQL maître-esclave'>Réplication MySQL maître-esclave</a></li><li><a
href='http://www.willdurand.fr/creation-automatique-dun-projet-symfony-mysql-git-et-apache2/' title='Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2'>Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2</a></li><li><a
href='http://www.willdurand.fr/lerreur-suexec-policy-violation-avec-symfony-chez-ovh/' title='L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)'>L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)</a></li><li><a
href='http://www.willdurand.fr/sauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql/' title='Sauvegarde incrémentale avec rsync : fichiers et base de données MySQL'>Sauvegarde incrémentale avec rsync : fichiers et base de données MySQL</a></li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;title=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL&amp;bodytext=Bonjour%20%3A-%29%0D%0AJ%27ai%20r%C3%A9cemment%20pris%20une%20D%C3%A9dibox%20v3%20et%20pour%20le%20moment%20j%27en%20suis%20tr%C3%A8s%20satisfait.%20On%20m%27a%20pas%20mal%20sollicit%C3%A9%20ces%20derniers%20temps%20pour%20que%20j%27explique%20comment%20j%27ai%20configur%C3%A9%20ce%20serveur%20ainsi%20que%20les%20services%20que%20j%27ai%20pu%20mettre%20en%20place.%20C%27e'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;title=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;title=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL&amp;notes=Bonjour%20%3A-%29%0D%0AJ%27ai%20r%C3%A9cemment%20pris%20une%20D%C3%A9dibox%20v3%20et%20pour%20le%20moment%20j%27en%20suis%20tr%C3%A8s%20satisfait.%20On%20m%27a%20pas%20mal%20sollicit%C3%A9%20ces%20derniers%20temps%20pour%20que%20j%27explique%20comment%20j%27ai%20configur%C3%A9%20ce%20serveur%20ainsi%20que%20les%20services%20que%20j%27ai%20pu%20mettre%20en%20place.%20C%27e'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;t=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL%20-%20http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;title=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL&amp;annotation=Bonjour%20%3A-%29%0D%0AJ%27ai%20r%C3%A9cemment%20pris%20une%20D%C3%A9dibox%20v3%20et%20pour%20le%20moment%20j%27en%20suis%20tr%C3%A8s%20satisfait.%20On%20m%27a%20pas%20mal%20sollicit%C3%A9%20ces%20derniers%20temps%20pour%20que%20j%27explique%20comment%20j%27ai%20configur%C3%A9%20ce%20serveur%20ainsi%20que%20les%20services%20que%20j%27ai%20pu%20mettre%20en%20place.%20C%27e'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;title=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=Bonjour%20%3A-%29%0D%0AJ%27ai%20r%C3%A9cemment%20pris%20une%20D%C3%A9dibox%20v3%20et%20pour%20le%20moment%20j%27en%20suis%20tr%C3%A8s%20satisfait.%20On%20m%27a%20pas%20mal%20sollicit%C3%A9%20ces%20derniers%20temps%20pour%20que%20j%27explique%20comment%20j%27ai%20configur%C3%A9%20ce%20serveur%20ainsi%20que%20les%20services%20que%20j%27ai%20pu%20mettre%20en%20place.%20C%27e'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;t=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;title=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL&amp;body=Bonjour%20%3A-%29%0D%0AJ%27ai%20r%C3%A9cemment%20pris%20une%20D%C3%A9dibox%20v3%20et%20pour%20le%20moment%20j%27en%20suis%20tr%C3%A8s%20satisfait.%20On%20m%27a%20pas%20mal%20sollicit%C3%A9%20ces%20derniers%20temps%20pour%20que%20j%27explique%20comment%20j%27ai%20configur%C3%A9%20ce%20serveur%20ainsi%20que%20les%20services%20que%20j%27ai%20pu%20mettre%20en%20place.%20C%27e'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&title=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Fdedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql%2F&amp;submitHeadline=D%C3%A9dibox%20v3%20%3A%20Nginx%20%2B%20PHP-FPM%20%2B%20Apache2%20%2B%20APC%20%2B%20Memcached%20%2B%20MySQL&amp;submitSummary=Bonjour%20%3A-%29%0D%0AJ%27ai%20r%C3%A9cemment%20pris%20une%20D%C3%A9dibox%20v3%20et%20pour%20le%20moment%20j%27en%20suis%20tr%C3%A8s%20satisfait.%20On%20m%27a%20pas%20mal%20sollicit%C3%A9%20ces%20derniers%20temps%20pour%20que%20j%27explique%20comment%20j%27ai%20configur%C3%A9%20ce%20serveur%20ainsi%20que%20les%20services%20que%20j%27ai%20pu%20mettre%20en%20place.%20C%27e&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/AcMb39JwQNI" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/dedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://www.willdurand.fr/dedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=dedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql</feedburner:origLink></item> <item><title>Sauvegarde incrémentale avec rsync : fichiers et base de données MySQL</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/iwnvprZsAlk/</link> <comments>http://www.willdurand.fr/sauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql/#comments</comments> <pubDate>Wed, 07 Jul 2010 12:24:14 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Serveur]]></category> <category><![CDATA[Sysadmin]]></category> <category><![CDATA[Dedibox]]></category> <category><![CDATA[Rsync]]></category> <category><![CDATA[Script]]></category><guid isPermaLink="false">http://www.willdurand.fr/?p=487</guid> <description><![CDATA[Bonjour, suite à mon passage en dédié (Dédibox v3) et à sa configuration aujourd&#8217;hui terminée, j&#8217;ai trouvé nécessaire de m&#8217;occuper de la sauvegarde des données. Pour cela, je me suis aidé de plusieurs sources : http://www.ruas-blog.com/index.php/2006/03/06/33-script-de-sauvegarde-des-bases-mysql (pour backuper MySQL) http://www.casafire.com/fr/content/sauvegarde-incrémentale-de-fichiers-avec-rsync-et-ssh (pour backuper les fichiers) http://blog.mazenod.fr/2007/10/sauvegarde-cryptee-de-serveur-a-serveur/ (pour me rappeler les commandes d&#8217;usage) Sauvegarde des bases MySQL [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Bonjour, suite à mon passage en dédié (Dédibox v3) et à sa configuration aujourd&#8217;hui terminée, j&#8217;ai trouvé nécessaire de m&#8217;occuper de la sauvegarde des données. Pour cela, je me suis aidé de plusieurs sources :</p><ul><li><a
href="http://www.ruas-blog.com/index.php/2006/03/06/33-script-de-sauvegarde-des-bases-mysql">http://www.ruas-blog.com/index.php/2006/03/06/33-script-de-sauvegarde-des-bases-mysql</a> (pour backuper MySQL)</li><li><a
href="http://www.casafire.com/fr/content/sauvegarde-incr%C3%A9mentale-de-fichiers-avec-rsync-et-ssh">http://www.casafire.com/fr/content/sauvegarde-incrémentale-de-fichiers-avec-rsync-et-ssh</a> (pour backuper les fichiers)</li><li><a
href="http://blog.mazenod.fr/2007/10/sauvegarde-cryptee-de-serveur-a-serveur/">http://blog.mazenod.fr/2007/10/sauvegarde-cryptee-de-serveur-a-serveur/</a> (pour me rappeler les commandes d&#8217;usage)</li></ul><h2>Sauvegarde des bases MySQL</h2><p
style="text-align: justify;">Je sauvegarde toutes les bases de données sur une <strong>durée d&#8217;une semaine</strong>. Voici le script, il est possible de le coupler à un envoi de la sauvegarde via FTP. Je conserve ainsi toutes mes sauvegardes sur un serveur distant et complètement déconnecté de ce dont je vais vous parler ensuite.</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #666666; font-style: italic;">#!/bin/bash</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">#---------------------------------------------------------------#</span><br
/> <span
style="color: #666666; font-style: italic;"># Paramétrage de la connection MySQL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#</span><br
/> <span
style="color: #666666; font-style: italic;">#---------------------------------------------------------------#</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">#Nom de l'utilisateur qui lance le backup</span><br
/> <span
style="color: #007800;">user</span>=<span
style="color: #000000; font-weight: bold;">&lt;</span>user<span
style="color: #000000; font-weight: bold;">&gt;</span><br
/> <span
style="color: #666666; font-style: italic;">#Machine sur laquelle on se connecte</span><br
/> <span
style="color: #007800;">host</span>=<span
style="color: #000000; font-weight: bold;">&lt;</span>host<span
style="color: #000000; font-weight: bold;">&gt;</span><br
/> <span
style="color: #666666; font-style: italic;">#Mot de passe de l'utilisateur de backup</span><br
/> <span
style="color: #007800;">pass</span>=<span
style="color: #000000; font-weight: bold;">&lt;</span>password<span
style="color: #000000; font-weight: bold;">&gt;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Outil de dump</span><br
/> <span
style="color: #007800;">MYSQLDUMP</span>=mysqldump<br
/> <span
style="color: #666666; font-style: italic;">#Outil de check</span><br
/> <span
style="color: #007800;">MYSQLCHECK</span>=mysqlcheck<br
/> <span
style="color: #666666; font-style: italic;"># Options passées à MYSQLDUMP</span><br
/> <span
style="color: #007800;">OPTIONS</span>=<span
style="color: #ff0000;">&quot;--add-drop-database &nbsp;--add-drop-table --complete-insert --routines --triggers --max_allowed_packet=250M --force&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">#---------------------------------------------------------------#</span><br
/> <span
style="color: #666666; font-style: italic;"># Paramétrage de la sauvegarde &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#</span><br
/> <span
style="color: #666666; font-style: italic;">#---------------------------------------------------------------#</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Répertoire temporaire pour stocker les backups</span><br
/> <span
style="color: #007800;">TEMPORAIRE</span>=<span
style="color: #ff0000;">&quot;/tmp/bkp_mysql&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Nom du serveur</span><br
/> <span
style="color: #007800;">MACHINE</span>=<span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$(hostname)</span>&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Date courante</span><br
/> <span
style="color: #007800;">DATE</span>=<span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$(date +&quot;%d-%m-%Y&quot;)</span>&quot;</span><br
/> <span
style="color: #666666; font-style: italic;"># Date de conservation maximum</span><br
/> <span
style="color: #007800;">DATE2</span>=<span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #c20cb9; font-weight: bold;">date</span> <span
style="color: #660033;">--date</span> <span
style="color: #ff0000;">'1 week ago'</span> <span
style="color: #ff0000;">&quot;+%d-%m-%Y&quot;</span><span
style="color: #000000; font-weight: bold;">`</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Nom des fichiers de backup</span><br
/> <span
style="color: #666666; font-style: italic;"># Répertoire de destination du backup</span><br
/> <span
style="color: #007800;">DESTINATION</span>=<span
style="color: #ff0000;">&quot;/home/backuper/mysql&quot;</span><br
/> <span
style="color: #007800;">FICHIER_BACKUP</span>=<span
style="color: #007800;">$MACHINE</span><span
style="color: #ff0000;">&quot;_BACKUP_MYSQL_&quot;</span><span
style="color: #007800;">$DATE</span><span
style="color: #ff0000;">&quot;.tar.gz&quot;</span><br
/> <span
style="color: #007800;">FICHIER_EFFACER</span>=<span
style="color: #007800;">$MACHINE</span><span
style="color: #ff0000;">&quot;_BACKUP_MYSQL_&quot;</span><span
style="color: #007800;">$DATE2</span><span
style="color: #ff0000;">&quot;.tar.gz&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">#Informations FTP</span><br
/> <span
style="color: #007800;">LOGIN_FTP</span>=<span
style="color: #000000; font-weight: bold;">&lt;</span>user_ftp<span
style="color: #000000; font-weight: bold;">&gt;</span><br
/> <span
style="color: #007800;">PASS_FTP</span>=<span
style="color: #000000; font-weight: bold;">&lt;</span>pass_ftp<span
style="color: #000000; font-weight: bold;">&gt;</span><br
/> <span
style="color: #007800;">HOST_FTP</span>=<span
style="color: #000000; font-weight: bold;">&lt;</span>host_ftp<span
style="color: #000000; font-weight: bold;">&gt;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">#---------------------------------------------------------------#</span><br
/> <span
style="color: #666666; font-style: italic;"># Process de sauvegarde &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #</span><br
/> <span
style="color: #666666; font-style: italic;">#---------------------------------------------------------------#</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Création du répertoire temporaire</span><br
/> <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-d</span> <span
style="color: #007800;">$TEMPORAIRE</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span>;<br
/> <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;Le repertoire temporaire existe.&quot;</span>;<br
/> <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; <span
style="color: #c20cb9; font-weight: bold;">mkdir</span> <span
style="color: #007800;">$TEMPORAIRE</span>;<br
/> <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># On construit la liste des bases de données</span><br
/> <span
style="color: #007800;">BASES</span>=<span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$(mysql -u $user -h $host -p$pass -Bse 'show databases')</span>&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># On lance le dump des bases</span><br
/> <span
style="color: #000000; font-weight: bold;">for</span> db <span
style="color: #000000; font-weight: bold;">in</span> <span
style="color: #007800;">$BASES</span><br
/> <span
style="color: #000000; font-weight: bold;">do</span><br
/> &nbsp; <span
style="color: #666666; font-style: italic;">#On lance un check et une analyse pour chaque base de données</span><br
/> &nbsp; <span
style="color: #007800;">$MYSQLCHECK</span> <span
style="color: #660033;">-u</span> <span
style="color: #007800;">$user</span> <span
style="color: #660033;">-h</span> <span
style="color: #007800;">$host</span> -p<span
style="color: #007800;">$pass</span> <span
style="color: #660033;">-c</span> <span
style="color: #660033;">-a</span> <span
style="color: #007800;">$db</span><br
/> &nbsp; <span
style="color: #666666; font-style: italic;"># On lance un mysqldump pour chaque base de données</span><br
/> &nbsp; <span
style="color: #007800;">$MYSQLDUMP</span> <span
style="color: #660033;">-u</span> <span
style="color: #007800;">$user</span> <span
style="color: #660033;">-h</span> <span
style="color: #007800;">$host</span> -p<span
style="color: #007800;">$pass</span> <span
style="color: #007800;">$OPTIONS</span> <span
style="color: #007800;">$db</span> <span
style="color: #660033;">-R</span> <span
style="color: #000000; font-weight: bold;">&gt;</span> <span
style="color: #007800;">$TEMPORAIRE</span><span
style="color: #ff0000;">&quot;/&quot;</span><span
style="color: #007800;">$MACHINE</span><span
style="color: #ff0000;">&quot;-&quot;</span><span
style="color: #007800;">$db</span><span
style="color: #ff0000;">&quot;-&quot;</span><span
style="color: #007800;">$DATE</span><span
style="color: #ff0000;">&quot;.sql&quot;</span>;<br
/> <span
style="color: #000000; font-weight: bold;">done</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Création de l'archive contenant tout les dump</span><br
/> <span
style="color: #666666; font-style: italic;">#Cette archive est stockée dans le dossier défini pour la sauvegarde</span><br
/> <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-d</span> <span
style="color: #007800;">$DESTINATION</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span>; <br
/> <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">cd</span> <span
style="color: #007800;">$TEMPORAIRE</span><br
/> &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">tar</span> <span
style="color: #660033;">-cvzf</span> <span
style="color: #007800;">$DESTINATION</span><span
style="color: #ff0000;">&quot;/&quot;</span><span
style="color: #007800;">$FICHIER_BACKUP</span> <span
style="color: #000000; font-weight: bold;">*</span><br
/> <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># On transfere l'archive par FTP</span><br
/> <span
style="color: #7a0874; font-weight: bold;">cd</span> <span
style="color: #007800;">$DESTINATION</span><br
/> <span
style="color: #c20cb9; font-weight: bold;">ftp</span> <span
style="color: #660033;">-v</span> <span
style="color: #660033;">-n</span> <span
style="color: #007800;">$HOST_FTP</span> <span
style="color: #000000; font-weight: bold;">&lt;</span> <span
style="color: #000000; font-weight: bold;">&lt;</span>SCRIPT<br
/> user <span
style="color: #007800;">$LOGIN_FTP</span> <span
style="color: #007800;">$PASS_FTP</span> <br
/> bin <br
/> put <span
style="color: #007800;">$FICHIER_BACKUP</span> <br
/> bye<br
/> SCRIPT<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># On supprime le fichier de plus de x jours</span><br
/> <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-f</span> <span
style="color: #007800;">$DESTINATION</span><span
style="color: #ff0000;">&quot;/&quot;</span><span
style="color: #007800;">$FICHIER_EFFACER</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span>; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">rm</span> <span
style="color: #007800;">$DESTINATION</span><span
style="color: #ff0000;">&quot;/&quot;</span><span
style="color: #007800;">$FICHIER_EFFACER</span><br
/> <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># On suprime le répertoire temporaire</span><br
/> <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-d</span> fichier <span
style="color: #7a0874; font-weight: bold;">&#93;</span>; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; <span
style="color: #c20cb9; font-weight: bold;">rm</span> <span
style="color: #660033;">-Rf</span> <span
style="color: #007800;">$TEMPORAIRE</span><br
/> <span
style="color: #000000; font-weight: bold;">fi</span></div></div><h2></h2><h2>Sauvegarde incrémentale des fichiers avec rsync</h2><p
style="text-align: justify;">Je sauvegarde mes fichiers à la semaine de la façon suivante :</p><ul
style="text-align: justify;"><li>sauvegarde dans un répertoire nommé : <em>&lt;Année&gt;-&lt;Numéro de semaine&gt;</em></li><li>dans ce répertoire j&#8217;ai un dossier main qui contient l&#8217;intégralité des fichiers. Cette sauvegarde est faite le lundi.</li><li>j&#8217;ai 6 répertoires nommés : <em>&lt;jour&gt;_&lt;date au format jj-mm-aaaa&gt;</em> contenant les sauvegardes incrémentales de la semaine.</li></ul><p
style="text-align: justify;">J&#8217;ai modifié le script pour ajouter une conservation des <strong>sauvegardes de 4 semaines</strong>.</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #666666; font-style: italic;">#!/bin/bash</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># - By default, the full backup is made monday, you can specify another day</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp; by entering a number from 1 to 7 (1 is monday, 2 is tuesday ...) </span><br
/> <span
style="color: #666666; font-style: italic;">#FULL_DAY=1</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># - BACKUP_LIST is a text file where you specify files/directories you </span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp; want to backup (one per line), the paths on this file must be relative </span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp; to the path set in BACKUP_ROOT</span><br
/> <span
style="color: #007800;">BACKUP_ROOT</span>=<span
style="color: #000000; font-weight: bold;">/</span><br
/> <span
style="color: #007800;">BACKUP_LIST</span>=<span
style="color: #ff0000;">&quot;/home/backuper/scripts/backup_list_files&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Excludes file</span><br
/> <span
style="color: #666666; font-style: italic;"># - Contains one wildcard pattern per line of files to exclude</span><br
/> <span
style="color: #666666; font-style: italic;"># - This is a rsync exclude file. See the rsync man page. &nbsp;</span><br
/> <span
style="color: #007800;">EXCLUDES_LIST</span>=<span
style="color: #ff0000;">&quot;/home/backuper/scripts/backup_exclude_files&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Hostname or IP adress of the remote backup server</span><br
/> <span
style="color: #007800;">BACKUP_SRV</span>=<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Port SSH</span><br
/> <span
style="color: #007800;">SSH_PORT</span>=<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Root directory that stores backups on the remote server</span><br
/> <span
style="color: #007800;">ARCHIVE_ROOT</span>=~<span
style="color: #000000; font-weight: bold;">/</span>files<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Remote user. Used by ssh. This is the user who connects to the remote backup server </span><br
/> <span
style="color: #666666; font-style: italic;"># Must have write access on $ARCHIVE_ROOT</span><br
/> <span
style="color: #007800;">REMOTE_USER</span>=<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Mail address for status updates</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp;- This is used to email you a status report</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp;- Comment it if you don't want to mail the report</span><br
/> <span
style="color: #007800;">MAILADDR</span>=<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Log file</span><br
/> <span
style="color: #007800;">LOGFILE</span>=<span
style="color: #ff0000;">&quot;/home/backuper/backup-files.log&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># HOSTNAME</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp;This is used for creating a directory specific to this host on the remote host</span><br
/> <span
style="color: #007800;">HOSTNAME</span>=<span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$(hostname)</span>&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">#########################################</span><br
/> <span
style="color: #666666; font-style: italic;"># From here on out, you probably don't &nbsp;#</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp; want to change anything unless you &nbsp;#</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp; know what you're doing. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #</span><br
/> <span
style="color: #666666; font-style: italic;">#########################################</span><br
/> <br
/> <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-f</span> <span
style="color: #007800;">$LOGFILE</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span><br
/> <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; <span
style="color: #c20cb9; font-weight: bold;">rm</span> <span
style="color: #007800;">$LOGFILE</span><br
/> &nbsp; <span
style="color: #c20cb9; font-weight: bold;">touch</span> <span
style="color: #007800;">$LOGFILE</span><br
/> <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Calculate WEEK_NUM</span><br
/> <span
style="color: #666666; font-style: italic;"># - This is the week number of year, it depends on the variable FULL_DAY</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp;the value of FULL_DAY is considered as the first day of week</span><br
/> <span
style="color: #666666; font-style: italic;"># - By default the command `date +%W` considers monday as first day of week, so if the day of</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp;the full backup is different from monday then we must make additional operations</span><br
/> <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$FULL_DAY</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> <span
style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$FULL_DAY</span> <span
style="color: #660033;">-le</span> <span
style="color: #000000;">7</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> <span
style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #c20cb9; font-weight: bold;">date</span> +<span
style="color: #000000; font-weight: bold;">%</span>u<span
style="color: #000000; font-weight: bold;">`</span> <span
style="color: #660033;">-ge</span> <span
style="color: #007800;">$FULL_DAY</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span
style="color: #000000; font-weight: bold;">then</span> <br
/> &nbsp; <span
style="color: #007800;">WEEK_NUM</span>=<span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #c20cb9; font-weight: bold;">expr</span> $<span
style="color: #7a0874; font-weight: bold;">&#40;</span><span
style="color: #c20cb9; font-weight: bold;">date</span> +<span
style="color: #000000; font-weight: bold;">%</span>W<span
style="color: #7a0874; font-weight: bold;">&#41;</span> + <span
style="color: #000000;">1</span><span
style="color: #000000; font-weight: bold;">`</span><br
/> <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; <span
style="color: #007800;">WEEK_NUM</span>=<span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #c20cb9; font-weight: bold;">date</span> +<span
style="color: #000000; font-weight: bold;">%</span>W<span
style="color: #000000; font-weight: bold;">`</span><br
/> <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># ARCHIVE_DIR</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp;This is the directory (full path) of the current week backups (on the remote host)</span><br
/> <span
style="color: #666666; font-style: italic;"># &nbsp;The name of directory indicates the number of the week in the year (e.g 2007-32)</span><br
/> <span
style="color: #007800;">ARCHIVE_DIR</span>=<span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$ARCHIVE_ROOT</span>/<span
style="color: #007800;">$HOSTNAME</span>/<span
style="color: #780078;">`date +%Y`</span>-<span
style="color: #007800;">$WEEK_NUM</span>&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Directory which holds our current datastore</span><br
/> <span
style="color: #007800;">CURRENT</span>=main<br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Directory which we save incremental changes to (e.g monday_06-08-2007)</span><br
/> <span
style="color: #007800;">INCREMENTDIR</span>=<span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #c20cb9; font-weight: bold;">date</span> +<span
style="color: #000000; font-weight: bold;">%</span>A_<span
style="color: #000000; font-weight: bold;">%</span>d-<span
style="color: #000000; font-weight: bold;">%</span>m-<span
style="color: #000000; font-weight: bold;">%</span>Y<span
style="color: #000000; font-weight: bold;">`</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Options to pass to rsync</span><br
/> <span
style="color: #666666; font-style: italic;"># -r for recursivity must be explicite in spite of -a because --files-from (see man rsync)</span><br
/> <span
style="color: #007800;">OPTIONS</span>=<span
style="color: #ff0000;">&quot;--force --ignore-errors --delete --delete-excluded <span
style="color: #000099; font-weight: bold;">\<br
/> </span> --exclude-from=<span
style="color: #007800;">$EXCLUDES_LIST</span> --backup --backup-dir=<span
style="color: #007800;">$ARCHIVE_DIR</span>/<span
style="color: #007800;">$INCREMENTDIR</span> <span
style="color: #000099; font-weight: bold;">\<br
/> </span> -arhv --files-from=<span
style="color: #007800;">$BACKUP_LIST</span>&quot;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Our actual rsyncing function</span><br
/> do_rsync<span
style="color: #7a0874; font-weight: bold;">&#40;</span><span
style="color: #7a0874; font-weight: bold;">&#41;</span><br
/> <span
style="color: #7a0874; font-weight: bold;">&#123;</span><br
/> &nbsp; &nbsp;<span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$SSH_PORT</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; rsync <span
style="color: #660033;">-e</span> <span
style="color: #ff0000;">&quot;ssh -p <span
style="color: #007800;">$SSH_PORT</span>&quot;</span> <span
style="color: #007800;">$OPTIONS</span> <span
style="color: #007800;">$BACKUP_ROOT</span> <span
style="color: #007800;">$REMOTE_USER</span><span
style="color: #000000; font-weight: bold;">@</span><span
style="color: #007800;">$BACKUP_SRV</span>:<span
style="color: #007800;">$ARCHIVE_DIR</span><span
style="color: #000000; font-weight: bold;">/</span><span
style="color: #007800;">$CURRENT</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #007800;">$LOGFILE</span> <span
style="color: #000000;">2</span><span
style="color: #000000; font-weight: bold;">&gt;&amp;</span><span
style="color: #000000;">1</span><br
/> &nbsp; &nbsp;<span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; &nbsp; rsync <span
style="color: #007800;">$OPTIONS</span> <span
style="color: #007800;">$BACKUP_ROOT</span> <span
style="color: #007800;">$REMOTE_USER</span><span
style="color: #000000; font-weight: bold;">@</span><span
style="color: #007800;">$BACKUP_SRV</span>:<span
style="color: #007800;">$ARCHIVE_DIR</span><span
style="color: #000000; font-weight: bold;">/</span><span
style="color: #007800;">$CURRENT</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #007800;">$LOGFILE</span> <span
style="color: #000000;">2</span><span
style="color: #000000; font-weight: bold;">&gt;&amp;</span><span
style="color: #000000;">1</span><br
/> &nbsp; &nbsp;<span
style="color: #000000; font-weight: bold;">fi</span><br
/> &nbsp; &nbsp;<span
style="color: #7a0874; font-weight: bold;">return</span> <br
/> <span
style="color: #7a0874; font-weight: bold;">&#125;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Our post rsync accounting function</span><br
/> do_accounting<span
style="color: #7a0874; font-weight: bold;">&#40;</span><span
style="color: #7a0874; font-weight: bold;">&#41;</span><br
/> <span
style="color: #7a0874; font-weight: bold;">&#123;</span><br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$1</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;Backup accounting for day <span
style="color: #007800;">$INCREMENTDIR</span> on <span
style="color: #007800;">$HOSTNAME</span>:&quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;</span> <span
style="color: #000000; font-weight: bold;">/</span>tmp<span
style="color: #000000; font-weight: bold;">/</span>rsync_script_tmpfile<br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #000000; font-weight: bold;">/</span>tmp<span
style="color: #000000; font-weight: bold;">/</span>rsync_script_tmpfile<br
/> <br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$SSH_PORT</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">ssh</span> <span
style="color: #660033;">-p</span> <span
style="color: #007800;">$SSH_PORT</span> <span
style="color: #007800;">$REMOTE_USER</span><span
style="color: #000000; font-weight: bold;">@</span><span
style="color: #007800;">$BACKUP_SRV</span> <span
style="color: #c20cb9; font-weight: bold;">du</span> <span
style="color: #660033;">-s</span> <span
style="color: #007800;">$ARCHIVE_DIR</span><span
style="color: #000000; font-weight: bold;">/*</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #000000; font-weight: bold;">/</span>tmp<span
style="color: #000000; font-weight: bold;">/</span>rsync_script_tmpfile<br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">ssh</span> <span
style="color: #007800;">$REMOTE_USER</span><span
style="color: #000000; font-weight: bold;">@</span><span
style="color: #007800;">$BACKUP_SRV</span> <span
style="color: #c20cb9; font-weight: bold;">du</span> <span
style="color: #660033;">-s</span> <span
style="color: #007800;">$ARCHIVE_DIR</span><span
style="color: #000000; font-weight: bold;">/*</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #000000; font-weight: bold;">/</span>tmp<span
style="color: #000000; font-weight: bold;">/</span>rsync_script_tmpfile<br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #000000; font-weight: bold;">/</span>tmp<span
style="color: #000000; font-weight: bold;">/</span>rsync_script_tmpfile<br
/> &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">cat</span> <span
style="color: #007800;">$LOGFILE</span> <span
style="color: #000000; font-weight: bold;">|</span> <span
style="color: #c20cb9; font-weight: bold;">grep</span> <span
style="color: #ff0000;">&quot;rsync: &quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #000000; font-weight: bold;">/</span>tmp<span
style="color: #000000; font-weight: bold;">/</span>rsync_script_tmpfile<br
/> <br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;Mail $1 -s &quot;</span><span
style="color: #007800;">$HOSTNAME</span> Backup Report<span
style="color: #ff0000;">&quot; &lt; /tmp/rsync_script_tmpfile&quot;</span><br
/> &nbsp; &nbsp; mail <span
style="color: #007800;">$1</span> <span
style="color: #660033;">-s</span> <span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$HOSTNAME</span> Backup Report&quot;</span> <span
style="color: #000000; font-weight: bold;">&lt;</span> <span
style="color: #000000; font-weight: bold;">/</span>tmp<span
style="color: #000000; font-weight: bold;">/</span>rsync_script_tmpfile<br
/> <br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;rm /tmp/rsync_script_tmpfile&quot;</span><br
/> &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">rm</span> <span
style="color: #000000; font-weight: bold;">/</span>tmp<span
style="color: #000000; font-weight: bold;">/</span>rsync_script_tmpfile<br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <span
style="color: #7a0874; font-weight: bold;">&#125;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Clean old backups</span><br
/> do_clean<span
style="color: #7a0874; font-weight: bold;">&#40;</span><span
style="color: #7a0874; font-weight: bold;">&#41;</span><br
/> <span
style="color: #7a0874; font-weight: bold;">&#123;</span><br
/> &nbsp; &nbsp; <span
style="color: #666666; font-style: italic;"># Nb weeks</span><br
/> &nbsp; &nbsp; <span
style="color: #007800;">NB_WEEKS_MAX</span>=<span
style="color: #000000;">4</span><br
/> &nbsp; &nbsp; <span
style="color: #007800;">LIMIT</span>=<span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #c20cb9; font-weight: bold;">expr</span> <span
style="color: #007800;">$WEEK_NUM</span> - <span
style="color: #007800;">$NB_WEEKS_MAX</span><span
style="color: #000000; font-weight: bold;">`</span><br
/> <br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$LIMIT</span> <span
style="color: #660033;">-le</span> <span
style="color: #000000;">0</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span><br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">NB</span>=<span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #c20cb9; font-weight: bold;">expr</span> <span
style="color: #007800;">$NB_WEEKS_MAX</span> - <span
style="color: #007800;">$WEEK_NUM</span><span
style="color: #000000; font-weight: bold;">`</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">NB</span>=<span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #c20cb9; font-weight: bold;">expr</span> <span
style="color: #000000;">52</span> - <span
style="color: #007800;">$NB</span><span
style="color: #000000; font-weight: bold;">`</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">LAST_YEAR</span>=<span
style="color: #000000; font-weight: bold;">`</span><span
style="color: #c20cb9; font-weight: bold;">expr</span> $<span
style="color: #7a0874; font-weight: bold;">&#40;</span><span
style="color: #c20cb9; font-weight: bold;">date</span> +<span
style="color: #000000; font-weight: bold;">%</span>Y<span
style="color: #7a0874; font-weight: bold;">&#41;</span> - <span
style="color: #000000;">1</span><span
style="color: #000000; font-weight: bold;">`</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">TO_DELETE_DIR</span>=<span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$ARCHIVE_ROOT</span>/<span
style="color: #007800;">$HOSTNAME</span>/<span
style="color: #007800;">$LAST_YEAR</span>-<span
style="color: #007800;">$NB</span>&quot;</span><br
/> <br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-d</span> <span
style="color: #007800;">$TO_DELETE_DIR</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;rm -rf <span
style="color: #007800;">$TO_DELETE_DIR</span>&quot;</span> &nbsp; <br
/> &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">rm</span> <span
style="color: #660033;">-rf</span> <span
style="color: #007800;">$TO_DELETE_DIR</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #007800;">TO_DELETE_DIR</span>=<span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$ARCHIVE_ROOT</span>/<span
style="color: #007800;">$HOSTNAME</span>/<span
style="color: #780078;">`date +%Y`</span>-<span
style="color: #007800;">$LIMIT</span>&quot;</span><br
/> <br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-d</span> <span
style="color: #007800;">$TO_DELETE_DIR</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;rm -rf <span
style="color: #007800;">$TO_DELETE_DIR</span>&quot;</span> &nbsp; <br
/> &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">rm</span> <span
style="color: #660033;">-rf</span> <span
style="color: #007800;">$TO_DELETE_DIR</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <span
style="color: #7a0874; font-weight: bold;">&#125;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;"># Some error handling and/or run our backup and accounting</span><br
/> <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$BACKUP_LIST</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span>; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$EXCLUDES_LIST</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span>; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-f</span> <span
style="color: #007800;">$BACKUP_LIST</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span>; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #660033;">-f</span> <span
style="color: #007800;">$EXCLUDES_LIST</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #666666; font-style: italic;"># make sure our backup tree exists</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$SSH_PORT</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">ssh</span> <span
style="color: #660033;">-p</span> <span
style="color: #007800;">$SSH_PORT</span> <span
style="color: #007800;">$REMOTE_USER</span><span
style="color: #000000; font-weight: bold;">@</span><span
style="color: #007800;">$BACKUP_SRV</span> <span
style="color: #c20cb9; font-weight: bold;">install</span> <span
style="color: #660033;">-d</span> <span
style="color: #007800;">$ARCHIVE_DIR</span><span
style="color: #000000; font-weight: bold;">/</span><span
style="color: #007800;">$CURRENT</span><br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; &nbsp; <span
style="color: #c20cb9; font-weight: bold;">ssh</span> <span
style="color: #007800;">$REMOTE_USER</span><span
style="color: #000000; font-weight: bold;">@</span><span
style="color: #007800;">$BACKUP_SRV</span> <span
style="color: #c20cb9; font-weight: bold;">install</span> <span
style="color: #660033;">-d</span> <span
style="color: #007800;">$ARCHIVE_DIR</span><span
style="color: #000000; font-weight: bold;">/</span><span
style="color: #007800;">$CURRENT</span><br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #007800;">$LOGFILE</span><br
/> &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;=========================================================&quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #007800;">$LOGFILE</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;<span
style="color: #780078;">`date`</span> : Backup started.&quot;</span> <span
style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span
style="color: #007800;">$LOGFILE</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; do_rsync <br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">if</span> <span
style="color: #7a0874; font-weight: bold;">&#91;</span> <span
style="color: #007800;">$?</span> <span
style="color: #660033;">-eq</span> <span
style="color: #000000;">0</span> <span
style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span
style="color: #000000; font-weight: bold;">then</span><br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;OK. Backup succeeded&quot;</span> <span
style="color: #000000; font-weight: bold;">|</span> <span
style="color: #c20cb9; font-weight: bold;">tee</span> <span
style="color: #660033;">-a</span> <span
style="color: #007800;">$LOGFILE</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; do_clean<br
/> &nbsp; &nbsp; do_accounting <span
style="color: #007800;">$MAILADDR</span><br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">exit</span> <span
style="color: #000000;">0</span><br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;Backup failed. See <span
style="color: #007800;">$LOGFILE</span> for debug info.&quot;</span> <span
style="color: #000000; font-weight: bold;">|</span> <span
style="color: #c20cb9; font-weight: bold;">tee</span> <span
style="color: #660033;">-a</span> <span
style="color: #007800;">$LOGFILE</span><br
/> &nbsp; &nbsp; do_accounting <span
style="color: #007800;">$MAILADDR</span><br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">exit</span> <span
style="color: #000000;">1</span><br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; &nbsp; &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$EXCLUDES_LIST</span>: File not found or not a regular file. Backup aborted&quot;</span> <span
style="color: #000000; font-weight: bold;">|</span> <span
style="color: #c20cb9; font-weight: bold;">tee</span> <span
style="color: #660033;">-a</span> <span
style="color: #007800;">$LOGFILE</span>; <br
/> &nbsp; <span
style="color: #7a0874; font-weight: bold;">exit</span> <span
style="color: #000000;">1</span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;<span
style="color: #007800;">$BACKUP_LIST</span>: File not found or not a regular file. Backup aborted&quot;</span> <span
style="color: #000000; font-weight: bold;">|</span> <span
style="color: #c20cb9; font-weight: bold;">tee</span> <span
style="color: #660033;">-a</span> <span
style="color: #007800;">$LOGFILE</span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">exit</span> <span
style="color: #000000;">1</span><br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;You must edit the script file and set the variable EXCLUDES_LIST&quot;</span> <span
style="color: #000000; font-weight: bold;">|</span> <span
style="color: #c20cb9; font-weight: bold;">tee</span> <span
style="color: #660033;">-a</span> <span
style="color: #007800;">$LOGFILE</span><br
/> &nbsp; &nbsp; <span
style="color: #7a0874; font-weight: bold;">exit</span> <span
style="color: #000000;">1</span><br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <span
style="color: #000000; font-weight: bold;">else</span><br
/> &nbsp; <span
style="color: #7a0874; font-weight: bold;">echo</span> <span
style="color: #ff0000;">&quot;You must edit the script file and set the variable BACKUP_LIST&quot;</span> <span
style="color: #000000; font-weight: bold;">|</span> <span
style="color: #c20cb9; font-weight: bold;">tee</span> <span
style="color: #660033;">-a</span> <span
style="color: #007800;">$LOGFILE</span><br
/> &nbsp; <span
style="color: #7a0874; font-weight: bold;">exit</span> <span
style="color: #000000;">1</span><br
/> <span
style="color: #000000; font-weight: bold;">fi</span><br
/> <br
/> <span
style="color: #7a0874; font-weight: bold;">exit</span> <span
style="color: #000000;">2</span></div></div><p
style="text-align: justify;">Je sauvegarde ces fichiers :</p><div
class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var/www<br
/> var/log<br
/> etc/apache2<br
/> etc/apt/sources.list<br
/> etc/fstab<br
/> etc/crontab<br
/> etc/hostname<br
/> etc/hosts<br
/> etc/group<br
/> etc/memcached.conf<br
/> etc/mysql<br
/> etc/nginx<br
/> etc/php5<br
/> etc/phpmyadmin<br
/> etc/postfix<br
/> etc/ssh<br
/> etc/fail2ban<br
/> home</div></div><p
style="text-align: justify;">Et j&#8217;exclue ceux-là :</p><div
class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">home/backuper/backup-files.log<br
/> home/backuper/files<br
/> etc/mysql/debian.cnf<br
/> etc/ssh/ssh_host*<br
/> etc/phpmyadmin/htpasswd.setup<br
/> .*_history<br
/> .Xauthority<br
/> .lesshst<br
/> .ssh</div></div><p
style="text-align: justify;"><h2>Automatisation</h2><p
style="text-align: justify;">J&#8217;ai rajouté dans mon <em>crontab</em>, deux lignes pour lancer les sauvegardes différées de 2h :</p><p
style="text-align: justify;"><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #000000;">0</span> <span
style="color: #000000;">1</span> <span
style="color: #000000; font-weight: bold;">*</span> <span
style="color: #000000; font-weight: bold;">*</span> <span
style="color: #000000; font-weight: bold;">*</span> <span
style="color: #000000; font-weight: bold;">/</span>home<span
style="color: #000000; font-weight: bold;">/</span>backuper<span
style="color: #000000; font-weight: bold;">/</span>scripts<span
style="color: #000000; font-weight: bold;">/</span>backup_mysql.sh<br
/> <span
style="color: #000000;">0</span> <span
style="color: #000000;">3</span> <span
style="color: #000000; font-weight: bold;">*</span> <span
style="color: #000000; font-weight: bold;">*</span> <span
style="color: #000000; font-weight: bold;">*</span> <span
style="color: #000000; font-weight: bold;">/</span>home<span
style="color: #000000; font-weight: bold;">/</span>backuper<span
style="color: #000000; font-weight: bold;">/</span>scripts<span
style="color: #000000; font-weight: bold;">/</span>backup_files.sh</div></div><p></host_ftp></pass_ftp></user_ftp></password></host></user></code><br
/><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li><a
href='http://www.willdurand.fr/dedibox-v3-nginx-php-fpm-apache2-apc-memcached-mysql/' title='Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL'>Dédibox v3 : Nginx + PHP-FPM + Apache2 + APC + Memcached + MySQL</a></li><li><a
href='http://www.willdurand.fr/gravatar-de-beaux-avatars-dans-les-commentaires/' title='Gravatar : De beaux avatars dans les commentaires'>Gravatar : De beaux avatars dans les commentaires</a></li><li><a
href='http://www.willdurand.fr/api-google-analytics-une-classe-php5-et-des-resultats-d-integration/' title='API Google Analytics – Une classe PHP5 et des résultats d’intégration'>API Google Analytics – Une classe PHP5 et des résultats d’intégration</a></li><li><a
href='http://www.willdurand.fr/api-google-analytics-round-2-graphiques-et-statistiques-par-page/' title='API Google Analytics Round 2 – Graphiques et statistiques par page'>API Google Analytics Round 2 – Graphiques et statistiques par page</a></li><li><a
href='http://www.willdurand.fr/api-google-analytics-decouverte-par-lexemple/' title='API Google Analytics, découverte par l’exemple'>API Google Analytics, découverte par l’exemple</a></li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;title=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL&amp;bodytext=Bonjour%2C%20suite%20%C3%A0%20mon%20passage%20en%20d%C3%A9di%C3%A9%20%28D%C3%A9dibox%20v3%29%20et%20%C3%A0%20sa%20configuration%20aujourd%27hui%20termin%C3%A9e%2C%20j%27ai%20trouv%C3%A9%20n%C3%A9cessaire%20de%20m%27occuper%20de%20la%20sauvegarde%20des%20donn%C3%A9es.%20Pour%20cela%2C%20je%20me%20suis%20aid%C3%A9%20de%20plusieurs%20sources%20%3A%0D%0A%0D%0A%09http%3A%2F%2Fwww.ruas-blog.com%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;title=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;title=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL&amp;notes=Bonjour%2C%20suite%20%C3%A0%20mon%20passage%20en%20d%C3%A9di%C3%A9%20%28D%C3%A9dibox%20v3%29%20et%20%C3%A0%20sa%20configuration%20aujourd%27hui%20termin%C3%A9e%2C%20j%27ai%20trouv%C3%A9%20n%C3%A9cessaire%20de%20m%27occuper%20de%20la%20sauvegarde%20des%20donn%C3%A9es.%20Pour%20cela%2C%20je%20me%20suis%20aid%C3%A9%20de%20plusieurs%20sources%20%3A%0D%0A%0D%0A%09http%3A%2F%2Fwww.ruas-blog.com%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;t=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL%20-%20http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;title=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL&amp;annotation=Bonjour%2C%20suite%20%C3%A0%20mon%20passage%20en%20d%C3%A9di%C3%A9%20%28D%C3%A9dibox%20v3%29%20et%20%C3%A0%20sa%20configuration%20aujourd%27hui%20termin%C3%A9e%2C%20j%27ai%20trouv%C3%A9%20n%C3%A9cessaire%20de%20m%27occuper%20de%20la%20sauvegarde%20des%20donn%C3%A9es.%20Pour%20cela%2C%20je%20me%20suis%20aid%C3%A9%20de%20plusieurs%20sources%20%3A%0D%0A%0D%0A%09http%3A%2F%2Fwww.ruas-blog.com%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;title=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=Bonjour%2C%20suite%20%C3%A0%20mon%20passage%20en%20d%C3%A9di%C3%A9%20%28D%C3%A9dibox%20v3%29%20et%20%C3%A0%20sa%20configuration%20aujourd%27hui%20termin%C3%A9e%2C%20j%27ai%20trouv%C3%A9%20n%C3%A9cessaire%20de%20m%27occuper%20de%20la%20sauvegarde%20des%20donn%C3%A9es.%20Pour%20cela%2C%20je%20me%20suis%20aid%C3%A9%20de%20plusieurs%20sources%20%3A%0D%0A%0D%0A%09http%3A%2F%2Fwww.ruas-blog.com%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;t=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;title=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL&amp;body=Bonjour%2C%20suite%20%C3%A0%20mon%20passage%20en%20d%C3%A9di%C3%A9%20%28D%C3%A9dibox%20v3%29%20et%20%C3%A0%20sa%20configuration%20aujourd%27hui%20termin%C3%A9e%2C%20j%27ai%20trouv%C3%A9%20n%C3%A9cessaire%20de%20m%27occuper%20de%20la%20sauvegarde%20des%20donn%C3%A9es.%20Pour%20cela%2C%20je%20me%20suis%20aid%C3%A9%20de%20plusieurs%20sources%20%3A%0D%0A%0D%0A%09http%3A%2F%2Fwww.ruas-blog.com%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&title=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Fsauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql%2F&amp;submitHeadline=Sauvegarde%20incr%C3%A9mentale%20avec%20rsync%20%3A%20fichiers%20et%20base%20de%20donn%C3%A9es%20MySQL&amp;submitSummary=Bonjour%2C%20suite%20%C3%A0%20mon%20passage%20en%20d%C3%A9di%C3%A9%20%28D%C3%A9dibox%20v3%29%20et%20%C3%A0%20sa%20configuration%20aujourd%27hui%20termin%C3%A9e%2C%20j%27ai%20trouv%C3%A9%20n%C3%A9cessaire%20de%20m%27occuper%20de%20la%20sauvegarde%20des%20donn%C3%A9es.%20Pour%20cela%2C%20je%20me%20suis%20aid%C3%A9%20de%20plusieurs%20sources%20%3A%0D%0A%0D%0A%09http%3A%2F%2Fwww.ruas-blog.com%2F&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/iwnvprZsAlk" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/sauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql/feed/</wfw:commentRss> <slash:comments>7</slash:comments> <feedburner:origLink>http://www.willdurand.fr/sauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sauvegarde-incrementale-avec-rsync-fichiers-et-base-de-donnees-mysql</feedburner:origLink></item> <item><title>Intégrer un gestionnaire de fichiers dans dmCkEditorPlugin</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/qlKBvUsdPNg/</link> <comments>http://www.willdurand.fr/integrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin/#comments</comments> <pubDate>Tue, 06 Jul 2010 00:09:45 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Diem Project]]></category> <category><![CDATA[Tips]]></category> <category><![CDATA[CkEditor]]></category> <category><![CDATA[Diem]]></category> <category><![CDATA[KFM]]></category> <category><![CDATA[Symfony]]></category><guid isPermaLink="false">http://www.willdurand.fr/?p=465</guid> <description><![CDATA[Bonjour, je laisse ici une petite astuce pour intégrer KFM (http://kfm.verens.com/), un excellent gestionnaire de fichiers en AJAX, au plugin Diem nommé dmCkEditorPlugin. Ce plugin offre un nouveau widget contenant, comme son nom l&#8217;indique, l&#8217;éditeur WYSIWYG CkEditor. Pour installer KFM, on télécharge la dernière version que l&#8217;on place dans dmCkEditorPlugin/js/kfm. Ensuite on ouvre dmCkEditorPlugin/config/dm/config.yml et [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Bonjour,</p><p
style="text-align: justify;">je laisse ici une petite astuce pour intégrer KFM (<a
href="http://kfm.verens.com/">http://kfm.verens.com/</a>), un excellent gestionnaire de fichiers en AJAX, au plugin Diem nommé dmCkEditorPlugin. Ce plugin offre un nouveau widget contenant, comme son nom l&#8217;indique, l&#8217;éditeur WYSIWYG CkEditor.</p><p
style="text-align: justify;"><p
style="text-align: justify;">Pour installer KFM, on télécharge la dernière version que l&#8217;on place dans <em>dmCkEditorPlugin/js/kfm.</em></p><p
style="text-align: justify;">Ensuite on ouvre <em>dmCkEditorPlugin/config/dm/config.yml</em> et on ajoute cette ligne :</p><div
class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">default:<br
/> &nbsp; ckeditor:<br
/> &nbsp; &nbsp; config:<br
/> &nbsp; &nbsp; &nbsp; ...<br
/> &nbsp; &nbsp; &nbsp; filebrowserBrowseUrl: <span
style="color: #000000; font-weight: bold;">/</span>dmCkEditorPlugin<span
style="color: #000000; font-weight: bold;">/</span>js<span
style="color: #000000; font-weight: bold;">/</span>kfm<span
style="color: #000000; font-weight: bold;">/</span>index.php</div></div><p
style="text-align: justify;">&nbsp;</p><p
style="text-align: justify;">KFM utilise une base de données, il faut donc la configurer. Le choix que j&#8217;ai fait est de parser le fichier <em>databases.yml</em> afin de récupérer les paramètres de connexion directement. Il faut donc modifier le fichier de configuration de KFM (<em>dmCkEditorPlugin/js/kfm/configuration.php</em>). J&#8217;ai placé ce code tout en haut en remplaçant les variables en rapport avec la base de données :</p><div
class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div
class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span
style="color: #b1b100;">require_once</span><span
style="color: #009900;">&#40;</span><a
href="http://www.php.net/dirname"><span
style="color: #990000;">dirname</span></a><span
style="color: #009900;">&#40;</span><span
style="color: #009900; font-weight: bold;">__FILE__</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">.</span><span
style="color: #0000ff;">'/../../../../lib/vendor/diem/symfony/lib/yaml/sfYaml.php'</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">;</span><br
/> <br
/> <span
style="color: #000088;">$config</span> <span
style="color: #339933;">=</span> sfYaml<span
style="color: #339933;">::</span><span
style="color: #004000;">load</span><span
style="color: #009900;">&#40;</span><a
href="http://www.php.net/dirname"><span
style="color: #990000;">dirname</span></a><span
style="color: #009900;">&#40;</span><span
style="color: #009900; font-weight: bold;">__FILE__</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">.</span><span
style="color: #0000ff;">'/../../../../config/databases.yml'</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">;</span><br
/> <br
/> <span
style="color: #000088;">$dsn</span> &nbsp;<span
style="color: #339933;">=</span> <span
style="color: #000088;">$config</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'all'</span><span
style="color: #009900;">&#93;</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'doctrine'</span><span
style="color: #009900;">&#93;</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'param'</span><span
style="color: #009900;">&#93;</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'dsn'</span><span
style="color: #009900;">&#93;</span><span
style="color: #339933;">;</span><br
/> <a
href="http://www.php.net/preg_match"><span
style="color: #990000;">preg_match</span></a><span
style="color: #009900;">&#40;</span><span
style="color: #0000ff;">'#(?P\w+):host=(?P\w+);dbname=(?P\w+);#'</span><span
style="color: #339933;">,</span> <span
style="color: #000088;">$dsn</span><span
style="color: #339933;">,</span> <span
style="color: #000088;">$matches</span><span
style="color: #009900;">&#41;</span><span
style="color: #339933;">;</span><br
/> <br
/> <span
style="color: #666666; font-style: italic;">// what type of database to use</span><br
/> <span
style="color: #666666; font-style: italic;">// values allowed: mysql, pgsql, sqlite, sqlitepdo</span><br
/> <span
style="color: #000088;">$kfm_db_type</span> <span
style="color: #339933;">=</span> <span
style="color: #000088;">$matches</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'type'</span><span
style="color: #009900;">&#93;</span><span
style="color: #339933;">;</span><br
/> <span
style="color: #666666; font-style: italic;">// the following options should only be filled if you are not using sqlite/sqlitepdo as the database</span><br
/> <span
style="color: #000088;">$kfm_db_prefix</span> &nbsp; <span
style="color: #339933;">=</span> <span
style="color: #0000ff;">'kfm_'</span><span
style="color: #339933;">;</span><br
/> <span
style="color: #000088;">$kfm_db_host</span> &nbsp; &nbsp; <span
style="color: #339933;">=</span> <span
style="color: #000088;">$matches</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'host'</span><span
style="color: #009900;">&#93;</span><span
style="color: #339933;">;</span><br
/> <span
style="color: #000088;">$kfm_db_name</span> &nbsp; &nbsp; <span
style="color: #339933;">=</span> <span
style="color: #000088;">$matches</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'dbname'</span><span
style="color: #009900;">&#93;</span><span
style="color: #339933;">;</span><br
/> <span
style="color: #000088;">$kfm_db_username</span> <span
style="color: #339933;">=</span> <span
style="color: #000088;">$config</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'all'</span><span
style="color: #009900;">&#93;</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'doctrine'</span><span
style="color: #009900;">&#93;</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'param'</span><span
style="color: #009900;">&#93;</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'username'</span><span
style="color: #009900;">&#93;</span><span
style="color: #339933;">;</span><br
/> <span
style="color: #000088;">$kfm_db_password</span> <span
style="color: #339933;">=</span> <span
style="color: #000088;">$config</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'all'</span><span
style="color: #009900;">&#93;</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'doctrine'</span><span
style="color: #009900;">&#93;</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'param'</span><span
style="color: #009900;">&#93;</span><span
style="color: #009900;">&#91;</span><span
style="color: #0000ff;">'password'</span><span
style="color: #009900;">&#93;</span><span
style="color: #339933;">;</span><br
/> <span
style="color: #000088;">$kfm_db_port</span> &nbsp; &nbsp; <span
style="color: #339933;">=</span> <span
style="color: #0000ff;">''</span><span
style="color: #339933;">;</span></div></div><p
style="text-align: justify;">C&#8217;est une manière simple et efficace d&#8217;intégrer ce gestionnaire de fichiers. Ce n&#8217;est pas parfait mais fonctionnel <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li><a
href='http://www.willdurand.fr/deploiement-automatise-avec-capistrano-et-git-pour-symfony-et-diem/' title='Déploiement automatisé avec Capistrano et Git pour symfony et Diem'>Déploiement automatisé avec Capistrano et Git pour symfony et Diem</a></li><li><a
href='http://www.willdurand.fr/symfony-rencontre-hudson-mantis-et-les-autres/' title='symfony rencontre Hudson, Mantis et les autres'>symfony rencontre Hudson, Mantis et les autres</a></li><li><a
href='http://www.willdurand.fr/creation-automatique-dun-projet-symfony-mysql-git-et-apache2/' title='Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2'>Création automatique d&#8217;un projet symfony + MySQL + Git et Apache2</a></li><li><a
href='http://www.willdurand.fr/faut-il-tester-les-tests/' title='Faut-il tester&#8230; les tests ?'>Faut-il tester&#8230; les tests ?</a></li><li><a
href='http://www.willdurand.fr/lerreur-suexec-policy-violation-avec-symfony-chez-ovh/' title='L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)'>L&#8217;erreur &laquo;&nbsp;suexec policy violation&nbsp;&raquo; avec symfony (chez OVH&#8230;)</a></li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;title=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin&amp;bodytext=Bonjour%2C%0D%0Aje%20laisse%20ici%20une%20petite%20astuce%20pour%20int%C3%A9grer%20KFM%20%28http%3A%2F%2Fkfm.verens.com%2F%29%2C%20un%20excellent%20gestionnaire%20de%20fichiers%20en%20AJAX%2C%20au%20plugin%20Diem%20nomm%C3%A9%20dmCkEditorPlugin.%20Ce%20plugin%20offre%20un%20nouveau%20widget%20contenant%2C%20comme%20son%20nom%20l%27indique%2C%20l%27%C3%A9di'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;title=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;title=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin&amp;notes=Bonjour%2C%0D%0Aje%20laisse%20ici%20une%20petite%20astuce%20pour%20int%C3%A9grer%20KFM%20%28http%3A%2F%2Fkfm.verens.com%2F%29%2C%20un%20excellent%20gestionnaire%20de%20fichiers%20en%20AJAX%2C%20au%20plugin%20Diem%20nomm%C3%A9%20dmCkEditorPlugin.%20Ce%20plugin%20offre%20un%20nouveau%20widget%20contenant%2C%20comme%20son%20nom%20l%27indique%2C%20l%27%C3%A9di'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;t=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin%20-%20http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;title=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin&amp;annotation=Bonjour%2C%0D%0Aje%20laisse%20ici%20une%20petite%20astuce%20pour%20int%C3%A9grer%20KFM%20%28http%3A%2F%2Fkfm.verens.com%2F%29%2C%20un%20excellent%20gestionnaire%20de%20fichiers%20en%20AJAX%2C%20au%20plugin%20Diem%20nomm%C3%A9%20dmCkEditorPlugin.%20Ce%20plugin%20offre%20un%20nouveau%20widget%20contenant%2C%20comme%20son%20nom%20l%27indique%2C%20l%27%C3%A9di'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;title=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=Bonjour%2C%0D%0Aje%20laisse%20ici%20une%20petite%20astuce%20pour%20int%C3%A9grer%20KFM%20%28http%3A%2F%2Fkfm.verens.com%2F%29%2C%20un%20excellent%20gestionnaire%20de%20fichiers%20en%20AJAX%2C%20au%20plugin%20Diem%20nomm%C3%A9%20dmCkEditorPlugin.%20Ce%20plugin%20offre%20un%20nouveau%20widget%20contenant%2C%20comme%20son%20nom%20l%27indique%2C%20l%27%C3%A9di'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;t=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;title=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin&amp;body=Bonjour%2C%0D%0Aje%20laisse%20ici%20une%20petite%20astuce%20pour%20int%C3%A9grer%20KFM%20%28http%3A%2F%2Fkfm.verens.com%2F%29%2C%20un%20excellent%20gestionnaire%20de%20fichiers%20en%20AJAX%2C%20au%20plugin%20Diem%20nomm%C3%A9%20dmCkEditorPlugin.%20Ce%20plugin%20offre%20un%20nouveau%20widget%20contenant%2C%20comme%20son%20nom%20l%27indique%2C%20l%27%C3%A9di'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&title=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Fintegrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin%2F&amp;submitHeadline=Int%C3%A9grer%20un%20gestionnaire%20de%20fichiers%20dans%20dmCkEditorPlugin&amp;submitSummary=Bonjour%2C%0D%0Aje%20laisse%20ici%20une%20petite%20astuce%20pour%20int%C3%A9grer%20KFM%20%28http%3A%2F%2Fkfm.verens.com%2F%29%2C%20un%20excellent%20gestionnaire%20de%20fichiers%20en%20AJAX%2C%20au%20plugin%20Diem%20nomm%C3%A9%20dmCkEditorPlugin.%20Ce%20plugin%20offre%20un%20nouveau%20widget%20contenant%2C%20comme%20son%20nom%20l%27indique%2C%20l%27%C3%A9di&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/qlKBvUsdPNg" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/integrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://www.willdurand.fr/integrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=integrer-un-gestionnaire-de-fichiers-dans-dmckeditorplugin</feedburner:origLink></item> <item><title>Place au changement !</title><link>http://feedproxy.google.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~3/vdZzg-WCQvw/</link> <comments>http://www.willdurand.fr/place-au-changement/#comments</comments> <pubDate>Sun, 04 Jul 2010 22:14:49 +0000</pubDate> <dc:creator>Will</dc:creator> <category><![CDATA[Ma vie]]></category><guid isPermaLink="false">http://88.191.121.241:8080/?p=436</guid> <description><![CDATA[Bonjour ! Non, vous ne vous êtes pas trompés. J&#8217;ai effectivement changé de moteur de blog, passant de mon propre moteur (wMVC) à WordPress. Pourquoi ? Ceux qui me connaissent savent ce que je pense de WordPress (via mister @palleas) mais j&#8217;ai franchi le pas pour ce blog personnel. Pourquoi donc ? Pour des raisons [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;"><em>Bonjour !</em></p><p
style="text-align: justify;"><em>Non, vous ne vous êtes pas trompés. J&#8217;ai effectivement changé de moteur de blog, passant de mon propre moteur (wMVC) à WordPress.</em></p><p
style="text-align: justify;"><h2>Pourquoi ?</h2><p
style="text-align: justify;">Ceux qui me connaissent savent ce que je pense de WordPress (via <a
href="http://palleas.com/je-suis-developpeur-wordpress">mister @palleas</a>) mais j&#8217;ai franchi le pas pour ce blog personnel. <strong>Pourquoi donc ?</strong> Pour des <strong>raisons pratiques</strong> uniquement. Le nombre de plugins, le nombre de fonctionnalités, &#8230; en fait un bon produit pour faire un blog &laquo;&nbsp;Ikéa&nbsp;&raquo;, je décompresse, je configure, ça marche, point.</p><p
style="text-align: justify;">J&#8217;ai donc repris l&#8217;ensemble des fonctionnalités de mon ancien blog (toutes écrites par mes soins), j&#8217;ai importé les articles et j&#8217;en ai profité pour changer de thème. Fini le paysage campagnard, je passe sur un thème plus &laquo;&nbsp;clean&nbsp;&raquo;, plus sobre et qui privilégie le contenu au reste.</p><p
style="text-align: justify;"><h2 style="text-align: justify;">Autre raison ?</h2><p
style="text-align: justify;">En fait, oui. Ce n&#8217;était pas nécessaire pour moi mais j&#8217;ai fait cette manip&#8217; pour une autre raison. J&#8217;ai récemment pris une Dédibox v3, ce blog tourne dessus entre autres.</p><p
style="text-align: justify;">Le serveur web est Nginx (&laquo;&nbsp;engine X&nbsp;&raquo;), j&#8217;y reviendrai dans de prochains articles. J&#8217;ai voulu tester les performances de cette Dédibox et avec un WordPress + Nginx + APC bien configuré, j&#8217;ai été bluffé. Voilà le résultat, ce blog passe en prod <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><p
style="text-align: justify;"><h2 style="text-align: justify;">Et sinon ?</h2><p
style="text-align: justify;">Fin d&#8217;année, je change de statut juridique avec un associé et des financiers : <a
title="Bazinga, développement web et mobile - Symfony, Diem, PHP, Java, iPhone, Android, ..." href="http://www.bazingaweb.fr">Bazinga</a>, l&#8217;agence web de développement web (Symfony, Diem) et mobile (iPhone, Android) va naître. (Enfin !). J&#8217;y reviendrai également dans un prochain article.</p><p
style="text-align: justify;">J&#8217;ai pas mal d&#8217;articles en préparation depuis un petit moment sur du Git, Capistrano, Symfony, Diem, Nginx, et autres. J&#8217;espère pouvoir les écrire au plus vite.</p><p
style="text-align: justify;"><p
style="text-align: justify;"><p
style="text-align: justify;"><p
style="text-align: justify;">N&#8217;hésitez pas à me donner vos avis, impressions, &#8230; sur ces changements <img
src='http://www.willdurand.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><h3 class='related_post_title'>Related Posts</h3><ul
class='related_post'><li>No Related Posts</li></ul> <a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/printfriendly.png' class='sociable-img sociable-hovers ' title='Print' alt='Print' /></a><a
rel='nofollow' target='_blank'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;title=Place%20au%20changement%20%21&amp;bodytext=Bonjour%20%21%0D%0ANon%2C%20vous%20ne%20vous%20%C3%AAtes%20pas%20tromp%C3%A9s.%20J%27ai%20effectivement%20chang%C3%A9%20de%20moteur%20de%20blog%2C%20passant%20de%20mon%20propre%20moteur%20%28wMVC%29%20%C3%A0%20WordPress.%0D%0A%0D%0A%0D%0APourquoi%20%3F%0D%0ACeux%20qui%20me%20connaissent%20savent%20ce%20que%20je%20pense%20de%20WordPress%20%28via%20mister%20%40palleas%29%20mais%20j'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/digg.png' class='sociable-img sociable-hovers ' title='Digg' alt='Digg' /></a><a
rel='nofollow' target='_blank'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;title=Place%20au%20changement%20%21'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png' class='sociable-img sociable-hovers ' title='StumbleUpon' alt='StumbleUpon' /></a><a
rel='nofollow' target='_blank'  href='http://delicious.com/post?url=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;title=Place%20au%20changement%20%21&amp;notes=Bonjour%20%21%0D%0ANon%2C%20vous%20ne%20vous%20%C3%AAtes%20pas%20tromp%C3%A9s.%20J%27ai%20effectivement%20chang%C3%A9%20de%20moteur%20de%20blog%2C%20passant%20de%20mon%20propre%20moteur%20%28wMVC%29%20%C3%A0%20WordPress.%0D%0A%0D%0A%0D%0APourquoi%20%3F%0D%0ACeux%20qui%20me%20connaissent%20savent%20ce%20que%20je%20pense%20de%20WordPress%20%28via%20mister%20%40palleas%29%20mais%20j'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/delicious.png' class='sociable-img sociable-hovers ' title='del.icio.us' alt='del.icio.us' /></a><a
rel='nofollow' target='_blank'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;t=Place%20au%20changement%20%21'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/facebook.png' class='sociable-img sociable-hovers ' title='Facebook' alt='Facebook' /></a><a
rel='nofollow' target='_blank'  href='http://twitter.com/home?status=Place%20au%20changement%20%21%20-%20http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/twitter.png' class='sociable-img sociable-hovers ' title='Twitter' alt='Twitter' /></a><a
rel='nofollow' target='_blank'  href='http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;title=Place%20au%20changement%20%21&amp;annotation=Bonjour%20%21%0D%0ANon%2C%20vous%20ne%20vous%20%C3%AAtes%20pas%20tromp%C3%A9s.%20J%27ai%20effectivement%20chang%C3%A9%20de%20moteur%20de%20blog%2C%20passant%20de%20mon%20propre%20moteur%20%28wMVC%29%20%C3%A0%20WordPress.%0D%0A%0D%0A%0D%0APourquoi%20%3F%0D%0ACeux%20qui%20me%20connaissent%20savent%20ce%20que%20je%20pense%20de%20WordPress%20%28via%20mister%20%40palleas%29%20mais%20j'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png' class='sociable-img sociable-hovers ' title='Google Bookmarks' alt='Google Bookmarks' /></a><a
rel='nofollow' target='_blank'  href='http://www.friendfeed.com/share?title=Place%20au%20changement%20%21&amp;link=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/friendfeed.png' class='sociable-img sociable-hovers ' title='FriendFeed' alt='FriendFeed' /></a><a
rel='nofollow' target='_blank'  href='http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;title=Place%20au%20changement%20%21&amp;source=William%26%23039%3Bs+Blog+D%C3%A9veloppeur+web+ind%C3%A9pendant%2C+%C3%A9tudiant+et+passionn%C3%A9+%21+%23symfony+%23Diem+%23Git+%23Nginx+%23WebPerfs&amp;summary=Bonjour%20%21%0D%0ANon%2C%20vous%20ne%20vous%20%C3%AAtes%20pas%20tromp%C3%A9s.%20J%27ai%20effectivement%20chang%C3%A9%20de%20moteur%20de%20blog%2C%20passant%20de%20mon%20propre%20moteur%20%28wMVC%29%20%C3%A0%20WordPress.%0D%0A%0D%0A%0D%0APourquoi%20%3F%0D%0ACeux%20qui%20me%20connaissent%20savent%20ce%20que%20je%20pense%20de%20WordPress%20%28via%20mister%20%40palleas%29%20mais%20j'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/linkedin.png' class='sociable-img sociable-hovers ' title='LinkedIn' alt='LinkedIn' /></a><a
rel='nofollow' target='_blank'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;t=Place%20au%20changement%20%21'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/myspace.png' class='sociable-img sociable-hovers ' title='MySpace' alt='MySpace' /></a><a
rel='nofollow' target='_blank'  href='http://www.netvibes.com/share?title=Place%20au%20changement%20%21&amp;url=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/netvibes.png' class='sociable-img sociable-hovers ' title='Netvibes' alt='Netvibes' /></a><a
rel='nofollow' target='_blank'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;partner=sociable'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/pdf.png' class='sociable-img sociable-hovers ' title='PDF' alt='PDF' /></a><a
rel='nofollow' target='_blank'  href='http://ping.fm/ref/?link=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;title=Place%20au%20changement%20%21&amp;body=Bonjour%20%21%0D%0ANon%2C%20vous%20ne%20vous%20%C3%AAtes%20pas%20tromp%C3%A9s.%20J%27ai%20effectivement%20chang%C3%A9%20de%20moteur%20de%20blog%2C%20passant%20de%20mon%20propre%20moteur%20%28wMVC%29%20%C3%A0%20WordPress.%0D%0A%0D%0A%0D%0APourquoi%20%3F%0D%0ACeux%20qui%20me%20connaissent%20savent%20ce%20que%20je%20pense%20de%20WordPress%20%28via%20mister%20%40palleas%29%20mais%20j'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/ping.png' class='sociable-img sociable-hovers ' title='Ping.fm' alt='Ping.fm' /></a><a
rel='nofollow' target='_blank'  href='http://www.willdurand.fr/feed/'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/rss.png' class='sociable-img sociable-hovers ' title='RSS' alt='RSS' /></a><a
rel='nofollow' target='_blank'  href='http://technorati.com/faves?add=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/technorati.png' class='sociable-img sociable-hovers ' title='Technorati' alt='Technorati' /></a><a
rel='nofollow' target='_blank'  href='http://www.viadeo.com/shareit/share/?url=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&title=Place%20au%20changement%20%21&urllanguage=fr'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/viadeo.png' class='sociable-img sociable-hovers ' title='viadeo FR' alt='viadeo FR' /></a><a
rel='nofollow' target='_blank'  href='http://www.wikio.com/vote?url=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/wikio.png' class='sociable-img sociable-hovers ' title='Wikio' alt='Wikio' /></a><a
rel='nofollow' target='_blank'  href='http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fwww.willdurand.fr%2Fplace-au-changement%2F&amp;submitHeadline=Place%20au%20changement%20%21&amp;submitSummary=Bonjour%20%21%0D%0ANon%2C%20vous%20ne%20vous%20%C3%AAtes%20pas%20tromp%C3%A9s.%20J%27ai%20effectivement%20chang%C3%A9%20de%20moteur%20de%20blog%2C%20passant%20de%20mon%20propre%20moteur%20%28wMVC%29%20%C3%A0%20WordPress.%0D%0A%0D%0A%0D%0APourquoi%20%3F%0D%0ACeux%20qui%20me%20connaissent%20savent%20ce%20que%20je%20pense%20de%20WordPress%20%28via%20mister%20%40palleas%29%20mais%20j&amp;submitCategory=science&amp;submitAssetType=text'><img
src='http://www.willdurand.fr/wp-content/plugins/sociable-30/images/default/16/yahoobuzz.png' class='sociable-img sociable-hovers ' title='Yahoo! Buzz' alt='Yahoo! Buzz' /></a><br/><br/><img src="http://feeds.feedburner.com/~r/WilliamDurand-WebDeveloper-RecentPosts/~4/vdZzg-WCQvw" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://www.willdurand.fr/place-au-changement/feed/</wfw:commentRss> <slash:comments>4</slash:comments> <feedburner:origLink>http://www.willdurand.fr/place-au-changement/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=place-au-changement</feedburner:origLink></item> </channel> </rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)
Database Caching 20/58 queries in 0.036 seconds using memcached
Object Caching 3975/4078 objects using memcached

Served from: www.willdurand.fr @ 2010-09-03 10:06:24 -->
