<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>derrien.me &#124; blog &#187; Développement web</title>
	<atom:link href="http://derrien.me/blog/category/developpement-web/feed" rel="self" type="application/rss+xml" />
	<link>https://derrien.me/blog</link>
	<description></description>
	<lastBuildDate>Sun, 10 Apr 2011 14:02:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>StackedGallery, un plugin jQuery qui utilise CSS3</title>
		<link>https://derrien.me/blog/stackedgallery-un-plugin-jquery-qui-utilise-css3.html</link>
		<comments>https://derrien.me/blog/stackedgallery-un-plugin-jquery-qui-utilise-css3.html#comments</comments>
		<pubDate>Thu, 09 Sep 2010 17:03:43 +0000</pubDate>
		<dc:creator>Ishiro</dc:creator>
				<category><![CDATA[Développement web]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://derrien.me/blog/?p=247</guid>
		<description><![CDATA[StackedGallery est un plugin jQuery qui permet d&#8217;afficher tour à tour des images empilées les unes sur les autres avec un effet de FadeIn / FadeOut. Ce n&#8217;est pas clair ? Rien ne vaut une démo. C&#8217;est un plugin léger, simple à mettre en œuvre et qui utilise CSS3 (une dégradation élégante pour IE est [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://github.com/Ishiro/StackedGallery">StackedGallery</a> est un plugin jQuery qui permet d&#8217;afficher tour à tour des images empilées les unes sur les autres avec un effet de FadeIn / FadeOut. Ce n&#8217;est pas clair ? Rien ne vaut <a href="http://derrien.me/blog/demo/stacked-gallery/">une démo</a>. C&#8217;est un plugin léger, simple à mettre en œuvre et qui utilise CSS3 (une dégradation élégante pour IE est possible). Il a été développé pour mes propres besoins. Feel free to fork. <img src='https://derrien.me/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<span id="more-247"></span></p>
<h2>Options de configuration</h2>
<ul>
<li><strong>display_duration :</strong> Durée d&#8217;affichage de l&#8217;image,</li>
<li><strong>fadeout_duration :</strong> Durée de l&#8217;effet de disparition du premier-plan,</li>
<li><strong>fadein_duration :</strong> Durée de l&#8217;effet de réapparition en arrière-plan.</li>
</ul>
<h2>Mise en oeuvre</h2>
<h3>HTML</h3>
<p>Une liste d&#8217;images, rien de plus simple :</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;ul id=&quot;photos&quot;&gt;
  &lt;li id=&quot;photo-01&quot;&gt;&lt;img src=&quot;images/photo-01.png&quot; /&gt;&lt;/li&gt;
  &lt;li id=&quot;photo-02&quot;&gt;&lt;img src=&quot;images/photo-02.png&quot; /&gt;&lt;/li&gt;
  &lt;li id=&quot;photo-03&quot;&gt;&lt;img src=&quot;images/photo-03.png&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;</pre></div></div>

<h3>Javascript</h3>
<p>Pas de surprise de ce côté là non plus :</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/jquery-1.4.2.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;./stacked-gallery.js&quot;&gt;&lt;/script&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
  $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#photos'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">stackedGallery</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> display_duration<span style="color: #339933;">:</span> <span style="color: #CC0000;">4000</span><span style="color: #339933;">,</span> fadeout_duration<span style="color: #339933;">:</span> <span style="color: #CC0000;">1000</span><span style="color: #339933;">,</span> fadein_duration<span style="color: #339933;">:</span> <span style="color: #CC0000;">200</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<h3>CSS</h3>
<p>On utilise les propriétés CSS3 <code>box-shadow</code> et <code>transform</code> pour obtenir l&#8217;effet désiré :</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">body <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#ddd</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
ul<span style="color: #cc00cc;">#photos</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">relative</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">300px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">300px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">65px</span> <span style="color: #933;">65px</span> <span style="color: #993333;">auto</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">list-style-type</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
ul<span style="color: #cc00cc;">#photos</span> li <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">286px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">286px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">7px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#fff9f9</span><span style="color: #00AA00;">;</span>
  box-shadow<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">5px</span> <span style="color: #cc00cc;">#aaa</span><span style="color: #00AA00;">;</span>
  -moz-box-shadow<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">5px</span> <span style="color: #cc00cc;">#aaa</span><span style="color: #00AA00;">;</span>
  -webkit-box-shadow<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">5px</span> <span style="color: #cc00cc;">#aaa</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#photo-01</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">-3px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">8px</span><span style="color: #00AA00;">;</span>
  -o-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>5.0deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  -moz-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>5.0deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  -webkit-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>5.0deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#photo-02</span> <span style="color: #00AA00;">&#123;</span>
  -o-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>-1.2deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  -moz-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>-1.2deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  -webkit-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>-1.2deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#photo-03</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">4px</span><span style="color: #00AA00;">;</span>
  -o-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>2.2deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  -moz-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>2.2deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  -webkit-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>2.2deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Comme Internet Explorer ne prend pas en charge les propriétés <code>box-shadow</code> et <code>transform</code>, on va mettre en place une dégradation élégante :</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">ul<span style="color: #cc00cc;">#photos</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">322px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">322px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'images/bg-ie.png'</span><span style="color: #00AA00;">&#41;</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333;">no-repeat</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
ul<span style="color: #cc00cc;">#photos</span> li <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">11px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">11px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>J&#8217;ai également tenté d&#8217;obtenir l&#8217;effet désiré sous Internet Explorer via des PNG avec transparence alpha. Mais dès que l&#8217;on touche à l&#8217;opacité de l&#8217;image, la couche alpha pose problème, et ce n&#8217;est à priori solvable par aucun hack.</p>
]]></content:encoded>
			<wfw:commentRss>https://derrien.me/blog/stackedgallery-un-plugin-jquery-qui-utilise-css3.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Virtualiser son serveur de développement</title>
		<link>https://derrien.me/blog/virtualiser-son-serveur-de-developpement.html</link>
		<comments>https://derrien.me/blog/virtualiser-son-serveur-de-developpement.html#comments</comments>
		<pubDate>Thu, 15 Oct 2009 14:37:47 +0000</pubDate>
		<dc:creator>Ishiro</dc:creator>
				<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Systèmes et réseaux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[vhost]]></category>
		<category><![CDATA[virtualisation]]></category>

		<guid isPermaLink="false">http://v5.furya-creations.net/blog/?p=25</guid>
		<description><![CDATA[Après avoir migré sous Mac OS X, je me suis demandé quelle solution était la plus flexible et fiable pour développer dans un environnement xAMP (Apache-MySQL-PHP, ou x restait à définir). Après avoir eu de brefs échos (plutôt mauvais) sur Twitter à propos de MacPorts (Lien externe) et MAMP (Lien externe), j&#8217;ai décidé de continuer [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="debian_splash" src="/blog/wp-content/uploads/2009/10/debian_splash-150x150.png" alt="debian_splash" width="103" height="103" />Après avoir migré sous Mac OS X, je me suis demandé quelle solution était la plus flexible et fiable pour développer dans un environnement xAMP (Apache-MySQL-PHP, ou x restait à définir). Après avoir eu de brefs échos (plutôt mauvais) sur Twitter à propos de <a href="http://www.macports.org/" class="external">MacPorts<span> (Lien externe)</span></a> et <a href="http://www.mamp.info/" class="external">MAMP<span> (Lien externe)</span></a>, j&#8217;ai décidé de continuer à virtualiser mon serveur de développement.</p>
<p>C&#8217;est une technique que j&#8217;avais déjà expérimentée sous Windows. Lorsque l&#8217;on travaille avec un framework web tel que <a href="http://www.symfony-project.org/" class="external">Symfony<span> (Lien externe)</span></a>, la ligne de commande est omniprésente. Et soyons honnête, la ligne de commande sous Windows, c&#8217;est pas ça (malgré l&#8217;existence d&#8217;outils comme <a href="http://www.cygwin.com/" class="external">Cygwin<span> (Lien externe)</span></a>).</p>
<p>Virtualiser mon serveur de développement sous Linux m&#8217;est apparu comme le meilleur choix : On peut ainsi profiter de son système de prédilection (Mac OS X dans mon cas) pour développer ses projets web tout en disposant de la robustesse d&#8217;une architecture LAMP pour les tester. Cela permet aussi de tester son application dans des conditions proches de celles de l&#8217;environnement de production, et il est même possible de tester son projet sous différentes configurations en installant, au besoin, plusieurs machines virtuelles.</p>
<p>Dans cet article, nous allons voir comment configurer une machine virtuelle sous <a href="http://www.debian.org/" class="external">Debian<span> (Lien externe)</span></a> adaptée au développement avec le framework <a href="http://www.symfony-project.org/" class="external">Symfony<span> (Lien externe)</span></a>.<br />
<span id="more-25"></span></p>
<h2>Installation d&#8217;une machine virtuelle Debian</h2>
<p>Je ne vais pas détailler pas à pas l&#8217;installation de la machine virtuelle. J&#8217;ai utilisé <a href="http://www.parallels.com/fr/products/desktop/" class="external">Parallels Desktop<span> (Lien externe)</span></a>, et la <a href="http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-cd/debian-503-i386-netinst.iso" class="external">netinstall de Debian Lenny<span> (Lien externe)</span></a>. Lors de l&#8217;installation, je choisis l&#8217;installation en mode console, et me contente de sélectionner l&#8217;option &laquo;&nbsp;Système standard&nbsp;&raquo;, nous installerons les paquets nécessaires par la suite.</p>
<p>N&#8217;oubliez pas de décocher &laquo;&nbsp;Environnement graphique de bureau&nbsp;&raquo;, nous n&#8217;en avons pas besoin ici. Même si la RAM ne coûte plus très cher, vous me remercierez au moment où il vous faudra démarrer vos VM Windows pour tester vos sites sous Internet Explorer&#8230;</p>
<h2>Configuration du système</h2>
<p>Nous allons commencer par installer <code>sudo</code> pour éviter de se logger en <code>root</code> à l&#8217;avenir ainsi qu&#8217;un serveur SSH (c&#8217;est bien plus pratique d&#8217;utiliser le terminal de son système plutôt que de basculer en permanence sur la VM). Connectez-vous en <code>root</code>, et allons-y :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># apt-get install sudo
# visudo</pre></div></div>

<p>La commande <code>visudo</code> permet d&#8217;éditer le fichier <code>/etc/sudoers</code>, qui contient les utilisateurs autorisés à utiliser la commande <code>sudo</code>. Il suffit d&#8217;ajouter l&#8217;utilisateur voulu (dans mon cas <code>jl</code>), comme ceci :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">jl	ALL=(ALL) ALL</pre></div></div>

<p>On installe maintenant le paquet <code>openssh-server</code> :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># apt-get install openssh-server</pre></div></div>

<p>Avant d&#8217;utiliser SSH pour se connecter au serveur, on va attribuer une adresse IP fixe à l&#8217;interface réseau de notre machine virtuelle. Pour connaître le sous-réseau utilisé par votre machine virtuelle, et l&#8217;adresse IP de la passerelle par défaut, utilisez les commandes suivantes :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:1c:42:f4:80:28
          inet adr:10.211.55.7  Bcast:10.211.55.255  Masque:255.255.255.0
          adr inet6: fe80::21c:42ff:fef4:8028/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4515 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2971 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:6337760 (6.0 MiB)  TX bytes:224514 (219.2 KiB)
          Interruption:10 Adresse de base:0x8200 
&nbsp;
# netstat -rn
vmdev:~# netstat -rn
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic   MSS Fenêtre irtt Iface
10.211.55.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
0.0.0.0         10.211.55.1     0.0.0.0         UG        0 0          0 eth0</pre></div></div>

<p>Editez le fichier <code>/etc/network/interfaces</code> à l&#8217;aide de <code>vim</code> (par exemple), et configurer <code>eth0</code> comme ceci (en prenant soin de modifier les adresses et masques) :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"> allow-hotplug eth0
 iface eth0 inet static
         address 10.211.55.7
         netmask 255.255.255.0
         network 10.211.55.0
         broadcast 10.211.55.255
         gateway 10.211.55.1</pre></div></div>

<p>Pour prévenir tout problème, l&#8217;idéal serait de réduire la plage d&#8217;adresses IP du serveur DHCP aux adresses qui n&#8217;ont pas été attribuée de façon statique.</p>
<h2>Configuration du fichier hosts de votre système principal</h2>
<p>Pour accéder plus facilement à votre machine virtuelle, nous allons éditer le fichier <code>hosts</code> de votre système principal. Sous Mac OS X et autres systèmes Unix, éditez <code>/etc/hosts</code>, sous Windows éditez <code>C:\windows\system32\drivers\etc\hosts</code> et ajoutez-y la ligne suivante :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">10.211.55.7      vmdev</pre></div></div>

<p>Vous pouvez maintenant vous connecter à votre machine en SSH :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ ssh jl@vmdev</pre></div></div>

<h2>Installation d&#8217;Apache, MySQL et PHP</h2>
<p>On va commencer par ajouter les dépôts <a href="http://www.dotdeb.org/" class="external">dotdeb.org<span> (Lien externe)</span></a>. Ces dépôts permettent d&#8217;installer des versions plus récentes de PHP et de MySQL que celle proposées par défaut dans les dépôts officiels. Il suffit d&#8217;ajouter les deux lignes suivantes dans <code>/etc/apt/sources.list</code> :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all</pre></div></div>

<p>Puis de mettre à jour la liste des paquets :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ sudo apt-get update</pre></div></div>

<p>On va maintenant installer MySQL, Apache, PHP5 ainsi que quelques modules pour PHP5 (vous pourrez en ajouter d&#8217;autres par la suite) :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">sudo apt-get install mysql-server-5.1
sudo apt-get install apache2
sudo apt-get install php5 php5-cli php5-mysql php5-gd php5-xsl php5-apc php5-mcrypt</pre></div></div>

<p>En ce qui concerne MySQL, à vous de <a href="http://dev.mysql.com/doc/refman/5.0/fr/user-account-management.html" class="external">créer les utilisateurs<span> (Lien externe)</span></a> dont vous avez besoin.</p>
<p>On va maintenant ajouter l&#8217;utilisateur <code>jl</code> au groupe <code>www-data</code> :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ sudo usermod -g www-data jl</pre></div></div>

<p>On modifie aussi le masque de création de fichiers pour notre utilisateur. Ainsi, on va donner au groupe <code>www-data</code> les droits de lecture, d&#8217;écriture et d&#8217;exécution. Dans le fichier <code>~/.profile</code>, il suffit d&#8217;ajouter la ligne suivante :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">umask 002</pre></div></div>

<p>De cette façon, Apache et donc PHP auront accès en lecture et en écriture à notre homedir. Cela ne pose pas de problème dans notre contexte (un serveur de développement personnel).</p>
<h2>Installation et configuration de Samba</h2>
<p>Vous aurez sûrement besoin d&#8217;accéder aux données de votre serveur. Nous allons installer <a href="http://fr.wikipedia.org/wiki/Samba_(informatique)" class="external">Samba<span> (Lien externe)</span></a>, mais vous auriez très bien pu opter pour <a href="http://fr.wikipedia.org/wiki/Network_file_system" class="external">NFS<span> (Lien externe)</span></a> si votre système principal le supporte (pour ma part, je n&#8217;ai jamais testé NFS avec des systèmes tels que Mac OS X ou Windows). Samba a l&#8217;avantage de permettre le partage de documents entre la plupart des systèmes d&#8217;exploitation.</p>
<p>Nous allons installer Samba, et créer le mot de passe pour l&#8217;utilisateur <code>jl</code> (qui doit être un compte système valide) :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ sudo apt-get install samba
$ sudo smbpasswd -a jl</pre></div></div>

<p>Configurons la section <code>[homes]</code> du fichier de configuration de Samba (<code>/etc/samba/smb.conf</code>) :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mask = 0664
   directory mask = 0775
   valid users = %S
   force group = www-data
   force create mode = 0664
   force security mode = 0664
   force directory mode = 0775
   force directory security mode = 0775</pre></div></div>

<p>Pour que la nouvelle configuration soit prise en compte, redémarrez Samba :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ sudo /etc/init.d/samba restart</pre></div></div>

<p>Vous pouvez à présent vous connecter au home directory de votre machine virtuelle via le protocole SMB, et y copier des fichiers. Pour ma part, voici l&#8217;arborescence que je me suis créée :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">|-- dev
    |-- frameworks
    |   `-- symfony-1.2.9
    |-- projects
    |   |-- monprojet1
    |   |   `-- web
    |   `-- monprojet2
    |      `  -- web
    `-- utils
        `-- web
            |-- phpmyadmin
            `-- phpinfo.php</pre></div></div>

<h2>Configuration d&#8217;Apache et de PHP pour Symfony</h2>
<p>Nous avons pratiquement terminé la configuration de notre serveur de développement. Il reste néanmoins à configurer Apache et PHP pour Symfony.</p>
<p>Commençons par PHP. On va simplement désactiver les directives <code>short_open_tag</code> et <code>magic_quotes_gpc</code> dans <code>/etc/php5/apache2/php.ini</code> mais également dans <code>/etc/php5/cli/php.ini</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">short_open_tag = Off
magic_quotes_gpc = Off</pre></div></div>

<p>Il est aussi intéressant d&#8217;afficher les notices :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">error_reporting = E_ALL</pre></div></div>

<p>On va maintenant configurer Apache. Pour le moment, les fichiers hébergés par notre serveur web sont situés dans <code>/var/www/</code>. Nous venons de créer une arborescence dans notre homedir pour accueillir nos projets web, il va donc falloir configurer Apache en conséquence. Nous allons utiliser une fonctionnalité intéressante d&#8217;Apache : les vhosts dynamiques (<a href="http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html" class="external">mod_vhost_alias<span> (Lien externe)</span></a>). Créez un nouveau fichier dans <code>/etc/apache2/sites-available/</code>, par exemple <code>vmdev</code>, contenant la configuration suivante :</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">ServerName</span> vmdev
&nbsp;
&lt;<span style="color: #000000; font-weight:bold;">VirtualHost</span> *:<span style="color: #ff0000;">80</span>&gt;
        <span style="color: #00007f;">ServerAlias</span> vmdev utils.vmdev
        <span style="color: #00007f;">VirtualDocumentRoot</span> /home/jl/dev/utils/web/
&lt;/<span style="color: #000000; font-weight:bold;">VirtualHost</span>&gt;
&nbsp;
&lt;<span style="color: #000000; font-weight:bold;">VirtualHost</span> *:<span style="color: #ff0000;">80</span>&gt;
	<span style="color: #00007f;">ServerAlias</span> phpmyadmin.vmdev
	<span style="color: #00007f;">VirtualDocumentRoot</span> /home/jl/dev/utils/web/phpmyadmin/
&lt;/<span style="color: #000000; font-weight:bold;">VirtualHost</span>&gt;
&nbsp;
&lt;<span style="color: #000000; font-weight:bold;">VirtualHost</span> *:<span style="color: #ff0000;">80</span>&gt;
	<span style="color: #00007f;">ServerAdmin</span> webmaster@localhost
	<span style="color: #00007f;">ServerAlias</span> *.vmdev
	<span style="color: #00007f;">VirtualDocumentRoot</span> /home/jl/dev/projects/%1/web
	<span style="color: #00007f;">DirectoryIndex</span> index.php
&nbsp;
	&lt;<span style="color: #000000; font-weight:bold;">Directory</span> /home/jl/dev/projects/&gt;
		<span style="color: #00007f;">Options</span> <span style="color: #0000ff;">Indexes</span> <span style="color: #0000ff;">FollowSymLinks</span> MultiViews
		<span style="color: #00007f;">AllowOverride</span> <span style="color: #0000ff;">All</span>
		<span style="color: #00007f;">Order</span> <span style="color: #00007f;">allow</span>,<span style="color: #00007f;">deny</span>
		<span style="color: #00007f;">Allow</span> from <span style="color: #0000ff;">all</span>
	&lt;/<span style="color: #000000; font-weight:bold;">Directory</span>&gt;
&nbsp;
	<span style="color: #00007f;">Alias</span> /sf /home/jl/dev/frameworks/symfony-1.2.9/data/web/sf
	&lt;<span style="color: #000000; font-weight:bold;">Directory</span> <span style="color: #7f007f;">&quot;/home/jl/dev/frameworks/symfony-1.2.9/data/web/sf&quot;</span>&gt;
		<span style="color: #00007f;">AllowOverride</span> <span style="color: #0000ff;">All</span>
		<span style="color: #00007f;">Allow</span> from <span style="color: #0000ff;">All</span>
	&lt;/<span style="color: #000000; font-weight:bold;">Directory</span>&gt;
&nbsp;
	<span style="color: #00007f;">ErrorLog</span> /var/log/apache2/error.log
	<span style="color: #00007f;">LogLevel</span> debug
	<span style="color: #00007f;">CustomLog</span> /var/log/apache2/access.log combined
&lt;/<span style="color: #000000; font-weight:bold;">VirtualHost</span>&gt;</pre></div></div>

<p>Grâce à cette configuration, nous avons deux vhosts statiques (<code>vmdev</code>, accessible également depuis <code>utils.vmdev</code>, et <code>phpmyadmin.vmdev</code>), et un vhost dynamique. Nous aurons ainsi vhost par projet qui sera créé dynamiquement, par exemple <code>monprojet1.vmdev</code>.</p>
<p>Pour terminer, nous allons activer <code>mod_rewrite</code> et <code>mod_vhost_alias</code>, désactiver la configuration du site par défaut d&#8217;Apache, activer la configuration que l&#8217;on vient de créer, et redémarrer Apache :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ sudo a2enmod rewrite
$ sudo a2enmod vhost_alias
$ sudo a2dissite default
$ sudo a2ensite vmdev
$ sudo /etc/init.d/apache2 restart</pre></div></div>

<h2>Installation de Symfony et configuration d&#8217;un premier projet</h2>
<p>Nous n&#8217;avons pas encore installé Symfony mais le moment est venu. On commence par créer le répertoire <code>~/dev/frameworks/</code>, si ce n&#8217;est déjà fait, puis on télécharge et décompresse l&#8217;archive de Symfony dans le répertoire nouvellement créé :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ mkdir -p ~/dev/frameworks &amp;&amp; cd ~/dev/frameworks/
$ wget http://www.symfony-project.org/get/symfony-1.2.9.tgz
$ tar -xvzf symfony-1.2.9.tgz
$ rm symfony-1.2.9.tgz</pre></div></div>

<p>On va maintenant démarrer le projet <a href="http://www.symfony-project.org/jobeet/1_2/Doctrine/en/" class="external">Jobeet<span> (Lien externe)</span></a>. On commence par créer le répertoire <code>~/dev/projects/jobeet</code>, puis l&#8217;on crée un lien symbolique vers le répertoire où nous avons décompressé Symfony précédemment :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ mkdir -p ~/dev/projects/jobeet/lib/vendor &amp;&amp; cd ~/dev/projects/jobeet/lib/vendor
$ ln -s ~/dev/frameworks/symfony-1.2.9 symfony
$ cd ~/dev/projects/jobeet</pre></div></div>

<p>On va maintenant vérifier si Symfony est correctement installé, et si notre configuration de PHP est adaptée :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ php lib/vendor/symfony/data/bin/symfony -V
symfony version 1.2.9 (/home/jl/dev/frameworks/symfony-1.2.9/lib)
$ php lib/vendor/symfony/data/bin/check_configuration.php
********************************
*                              *
*  symfony requirements check  *
*                              *
********************************
&nbsp;
php.ini used by PHP: /etc/php5/cli/php.ini
&nbsp;
** WARNING **
*  The PHP CLI can use a different php.ini file
*  than the one used with your web server.
*  If this is the case, please launch this
*  utility from your web server.
** WARNING **
&nbsp;
** Mandatory requirements **
&nbsp;
  OK        PHP version is at least 5.2.4
&nbsp;
** Optional checks **
&nbsp;
  OK        PDO is installed
  OK        PDO has some drivers installed: mysql
  OK        PHP-XML module is installed
  OK        XSL module is installed
  OK        The token_get_all() function is available
  OK        The mb_strlen() function is available
  OK        The iconv() function is available
  OK        The utf8_decode() is available
  OK        A PHP accelerator is installed
  OK        php.ini has short_open_tag set to off
  OK        php.ini has magic_quotes_gpc set to off
  OK        php.ini has register_globals set to off
  OK        php.ini has session.auto_start set to off
  OK        PHP version is not 5.2.9</pre></div></div>

<p>Il est judicieux de vérifier également le <code>php.ini</code> utilisé par Apache, comme le précise le <code>warning</code> ci-dessus. Il ne devrait cependant pas y avoir de problème, vu que nous avons fait les modifications nécessaires dans les deux fichiers <code>php.ini</code>.</p>
<p>On va maintenant démarrer le projet Jobeet, ainsi qu&#8217;une première application :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ php lib/vendor/symfony/data/bin/symfony generate:project jobeet
$ ./symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend</pre></div></div>

<p>Lors de la création de chaque nouveau projet, il faut veiller à modifier le fichier hosts de notre système principal en conséquence. J&#8217;ai pour ma part deux lignes dans <code>/etc/hosts</code>, une première pour les vhosts statiques, et une deuxième pour chacun de mes projets qui utilise un vhost dynamique :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">10.211.55.7     vmdev utils.vmdev phpmyadmin.vmdev
10.211.55.7     jobeet.vmdev monprojet1.vmdev monprojet2.vmdev</pre></div></div>

<p>Il nous reste un dernier détail à régler. Si vous ouvrez http://jobeet.vmdev/, vous vous trouverez face à une erreur 500. Il faut décommenter la ligne suivante dans le fichier <code>~/dev/projects/jobeet/web/.htaccess</code> :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">RewriteBase /</pre></div></div>

<p>Pour accéder à l&#8217;environnement de développement de Symfony, pensez à ajouter l&#8217;adresse IP de l&#8217;interface virtuelle de votre système principal dans <code>web/frontend_dev.php</code>. Par défaut, seule l&#8217;adresse IP 127.0.0.1 est autorisée à y accéder.</p>
<p>Cette fois, c&#8217;est la bonne ! Si vous vous rendez sur http://jobeet.vmdev/, vous devriez avoir l&#8217;écran suivant :</p>
<p style="text-align: center;"><img class="aligncenter size-medium wp-image-99" title="screen-jobeet" src="/blog/wp-content/uploads/2009/10/screen-jobeet-300x225.jpg" alt="screen-jobeet" width="300" height="225" /></p>
<p>Vous disposez désormais d&#8217;un serveur LAMP fonctionnel pour vos tests. À vous de l&#8217;adapter selon vos besoins : vous pouvez par exemple installer les utilitaires dont vous avez besoins dans <code>~/dev/utils/web/</code> (notamment <a href="http://www.phpmyadmin.net/" class="external">PhpMyAdmin<span> (Lien externe)</span></a> pour lequel nous avons créé un vhost précédemment mais dont je n&#8217;ai détaillé l&#8217;installation), installer des modules PHP supplémentaires&#8230;</p>
<p>Pour finir, une recommandation : lorsque vous arrêterez votre machine virtuelle, n&#8217;oubliez pas de fermer votre éditeur de texte et d&#8217;éjecter votre lecteur réseau au préalable.</p>
]]></content:encoded>
			<wfw:commentRss>https://derrien.me/blog/virtualiser-son-serveur-de-developpement.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
