<?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>AbriCoCotier.fr &#187; Serveur</title>
	<atom:link href="http://www.abricocotier.fr/tag/serveur/feed" rel="self" type="application/rss+xml" />
	<link>http://www.abricocotier.fr</link>
	<description>Analyses et anticipations sur le web et les nouvelles technologies de demain.</description>
	<lastBuildDate>Tue, 07 Feb 2012 21:17:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>CloudFlare, 2e essai pour que ça fonctionne correctement</title>
		<link>http://www.abricocotier.fr/16781-cloudflare-2e-essai-pour-que-ca-fonctionne-correctement</link>
		<comments>http://www.abricocotier.fr/16781-cloudflare-2e-essai-pour-que-ca-fonctionne-correctement#comments</comments>
		<pubDate>Thu, 08 Dec 2011 21:46:15 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[CloudFlare]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=16781</guid>
		<description><![CDATA[Je suis quelqu&#8217;un &#171;&#160;des deuxièmes fois&#160;&#187;. J&#8217;entends par là que j&#8217;ai tendance à toujours me planter une première fois (quelque soit la préparation), pour finir par réussir la deuxième fois. Comme je l&#8217;avais relaté durant un précédent billet, j&#8217;avais tenté &#8230; <a href="http://www.abricocotier.fr/16781-cloudflare-2e-essai-pour-que-ca-fonctionne-correctement">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Je suis quelqu&#8217;un &laquo;&nbsp;des deuxièmes fois&nbsp;&raquo;. J&#8217;entends par là que j&#8217;ai tendance à toujours me planter une première fois (quelque soit la préparation), pour finir par réussir la deuxième fois.</p>
<p><a href="http://www.abricocotier.fr/15969-suppression-homepage-resultats-google-cause-modification-dns">Comme je l&#8217;avais relaté durant un précédent billet</a>, j&#8217;avais tenté il y a environ 1 mois d&#8217;utiliser <a href="https://fr.cloudflare.com/">CloudFlare</a>&#8230; Sans succès. Mes erreurs avait été de mettre le système sur mon blog le &laquo;&nbsp;plus critique&nbsp;&raquo; (toutes proportions gardées), de me tromper de nom de domaine pour le changement des DNS (FAIL total de ce côté, j&#8217;ai honte), et enfin de le faire en journée. Pour le fait que je l&#8217;avais fait en journée, ce n&#8217;est qu&#8217;une demi-erreur, disons que cela aura exarcerbé mon impatience et ma peur de l&#8217;échec. L&#8217;erreur réellement fondamentale aura été de me tromper de DNS.   <span id="more-16781"></span></p>
<p><img src="http://www.abricocotier.fr/wp-content/uploads/2011/12/cloudflare.jpg" alt="" title="cloudflare" width="580" /></p>
<p>Pour autant, j&#8217;ai recommencé le processus, d&#8217;abord sur un domaine moins important, sans me tromper de DNS, ce qui m&#8217;a permis de m&#8217;entrainer pour le passage sur le domaine le plus important.</p>
<p>Une fois que j&#8217;ai eu bien rôdé le processus sur 3 domaines en tout (et croyez moi, ça prend plus de temps qu&#8217;on ne le crois, notamment pour vérifier que tout fonctionne bien, car la mise à jour des DNS n&#8217;est pas aussi simple que ce soit sur son lieu de travail ou sur sa box) ; j&#8217;ai décidé d&#8217;y aller sur mes domaines les plus importants.</p>
<p>Finalement, ça n&#8217;aura pas été si compliqué, et je peux dire aussi que à peu près tous mes sites sont sur CloudFlare. C&#8217;est pas plus mal.</p>
<p>Mais je reste quelqu&#8217;un d&#8217;incapable de faire quelque chose de correct la première fois. C&#8217;est pas grave en soit, ça permet de mieux me connaitre, et de prendre mes précautions : je sais que si je n&#8217;ai pas une simulation on-ne-peux-plus-réelle avant de m&#8217;attaquer à la prod, j&#8217;ai de grandes chances de me planter. C&#8217;est risible, critiquable, mais je ne suis pas sûr que beaucoup de gens soient beaucoup plus performants. Je constate que sur les différents lieux de travail que j&#8217;ai cotoyé, c&#8217;était souvent la technique adoptée. On avait d&#8217;ailleurs au moins un environnement de recette, voire davantage. Et ça ne prémunissait pas toujours (ou&#8230; pas souvent, en fait) contre les erreurs monumentales en prod. MAIS on avait l&#8217;idée qu&#8217;on avait au moins évité pas mal d&#8217;erreurs. Et en cela on gagnait du temps. </p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2011. |
<a href="http://www.abricocotier.fr/16781-cloudflare-2e-essai-pour-que-ca-fonctionne-correctement">Permalien</a> |
<a href="http://www.abricocotier.fr/16781-cloudflare-2e-essai-pour-que-ca-fonctionne-correctement#comments">6 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/cloudflare" rel="tag">CloudFlare</a>, <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/16781-cloudflare-2e-essai-pour-que-ca-fonctionne-correctement/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Arrêt des Xserve : et si Apple revenait avec un nouveau serveur &#171;&#160;renversant&#160;&#187; ?</title>
		<link>http://www.abricocotier.fr/13421-arret-xserve-apple-un-nouveau-serveur-renversant</link>
		<comments>http://www.abricocotier.fr/13421-arret-xserve-apple-un-nouveau-serveur-renversant#comments</comments>
		<pubDate>Mon, 15 Nov 2010 14:32:16 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=13421</guid>
		<description><![CDATA[Chez Pingdom, on a pu lire une analyse très intéressante concernant l&#8217;arrêt par Apple de sa gamme de serveurs Xserve. En effet, Apple a arrêté sa gamme de serveurs rack, mais propose toujours à l&#8217;achat des persions de Macs Pro &#8230; <a href="http://www.abricocotier.fr/13421-arret-xserve-apple-un-nouveau-serveur-renversant">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Chez <a href="http://feedproxy.google.com/~r/RoyalPingdom/~3/87UxON-U55g/">Pingdom</a>, on a pu lire une analyse très intéressante concernant l&#8217;arrêt par Apple de sa gamme de serveurs Xserve. En effet, Apple a arrêté sa gamme de serveurs rack, mais propose toujours à l&#8217;achat des persions de Macs Pro et Macs Mini avec MacOS X Server comme système d&#8217;exploitation. Il reste compréhensible que Apple arrête cette gamme, tant elle est désormais éloignée de leurs produits phares. Pour autant, il n&#8217;est pas exclu que Apple revienne sur le marché, en renversant les règles établies, comme ils ont su le faire jusqu&#8217;à maintenant pour d&#8217;autres produits comme les iPod, les iPhones ou les Macbook Air. <span id="more-13421"></span></p>
<p style="text-align: center;"><img src="http://www.abricocotier.fr/wp-content/uploads/2010/11/apple_store_xserve.jpg" alt="" title="apple_store_xserve" width="580" /></p>
<p>Les gars de Pingdom pensent donc qu&#8217;ils pourraient revenir avec un serveur beaucoup moins conventionnel que le <a>Xserve</a>. Chez Apple, prendre tout le monde par surprise est une habitude, donc pourquoi pas pour le marché des serveurs ? Le potentiel est énorme, car c&#8217;est un marché où les unités se comptent en millions.</p>
<p>Plus précisément, Apple a mis plus d&#8217;un milliard de dollars dans la création d&#8217;un tout nouveau Data-Center, donc il n&#8217;est pas impossible qu&#8217;ils décident de faire profiter à leurs clients de l&#8217;expérience qu&#8217;ils auront acquis sur leur propre environnement. Qui sait ? Ils seraient capables d&#8217;avoir créé un serveur tout petit, puissant et relativement peu consommateur d&#8217;électricité, comme ce qu&#8217;ils sont parvenus à créer avec le Mac Mini ou le Macbook Air. Et ils pourraient avoir testé le tout sur des volumes relativement conséquents dans leur nouveau datacenter. Il pourrait y avoir là de quoi renouveler correctement une gamme devenue conventionnelle (les serveurs <em>rack</em>), et mise pour l&#8217;instant à l&#8217;écart de la gamme officielle sous prétexte que Apple veut conserver une gamme aussi simple et cohérente que possible (ce qui ne les empèche pas d&#8217;aligner côte-à-côte des Macbooks Air et des Macbooks Pro à des prix voisins alors que les premiers sont nettement plus intéressants que les seconds en matière de rapport qualité/prix). Donc on peut envisager d&#8217;ici quelques années un retour tonitruant.</p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/13421-arret-xserve-apple-un-nouveau-serveur-renversant">Permalien</a> |
<a href="http://www.abricocotier.fr/13421-arret-xserve-apple-un-nouveau-serveur-renversant#comments">3 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/apple" rel="tag">Apple</a>, <a href="http://www.abricocotier.fr/tag/materiel" rel="tag">Matériel</a>, <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/13421-arret-xserve-apple-un-nouveau-serveur-renversant/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Nginx+Apache ou Varnish+Apache ? Comparatif des fichiers de configuration</title>
		<link>http://www.abricocotier.fr/13145-nginx-apache-ou-varnish-apache-comparatif-des-fichiers-de-configuration</link>
		<comments>http://www.abricocotier.fr/13145-nginx-apache-ou-varnish-apache-comparatif-des-fichiers-de-configuration#comments</comments>
		<pubDate>Mon, 18 Oct 2010 06:38:50 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=13145</guid>
		<description><![CDATA[En l&#8217;espace de quelques jours, j&#8217;ai vu passer sous mon fil Twitter trois articles très intéressant à propos de la configuration Varnish+Apache. Pour ceux qui ne connaissent pas, Varnish est un serveur statique, fréquemment utilisé par les gros sites de &#8230; <a href="http://www.abricocotier.fr/13145-nginx-apache-ou-varnish-apache-comparatif-des-fichiers-de-configuration">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En l&#8217;espace de quelques jours, j&#8217;ai vu passer sous mon fil Twitter trois articles très intéressant à propos de la configuration <a href="http://www.varnish-cache.org/">Varnish</a>+Apache. Pour ceux qui ne connaissent pas, Varnish est un serveur statique, fréquemment utilisé par les gros sites de journaux en ligne, notamment dans une configuration de Reverse Proxy, c&#8217;est à dire Varnish en frontend et Apache en backend. Un peu de la même façon que ce que j&#8217;ai expliqué plusieurs fois ici, où je fonctionne avec <a href="http://www.abricocotier.fr/10503-nginx-en-reverse-proxy-pour-plusieurs-blogs-wordpress">Nginx en frontend et Apache en backend</a>.     <span id="more-13145"></span></p>
<p style="text-align:center;"><img src="http://www.abricocotier.fr/wp-content/uploads/2010/10/varnish_server_picture.jpg" alt="" title="varnish_server_picture" width="580" /></p>
<p>La différence de Varnish est qu&#8217;il est un site statique par essence, et donc contrairement à <a href="http://www.abricocotier.fr/10557-nginx-php-fpm-et-wp-super-cache">Nginx</a>, il n&#8217;est pas capable de passer par WSGI pour servir des pages non-générées. Nginx a également l&#8217;avantage de fonctionner avec une pile de connexion, et Varnish est donné comme fonctionnant avec un système de cache interne, mais je n&#8217;ai pas réussi à en voir plus dans les trois articles que j&#8217;ai lu. Les voici :</p>
<blockquote><p>
<a href="http://cd34.com/blog/infrastructure/apache-varnish-nginx-and-lighttpd/">Apache, Varnish, nginx and lighttpd</a></p>
<p>Ce billet montre des comparatifs de performances, qui tendent à montrer dans des conditions assez correctes et objectives que Nginx et Varnish font jeu égal, avec un léger avantage pour Varnish.
</p></blockquote>
<blockquote><p>
<a href="http://www.haute-disponibilite.net/2010/10/14/gerer-son-cache-web-avec-varnish/">Gérer son cache web avec Varnish</a></p>
<p>Chez HAute-Disponibilité, on peut en apprendre un peu plus sur le système de cache de Varnish, mais je ne m&#8217;y suis pas penché davantage.</p></blockquote>
<blockquote><p><a href="http://blog.nicolargo.com/2010/10/booster-votre-blog-wordpress-avec-varnish.html">Booster votre blog WordPress avec Varnish</a></p>
<p>Sur ce billet de Nicolargo, on peut comprendre comment fonctionne la configuration de Varnish. Ce billet m&#8217;a permit de faire le comparatif entre les configurations Nginx et Varnish que je vais présenter ci-dessous.</p></blockquote>
<h3>Comparatif des configurations</h3>
<p>Pour bien comprendre la différence entre Nginx et Varnish (tous deux en frontend, sur le port 80, et servant le contenu non statique à Apache sur le port 127.0.0.1:8080), je vais copier-coller les deux configurations l&#8217;une à côté de l&#8217;autre et les expliquer.</p>
<h2><strong>Pour Nginx</strong></h2>
<p>Pour Nginx, on va avoir un seul fichier important. Ce sera celui relatif au site servi (donc le fichier de conf sera dans /etc/nginx/sites-available) :</p>
<pre class="brush: plain; title: ; notranslate">
server {
  listen      212.227.159.187:80;
  server_name monsite.fr;
  # On distribue les fichiers statiques directement
  location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|srt|swf)$ {
    gzip_static on;
    root  /var/www/htdocs/abricocotier.fr/;
    access_log  /var/log/nginx/monsite-server-access.log;
    error_log   /var/log/nginx/monsite-server-error.log;
    error_page 404 = /erreur-404;
    expires           30d;
  }

location / {
    proxy_pass    http://127.0.0.1:8080/;
    include /etc/nginx/conf.d/proxy.conf;
    #root   /lerepertoiredemonsite/;
    #index  index.html index.htm;
    }

}
</pre>
<p>Tout tient dans ce fichier.<br />
On y voir que le premier bloc d&#8217;instructions vise à dire à Nginx de traiter tous les fichiers portant les extensions classiques pour des fichiers statiques.<br />
Le deuxième bloc dit à Nginx d&#8217;envoyer toutes les requêtes qui restent (non-traitées jusque là) sur localhost:8080.</p>
<h2><strong>Pour Varnish</strong></h2>
<p>Grâce au billet de Nicolargo, j&#8217;ai pu rapidement m&#8217;installer une configuration Varnish très simplement en local. C&#8217;est pas plus compliqué que pour Nginx.</p>
<p>Dans le fichier /etc/varnish/default.vcl, on met le nom du site qui sera passé au serveur de backend (donc on prend un peu le problème à revers par rapport à Nginx) :</p>
<pre class="brush: plain; title: ; notranslate">
backend www {
.host = &quot;monsite.fr&quot;;
.port = &quot;8080&quot;;
}
</pre>
<p>Puis, à la suite, dans le même fichier, les instructions de traitement pour les requètes :</p>
<pre class="brush: plain; title: ; notranslate">

sub vcl_recv {
if (req.http.host ~ &quot;(www\.monsite\.fr|monsite\.fr)&quot;) {
set req.backend = www;
} 

# Compatiblity with Apache log
remove req.http.X-Forwarded-For;
set    req.http.X-Forwarded-For = client.ip;
# Normalize Content-Encoding
if (req.http.Accept-Encoding) {
if (req.url ~ &quot;\.(jpg|png|gif|gz|tgz|bz2|lzma|tbz)(\?.*|)$&quot;) {
remove req.http.Accept-Encoding;
} elsif (req.http.Accept-Encoding ~ &quot;gzip&quot;) {
set req.http.Accept-Encoding = &quot;gzip&quot;;
} elsif (req.http.Accept-Encoding ~ &quot;deflate&quot;) {
set req.http.Accept-Encoding = &quot;deflate&quot;;
} else {
remove req.http.Accept-Encoding;
}
}

# Remove cookies and query string for real static files
if (req.url ~ &quot;^/[^?]+\.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.*|)$&quot;) {
unset req.http.cookie;
set req.url = regsub(req.url, &quot;\?.*$&quot;, &quot;&quot;);
}
# Pas de cache pour les requêtes POST
if (req.request == &quot;POST&quot;) {
return(pass);
}
# Pas de cache pour l'interface d'administration de WordPress
if( req.url ~ &quot;^/wp-(login|admin)&quot; || req.http.Cookie ~ &quot;wordpress_logged_in_&quot; ){
return(pass);
}
}
</pre>
<p>Comme on le vois, ce n&#8217;est pas beaucoup plus compliqué, c&#8217;est juste que le problème est pris dans l&#8217;ordre inverse. Je pense que c&#8217;est dû au fait que Varnish est fait pour faire du reverse proxy, contrairement à Nginx, qui n&#8217;a peut-être pas été conçu juste pour ça. Mais Nginx a l&#8217;énorme avantage de fonctionner avec une pile de requête, donc je me dis qu&#8217;il présente une sécurité pour qui n&#8217;a pas un gros serveur sous la main mais peu voir affluer à certaines heures de grosses quantités de connexions (et n&#8217;ayant pas envie de voir son serveur tomber toutes les 5 minutes).</p>
<p>Je rajoute que le mode de configuration de Nginx est sans doute plus simple pour ceux qui ont un peu regardé la configuration sous Apache (je pense notamment à l&#8217;arborescence sites-available/ et sites-enabled/ avec lien symbolique entre les deux pour &laquo;&nbsp;activer&nbsp;&raquo; un site), et c&#8217;est donc un facteur de plus grande facilité d&#8217;utilisation.</p>
<p>Enfin, et en terme de performances (c&#8217;est ça qui nous intéresse), <strong>je n&#8217;ai pas réussi à trouver de comparatif clair entre les performances des configurations Nginx+Apache et Varnish+Apache</strong>. Je constate que de très gros sites utilisent Nginx+Apache (par exemple, WordPress.com et toute sa plateforme de blogs), mais j&#8217;ai l&#8217;impression que Varnish n&#8217;anonce pas clairement qu&#8217;il existe comme le fait Nginx (c&#8217;est à dire que quand on a Varnish+Apache, le header de la réponse ne comporte que Apache, donc le client ne peut pas savoir que Varnish est dans la boucle). </p>
<p>D&#8217;après un collègue techniquement fort (ce qui m&#8217;inciterait à le croire), Apache serait mis souvent en frontend quand on a besoin d&#8217;un serveur d&#8217;application Java en backend (Tomcat, Weblogic, Websphere, etc), car Apache sans plugin est un serveur statique. J&#8217;ai du mal à trouver de quoi étayer cette thèse sur le web, Wikipédia ne mentionnant jamais dans la <a href="http://fr.wikipedia.org/wiki/Apache_HTTP_Server">fiche Apache</a> que celui-ci est un serveur statique quand il n&#8217;a pas de plugins (même si en soit, c&#8217;est vrai : Apache sans plugin ne peut pas faire beaucoup d&#8217;autre chose que de servir des fichiers statiques). La <a href="http://en.wikipedia.org/wiki/Apache_HTTP_Server">fiche anglophone</a> dit seulement que Apache est fait pour pouvoir servir du contenu static et dynamique. Bref : je continue à penser qu&#8217;Apache est une formidable machine à tout faire, mais qu&#8217;il y a mieux quand on prend un besoin spécifique (cela dit, Google a plusieurs fois dit qu&#8217;il utilisait une version d&#8217;Apache modifiée pour ses serveurs, donc il semble difficile de dire qu&#8217;Apache n&#8217;est pas un serveur rapide).</p>
<p>Bref : si un jour j&#8217;ai deux serveurs sous la mains et n&#8217;étant pas en productions, je tenterais de faire un ApacheBenchmark des deux configurations, avec un site WordPress en backend, celui-ci ayant une base de donnée correcte, afin que cela simule des conditions réelles.</p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/13145-nginx-apache-ou-varnish-apache-comparatif-des-fichiers-de-configuration">Permalien</a> |
<a href="http://www.abricocotier.fr/13145-nginx-apache-ou-varnish-apache-comparatif-des-fichiers-de-configuration#comments">12 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/apache" rel="tag">Apache</a>, <a href="http://www.abricocotier.fr/tag/nginx" rel="tag">Nginx</a>, <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/13145-nginx-apache-ou-varnish-apache-comparatif-des-fichiers-de-configuration/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Site encore down hier, la faute à un espace disque rempli</title>
		<link>http://www.abricocotier.fr/13047-site-encore-down-hier-la-faute-a-un-espace-disque-rempli</link>
		<comments>http://www.abricocotier.fr/13047-site-encore-down-hier-la-faute-a-un-espace-disque-rempli#comments</comments>
		<pubDate>Wed, 06 Oct 2010 20:58:38 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Serveur]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=13047</guid>
		<description><![CDATA[Hier encore, abricocotier était down. PLus exactement, le serveur est tombé vers 12h29 et est remonté vers 12h59 (d&#8217;après les dates données par Mon.itor.us, mais en fait il a été down un peu moins de temps). Déjà le matin, en &#8230; <a href="http://www.abricocotier.fr/13047-site-encore-down-hier-la-faute-a-un-espace-disque-rempli">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hier <a href="http://www.abricocotier.fr/13020-hier-le-blog-etait-down-pendant-une-heure-et-demi">encore</a>, abricocotier était down. <strong>PLus exactement, le serveur est tombé vers 12h29 et est remonté vers 12h59 </strong>(d&#8217;après les dates données par <a href="http://mon.itor.us/">Mon.itor.us</a>, mais en fait il a été down un peu moins de temps). Déjà le matin, en publiant un <a href="http://www.abricocotier.fr/13022-test-de-windows-phone-7-et-de-la-creation-dune-application-via-followmyfeed">billet sur le Windows Phone 7</a>, j&#8217;avais eu la désagréable surprise de <strong>ne pas pouvoir uploader mes images</strong> correctement. Je me disais que c&#8217;était peut-être parce qu&#8217;après la tombée du serveur la veille, PHP n&#8217;avait peut-être pas été redémarré dans les même conditions que précédemment, et les fonctions de PHP permettant de recevoir les fichiers et de les redimensionner n&#8217;étaient peut-être pas utilisables. En fait, pas du tout.    <span id="more-13047"></span></p>
<p style="text-align: center;"><img src="http://www.abricocotier.fr/wp-content/uploads/2010/10/redemarrer_serveur_1and1.jpg" alt="" title="redemarrer_serveur_1and1" width="580" /></p>
<p>Il se trouve simplement que <strong>j&#8217;étais arrivé à la limite haute de la capacité de mémoire sur la partition où est stocké mon blog</strong> sur le serveur où il est, partition qui contient également les logs Nginx/Apache du serveur. Oui, je sais, c&#8217;est pas bien. Mais c&#8217;est le genre de détail qui est peu important avant qu&#8217;on ne se prenne le mur, d&#8217;autant que j&#8217;aurais parié que les logs ne prendraient pas plus de place que de raison, grâce à <a href="http://www.linuxconfig.org/Logrotate">logrotate</a> que je croyais fonctionnel (logrotate s&#8217;assure que le total des logs d&#8217;un dossier reste à un certain niveau de place en mémoire).</p>
<p>Donc<strong> j&#8217;étais arrivé à la limite de mon disque, soit&#8230; 4,7 Go</strong> (sur cette partition, hein, en fait j&#8217;en avais une à côté qui était vide et qui faisait&#8230; 80Go). En fait je ne savais pas du tout que les dossiers accessibles à la racine étaient chacun dans une partition compartimentée, donc je croyais bénéficier d&#8217;une taille de stockage totale/cumulée de 100Go, comme le prévoyais l&#8217;offre de serveur à laquelle j&#8217;ai souscrite.</p>
<p>Au passage, pour connaitre la répartition du stockage et sa charge, voilà <a href="http://www.abricocotier.fr/10807-administration-dun-serveur-quelques-commandes">la commande</a> :</p>
<blockquote><p>df -h</p></blockquote>
<p>Ce qui donne chez moi (après avoir réglé le problème) :</p>
<blockquote>
<div id="_mcePaste">$ df -h</div>
<div id="_mcePaste">Filesystem            Size  Used Avail Use% Mounted on</div>
<div id="_mcePaste">/dev/hda1             950M  343M  559M  38% /</div>
<div id="_mcePaste">varrun               1000M   72K 1000M   1% /var/run</div>
<div id="_mcePaste">varlock              1000M     0 1000M   0% /var/lock</div>
<div id="_mcePaste">udev                 1000M   36K 1000M   1% /dev</div>
<div id="_mcePaste">devshm               1000M     0 1000M   0% /dev/shm</div>
<div id="_mcePaste">/dev/hda5             4.7G  1.5G  3.2G  32% /mondossier3</div>
<div id="_mcePaste">/dev/hda6             4.7G  1.4G  3.4G  29% /mondossier2</div>
<div id="_mcePaste">/dev/hda7              81G  661M   81G   1% /mondossier1</div>
<div id="_mcePaste">none                 1000M     0 1000M   0% /tmp</div>
</blockquote>
<p>Donc, pour revenir à nos moutons, le matin, pas de possibilité d&#8217;uploader correctement mes images.</p>
<p>Et à midi, le site qui ne répond plus.</p>
<p>En confiance après le redémarrage correct de la veille, je demande un redémarrage du serveur sur l&#8217;admin de 1and1, ce qui se passe correctement, mais de ce que je constatais à ce moment là, Nginx/Apache fonctionnaient, mais sur abricocotier.Fr, il n&#8217;y avait plus de connexion MySQL. A l&#8217;inverse, il semblait que microblog.abricocotier.fr ait une connexion MySQL&#8230; Donc j&#8217;ai d&#8217;abord pensé à un hack du site (des petits malins qui auraient été s&#8217;amuser avec le install.php de WordPress), ou auraient réussi à virer le config.php&#8230;</p>
<p>Le soir, en ayant ENFIN accès à un PuTTy, j&#8217;ai pu constater qu&#8217;il n&#8217;en était rien, et que le site avait l&#8217;air d&#8217;être intact, en tout cas en ce qui concernait les fichiers. Par contre, MySQL m&#8217;affichait l&#8217;erreur suivante :</p>
<pre class="brush: plain; title: ; notranslate">
Warning: session_write_close() [function.session-write-close]: write failed: No space left on device (28) in /usr/share/phpmyadmin/libraries/common.lib.php on line 648

Warning: session_write_close() [function.session-write-close]: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php5) in /usr/share/phpmyadmin/libraries/common.lib.php on line 648

#0  PMA_sendHeaderLocation(http://localhost/phpmyadmin/index.php?lang=fr-utf-8&amp;amp;convcharset=iso-8859-1&amp;amp;collation_connection=utf8_unicode_ci&amp;amp;token=ec462f0246b8932e5b46ee9417dd491f) called at [/usr/share/phpmyadmin/libraries/auth/cookie.auth.lib.php:543]
#1  PMA_auth_set_user() called at [/usr/share/phpmyadmin/libraries/common.inc.php:758]
#2  require_once(/usr/share/phpmyadmin/libraries/common.inc.php) called at [/usr/share/phpmyadmin/index.php:34]

Fatal error: PMA_sendHeaderLocation called when headers are already sent! in /usr/share/phpmyadmin/libraries/common.lib.php on line 655
</pre>
<p>Après une recherche sur le <a href="http://forum.ubuntu-fr.org/viewtopic.php?pid=3770574">forum Ubuntu-fr</a>, j&#8217;ai pu constater qu&#8217;il pourrait s&#8217;agir d&#8217;un problème de taille disponible sur le disque&#8230; Ce qui m&#8217;a amené à supprimer mes logs Nginx, &laquo;&nbsp;pour voir&nbsp;&raquo;&#8230; Et quand j&#8217;ai vu que je supprimais 3Go de logs, j&#8217;ai compris qu&#8217;il y avait peut-être là quelque chose de louche.</p>
<p>Après avoir exécuté les commandes suivantes :</p>
<blockquote><p>cd /mondossierdelog/nginx</p>
<p>rm *.gz</p>
<p>rm *.1</p></blockquote>
<p><em>(rien qu&#8217;avec ces trois commandes, j&#8217;ai gagné 3Go)</em></p>
<p>MySQL ne voulait toujours pas fonctionner&#8230; Je me suis donc dis que c&#8217;était peut-être à cause du mauvais démarrage de celui-ci, et donc j&#8217;ai demandé (pour la troisième fois) un redémarrage du serveur.</p>
<p>Et là&#8230; c&#8217;état la quille ! Tout à refonctionné instantanément.</p>
<h3><strong>Bilan : </strong></h3>
<ul>
<li>Mettre les dossiers de ses sites sur la plus grosse des partition</li>
<li>Mettre ses logs sur la plus grosse des partition et/ou s&#8217;assurer que logrotate fonctionne correctement !</li>
</ul>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/13047-site-encore-down-hier-la-faute-a-un-espace-disque-rempli">Permalien</a> |
<a href="http://www.abricocotier.fr/13047-site-encore-down-hier-la-faute-a-un-espace-disque-rempli#comments">Ajoutez un commentaire !</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/programmation" rel="tag">Programmation</a>, <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a>, <a href="http://www.abricocotier.fr/tag/wordpress" rel="tag">Wordpress</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/13047-site-encore-down-hier-la-faute-a-un-espace-disque-rempli/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hier, le blog était down pendant une heure et demi</title>
		<link>http://www.abricocotier.fr/13020-hier-le-blog-etait-down-pendant-une-heure-et-demi</link>
		<comments>http://www.abricocotier.fr/13020-hier-le-blog-etait-down-pendant-une-heure-et-demi#comments</comments>
		<pubDate>Tue, 05 Oct 2010 06:17:03 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Monitis]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=13020</guid>
		<description><![CDATA[Hier, le blog n&#8217;a pas été accessible entre 19h43 et 21h13 (heures relevées par l&#8217;outil de monitoring Monitis). J&#8217;ai donc mis facilement 3/4 d&#8217;heure à me rendre compte que le blog ne répondait plus (et encore, c&#8217;est un coup de &#8230; <a href="http://www.abricocotier.fr/13020-hier-le-blog-etait-down-pendant-une-heure-et-demi">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Hier, le blog n&#8217;a pas été accessible entre 19h43 et 21h13</strong> (heures relevées par l&#8217;outil de monitoring Monitis). J&#8217;ai donc mis facilement 3/4 d&#8217;heure à me rendre compte que le blog ne répondait plus (et encore, c&#8217;est un coup de chance que j&#8217;aie eu besoin d&#8217;y accéder à ce moment là), et trois autres quarts d&#8217;heures à le remettre debout, la faute à mon absence devant mon PC personnel (et donc le besoin de retrouver à droite à gauche les différents codes d&#8217;accès). Notez que ce genre d&#8217;événement fait sérieusement penser à <a href="http://www.abricocotier.fr/12295-appengine-blog-cms-securisee-gratuit-scalable">passer sous AppEngine, par exemple sur Bloog</a>, ce qui permettrait au moins d&#8217;éviter d&#8217;avoir à faire ce genre de maintenance. <span id="more-13020"></span></p>
<p style="text-align: center;"><img class="aligncenter" title="arret_serveur_abricocotier" src="http://www.abricocotier.fr/wp-content/uploads/2010/10/arret_serveur_abricocotier.jpg" alt="" width="580" /></p>
<p><strong>J&#8217;avais reçu hier soir un premier mail de Monitis, me signalant l&#8217;arrêt d&#8217;AbriCoCotier</strong>, mais j&#8217;avoue que je n&#8217;y ai pas prété attention, croyant que c&#8217;était un n-ième mail de publicité de Monitis. Fail de ma part. En voulant me connecter sur AbriCoCotier dans la soirée, j&#8217;ai finit par me rendre compte que le blog était down, et plus exactement le serveur tout entier.</p>
<p><strong>Je me suis donc connecté sur l&#8217;interface 1and1 pour demander un allumage du serveur</strong> (l&#8217;interface 1and1 me signalant que le serveur était éteint, mais ça n&#8217;avait pas l&#8217;air de les gêner&#8230;), allumage du serveur qui me faisait assez peur, dans la mesure où je n&#8217;avais pas accès au SSH sur la connexion où j&#8217;étais au moment du rallumage (en gros j&#8217;étais sur le Wifi de Microsoft, et le SSH n&#8217;avait pas l&#8217;air de passer&#8230;). Pour autant, environ une minute après la demande de rallumage, le blog était de retour comme si de rien n&#8217;était. </p>
<p>Ce que je ne comprend pas, <strong>c&#8217;est comment le blog a pu passer d&#8217;un état &laquo;&nbsp;éteint&nbsp;&raquo; à un état &laquo;&nbsp;tout fonctionnel&nbsp;&raquo; alors que 1and1 n&#8217;a pas accès au serveur en lui-même</strong> (la dernière fois qu&#8217;ils ont voulu faire une intervention dessus, ils n&#8217;ont pas pu à cause du changement de port pour le SSH et du rootlogin à Off). Je dis ça parce que mon serveur fonctionne avec un Nginx et un Apache en même temps, et donc je ne sais pas comment le serveur a été rallumé, mais en tout cas tout s&#8217;est remis en place comme s&#8217;il ne s&#8217;était rien passé. Je me demande donc d&#8217;où a bien pu venir l&#8217;arrêt du serveur (je me dis que l&#8217;arrêt est venu potentiellement de 1and1 qui l&#8217;aurait &laquo;&nbsp;mis en veille&nbsp;&raquo;), dans la mesure où, s&#8217;il était tombé sous un gros bug, une faille ou un DDoS, je pense qu&#8217;il ne serait pas revenu dans son état initial tout seul.</p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/13020-hier-le-blog-etait-down-pendant-une-heure-et-demi">Permalien</a> |
<a href="http://www.abricocotier.fr/13020-hier-le-blog-etait-down-pendant-une-heure-et-demi#comments">1 commentaire</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/monitis" rel="tag">Monitis</a>, <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/13020-hier-le-blog-etait-down-pendant-une-heure-et-demi/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Facebook construirait un nouveau datacenter rempli de serveurs ARM</title>
		<link>http://www.abricocotier.fr/12497-facebook-construirait-nouveau-datacenter-serveurs-arm-processeurs</link>
		<comments>http://www.abricocotier.fr/12497-facebook-construirait-nouveau-datacenter-serveurs-arm-processeurs#comments</comments>
		<pubDate>Tue, 24 Aug 2010 18:57:39 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=12497</guid>
		<description><![CDATA[D&#8217;après une note publiée sur TechCrunch, Facebook pourrait (notez le conditionnel) faire contruire un nouveau DataCenter rempli de serveurs fonctionnant à partir de processeurs ARMs (donc différents des serveurs classiques sur architecture x86). La note signale bien sûr que c&#8217;est &#8230; <a href="http://www.abricocotier.fr/12497-facebook-construirait-nouveau-datacenter-serveurs-arm-processeurs">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>D&#8217;après une note publiée sur <a href="http://techcrunch.com/2010/08/24/rumor-facebook-flirting-with-arm-servers/">TechCrunch</a>,<strong> Facebook pourrait (notez le conditionnel) faire contruire un nouveau DataCenter rempli de </strong><a href="http://www.abricocotier.fr/12433-le-monde-des-serveurs-pourrait-bien-passer-massivement-sur-des-processeurs-arm"><strong>serveurs fonctionnant à partir de processeurs ARMs</strong></a><strong> </strong>(donc différents des serveurs classiques sur architecture x86). La note signale bien sûr que c&#8217;est l&#8217;efficacité énergétique qui pourrait être intéressante pour Facebook. A l&#8217;inverse de TechCrunch, je reste plus intéressé par l&#8217;ampleur médiatique que pourrait fournir une telle décision dans le monde des processeurs ARM. En effet, Facebook constitue un partenaire commercial sérieux en terme de volume (gros volume de serveurs, même si finalement très faible comparé à ce dont disposent d&#8217;autres companies telles que Google), et en terme de besoin (Facebook fonctionne sur du PHP, et donc reste proche de la pile LAMP).     <span id="more-12497"></span></p>
<p style="text-align: center;"><img title="facebook_datacenter" src="http://www.abricocotier.fr/wp-content/uploads/2010/08/facebook_datacenter.jpg" alt="" width="580" /></p>
<p>Au passage, cela me permet de rajouter que sur ce créneau, <strong>Facebook (si la news se confirme), aura procédé de façon assez différente de Google</strong>, dont on dit qu&#8217;ils construiraient eux-même leur serveurs, mais à partir de matériel standard (ce afin de diminuer les coûts de matériel). Facebook aura donc été plus loin, en allant chercher une solution plutôt neuve dans le domaine (certains diront &laquo;&nbsp;risquée&nbsp;&raquo;), et pas forcément des moins chères : les serveurs sur ARM n&#8217;étant pas actuellement devenus des standards, je doute que les coûts d&#8217;échelle aient déjà pu être réduits dans des proportions significatives&#8230;</p>
<p>Un autre point auquel je n&#8217;avais pas pensé également, mais qui pourrait être amené à avoir son importance : celui du &laquo;&nbsp;green aspect&nbsp;&raquo; des services web. On a vu déjà que Google avait investit dans des entreprises vertes (fournissant des éoliennes), ou menait des recherches pour obtenir des datacenter refroidis à l&#8217;eau de mer. <strong>Facebook pourrait donc élargir la course menée contre Google sur le domaine du &laquo;&nbsp;service le plus vert&nbsp;&raquo;</strong>, ce qui ne serait pas plus mal (quoi que, ne nous leuront pas : toute baisse de consommation d&#8217;énergie se répercute sur une baisse de la facture pour le fournisseur : l&#8217;écologie est donc d&#8217;abord une réalité économique). On peut aussi étendre cette idée à l&#8217;hebergement de services : Facebook, avec ses applications, deviendrait une infrastructure plus verte que Google AppEngine (je m&#8217;aventure à faire une comparaison entre ces deux infrastructures d&#8217;hébergement d&#8217;applications, mais je n&#8217;ai jamais développé sur Facebook, n&#8217;hésitez donc pas à me corriger si vous voyez une ânerie dans mes propos).</p>
<p>Dernière chose à laquelle cela me fait penser : <strong>je me doute que Intel et AMD ne vont pas se laisser faire aussi rapidement</strong>. Je vois deux options : soient ils sortent un concurrent de ARM très rapidement (peut-être les Atoms d&#8217;Intel ? Mais quid du coté de AMD ?) et font pression sur les constructeurs/gros clients pour qu&#8217;ils &laquo;&nbsp;restent dans le giron&nbsp;&raquo; (mais ça n&#8217;a pas du fonctionner avec Facebook), soient ils se mettent à l&#8217;architecture ARM au plus vite. Mais je n&#8217;ai pas ouï de news de ce côté là&#8230;</p>
<p>La vidéo dont est tirée la photo ci-dessus, qui contient pas mal d&#8217;infos croustillantes sur les datacenters de Facebook :</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" 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://www.youtube.com/v/bCZwgtC_TZA?fs=1&amp;hl=en_US" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/bCZwgtC_TZA?fs=1&amp;hl=en_US" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/12497-facebook-construirait-nouveau-datacenter-serveurs-arm-processeurs">Permalien</a> |
<a href="http://www.abricocotier.fr/12497-facebook-construirait-nouveau-datacenter-serveurs-arm-processeurs#comments">3 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/arm" rel="tag">ARM</a>, <a href="http://www.abricocotier.fr/tag/facebook" rel="tag">Facebook</a>, <a href="http://www.abricocotier.fr/tag/intel" rel="tag">Intel</a>, <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/12497-facebook-construirait-nouveau-datacenter-serveurs-arm-processeurs/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Des images encodées en Base64 pour accélérer le chargement de sa page en diminuant les requètes</title>
		<link>http://www.abricocotier.fr/12188-images-encodees-base64-accelerer-chargement-page-diminuant-requetes</link>
		<comments>http://www.abricocotier.fr/12188-images-encodees-base64-accelerer-chargement-page-diminuant-requetes#comments</comments>
		<pubDate>Tue, 27 Jul 2010 12:11:16 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Serveur]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=12188</guid>
		<description><![CDATA[J&#8217;en ai déjà parlé plusieurs fois : accélérer le temps de chargement d&#8217;un site passe entre autre par la réduction du nombre de fichiers à charger, car chaque requète supplémentaire nécessite un temps non compressible pour appeler le serveur, établir une connexion, et télécharger &#8230; <a href="http://www.abricocotier.fr/12188-images-encodees-base64-accelerer-chargement-page-diminuant-requetes">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>J&#8217;en ai déjà parlé plusieurs fois : accélérer le temps de chargement d&#8217;un site passe entre autre par la réduction du nombre de fichiers à charger, car <strong>chaque requète supplémentaire nécessite un temps non compressible pour appeler le serveur, établir une connexion, et télécharger le fichier</strong>. Cela peut passer par la <a href="http://www.abricocotier.fr/10638-png2css-un-outil-pour-theoriquement-accelerer-le-chargement-des-pages">transformation des images en pixels CSS</a>, ou bien également pas leur <strong>définition en </strong><a href="http://fr.wikipedia.org/wiki/Base64"><strong>Base64</strong></a>. Je n&#8217;avais jusqu&#8217;alors pas trop regardé cette solution en terme d&#8217;avantages apportés, mais j&#8217;aurais dû, comme je l&#8217;explique ci-dessous.   <span id="more-12188"></span></p>
<p style="text-align: center;"><img title="Light_Contact_by_Faellas" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/Light_Contact_by_Faellas.jpg" alt="" width="580" height="396" /></p>
<p style="text-align: center;"><em>Le rapport entre le billet et l&#8217;image ? Y&#8217;en a pas (à part l&#8217;idée de vitesse et de lumière). Cela dit, j&#8217;aimais bien ce fond d&#8217;écran, il est <a href="http://www.crystalxp.net/forum/fr/exposition-graphique/Fonds-d-ecran-amp-Affiches-2/wallpapers-ecran-fond-sujet_26013_113.htm">téléchargeable là</a>.</em></p>
<p>Je me suis donc repenché sur le sujet après être tombé sur un <a href="http://www.eboyer.com/dev/551-base64-css/">billet</a> traitant du sujet, et voilà quelques améliorations que j&#8217;ai vues possibles sur ce blog. J&#8217;ai découpé mes tests en trois, étalant la taille des fichiers (d&#8217;une centaine d&#8217;octets à plusieurs dizaines de Ko), afin de voir à partir de quelle limite de taille l&#8217;utilisation de Base64 n&#8217;est plus justifiée.</p>
<h2><strong>Premier test</strong></h2>
<p>Mon image de fond, disponible a <a href="http://www.abricocotier.fr/wp-content/themes/cleaker-21/images/contentBg2.png">cette adresse</a>, me coûte 138 octets en PNG.</p>
<p>En la passant en Base64 (avec ce site), j&#8217;obtiens la chaine de caractère suivante :</p>
<blockquote><p>data:image/png;base64,<br />
iVBORw0KGgoAAAANSUhEUgAAA+gAAAABAgMAAAAwbmygAAAAB<br />
GdBTUEAALGPC/xhBQAAAAlwSFlzAAASdAAAEnQB3mYfeAAAAAxQ<br />
TFRFAAAA1tjD3N3K////dy6oVgAAABRJREFUCB1j+D8ogWgouSBoFbE<br />
AAAa9w/mxw3JEAAAAAElFTkSuQmCC</p></blockquote>
<p>Or, cette chaîne de caractère, une fois mise dans la feuille CSS, ne prend que 207 octets, soit donc un peu mois de deux fois plus. L&#8217;avantage du CSS, c&#8217;est qu&#8217;on peut le gzipper. Et une fois gzippée, cette chaîne de caractère prend&#8230; 201 octets, ce qui n&#8217;est pas fantastique, bien sûr, mais je suis prêt à parier que le temps de téléchargement supplémentaire des 201-138=63 octets est négligeable par rapport à celui de l&#8217;établissement d&#8217;une nouvelle connexion. En effet, sur des fichiers envoyés par Nginx, je remarque souvent un temps d&#8217;attente+connexion de 30 ms ( ce qui est déjà pas mal, et je pense que vous aurez du mal à trouver un temps inférieur sur le net). Or, à un taux de téléchargement de 50ko/s (taux finalement assez faible par rapport aux connexions moyennes que j&#8217;ai), le téléchargement de 63 octets représente : 1,2ms de téléchargement supplémentaire (règle de 3 : (63*1000)/(50*1024) = 1,2). Une broutille, comparé aux 30ms de temps de connexion occasionné par un requète supplémentaire !</p>
<p>En conclusion : <strong>pour ce fichier, le Base64 multiplie par un facteur de 30 (au minimum) le chargement de cette ressource.</strong></p>
<h2><strong>Deuxième test</strong></h2>
<p>Avec une image un peu plus importante, celle d&#8217;un <a href="http://www.abricocotier.fr/wp-content/themes/cleaker-21/images/twitter-icone-64.png">icone</a> pointant vers le compte Twitter <a href="http://twitter.com/abricocotier">d&#8217;AbriCoCotier</a>.</p>
<ul>
<li>En JPG, elle fait 9216 octets.</li>
<li>En Base64 non-gzippée : 12311 octets.</li>
<li>En Base64 gzippée : 9340 octets (soit donc 9340-9216=124 octets de plus). Or, à un taux de téléchargement de 50ko/s, le téléchargement de 124 octets représente : 2,4ms de téléchargement supplémentaire (règle de 3 : (124*1000)/(50*1024) = 2,4).</li>
</ul>
<p>Donc là aussi, le pourcentage d&#8217;octets en plus après encodage Base64+ gzip reste bien inférieur (là avec un facteur de 15) à ce qu&#8217;aurait occasionné le téléchargement d&#8217;une autre ressource.</p>
<h2><strong>Troisième test</strong></h2>
<p>Avec le header de la page, qui est sans aucun doute l&#8217;image la plus lourde de la page.</p>
<ul>
<li>En JPG, elle fait 34241 octets (je ne donne que les comptes en octets, dans la mesure où Linux me fournit des Kio et non des Ko, donc je préfère éviter toute confusion).</li>
<li>En base64 non gzippée, 45682 octets.</li>
<li>En Base64 gzippée, 34242 octets.</li>
</ul>
<p>Pour ce fichier, <strong>en Base64 gzippée, on arrive à une taille inférieure à celle du JPG (ou quasi égale, à un octet près), tout en économisant en plus le temps de connexion supplémentaire !</strong> Donc c&#8217;est directement le temps de téléchargement final de la page qui est amélioré. Surtout, je crois que le plus important est de noter que la taille de l&#8217;image étant assez importante, le gzip semble (progressivement) plus efficace pour encoder le contenu de l&#8217;image que l&#8217;encodage JPG lui-même ! C&#8217;est donc de très bonne augure pour les reste des grosses images à charger.</p>
<h2><strong>Bilan</strong></h2>
<p>J&#8217;ai l&#8217;impression que quelque soit la taille des fichiers, on est gagnant avec Base64 :</p>
<ul>
<li><strong>soit les fichiers sont petits, auquel cas la taille Base64+gzip est légèrement supérieure à celle d&#8217;origine</strong>, mais cette taille supérieure permet d&#8217;économiser quand même beaucoup plus de temps de téléchargement qu&#8217;on en aurait perdu en allant chercher une ressource supplémentaire ;</li>
<li><strong>soit les fichiers sont très gros, auquel cas la taille Base64+gzip parvient à être encore plus faible que la taille d&#8217;origine !</strong></li>
</ul>
<p>Malgré tout, je ne recommande pas forcément l&#8217;utilisation de cette technique. Son gros point faible reste de ne pas être interprétée par IE6 et IE7, qui peuvent, selon les sites, représenter une part importante du trafic. Pour AbriCoCotier.fr, <strong>le trafic venant des Internet Explorer toute version confondue est de ﻿30,90%, dont 67,98% d&#8217;IE8</strong> (qui interprète correctement le Base64). Je considère que les autres versions ne supportent pas le Base64. Sur le total des visiteurs, j&#8217;en ai donc 0,3090*(1-0,6798)=0,0989 <strong>soit donc en gros 10% qui ne pourront pas voir ces images</strong>. Je considère que c&#8217;est trop élevé, mais je suis sûr que d&#8217;autres sites ont des statistiques à ce niveau qui sont bien plus flatteuses, et donc qui leur permettent de faire ce pas en avant.</p>
<blockquote><p><strong>Edit :</strong> J&#8217;ai fait un <a href="http://www.abricocotier.fr/12199-base64-encoder-encodeur-accelerer-vos-pages-web">outil en ligne</a> pour encoder vos images en Base64, ce qui vous permettra de comparer directement si l&#8217;original est plus lourd que le Base64 gzippé.</p></blockquote>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/12188-images-encodees-base64-accelerer-chargement-page-diminuant-requetes">Permalien</a> |
<a href="http://www.abricocotier.fr/12188-images-encodees-base64-accelerer-chargement-page-diminuant-requetes#comments">10 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a>, <a href="http://www.abricocotier.fr/tag/wordpress" rel="tag">Wordpress</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/12188-images-encodees-base64-accelerer-chargement-page-diminuant-requetes/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Serveurs du futur : architecture physique ou virtualisation ?</title>
		<link>http://www.abricocotier.fr/11386-serveurs-du-futur-architecture-physique-ou-virtualisation</link>
		<comments>http://www.abricocotier.fr/11386-serveurs-du-futur-architecture-physique-ou-virtualisation#comments</comments>
		<pubDate>Sun, 06 Jun 2010 18:23:27 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[1and1]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AppEngine]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[OVH]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=11386</guid>
		<description><![CDATA[L&#8217;architecture serveur du futur se fera-t-elle via une virtualisation des ressources ou via un architecture physique louée comme telle ? C&#8217;est la question que nous nous posions dans les commentaires du billet sur l&#8217;arrivée des dédibox v3. Cela tombe bien &#8230; <a href="http://www.abricocotier.fr/11386-serveurs-du-futur-architecture-physique-ou-virtualisation">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>L&#8217;architecture serveur du futur se fera-t-elle via une virtualisation des ressources ou via un architecture physique louée comme telle ?</strong> C&#8217;est la question que nous nous posions dans les commentaires du <a href="http://www.abricocotier.fr/11286-dell-forutna-dedibox-v3-illiad-serveurs-low-cost#comment-7387">billet sur l&#8217;arrivée des dédibox v3</a>. Cela tombe bien : ça faisait assez longtemps que j&#8217;avais envie de parler des nouveaux types d&#8217;architecture pour les hébergeurs, et que je ne trouvait pas l&#8217;occasion de le faire. En effet, à l&#8217;heure actuelle, au moins trois poids lourds en terme de capitalisation ont lancé des offres de serveurs, toutes virtualisées.   <span id="more-11386"></span></p>
<p style="text-align: center;"><img title="1and1 Serveur Cloud Dynamique" src="http://www.abricocotier.fr/wp-content/uploads/2010/06/1and1-Serveur-Cloud-Dynamique.jpg" alt="" width="580" height="281" /></p>
<h2><strong>Ces poids lourds, qui sont-ils ?</strong></h2>
<ul>
<li>Il y a d&#8217;abord <strong>Google</strong>, avec AppEngine,</li>
<li>mais également <strong>Microsoft</strong> avec Azure,</li>
<li>et enfin (peut-être le plus connu) <strong>Amazon</strong> avec les Amazon Web Services.</li>
</ul>
<p>Notons de surcroît que les hébergeurs plus &laquo;&nbsp;classiques&nbsp;&raquo; commencent à se lancer sur le secteurs, avec notamment :</p>
<ul>
<li><strong>1and1</strong> qui propose ses serveurs &laquo;&nbsp;Cloud Dynamique&nbsp;&raquo;,</li>
<li><strong>GoDaddy</strong> avec ses <a href="http://www.godaddy.com/hosting/mac-hosting.aspx">Cloud Servers powered by MacOS X</a> (je ne sais pas du tout ce que ça vaut),</li>
<li><strong>OVH</strong> avec son miniCloud, ou</li>
<li><strong>Gandi</strong> avec son système de parts.</li>
</ul>
<p>Tout ça pour dire que <strong>la tendance aux serveurs &laquo;&nbsp;dynamiques&nbsp;&raquo; semble être une tendance de fond et pas simplement une mode</strong>. Elle permet notamment une <strong>flexibilité dans les ressources</strong>, tout <strong>en allant progressivement</strong> vers des performances aussi bonnes que celles d&#8217;un serveur physique.  Certains, comme Google avec AppEngine, cachent complètement le souci des ressources ou de leur quantité, et ne fait payer qu&#8217;à la quantité de calculs pour le processeur, à la quantité de bande passante consommée, à la quantité de mémoire, etc. <strong>On ne paye que ce que l&#8217;on consomme</strong>. Dans un sens, c&#8217;est sympathique : on ne se préoccupe pas de la qualité du processeur et on se concentre sur la qualité de l&#8217;application ; par contre, point de mot à dire sur le type de serveur utilisé et les temps de réponses moyens. Je lisais d&#8217;ailleurs un billet récemment sur Google AppEngine (et bien sûr, je ne parviens pas à le retrouver) d&#8217;une personne déçue par le service, car elle s&#8217;était rendue compte que Google lui mettait son application en sommeil dès que celle-ci n&#8217;était plus visitée pendant une certaine durée, et que l&#8217;utilisateur suivant avait un temps de réponse un peu supérieur (le temps de &laquo;&nbsp;réveiller&nbsp;&raquo; l&#8217;application). Cette virtualisation des ressources a donc ses avantages et ses inconvénients.</p>
<p><strong>Pour autant, j&#8217;ai tendance à penser qu&#8217;elle finira par prendre le pas sur les architectures physiques telles les dédibox v3 ou les Kimsufi 250G</strong>. En effet : les offres Cloud sont déjà parmi celles qui sont louées aux prix les plus bas, donc les serveurs dédiés ne pourront pas longtemps rester en compétition avec eux. Ensuite, le Cloud offre l&#8217;avantage pour l&#8217;hébergeur de pouvoir rassembler plusieurs offres qu&#8217;il avait avant : les serveurs privés virtuels sont en fait à peu de chose près des offres Cloud, les hébergement mutualisés en sont aussi, et les serveurs dédiés dont le stockage est délocalisés peuvent également être considérés comme tels. Finalement, seuls les besoins &laquo;&nbsp;professionnels&nbsp;&raquo; et très spécifiques vont encore avoir besoin de serveurs &laquo;&nbsp;nominatifs&nbsp;&raquo; (par exemple pour les entreprises ayant besoin de réaliser un audit de sécurité sur l&#8217;accès physique au serveur), et donc il est possible que ce type d&#8217;offre devienne progressivement marginal.</p>
<p><em>Au passage, les hébergeurs classiques risquent d&#8217;avoir très mal le jour où Google supportera le PHP et MySQL (s&#8217;il les supportent un jour), car son mode de paiement à la consommation risque de séduire une partie importante des sites web hébergés&#8230;</em></p>
<p><em>Je rajoute que, malgré les récentes offres proposées par les hébergeurs (les &laquo;&nbsp;offres à 15 euros pour des serveurs mini&nbsp;&raquo;), je ne vois pas de possibilité de vérifier si le serveur est effectivement virtualisé ou non, dans la mesure où tous les niveaux réseaux et processeurs peuvent être gérés/virtualisés&#8230;</em></p>
<blockquote><p><strong>Edit :</strong> Merci à <a href="http://thomas.marteau.org/">Thomas</a> pour la relecture.</p></blockquote>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/11386-serveurs-du-futur-architecture-physique-ou-virtualisation">Permalien</a> |
<a href="http://www.abricocotier.fr/11386-serveurs-du-futur-architecture-physique-ou-virtualisation#comments">5 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/1and1" rel="tag">1and1</a>, <a href="http://www.abricocotier.fr/tag/amazon" rel="tag">Amazon</a>, <a href="http://www.abricocotier.fr/tag/appengine" rel="tag">AppEngine</a>, <a href="http://www.abricocotier.fr/tag/arm" rel="tag">ARM</a>, <a href="http://www.abricocotier.fr/tag/google" rel="tag">Google</a>, <a href="http://www.abricocotier.fr/tag/intel" rel="tag">Intel</a>, <a href="http://www.abricocotier.fr/tag/ovh" rel="tag">OVH</a>, <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/11386-serveurs-du-futur-architecture-physique-ou-virtualisation/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Envoyer des fichiers gzipés avec Nginx sans recompilation</title>
		<link>http://www.abricocotier.fr/11145-envoyer-des-fichiers-gzipes-avec-nginx-sans-recompilation</link>
		<comments>http://www.abricocotier.fr/11145-envoyer-des-fichiers-gzipes-avec-nginx-sans-recompilation#comments</comments>
		<pubDate>Tue, 25 May 2010 14:24:46 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=11145</guid>
		<description><![CDATA[Dans la longue série des billets que je fais sur l&#8217;optimisation de la vitesse de chargement et d&#8217;envoi d&#8217;un site web, j&#8217;en suis arrivé à faire plusieurs billets sur Nginx. Par ailleurs, j&#8217;ai découvert récemment (via Lionel) le webware GTmetrix, &#8230; <a href="http://www.abricocotier.fr/11145-envoyer-des-fichiers-gzipes-avec-nginx-sans-recompilation">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dans la longue série des billets que je fais sur l&#8217;optimisation de la vitesse de chargement et d&#8217;envoi d&#8217;un site web, j&#8217;en suis arrivé à faire plusieurs billets sur <a href="http://www.abricocotier.fr/10503-nginx-en-reverse-proxy-pour-plusieurs-blogs-wordpress">Nginx</a>. Par ailleurs, j&#8217;ai découvert récemment (<a href="http://blog.websourcing.fr/gtmetrix-analyse-amelioration-performance-site/">via Lionel</a>) le webware <a href="http://gtmetrix.com/">GTmetrix</a>, qui permet de faire rapidement un état des lieux des performances de son site, grâce auquel j&#8217;ai pu me rendre compte qu&#8217;il ne me restait pas grand chose à améliorer à part l&#8217;<strong>encodage des fichiers en gzip</strong>. Cet encodage permet de réduire grandement la quantité d&#8217;information envoyée au client (car celle-ci est compressée), et notamment pour les fichiers textes (comme les feuilles de style et fichiers javascripts), pour lesquels on atteint facilement des réduction de 70%.<br />
<span id="more-11145"></span><br />
Cela m&#8217;a étonné, car je croyais l&#8217;avoir mis en place via l&#8217;installation de Nginx, mais à l&#8217;évidence, ça ne fonctionnait pas.</p>
<p style="text-align: center;"><img style="border: 2px solid black;" title="gtmetric_compress_gzip" src="http://www.abricocotier.fr/wp-content/uploads/2010/05/gtmetric_compress_gzip.jpg" alt="" width="580" /></p>
<p>Après quelques vérifications, j&#8217;ai vu qu&#8217;effectivement, même si la configuration de mon Nginx indiquait qu&#8217;il fallait fournir le contenu en gzip, cette étape ne fonctionnait pas. J&#8217;ai fait d&#8217;autres recherches, qui m&#8217;ont permit de conclure que j&#8217;avais oublié d&#8217;inclure l&#8217;option gzip lors de la compilation de Nginx (oui parce que je l&#8217;ai compilé moi-même : la version proposée par mon OS étant à mon goût trop vieille &#8211; car désormais non supportée par Nginx&#8230;). Bref : a la compilation, j&#8217;ai oublié l&#8217;étape permettant à Nginx de prendre les fichiers, et de les convertir en gzip.</p>
<p>Cela dit, une bonne chose est que la version que j&#8217;ai installé permet, si on met dans la configuration d&#8217;un site la ligne :</p>
<blockquote><p><code>gzip_static on;</code></p></blockquote>
<p>&#8230;de vérifier à chaque envoi s&#8217;il existe une version gzippée du fichier, et si oui, de l&#8217;envoyer à la place du fichier demandé.</p>
<p>Sauf que : il me fallait désormais prendre les différents fichiers textes non gzippés. J&#8217;ai un instant crû qu&#8217;un tar -czvf suffirait, mais je me suis retrouvé avec des headers <a href="http://forum.ubuntu-fr.org/viewtopic.php?pid=3503266">pas bons</a>. En utilisant la commande gzip, j&#8217;ai obtenu des résultats bien meilleurs. Du coup, j&#8217;ai pris quelques minutes pour créer un <strong>script convertissant en gzip tous les fichiers CSS et JavaScript d&#8217;un dossier et de ses sous-dossiers</strong> :</p>
<pre class="brush: plain; title: ; notranslate">
#!/bin/bash

#User Variables

DIR1=/var/www/monsite1/;
DIR2=/var/www/monsite2/;

FIND=find;
GZIP=/bin/gzip;

for d in &quot;$DIR1 $DIR2&quot;
do
    for i in `$FIND $d -name &quot;*.css&quot; -o -name &quot;*.js&quot;`;
    do
                $GZIP -c $i &gt; $i.gz;
    done;
done;
</pre>
<p>Notez plusieurs choses dans ce script :</p>
<p>On trouve l&#8217;intégralité des fichiers avec extension css ou js via la commande find :</p>
<blockquote><p><code>find path/ -name "*.css" -o -name "*.js"</code></p></blockquote>
<p>On les convertit en laissant l&#8217;original via la commande gzip customisée :</p>
<blockquote><p><code>gzip -c style.css &gt; style.css.gz</code></p></blockquote>
<p>Voilà ! Normalement, cette technique permettra d&#8217;économiser encore un peu de bande passante. Après, mettez ce script dans une tâche CRON pour qu&#8217;elle s&#8217;exécute assez régulièrement (au cas où vous mettriez à jour des fichiers CSS). Et enfin, en ce qui concerne la compatibilité avec les différents navigateurs, j&#8217;ai testé sous Chrome 4, Firefox 4, Opera 10.50 et IE7 (out ça sur Windows XP), et ça fonctionnait sans problème. J&#8217;ai bien conscience que peut-être, il y a encore des personnes sous IE5 ou IE6, mais elles commencent sérieusement à m&#8217;énerver. Donc je ne vérifie pas pour ces configurations. POINT.</p>
<blockquote><p><em><strong>Edit :</strong> Pour ceux qui viendraient me dire qu&#8217;il y a toujours le mod_deflate de Apache, je leur répondrais que je suis au courant, mais que chez moi <a href="http://www.abricocotier.fr/10503-nginx-en-reverse-proxy-pour-plusieurs-blogs-wordpress">Apache ne traite pas les CSS et les JS</a>, donc cette solution n&#8217;était pas envisageable ici.</em></p></blockquote>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/11145-envoyer-des-fichiers-gzipes-avec-nginx-sans-recompilation">Permalien</a> |
<a href="http://www.abricocotier.fr/11145-envoyer-des-fichiers-gzipes-avec-nginx-sans-recompilation#comments">1 commentaire</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/nginx" rel="tag">Nginx</a>, <a href="http://www.abricocotier.fr/tag/programmation" rel="tag">Programmation</a>, <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/11145-envoyer-des-fichiers-gzipes-avec-nginx-sans-recompilation/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Script shell de sauvegarde des fichiers associés à un blog WordPress</title>
		<link>http://www.abricocotier.fr/11013-script-shell-de-sauvegarde-des-fichiers-associes-a-un-blog-wordpress</link>
		<comments>http://www.abricocotier.fr/11013-script-shell-de-sauvegarde-des-fichiers-associes-a-un-blog-wordpress#comments</comments>
		<pubDate>Wed, 19 May 2010 14:23:48 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Serveur]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=11013</guid>
		<description><![CDATA[Dans la lignée du script de sauvegarde quotidienne des bases de données, je me suis dis qu&#8217;il serait bon également de sauvegarder les fichiers associés au fonctionnement du site, parmi lesquels on peut citer (pour un blog WordPress) les images &#8230; <a href="http://www.abricocotier.fr/11013-script-shell-de-sauvegarde-des-fichiers-associes-a-un-blog-wordpress">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dans la lignée du <a href="http://www.abricocotier.fr/10829-script-shell-de-sauvegarde-quotidienne-des-bases-de-donnees-mysql">script de sauvegarde quotidienne des bases de données</a>, je me suis dis qu&#8217;il serait bon également de <strong>sauvegarder les fichiers associés au fonctionnement du site</strong>, parmi lesquels on peut citer (pour un blog WordPress) les images uploadées, les différents plugins installés, les fichiers du thèmes, etc. Le problème vient quand on a <strong>plusieurs sites sur le même serveur</strong>, et donc il est à mon avis compliqué de gérer au cas par cas ce qu&#8217;il faut sauvegarder ou non. Notez également que, en terme de place, les fichiers texte (tous les fichiers de code source en premier lieu) <strong>se compressent très bien</strong>, donc il n&#8217;est pas un problème de les sauvegarder tous.<br />
<span id="more-11013"></span></p>
<p style="text-align: center;"><img src="http://www.abricocotier.fr/wp-content/uploads/2010/05/Serveurs_dell.jpg" alt="" title="Serveurs_dell" width="580" style="border: 2px solid black;"  /></p>
<p>Or, comme chacun sait, au fur et à mesure de l&#8217;utilisation de tel ou tel CMS (ex : WordPress, Dotclear, Joomla, etc), CRM (VtigerCRM) ou autre logiciel installé sur un serveur, <strong>on finit par rajouter des personnalisations <a href="http://www.abricocotier.fr/6635-remplacer-la-page-error-establishing-a-database-connection-de-votre-wordpress-par-le-cache-google">ici</a> et <a href="http://www.abricocotier.fr/682-probleme-de-reglage-du-serveur-de-mails-sortant-outgoing-serveur-sous-vtiger-crm-la-solution">là</a></strong>, et bien sûr on ne se souvient jamais de l&#8217;intégralité de ce que l&#8217;on a fait.</p>
<p>Pour ma part, j&#8217;ai donc choisi de <strong>sauvegarder l&#8217;intégralité du dossier /var/www, même si c&#8217;est assez lourd en terme d&#8217;espace disque</strong>. A cela, j&#8217;ai ajouté les fichiers de configuration de chaque serveur fonctionnant sur le serveur (pour moi, Apache et Nginx).</p>
<p>Le script shell suivant fait en fait d&#8217;abord une copie des dossiers/fichiers à sauvegarder dans un répertoire temporaire (qu&#8217;il aura créé juste avant), puis les mets dans une archive gzipée. J&#8217;attire votre attention sur le fait que chez moi, avec un dossier /var/www de 740Mo (c&#8217;est pas tant que ça), <strong>le script a fait tourner le CPU à 100% pendant environ 8 minutes</strong>. Pendant ce temps là, les pages ont très bien été servies (j&#8217;ai fait le test), et d&#8217;après ce que je voyais sur <em>htop</em>, il y avait une gestion des processus permettant à Apache et Nginx de fonctionner correctement, laissant au script le reste du CPU disponible. Toutefois, <strong>les quelques observations que je note ici sont à prendre avec des pincettes,</strong> elles ne sont le fruit d&#8217;aucune étude sérieuse, c&#8217;est pourquoi je recommande de n&#8217;exécuter le script qu&#8217;au milieu de la nuit (entre 3h00 et 6h00), pour avoir un impact éventuel sur les performances aussi limité que possible. De même, il faut bien voir que la quantité de fichiers associés peut être assez importante, et la taille de l&#8217;archive également, donc si vous n&#8217;avez pas beaucoup d&#8217;espace disque sur votre serveur, évitez de multiplier les backups (pour ma part, je pense qu&#8217;une à deux fois par semaine me suffiront amplement).</p>
<p>Voilà le script shell :</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash

#User Variables
DATE=/bin/date;
NOW=`$DATE '+%Y-%m'-%d_04_30`;
NBBACKUP=4;
BACKUPDIR=/home/the_user/filesbackup;
BACKUPTEMPDIR=/home/the_user/filesbackup/tmp;

APACHECONFDIR=/etc/apache2;
NGINXCONFDIR=/etc/nginx;
WWWDIR=/var/www;

#Command Variables
RM=/bin/rm;
CP=/bin/cp;
MKDIR=/bin/mkdir;
MV=/bin/mv;
TAR=/bin/tar;
SCP=/bin/scp

$MKDIR $BACKUPTEMPDIR;
$CP -R $APACHECONFDIR $BACKUPTEMPDIR;
$CP -R $NGINXCONFDIR $BACKUPTEMPDIR;
$CP -R $WWWDIR $BACKUPTEMPDIR;
$TAR -czf $BACKUPDIR/files_backup.$NOW.0.tgz $BACKUPTEMPDIR/;
$RM -R $BACKUPTEMPDIR/

#$SCP -P 50000 $BACKUPDIR/*0.tgz user@ndd.com:/chemin

i=$(($NBBACKUP-1))
j=$NBBACKUP
$RM -f $BACKUPDIR/*$NBBACKUP.tgz
while [ $i -ge 0 ];
do
     for f in $BACKUPDIR/*.$i.tgz;
     do
         $MV $f ${f/.$i.tgz/.$j.tgz};
     done
     j=$(($j-1))
     i=$(($i-1))
done
</pre>
<p>Veuillez noter que celui-ci n&#8217;est pas optimisé pour le listing des opérations à réaliser. J&#8217;ai tenté le <em>for i in chemin_1 chemin_2</em>, mais l&#8217;interpréteur shell n&#8217;a pas voulu dans la mesure où il considérait les chemin comme des dossiers, et ne voulait apparemment pas boucler dessus.</p>
<p>Vers la fin, vous pourrez voir <strong>une ligne commentée, celle pour la commande scp</strong>, qui nécessite que vous ayez un serveur supplémentaire sous la main (ou un hébergement web) qui accepte les connexions scp.</p>
<p><em>Pour ce qui est de la sauvegarde d&#8217;un nombre défini de backups, je remercie <a href="http://www.tym-project.fr/blog">Tym</a>, c&#8217;est lui qui a donné <a href="http://www.abricocotier.fr/10829-script-shell-de-sauvegarde-quotidienne-des-bases-de-donnees-mysql#comment-7115">la solution</a>.</em></p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/11013-script-shell-de-sauvegarde-des-fichiers-associes-a-un-blog-wordpress">Permalien</a> |
<a href="http://www.abricocotier.fr/11013-script-shell-de-sauvegarde-des-fichiers-associes-a-un-blog-wordpress#comments">6 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/nginx" rel="tag">Nginx</a>, <a href="http://www.abricocotier.fr/tag/programmation" rel="tag">Programmation</a>, <a href="http://www.abricocotier.fr/tag/serveur" rel="tag">Serveur</a>, <a href="http://www.abricocotier.fr/tag/wordpress" rel="tag">Wordpress</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/11013-script-shell-de-sauvegarde-des-fichiers-associes-a-un-blog-wordpress/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

