<?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>Myprod.net, le blog &#187; Tech</title> <atom:link href="http://blog.myprod.net/category/tech/feed/" rel="self" type="application/rss+xml" /><link>http://blog.myprod.net</link> <description>Myprod.net, le blog</description> <lastBuildDate>Fri, 13 Apr 2012 17:53:19 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <item><title>Installations de PHP et comportement du cache d&#8217;Opcode</title><link>http://blog.myprod.net/2010/09/30/comportement-opcode-apache2-nginx-fcgid-fastcgi-php-fpm-apc/</link> <comments>http://blog.myprod.net/2010/09/30/comportement-opcode-apache2-nginx-fcgid-fastcgi-php-fpm-apc/#comments</comments> <pubDate>Thu, 30 Sep 2010 21:02:12 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[APC]]></category> <category><![CDATA[opcode]]></category> <category><![CDATA[php]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=602</guid> <description><![CDATA[Dans mon billet précédent sur l&#8217;installation de PHP-FPM, vous vous souvenez peut-être du paragraphe intitulé &#171;&#160;Côté cache d’opcode&#160;&#187; où j&#8217;évoquais le fonctionnement différent du système de cache d&#8217;Opcode en fonction du type d&#8217;installation de PHP. Je profite de petits tests effectués avec cinq installations de PHP différentes (mod_PHP, FastCGI, FCGI, PHP-FPM avec Apache2 et enfin [...]]]></description> <content:encoded><![CDATA[<p>Dans mon billet précédent sur l&#8217;installation de <a href="http://blog.myprod.net/2010/08/14/apache2-suexec-fastcgi-php-5-3-3-fpm-cache-opcode-apc/">PHP-FPM</a>, vous vous souvenez peut-être du paragraphe intitulé &laquo;&nbsp;<strong>Côté cache d’opcode</strong>&nbsp;&raquo; où j&#8217;évoquais le fonctionnement différent du système de cache d&#8217;Opcode en fonction du type d&#8217;installation de PHP.</p><p>Je profite de petits tests effectués avec cinq installations de PHP différentes (mod_PHP, FastCGI, FCGI, PHP-FPM avec Apache2 et enfin PHP-FPM avec Nginx) pour compléter mes propos. Ces tests, non exhaustifs montrent aussi l&#8217;influence du cache d&#8217;Opcode sur les performances du serveur Web.</p><h2>1. Les tests</h2><h3>La procédure</h3><p>Les tests ont été effectués sur une même machine virtuelle sous Debian 5 (+ Dotdeb pour PHP 5.3.3). La VM est dotée de 2Go de RAM, de 2 coeurs de processeur Intel Xeon E5430 @2.66 GHz et stockée sur des disques dur SAS 15K tr/min en RAID 10. Pour chaque installation de PHP, j&#8217;ai effectué les tests avec le cache d&#8217;opcode APC désactivé, puis activé (avec une configuration par défaut) et enfin activé avec la directive &laquo;&nbsp;stat&nbsp;&raquo; à 0.</p><p>Le test consiste à requêter 1000 fois (avec 10 connexions concurrentes) les &laquo;&nbsp;ressources&nbsp;&raquo; suivantes :</p><ul><li>une page statique (contenant le html d&#8217;une page phpinfo)</li><li>une page PHP, un simple phpinfo()</li><li>un &laquo;&nbsp;hello Sf2&#8243; sous Symfony2 (Sandbox)</li></ul><p>et sur une des installations seulement :</p><ul><li>la page d&#8217;acceil d&#8217;un WordPress 3 (installation de base)</li></ul><p>Chaque test est répété 3 fois de suite.</p><h3>PHP-CGI avec Apache2, mpm-worker, suEXEC, FCGID</h3><p>Apache2 est installé avec le MPM Worker, avec suEXEC pour gérer les utilisateurs Web par hôte virtuel. Notre configuration de FCGID limite le nombre de processus parents à 10 et 0 processus enfant.</p><p>=> Avec FCGID, le cache d&#8217;opcode est dans ce cas <strong>multiplié</strong> par le nombre de processus parents quelque soit l&#8217;utilisateur web propriétaire du processus.</p><table><thead><tr><td>APC \ Page (req/s)</td><td>statique</td><td>phpinfo()</td><td>hello Symfony2</td><td>WP 3</td></tr></thead><tbody><tr class="odd"><td>OFF</td><td>4189</td><td>713</td><td>70</td><td>&#8211;</td></tr><tr class="even"><td>ON (stat 1)</td><td>4321</td><td>710</td><td>116</td><td>&#8211;</td></tr><tr class="odd"><td>ON (stat 0)</td><td>4204</td><td>713</td><td>186</td><td>&#8211;</td></tr></tbody></table><h3>PHP-CGI avec Apache2, mpm-worker, suEXEC, FastCGI</h3><p>Apache2 est installé avec le MPM Worker, avec suEXEC pour gérer les utilisateurs Web par hôte virtuel. Notre configuration de FastCGI limite le nombre de processus parents à 1, PHP gère les processus enfant dans une limite de 10.</p><p>=> Avec FastCGI, en limitant le processus parent à 1, le cache d&#8217;opcode est <strong>unique par utilisateur web</strong> et partagé entre processus enfants.</p><table><thead><tr><td>APC \ Page (req/s)</td><td>statique</td><td>phpinfo()</td><td>hello Symfony2</td><td>WP 3</td></tr></thead><tbody><tr class="odd"><td>OFF</td><td>3895</td><td>621</td><td>67</td><td>&#8211;</td></tr><tr class="even"><td>ON (stat 1)</td><td>3838</td><td>584</td><td>111</td><td>&#8211;</td></tr><tr class="odd"><td>ON (stat 0)</td><td>4055</td><td>595</td><td>173</td><td>&#8211;</td></tr></tbody></table><h3>PHP-FPM avec Apache2, FastCGI</h3><p>Apache2 est installé avec le MPM Worker, PHP-FPM gère totalement les processus PHP.</p><p>=> Avec PHP-FPM, le cache d&#8217;opcode est<strong> unique et partagé</strong> entre <strong>tous les utilisateurs</strong> &laquo;&nbsp;web&nbsp;&raquo; gérés par PHP-FPM.</p><table><thead><tr><td>APC \ Page (req/s)</td><td>statique</td><td>phpinfo()</td><td>hello Symfony2</td><td>WP 3</td></tr></thead><tbody><tr class="odd"><td>OFF</td><td>3985</td><td>665</td><td>69</td><td>8</td></tr><tr class="even"><td>ON (stat 1)</td><td>3981</td><td>665</td><td>112</td><td>15</td></tr><tr class="odd"><td>ON (stat 0)</td><td>3963</td><td>678</td><td>185</td><td>15</td></tr></tbody></table><h3>PHP en module d&#8217;Apache, avec Apache2, mpm-prefork</h3><p>Apache2 est installé avec le MPM Prefork et PHP en module.</p><p>=> Avec PHP en module d&#8217;Apache, le cache d&#8217;opcode est <strong>unique</strong>, il n&#8217;y a de toute façon qu&#8217;un seul utilisateur, celui du serveur Web.</p><table><thead><tr><td>APC \ Page (req/s)</td><td>statique</td><td>phpinfo()</td><td>hello Symfony2</td><td>WP 3</td></tr></thead><tbody><tr class="odd"><td>OFF</td><td>4319</td><td>787</td><td>121</td><td>&#8211;</td></tr><tr class="even"><td>ON (stat 1)</td><td>3925</td><td>730</td><td>425</td><td>&#8211;</td></tr><tr class="odd"><td>ON (stat 0)</td><td>4264</td><td>760</td><td>472</td><td>&#8211;</td></tr></tbody></table><h3>PHP-FPM, Nginx</h3><p>Par curiosité, parce que j&#8217;entends très souvent parlé de Nginx pour ces performances, j&#8217;ai voulu comparer non pas le comportement de l&#8217;Opcode puisque celui-ci est identique à une installation PHP-FPM sous Apache2, mais plutôt voir comment Nginx s&#8217;en sortait par rapport à Apache2.</p><table><thead><tr><td>APC \ Page (req/s)</td><td>statique</td><td>phpinfo()</td><td>hello Symfony2</td><td>WP 3</td></tr></thead><tbody><tr class="odd"><td>OFF</td><td>8174</td><td>758</td><td>70</td><td>&#8211;</td></tr><tr class="even"><td>ON (stat 1)</td><td>9303</td><td>739</td><td>115</td><td>&#8211;</td></tr><tr class="odd"><td>ON (stat 0)</td><td>7687</td><td>737</td><td>191</td><td>&#8211;</td></tr></tbody></table><h2>2. Conclusion</h2><p>Les différents tests m&#8217;ont permis de montrer l&#8217;importance du cache d&#8217;Opcode sur des solutions faisant appel à de nombreux fichiers comme les frameworks (ici Symfony2). Dans ce cas, on notera aussi une influence sur le paramétrage du cache d&#8217;opcode. En effet, en désactivant la surveillance de mise à jour des fichiers sources (APC stat à 0), les performances grimpent encore. Passer stat à 0 peut aussi conduire à de drôles de comportement si vous le faite sans en comprendre réellement la portée. Dans le cas de la page d&#8217;accueil de WordPress 3, cette fonctionnalité n&#8217;a plus aucun effet, le système semble complètement étranglé par l&#8217;accès aux données. En dehors de l&#8217;influence du cache d&#8217;opcode sur les performances,  on notera aussi la manière dont celui-ci est partagé entre utilisateur &laquo;&nbsp;web&nbsp;&raquo;.</p><p>Malgré une duplication certaine du cache d&#8217;opcode, l&#8217;installation FCGID offre des performances légèrement meilleures que celles de l&#8217;installation FastCGI. Cependant, cette situation de multiplication du cache peut entrainer des fonctionnements assez aléatoires, la consommation de RAM peut aussi s&#8217;envoler. L&#8217;installation en FCGID est à mon avis déconseillée, du moins pour utiliser le cache d&#8217;Opcode. En léger retrait, l&#8217;installation avec FastCGI est efficace si l&#8217;on veut mutualiser plusieurs comptes sur un serveur de manière sécurisée. PHP-FPM est une très bonne solution si l&#8217;on garde bien en tête que le cache d&#8217;Opcode est partagé entre les utilisateurs &laquo;&nbsp;web&nbsp;&raquo;. C&#8217;est PHP en module d&#8217;Apache qui offre les meilleurs performances, mais par rapport aux autres installations, elle n&#8217;offre pas le même niveau de sécurité (cela se paye aussi en terme de performance), les processus PHP sont contenus dans les processus Apache qui deviennent lourds.</p><p>Pour finir et sans rapport réel avec le comportement de l&#8217;Opcode, le test de PHP-FPM avec Nginx montre que s&#8217;il n&#8217;y a pas photo sur le statique, côté PHP, c&#8217;est équivalent à Apache2. Bon, ce n&#8217;est qu&#8217;un simple constat, sur la base de mes tests. Je ne connais pas Nginx, et je m&#8217;attendais à quelque chose de différent pour PHP&#8230; Allez, encore un sujet à explorer.</p><p>N&#8217;hésiter pas à me faire part de vos expériences, de vos remarques.</p><p><em>Les billets suivant peuvent vous intéresser :</em></p><ul><li><a href="http://julien-pauli.developpez.com/tutoriels/php/apc/" target="_blank">En savoir plus sur le cache d&#8217;Opcode APC</a></li><li><a href="http://blog.myprod.net/2010/08/14/apache2-suexec-fastcgi-php-5-3-3-fpm-cache-opcode-apc/">Installer PHP-FPM sous Apache2</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2010/09/30/comportement-opcode-apache2-nginx-fcgid-fastcgi-php-fpm-apc/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Apache2, PHP-FPM, FastCGI et APC cache d&#8217;Opcode</title><link>http://blog.myprod.net/2010/08/14/apache2-suexec-fastcgi-php-5-3-3-fpm-cache-opcode-apc/</link> <comments>http://blog.myprod.net/2010/08/14/apache2-suexec-fastcgi-php-5-3-3-fpm-cache-opcode-apc/#comments</comments> <pubDate>Fri, 13 Aug 2010 22:38:49 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[apache2]]></category> <category><![CDATA[fastcgi]]></category> <category><![CDATA[fpm]]></category> <category><![CDATA[opcode]]></category> <category><![CDATA[php 5.3]]></category> <category><![CDATA[php 5.4]]></category> <category><![CDATA[php5]]></category> <category><![CDATA[pool]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=494</guid> <description><![CDATA[Il existe plusieurs façons d&#8217;installer PHP sur une machine. En fonction du but recherché, on pourra passer d&#8217;une installation très simple comme l&#8217;installation en module d&#8217;Apache, à une installation plus complexe si l&#8217;on souhaite contrôler les processus PHP par utilisateur, par hôte virtuel, le tout sur un serveur Web Multi-threadé. Voyons comment réaliser cette tâche avec [...]]]></description> <content:encoded><![CDATA[<p>Il existe plusieurs façons d&#8217;installer PHP sur une machine. En fonction du but recherché, on pourra passer d&#8217;une installation très simple comme l&#8217;installation en module d&#8217;Apache, à une installation plus complexe si l&#8217;on souhaite contrôler les processus PHP par utilisateur, par hôte virtuel, le tout sur un serveur Web Multi-threadé. Voyons comment réaliser cette tâche avec PHP-FPM.</p><p><span id="more-494"></span></p><p>La dernière version de PHP, la <a href="http://www.php.net/archive/2010.php#id2010-07-22-2">5.3.3</a> inclus nativement FPM. Autrefois appliqué comme <a href="http://php-fpm.org/">patch à PHP</a>, le gestionnaire de processus Fastcgi &laquo;&nbsp;FPM&nbsp;&raquo; apporte aussi quelques <a href="http://php-fpm.org/about/#why">améliorations à PHP Cgi</a>. Pour le tutoriel, l&#8217;installation va se dérouler sur une Debian 5 (lenny) ou 6 (squeeze). Le paquet PHP5-FPM nous est fourni par le dépôt de sources <a href="http://www.dotdeb.org/instructions/">Dotdeb</a>.</p><p class="revision"><strong>Note de révision du 4 septembre 2010</strong> : l&#8217;utilisation de wrapper suEXEC pour attribuer un &laquo;&nbsp;utilisateur / groupe&nbsp;&raquo; par hôte virtuel n&#8217;est pas justifiée. PHP-FPM joue ce rôle.<br /> <strong>Note de révision du 6 octobre 2010</strong> : correctifs de quelques typos. Contenus remaniés.<br /> <strong>Note de révision du 10 février 2011</strong> : correctifs de la configuration de fast-cgi et du vhost, directives inutiles supprimées.<br /> <strong>Note de révision du 20 mars 2011</strong> : installation fonctionnelle sous Debian 6 (Squeeze)<br /> <strong>Note de révision du 18 avril 2011</strong> : correctifs pour compatibilité avec la dernière version du package Dotdeb de PHP-FPM (5.3.6).<br /> <strong>Note de révision du 03 juillet 2011</strong> : ajout du réglage du timeout FastCGI.<br /> <strong>Note de révision du 03 mars 2012</strong> : installation compatible avec PHP 5.4</p><h2>1. Apache 2 Multi-threadé</h2><p>Nous choisissons d&#8217;installer Apache en MPM Worker. Pour une installation de PHP en module d&#8217;Apache, il est clairement déconseillé d&#8217;utiliser ce MPM. D&#8217;autres MPM (multi-processing module) existent, si vous voulez en savoir plus, vous pouvez consulter une série de billets portant sur l&#8217;<a href="http://blog.stuartherbert.com/php/series-the-web-platform/">installation sécurisée de PHP</a> dans laquelle Stuart Herbert en teste quelques-uns.</p><p>Installer Apache2 sur Debian en invoquant simplement la commande :</p><pre class="brush:bash">aptitude install apache2 apache2-mpm-worker</pre><h2>2. <del datetime="2010-09-04T17:23:03+00:00">sécuriser avec suEXEC</del></h2><p><strong>Contrairement</strong> à ce que je disais dans la première version du billet, nous n&#8217;avons pas besoin du wrapper suEXEC pour attribuer un &laquo;&nbsp;utilisateur / groupe&nbsp;&raquo; par hôte virtuel, PHP-FPM s&#8217;en charge. L&#8217;installation de suEXEC n&#8217;est pas nécessaire, les directives de configurations s&#8217;en trouvent simplifiées.</p><h2>3. le module FastCGI</h2><p>Nous avons maintenant besoin d&#8217;installer le module &laquo;&nbsp;FastCGI&nbsp;&raquo; d&#8217;Apache. En effet, contrairement à &laquo;&nbsp;FCGID&nbsp;&raquo; (gestionnaire de processus plus moderne et souvent associé à l&#8217;installation de PHP en CGI), &laquo;&nbsp;FastCGI&nbsp;&raquo; fourni la directive permettant de préciser un gestionnaire externe de processus CGI, dans notre cas PHP5-FPM. &laquo;&nbsp;libapache2-mod-fastcgi&nbsp;&raquo; est un paquet de la section &laquo;&nbsp;non-free&nbsp;&raquo; (paquets qui ne respectent pas les <a href="http://fr.wikipedia.org/wiki/DFSG">DFSG</a>). Vos sources de paquets doivent comprendre cette section pour pouvoir installer le module FastCGI. <em>En fonction de votre distribution, remplacer lenny par squeeze au besoin.</em></p><pre class="brush:bash">deb ftp://mir1.ovh.net/debian/ lenny main contrib non-free
deb-src ftp://mir1.ovh.net/debian/ lenny main contrib non-free

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free</pre><p>Installez le module,</p><pre class="brush:bash">aptitude install libapache2-mod-fastcgi</pre><p>Modifions le fichier de configuration du module &laquo;&nbsp;fastgci&nbsp;&raquo; d&#8217;Apache</p><pre class="brush:bash">
nano /etc/apache2/mods-available/fastcgi.conf
</pre><pre class="brush:bash">&lt;IfModule mod_fastcgi.c&gt;
  AddHandler php5-fcgi .php
  Action php5-fcgi /cgi-bin/php5.external
  &lt;Location "/cgi-bin/php5.external"&gt;
    Order Deny,Allow
    Deny from All
    Allow from env=REDIRECT_STATUS
  &lt;/Location&gt;
&lt;/IfModule&gt;</pre><p>Activons les modules &laquo;&nbsp;fastcgi&nbsp;&raquo; et &laquo;&nbsp;actions&nbsp;&raquo; (utilisé dans le fichier de configuration de FastCGI).</p><pre class="brush:bash">
a2enmod fastcgi actions
</pre><h2>4. Installation PHP5-FPM</h2><p>Comme précisé en début de billet, PHP5-FPM est fourni par le dépôt <a href="http://www.dotdeb.org/instructions/">Dotdeb</a>. PHP5-FPM, c&#8217;est à la fois PHP5 et un gestionnaire de processus FastCGI. Une fois Dotdeb ajouté à vos sources, l&#8217;installation s&#8217;effectue simplement :</p><pre class="brush:bash">aptitude install php5-fpm</pre><p>Vous pouvez compléter l&#8217;installation de PHP5 en ajoutant diverses librairies dont le gestionnaire de cache d&#8217;Opcode APC :</p><pre class="brush:bash">
aptitude install php5-mysql php5-mcrypt php5-curl php5-gd php5-xsl php5-xmlrpc php5-apc
</pre><p>Les fichiers de configuration sont situés dans :</p><pre class="brush:bash">/etc/php5/fpm/</pre><p>Depuis la version 5.3.6 du package Dotdeb, vous n&#8217;avez plus à modifier le fichier de configuration de PHP5-FPM afin de pouvoir définir la configuration des pools de processus PHP en dehors de ce fichier (la directive d&#8217;inclusion des définitions de &laquo;&nbsp;pool&nbsp;&raquo; est faite en fin de fichier) :</p><pre class="brush:text">
nano /etc/php5/fpm/php-fpm.conf
</pre><pre class="brush:text">
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

; All relative paths in this configuration file are relative to PHP's install
; prefix (/usr). This prefix can be dynamicaly changed by using the
; '-p' argument from the command line.

; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
; Relative path can also be used. They will be prefixed by:
;  - the global prefix if it's been set (-p arguement)
;  - /usr otherwise
;include=/etc/php5/fpm/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Note: the default prefix is /var
; Default Value: none
pid = /var/run/php5-fpm.pid

; Error log file
; Note: the default prefix is /var
; Default Value: log/php-fpm.log
error_log = /var/log/php5-fpm.log

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice

; If this number of child processes exit with SIGSEGV or SIGBUS within the time
; interval set by emergency_restart_interval then FPM will restart. A value
; of '0' means 'Off'.
; Default Value: 0
;emergency_restart_threshold = 0

; Interval of time used by emergency_restart_interval to determine when
; a graceful restart will be initiated.  This can be useful to work around
; accidental corruptions in an accelerator's shared memory.
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;emergency_restart_interval = 0

; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;process_control_timeout = 0

; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
; Default Value: yes
;daemonize = yes

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;

; Multiple pools of child processes may be started with different listening
; ports and different management options.  The name of the pool will be
; used in logs and stats. There is no limitation on the number of pools which
; FPM can handle. Your system will tell you anyway :)

; To configure the pools it is recommended to have one .conf file per
; pool in the following directory:
include=/etc/php5/fpm/pool.d/*.conf
</pre><p>Le répertoire des définitions des pools de processus PHP est automatiquement créé :</p><pre class="brush:bash">cd /etc/php5/fpm/pool.d/</pre><p>Par défaut, un exemple de pool est fourni, vous pouvez le renommer et le garder comme exemple.</p><pre class="brush:bash">mv www.conf www.conf.dist</pre><p>Créez un fichier de définition de pool de processus PHP  :</p><pre class="brush:bash">nano /etc/php5/fpm/pool.d/first.conf</pre><pre class="brush:text">; Nom du pool
[firstweb]
; On utilisera une socket
listen = /home/www/.socks/firstweb.sock

; Permission pour la socket
listen.owner = firstweb
listen.group = webgroup
listen.mode = 0666

; Utilsateur/Groupe des processus
user = firstweb
group = webgroup

; On choisira une gestion dynamique des processus
pm = dynamic

pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10

slowlog = /var/log/php5-fpm.firstweb.log.slow

; Quelques directives de configuration de PHP
php_admin_value[open_basedir]=/home/www/firstweb/public_html
php_admin_value[session.save_path]=/home/www/firstweb/tmp
php_admin_value[upload_tmp_dir]=/home/www/firstweb/tmp</pre><p>Créez le répertoire des sockets :</p><pre class="brush:bash">mkdir -p /home/www/.socks</pre><h2>5. Définition de l&#8217;hôte virtuel</h2><pre class="brush:bash">nano /etc/apache2/sites-available/firstweb</pre><pre class="brush:bash">&lt;VirtualHost *:80&gt;
        ServerName firstweb.example.com
        ServerAdmin     firstweb@example.com
        DocumentRoot /home/www/firstweb/public_html
        Options None

        # Fast CGI + FPM
        FastCgiExternalServer /home/www/firstweb/cgi-bin/php5.external -socket /home/www/.socks/firstweb.sock
        Alias /cgi-bin/ /home/www/firstweb/cgi-bin/

        &lt;Directory /home/www/firstweb/public_html&gt;
                Options SymLinksIfOwnerMatch
                AllowOverride All
                Order allow,deny
                Allow from all
        &lt;/Directory&gt;

        # Log
        ErrorLog /var/log/apache2/error-firstweb.log
        LogLevel warn
        CustomLog /var/log/apache2/access-firstweb.log combined
&lt;/VirtualHost&gt;</pre><p>Par défaut, le timeout FastCGI est de 30 secondes, si vous souhaitez modifier cette valeur, il suffit de modifier la ligne suivante du vhost et ajouter l&#8217;argument -idle-timeout suivi de la valeur du timeout en secondes. Vous pouvez donc préciser cette valeur indépendamment pour chaque vhost.</p><pre class="brush:bash">
FastCgiExternalServer /home/www/firstweb/cgi-bin/php5.external -socket /home/www/.socks/firstweb.sock -idle-timeout 60
</pre><p>Le fichier &laquo;&nbsp;/home/www/first/cgi-bin/php5.external&nbsp;&raquo; précisé par la directive &laquo;&nbsp;FastCgiExternalServer&nbsp;&raquo; n&#8217;a pas besoin d&#8217;exister.<br /> Activez cet hôte virtuel :</p><pre class="brush:bash">a2ensite firstweb</pre><p>Créez le groupe et l&#8217;utilisateur web :</p><pre class="brush:bash">groupadd webgroup
useradd -b /home/www -g webgroup  -s /bin/false firstweb</pre><p>Passez à la création de l&#8217;espace &laquo;&nbsp;Web&nbsp;&raquo; correspondant à la définition de l&#8217;hôte virtuel. Pour l&#8217;exemple, sa structure est la suivante :</p><pre class="brush:bash">mkdir -p /home/www/firstweb/public_html
mkdir -p /home/www/firstweb/cgi-bin
mkdir -p /home/www/firstweb/tmp</pre><p>Le répertoire parent &laquo;&nbsp;firstweb&nbsp;&raquo; appartient à &laquo;&nbsp;root:root&nbsp;&raquo;, les répertoires enfants à &laquo;&nbsp;firstweb:webgroup&nbsp;&raquo;.</p><p>Rechargez Apache, démarrez PHP5-FPM</p><pre class="brush:bash">/etc/init.d/apache2 reload
/etc/init.d/php5-fpm start</pre><p>Un phpinfo() au niveau de cet hôte virtuel devrait vous donner les informations similaires à :</p><p><img class="size-full wp-image-552 " title="PHP5-FPM phpinfo()" src="http://cdn.myprod.net/wp-content/uploads/2010/08/phpinfo-fpm.png" alt="" width="607" height="475" /></p><p>Sur une Debian Squeeze fraîchement installée :</p><p><img src="http://cdn.myprod.net/wp-content/uploads/2010/08/php5-fpm-squeeze.png" alt="" title="php5-fpm-squeeze" width="613" height="451" class="alignnone size-full wp-image-697" /></p><p>Avec PHP 5.4 :</p><p><img src="http://cdn.myprod.net/wp-content/uploads/2010/08/php5.4-dotdeb.png" alt="" title="php5.4-dotdeb" width="617" height="441" class="alignnone size-full wp-image-706" /></p><h2>6. Côté cache d&#8217;opcode</h2><p>Avec ce type d&#8217;installation, la gestion du cache d&#8217;Opcode fonctionne correctement mais il faut garder à l&#8217;esprit que le cache est partagé entre tous les hôtes virtuels. La totalité du cache peut donc être effacée à partir de n&#8217;importe quel hôte. C&#8217;est exactement la même chose avec une installation en module d&#8217;Apache (mod_php).</p><p>Une autre solution permet d&#8217;avoir du cache par utilisateur, en utilisant FastCGI + PHP CGI. Cependant,  il faut jouer avec le nombre de processus parent / enfants, car les processus parents ne partagent pas leur cache. Avec FCGID, le problème est similaire sauf qu&#8217;on ne peut pas limiter le nombre de processus parent à 1, les performances deviennent alors désastreuses. FCGID et FastCGI ne traitent pas les requêtes PHP de la même manière, <a href="http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html">voir les remarques sur Fcgid avec PHP CGI :</a></p><blockquote><p>Special PHP considerations<br /> [...]<br /> The popular APC opcode cache for PHP cannot share a cache between PHP FastCGI processes unless PHP manages the child processes. Thus, the effectiveness of the cache is limited with mod_fcgid; concurrent PHP requests will use different opcode caches.</p></blockquote><p>Le temps me manque pour effectuer des tests de ces différentes configurations avec la problèmatique de cache d&#8217;Opcode. En tout cas, n&#8217;hésitez pas à me faire part de vos remarques.</p> ]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2010/08/14/apache2-suexec-fastcgi-php-5-3-3-fpm-cache-opcode-apc/feed/</wfw:commentRss> <slash:comments>68</slash:comments> </item> <item><title>Installer, Maintenir phpMyAdmin avec Git</title><link>http://blog.myprod.net/2010/07/27/installer-maintenir-phpmyadmin-avec-git/</link> <comments>http://blog.myprod.net/2010/07/27/installer-maintenir-phpmyadmin-avec-git/#comments</comments> <pubDate>Tue, 27 Jul 2010 21:25:55 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[git]]></category> <category><![CDATA[phpMyAdmin]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=467</guid> <description><![CDATA[Si vous développez pour le web sur plateforme LAMP et compagnies, vous utilisez certainement phpMyAdmin comme client web de gestion de base de données MySQL. Pour une question de sécurité ou simplement pour rester à jour, voyons comment gérer l&#8217;installation de phpMyAdmin en utilisant Git. Depuis peu, le projet phpMyAdmin est passé sous Git et [...]]]></description> <content:encoded><![CDATA[<p>Si vous développez pour le web sur plateforme LAMP et compagnies, vous utilisez certainement <a href="http://www.phpmyadmin.net/">phpMyAdmin</a> comme client web de gestion de base de données MySQL. Pour une question de sécurité ou simplement pour rester à jour, voyons comment gérer l&#8217;installation de phpMyAdmin en utilisant <a href="http://git-scm.com/">Git</a>.</p><p><span id="more-467"></span></p><p>Depuis peu, le projet phpMyAdmin est passé sous Git et les branches SVN ne sont plus mises à jour. Contrairement à l&#8217;utilisation d&#8217;archives, l&#8217;utilisation d&#8217;un système de gestion de sources va nous permettre de maintenir simplement notre phpMyAdmin.</p><h1>Copie du dépôt phpMyAdmin</h1><p>Récupérez le dépôt Git de phpMyAdmin en lançant la commande suivante dans un répertoire vide :</p><pre class="brush:bash">git clone -n git://github.com/phpmyadmin/phpmyadmin.git .</pre><h1>Installation d&#8217;une version particulière</h1><p>Pour l&#8217;exemple, nous allons installer sur la version 3.3.4, il suffit de lancer la commande :</p><pre class="brush:bash">git checkout RELEASE_3_3_4</pre><h1>Mettre à jour le dépôt</h1><p>Pour récupérer les dernières mises à jour, exécutez la commande :</p><pre class="brush:bash">git fetch</pre><h1>Installer une autre version</h1><p>La version 3.3.5 est sortie, installons la :</p><pre class="brush:bash">git checkout RELEASE_3_3_5</pre><p>Pour connaître les différents &laquo;&nbsp;tags&nbsp;&raquo; :</p><pre class="brush:bash">git tag</pre><p>Les différentes branches (remote) :</p><pre class="brush:bash">git branch -r</pre><p>Si vous ne voulez pas spécifier à chaque fois la version à utiliser, choisissez directement la branche &laquo;&nbsp;STABLE&nbsp;&raquo;, une simple mise à jour du dépôt suffira à mettre à jour votre phpMyAdmin.</p><pre class="brush:bash">git checkout STABLE (une première fois)
git pull (à chaque mise à jour)</pre><p>Restez informés <a href="http://www.phpmyadmin.net/home_page/security/index.xml">au sujet de la sécurité de phpMyAdmin</a> et <a href="http://www.phpmyadmin.net/home_page/news.php">des nouvelles releases</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2010/07/27/installer-maintenir-phpmyadmin-avec-git/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Eclipse PDT Cocoa-64bit</title><link>http://blog.myprod.net/2009/09/06/eclipse-pdt-cocoa-64bit/</link> <comments>http://blog.myprod.net/2009/09/06/eclipse-pdt-cocoa-64bit/#comments</comments> <pubDate>Sat, 05 Sep 2009 22:03:24 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[64bit]]></category> <category><![CDATA[Eclipse]]></category> <category><![CDATA[PDT]]></category> <category><![CDATA[Snow Leopard]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=372</guid> <description><![CDATA[Après mon passage sous Snow Leopard, je me suis dit qu&#8217;il serait bon de pouvoir utiliser des applications 64 bits. Pour le developpement Web/PHP, j&#8217;utilise l&#8217;IDE Eclipse PDT All In Ones. Malheureusement, il n&#8217;existe pas de version de PDT All In Ones en version cocoa-64bit. Qu&#8217;à cela ne tienne, il est tout à fait possible [...]]]></description> <content:encoded><![CDATA[<p>Après mon passage sous Snow Leopard, je me suis dit qu&#8217;il serait bon de pouvoir utiliser des applications 64 bits. Pour le developpement Web/PHP, j&#8217;utilise l&#8217;IDE Eclipse PDT All In Ones. Malheureusement, il n&#8217;existe pas de version de PDT All In Ones en version cocoa-64bit. Qu&#8217;à cela ne tienne, il est tout à fait possible d&#8217;installer très simplement PDT à partir d&#8217;une version d&#8217;Eclipse  &nbsp;&raquo;Classic&nbsp;&raquo;, qui elle, existe en version cocoa-64bit.<br /> <span id="more-372"></span></p><h1>1. Installation d&#8217;Eclipse Classic</h1><p>La première chose à faire est donc de télécharger <a href="http://www.eclipse.org/downloads/" target="_blank"> Eclipse Classic 3.5.0 (Mac Cocoa 64bit)</a>.<br /> Une fois l&#8217;archive d&#8217;Eclipse décompressée, lancer Eclipse.</p><h1>2. Installation du plugin PDT</h1><p>Pour installer PDT, utilisez le menu <strong>&laquo;&nbsp;Help &gt; Install New Software&#8230;&nbsp;&raquo;</strong>.</p><p>Allez dans <strong>&laquo;&nbsp;Available Software Sites&nbsp;&raquo;</strong>, tapez &laquo;&nbsp;pdt&nbsp;&raquo; au niveau du filtre puis rendez &laquo;&nbsp;active&nbsp;&raquo; (Enabled) l&#8217;adresse suivante <code>http://download.eclipse.org/tools/pdt/updates/2.0/</code> puis cliquez sur &laquo;&nbsp;ok&nbsp;&raquo;.</p><div><img class="alignnone size-full wp-image-373" title="Available Software List" src="http://cdn.myprod.net/wp-content/uploads/2009/09/eclipse_pdt_install_fitre.png" alt="Available Software List" width="665" height="444" /></div><p>Dans la section PDT SDK 2.1.2, sélectionnez <strong>&laquo;&nbsp;PHP Development Tools (PDT) Runtime Feature&nbsp;&raquo;</strong> puis valider l&#8217;installation en cliquant sur &laquo;&nbsp;finish&nbsp;&raquo;.</p><div><img class="alignnone size-full wp-image-374" title="Eclipse PDT install" src="http://cdn.myprod.net/wp-content/uploads/2009/09/eclipse_pdt_install.png" alt="eclipse_pdt_install" width="661" height="368" /></div><p>Une fois le plugin installé, redémarrez Eclipse quand il vous le suggérera.</p><p>Voilà, vous disposez d&#8217;une version <strong>Cocoa-64bit d&#8217;Eclipse avec PDT</strong>.</p><h1>3. Compléments d&#8217;installation</h1><h2>3.1. <a title="Subclipse" href="http://subclipse.tigris.org/" target="_blank">Subclipse</a>, client SVN</h2><p>Comme pour installez PDT, utilisez le menu d&#8217;Eclipse <strong>&laquo;&nbsp;Help &gt; Intall New Software&#8230; </strong>&nbsp;&raquo; :</p><p>Tapez l&#8217;url suivante <code>"http://subclipse.tigris.org/update_1.6.x"</code></p><div><img class="alignnone size-full wp-image-375" title="Eclipse Subclipse Install" src="http://cdn.myprod.net/wp-content/uploads/2009/09/eclipse_subclipse_install.png" alt="Eclipse Subclipse Install" width="652" height="447" /></div><p>Selectionnez les différents composants à installer (tous ici, mais ce n&#8217;est pas obligatoire) :</p><div><img class="alignnone size-full wp-image-376" title="Eclipse Subclipse" src="http://cdn.myprod.net/wp-content/uploads/2009/09/eclipse_subclipse_select.png" alt="Eclipse Subclipse" width="734" height="459" /></div><p>Redemarrez Eclipse après l&#8217;installation du plugin.</p><h2>3.2. Mylyn, gestion de tâches</h2><p>Pour allez plus loin, nous pouvons compléter l&#8217;installation par le plugin Mylyn, qui nous permettra d&#8217;intégrer une gestion de tâches (Bugzilla, Trac, JIRA, <a href="http://www.redmine.org/wiki/redmine/HowTo_Mylyn">Redmine</a>) au sein de l&#8217;IDE.</p><p>Utilisez le menu <strong>&laquo;&nbsp;Help &gt; Install New Software&#8230;&nbsp;&raquo;</strong>.</p><p>Tapez &laquo;&nbsp;mylyn&nbsp;&raquo; au niveau du champ &laquo;&nbsp;work with&nbsp;&raquo;, selectionnez l&#8217;adresse <code>"http://download.eclipse.org/tools/mylyn/update/e3.4"</code>, et cochez les composants comme ci-dessous.</p><div><img src="http://cdn.myprod.net/wp-content/uploads/2009/09/eclipse_mylyn_install.png" alt="Eclipse Mylyn Install" title="Eclipse Mylyn Install" width="607" height="469" class="alignnone size-full wp-image-395" /></div><p>Comme pour toute installation de plugin, redémarrez Eclipse.</p><p>Vous disposez maintenant d&#8217;une version comparable à celle fournie par Eclipse PDT All In Ones, mais en utilisant Cocoa-64bit.</p> ]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2009/09/06/eclipse-pdt-cocoa-64bit/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Configuration du client SSH, la joie des clés</title><link>http://blog.myprod.net/2009/03/19/configuration-du-client-ssh-la-joie-des-cles/</link> <comments>http://blog.myprod.net/2009/03/19/configuration-du-client-ssh-la-joie-des-cles/#comments</comments> <pubDate>Thu, 19 Mar 2009 18:27:32 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Mac OS X]]></category> <category><![CDATA[SSH]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=324</guid> <description><![CDATA[Il est courant, voir même conseillé de configurer l&#8217;accès SSH d&#8217;un serveur avec une authentification par clé publique. Lorsque l&#8217;on gère plusieurs serveurs, côté client, on se retrouve rapidement avec de nombreuses clé privées sur les bras (à moins d&#8217;utiliser toujours la même, mais ce n&#8217;est pas très &#171;&#160;secure&#160;&#187;). Voyons comment configurer la partie client [...]]]></description> <content:encoded><![CDATA[<p>Il est courant, voir même conseillé de configurer l&#8217;accès SSH d&#8217;un serveur avec une authentification par clé publique. Lorsque l&#8217;on gère plusieurs serveurs, côté client, on se retrouve rapidement avec de nombreuses clé privées sur les bras (à moins d&#8217;utiliser toujours la même, mais ce n&#8217;est pas très &laquo;&nbsp;secure&nbsp;&raquo;). Voyons comment configurer la partie client pour gagner un peu de temps.</p><p><span id="more-324"></span><img class="alignnone size-thumbnail wp-image-325" title="OpenSSH" src="http://cdn.myprod.net/wp-content/uploads/2009/02/opensshpufferfish-150x150.png" alt="OpenSSH" width="150" height="150" />La configuration du client SSH d&#8217;un utilisateur est décrite dans le fichier situé dans le répertoire de l&#8217;utilisateur et plus exactement dans le répertoire caché &laquo;&nbsp;.ssh&nbsp;&raquo;.</p><pre class="brush:bash">nano ~/.ssh/config</pre><p>Voici un exemple de configuration :</p><pre class="brush:bash"># user1@server1
Host server1
 HostName server1.exemple.com
 User user1
 IdentityFile ~/.ssh/server1.user1.id_rsa

 # user1@server2
Host server2
 HostName server2.exemple.com
 User user1
 IdentityFile ~/.ssh/server2.user1.id_rsa

# user2@server3
Host server3
 HostName server3.exemple.com
 User user2
 IdentityFile ~/.ssh/server3.user2.id_rsa</pre><p>J&#8217;ai choisi de préfixer le nom des clés privées par le nom du serveur suivi du nom de l&#8217;utilisateur afin de m&#8217;y retrouver facilement. Appliquez un chmod 600 sur les clés privées. Il est ensuite bien plus simple de se connecter en SSH aux différents serveurs :</p><pre class="brush:bash">// Avant la configuration du client SSH :
ssh -i ~/.ssh/server1.user1.id_rsa user1@server1.exemple.com
// Après la configuration :
ssh server1</pre><p><strong>Note du 22/10/2010 :</strong></p><p>Avec trop de clés privées, il y a un risque d&#8217;avoir un échec d&#8217;authentification (problème constaté pour ma part). L&#8217;ensemble des clés chargées par l&#8217;agent sont testées lors de l&#8217;authentification. Pour éviter cela, il suffit d&#8217;ajouter cela à votre fichier de config :</p><pre class="brush:bash">
Host *
  IdentitiesOnly yes
</pre><p>En by-passant l&#8217;agent, le mot de passe vous sera redemandé à chaque fois.</p> ]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2009/03/19/configuration-du-client-ssh-la-joie-des-cles/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Apache, configurer son environnement de développement</title><link>http://blog.myprod.net/2008/12/14/configuration-apache-developpement-local/</link> <comments>http://blog.myprod.net/2008/12/14/configuration-apache-developpement-local/#comments</comments> <pubDate>Sun, 14 Dec 2008 18:07:07 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[Apache]]></category> <category><![CDATA[php]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=261</guid> <description><![CDATA[Bien que fonctionnelle, l&#8217;installation par défaut d&#8217;Apache ne correspond rarement à nos besoins. Voyons comment configurer Apache pour un environnement de développement local. Dans ce billet, nous partons d&#8217;une installation d&#8217;Apache 2.2 réalisée sur Mac en utilisant MacPorts. En dehors de certains chemins propres à l&#8217;exemple, ce billet pourra être utile quelque soit l&#8217;origine de [...]]]></description> <content:encoded><![CDATA[<p>Bien que fonctionnelle, l&#8217;installation par défaut d&#8217;Apache ne correspond rarement à nos besoins. Voyons comment configurer Apache pour un environnement de développement local.<span id="more-261"></span></p><p>Dans ce billet, nous partons d&#8217;une installation d&#8217;Apache 2.2 réalisée sur Mac en utilisant MacPorts. En dehors de certains chemins propres à l&#8217;exemple, ce billet pourra être utile quelque soit l&#8217;origine de l&#8217;installation et la plateforme sur laquelle Apache est installé.</p><h1>Modules chargés par Apache</h1><p>Par défaut, Apache va charger une longue liste de modules. Sur l&#8217;ensemble de ces modules, seuls certains nous intéressent, nous allons désactiver le chargement des autres :</p><p>Éditez le fichier de configuration d&#8217;Apache :</p><pre class="brush:bash"># Le fichier de configuration d'Apache (installé via MacPorts)
sudo nano /opt/local/apache2/conf/httpd.conf
# Recherchez le bloc de ligne commençant par "LoadModule"
# La liste est longue !!!
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule dbd_module modules/mod_dbd.so
LoadModule dumpio_module modules/mod_dumpio.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule log_forensic_module modules/mod_log_forensic.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule ident_module modules/mod_ident.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module modules/libphp5.so
</pre><p>Voici la version où seuls les modules &laquo;&nbsp;de base&nbsp;&raquo; ne sont pas commentés (<a href="http://httpd.apache.org/docs/2.2/mod/">pour en savoir plus</a>):</p><pre class="brush:bash">LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_user_module modules/mod_authz_user.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule cache_module modules/mod_cache.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule mem_cache_module modules/mod_mem_cache.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule dumpio_module modules/mod_dumpio.so
LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
#LoadModule substitute_module modules/mod_substitute.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
#LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule version_module modules/mod_version.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule mime_module modules/mod_mime.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule cgi_module modules/mod_cgi.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
#LoadModule imagemap_module modules/mod_imagemap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module        modules/libphp5.so</pre><p>Les modules &laquo;&nbsp;Status et Info&nbsp;&raquo; sont chargés, décommentez la ligne &laquo;&nbsp;Include&nbsp;&raquo; en fin de fichier de configuration d&#8217;Apache :</p><pre class="brush:bash"># Real-time info on requests and configuration
Include conf/extra/httpd-info.conf

# Editez le fichier "httpd-info.conf"
sudo nano /opt/local/apache2/conf/extra/httpd-info.conf

# Remplacez les 2 lignes "Allow from .example.com" par "Allow from localhost"</pre><p>Redemarrez Apache, puis tapez <a href="http://localhost/server-status">http://localhost/server-status</a> ou <a href="http://localhost/server-info">http://localhost/server-info</a></p><h1>Utilisation des &laquo;&nbsp;Virtual Hosts&nbsp;&raquo;</h1><p>Lorsque l&#8217;on travaille sur plusieurs projets, il est quasi nécessaire d&#8217;attribuer à chaque projet un nom de domaine plutôt que de travailler dans un répertoire (ou alias) sur &laquo;&nbsp;localhost&nbsp;&raquo;.</p><p>Imaginons travailler sur quatre projets :</p><ul><li>http://localhost/blog/</li><li>http://localhost/dev-blog/</li><li>http://localhost/projet-zend/</li><li>http://localhost/projet-symfony/</li></ul><p>En utilisant les hôtes virtuels, chacun de ces projets disposera de sa propre racine &laquo;&nbsp;Web&nbsp;&raquo;, de son nom de domaine local et/ou réel et pourra avoir une configuration Apache et PHP particulière :</p><ul><li>http://blog.local</li><li>http://dev-blog.local</li><li>http://projet-zf.local</li><li>http://projet-sf.local</li></ul><p>Modifiez le fichier le fichier de configuration d&#8217;Apache :</p><pre class="brush:bash">sudo nano /opt/local/apache2/conf/httpd.conf
# Ajoutez les lignes suivante vers la fin du fichier
# Configuration des Vhosts
Include conf/vhost.d/*.conf</pre><p>Créez le répertoire de configuration des &laquo;&nbsp;vhosts&nbsp;&raquo;</p><pre class="brush:bash">sudo mkdir /opt/local/apache2/conf/vhosts.d</pre><p>Créez le fichier de configuration du &laquo;&nbsp;Virtual Host&nbsp;&raquo; par défaut :</p><pre class="brush:bash">sudo nano /opt/local/apache2/conf/vhosts.d/default_vhost.conf
# Copiez les lignes suivantes
NameVirtualHost *:80

<VirtualHost *:80>

  ServerName localhost
  ServerAdmin root@localhost
  DocumentRoot "/opt/local/apache2/htdocs"

  <Directory "/opt/local/apache2/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
  </Directory>
</VirtualHost>
</pre><p>Ce premier &laquo;&nbsp;vhost&nbsp;&raquo; est là pour poser certaines directives, ici &laquo;&nbsp;NameVirtualHost&nbsp;&raquo; que l&#8217;on aura pas à redéfinir dans les &laquo;&nbsp;vhosts&nbsp;&raquo; suivant. Ce premier &laquo;&nbsp;vhost&nbsp;&raquo; répond simplement à l&#8217;adresse &laquo;&nbsp;localhost&nbsp;&raquo; et pointe sur le répertoire &laquo;&nbsp;htdocs&nbsp;&raquo; créé à l&#8217;installation d&#8217;Apache. Vous pouvez désactiver l&#8217;accès à cet hôte si vous le souhaitez (Remplacer &laquo;&nbsp;Allow from all&nbsp;&raquo; par &laquo;&nbsp;Deny from all&nbsp;&raquo;).</p><p>Ajoutez un second fichier &laquo;&nbsp;vhost&nbsp;&raquo;, par exemple pour installer votre blog WordPress en local :</p><pre class="brush:bash">sudo nano /opt/local/apache2/conf/vhosts.d/blog.local.conf
# Copier les lignes suivantes
<VirtualHost *:80>
  ServerName blog.local
  DocumentRoot "/Users/fabien/workspaces/sites/blog.myprod.net/public_html"
  <Directory "/Users/fabien/workspaces/sites/blog.myprod.net/public_html">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
  </Directory>
  ErrorLog /opt/local/apache2/logs/blog.error.log
  CustomLog /opt/local/apache2/logs/blog.access.log common
</VirtualHost>
</pre><h1>Finalisez l&#8217;environnement</h1><p>Dans l&#8217;exemple du blog, la racine &laquo;&nbsp;Web&nbsp;&raquo; est placée dans l&#8217;espace de l&#8217;utilisateur &laquo;&nbsp;fabien&nbsp;&raquo;. Le serveur Web tourne par défaut avec les droits &laquo;&nbsp;User : www, Group : www&nbsp;&raquo;. Dans certains cas, vous serez obligés d&#8217;affiner les droits pour qu&#8217;Apache puisse manipuler (CRUD) des fichiers ou répertoires. Une autre solution consiste à modifier le fichier de configuration d&#8217;Apache pour qu&#8217;il utilise votre compte Utilisateur (exemple &laquo;&nbsp;fabien / staff&nbsp;&raquo;). Pour un espace local de développement, avec un php installé en module d&#8217;Apache, c&#8217;est une bonne solution si on ne souhaite pas jongler avec les droits. Cependant, attention aux commandes que pourrait effectuer vos scripts.</p><pre class="brush:bash">
sudo nano /opt/local/apache2/conf/httpd.conf
# Faire tourner Apache avec vos droits utilisateur (ici les miens)
# Remplace l'utilisateur "www" et le groupe "www"
User fabien
Group staff
</pre><p>Modifiez la liste des fichiers d&#8217;index d&#8217;Apache :</p><pre class="brush:bash">
sudo nano /opt/local/apache2/conf/httpd.conf
# Cherchez la ligne commençant par DirectoryIndex
# Apache utilise les fichiers d'index dans l'ordre
# Ajoutez index.php en premier
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
</pre><p>Pour la partie DNS, si vous ne disposez pas d&#8217;un serveur DNS local, modifiez le fichier &laquo;&nbsp;hosts&nbsp;&raquo; de votre machine (votre machine ne doit pas utilisez de serveur DHCP pour l&#8217;exemple suivant).</p><pre class="brush:bash">
sudo nano /etc/hosts
# Ajouter pour chaque domaine local une ligne de la manière suivante
# Nous aurions pu ajouter des alias à localhost, mais je préfère utiliser l'interface externe.
# exemple :
192.168.100.5   blog.local

# Pour plusieurs domaines locaux, vous pouvez ajouter de nouvelles lignes :

192.168.100.5   blog.local
192.168.100.5   blog-dev.local

# Normalement, il ne devrait y avoir qu'une seule ligne :
# "Internet address" "Official host name" ["Aliases"]
192.168.100.5   blog.local blog-dev.local
</pre><p>Votre environnement local de développement Web (Apache, PHP) est à présent bien plus souple et fonctionnel.</p> ]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2008/12/14/configuration-apache-developpement-local/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Installer PHP 5 avec MacPorts</title><link>http://blog.myprod.net/2008/11/30/php5-mac-osx-macports/</link> <comments>http://blog.myprod.net/2008/11/30/php5-mac-osx-macports/#comments</comments> <pubDate>Sun, 30 Nov 2008 18:09:20 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[Mac OS X]]></category> <category><![CDATA[MacPorts]]></category> <category><![CDATA[php]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=245</guid> <description><![CDATA[Après Apache, PostgreSQL, MySQL, voyons comment compléter notre environnement de développement Web par l&#8217;installation de PHP 5. Nous considérons que MacPorts est installé et configuré. Si ce n&#8217;est pas le cas, consulter ce billet. Recherchez le nom du paquet correspondant à PHP5. port search php Le paquet que nous cherchons est &#171;&#160;php5&#8243;. Voyons quelles sont [...]]]></description> <content:encoded><![CDATA[<p>Après <a href="http://blog.myprod.net/2008/11/22/macports-installer-facilement-apache-sous-mac-os-x/" target="_blank">Apache</a>, <a href="http://blog.myprod.net/2008/11/23/installer-postgresql-83-avec-macports/" target="_blank">PostgreSQL</a>, <a href="http://blog.myprod.net/2008/11/23/installer-mysql-5-avec-macports-mac-osx/" target="_blank">MySQL</a>, voyons comment compléter notre environnement de développement Web par l&#8217;installation de PHP 5.<br /> <span id="more-245"></span></p><p>Nous considérons que <strong>MacPorts</strong> est installé et configuré. Si ce n&#8217;est pas le cas, consulter <a href="http://blog.myprod.net/2008/11/18/macports-macosx/">ce billet</a>.</p><p>Recherchez le nom du paquet correspondant à PHP5.</p><pre class="brush:bash">
port search php
</pre><p>Le paquet que nous cherchons est &laquo;&nbsp;php5&#8243;. Voyons quelles sont les options d&#8217;installation :</p><pre class="brush:bash">
port variants php5
</pre><p>Nous allons utiliser quelques options d&#8217;installation :</p><ul><li>&laquo;&nbsp;apache2&#8243; pour l&#8217;installation de PHP en tant que module d&#8217;Apache 2</li><li>&laquo;&nbsp;mysql5&#8243; pour le support de MySQL 5</li><li>&laquo;&nbsp;postgresql83&#8243; pour le support de PostgreSQL 8.3</li><li>mais aussi &laquo;&nbsp;sockets&nbsp;&raquo;  et &laquo;&nbsp;pear&nbsp;&raquo;</li></ul><p>Tapez la commande suivante pour installer PHP 5 :</p><pre class="brush:bash">
sudo port install php5 +apache2 +mysql5 +postgresql83 +sockets +pear
</pre><p>nb : la première tentative d&#8217;installation a généré une erreur, MacPorts tentait d&#8217;installer Perl deux fois. Après avoir effectuer un petit nettoyage &laquo;&nbsp;sudo port clean &#8211;all php5&#8243;, l&#8217;installation s&#8217;est déroulée sans erreur.</p><p>La compilation et l&#8217;installation de l&#8217;ensemble des librairies prennent de longues minutes (Mac Mini). Une fois PHP 5 installé, il reste quelques configurations à effectuer manuellement.</p><p>Activez le module PHP 5 pour Apache.</p><pre class="brush:bash">
cd /opt/local/apache2/modules
sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so
</pre><p>Modifiez le fichier de configuration d&#8217;Apache pour que les fichiers &laquo;&nbsp;php&nbsp;&raquo; soient bien pris en compte et exécutés.</p><pre class="brush:bash">
sudo nano /opt/local/apache2/conf/httpd.conf

// Ajouter les lignes suivantes à la fin du fichier de configuration :
# Extras conf
Include conf/extras-conf/*.conf
</pre><p>Créez le fichier de configuration de php, le &laquo;&nbsp;php.ini&nbsp;&raquo; :</p><pre class="bruh:bash">
sudo cp /opt/local/etc/php.ini-dist /opt/local/etc/php.ini
</pre><p>Créez un fichier &laquo;&nbsp;info.php&nbsp;&raquo; dans &laquo;&nbsp;/opt/local/apache2/htdocs/&nbsp;&raquo;</p><pre class="brush:php">
phpinfo();
</pre><p>Tapez l&#8217;adresse suivante dans votre navigateur : <a href="http://localhost/info.php" target="_blank">http://localhost/info.php</a></p><p>Vous allez constater que PHP 5 est compilé avec le support de :</p><pre class="brush:text">
bcmath, bz2, calendar, ctype, curl, date, dba, dom, exif, filter, ftp, gd, gettext, hash, iconv, json, ldap, libxml, mbstring, mcrypt, mhash, mime_magic, mysql, mysqli, odbc, openssl, pcre, PDO, pdo_mysql, pdo_pgsql, pgsql, posix, Reflection, session, SimpleXML, soap, sockets, SPL, standard, tokenizer, wddx, xml, xmlreader, xmlrpc, xmlwriter, xsl, zip, zlib
</pre><p>Vous disposez maintenant d&#8217;une installation de PHP 5 bien plus riche en termes de support que celle fournie par Mac OS X.</p> ]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2008/11/30/php5-mac-osx-macports/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Installer MySQL 5 avec MacPorts</title><link>http://blog.myprod.net/2008/11/23/installer-mysql-5-avec-macports-mac-osx/</link> <comments>http://blog.myprod.net/2008/11/23/installer-mysql-5-avec-macports-mac-osx/#comments</comments> <pubDate>Sun, 23 Nov 2008 21:12:05 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[Mac OS X]]></category> <category><![CDATA[MacPorts]]></category> <category><![CDATA[MySQL]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=231</guid> <description><![CDATA[Après Apache 2.2, PostgreSQL 8.3, passons à l&#8217;installation de MySQL 5 à l&#8217;aide MacPorts. Nous considérons que MacPorts est installé et configuré. Si ce n&#8217;est pas le cas, consulter ce billet. Nous commençons par rechercher le nom du paquet correspondant à la version 5 de MySQL. port search mysql Le paquet correspondant à MySQL 5 [...]]]></description> <content:encoded><![CDATA[<p>Après Apache 2.2, PostgreSQL 8.3, passons à l&#8217;installation de MySQL 5 à l&#8217;aide <strong>MacPorts</strong>.<br /> <span id="more-231"></span></p><p>Nous considérons que <strong>MacPorts</strong> est installé et configuré. Si ce n&#8217;est pas le cas, consulter <a href="http://blog.myprod.net/2008/11/18/macports-macosx/">ce billet</a>.</p><p>Nous commençons par rechercher le nom du paquet correspondant à la version 5 de MySQL.</p><pre class="brush:bash">port search mysql</pre><p>Le paquet correspondant à MySQL 5 est &laquo;&nbsp;mysql5&#8243;.</p><p>Vérifiez la liste des options d&#8217;installation du paquet &laquo;&nbsp;mysql5&#8243; :</p><pre class="brush:bash">port variants mysql5</pre><p>Nous allons utiliser l&#8217;option &laquo;&nbsp;server&nbsp;&raquo;. Cette option permet de générer le fichier &laquo;&nbsp;plist&nbsp;&raquo; du système de gestion de démarrage des programmes.</p><p>Passez à l&#8217;installation de MySQL 5 :</p><pre class="brush:bash">sudo port install mysql5 +server</pre><p>MacPorts n&#8217;initialise pas MySQL. Pour l&#8217;initialiser, tapez la commande suivante :</p><pre class="brush:bash">sudo -u mysql mysql_install_db5</pre><p>Le fichier &laquo;&nbsp;plist&nbsp;&raquo; du système de gestion du démarrage des programmes est installé par MacPorts (nous avons utiliser l&#8217;option +server pour cela). Ce fichier contient :</p><pre class="brush:bash">
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version='1.0'>
<dict>
<key>Label</key><string>org.macports.mysql5</string>
<key>ProgramArguments</key>
<array>
        <string>/opt/local/bin/daemondo</string>
        <string>--label=mysql5</string>
        <string>--start-cmd</string>
        <string>/opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper</string>
        <string>start</string>
        <string>;</string>
        <string>--stop-cmd</string>
        <string>/opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper</string>
        <string>stop</string>
        <string>;</string>
        <string>--restart-cmd</string>
        <string>/opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper</string>
        <string>restart</string>
        <string>;</string>
        <string>--pid=none</string>
</array>
<key>Debug</key><false/>
<key>Disabled</key>
<true/>
<key>OnDemand</key><false/>
<key>RunAtLoad</key><false/>
</dict>
</plist>
</pre><p>MySQL ne sera pas lancé au démarrage.</p><p>- Si vous souhaitez voir MySQL lancé au démarrage, tapez la commande suivante :</p><pre class="brush:bash">sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist</pre><p>- Si vous souhaitez gérer manuellement le démarrage et l&#8217;arrêt de MySQL, il faudra utiliser les commandes suivantes :</p><pre class="brush:bash">// Démarrer MySQL
sudo launchctl load -F /Library/LaunchDaemons/org.macports.mysql5.plist
// Arrêter MySQL
sudo launchctl unload /Library/LaunchDaemons/org.macports.mysql5.plist</pre><p>Pour une utilisation manuelle plus simple, nous pouvons créer des alias dans notre fichier de configuration de Shell.</p><pre class="brush:bash">cd ~
nano .profile
// Une première solution, on utilise directement les binaires mysql
alias mysql5start='sudo /opt/local/bin/mysqld_safe5 &#038;'
alias mysql5stop='/opt/local/bin/mysqladmin5 -u root -p shutdown'

// Une autre façon consiste à piloter "launchd" à partir des alias
alias mysql5start='sudo launchctl load -F /Library/LaunchDaemons/org.macports.mysql5.plist'
alias mysql5stop='sudo launchctl unload /Library/LaunchDaemons/org.macports.mysql5.plist'</pre><p>Vérifiez le fonctionnement de MySQL :</p><pre class="brush:bash">
// Démarrer MySQL
mysql5start

// Tester MySQL
mysqladmin5 -u root -p ping
// On vous demande le mot de passe de mysql
// Si MySQL fonctionne, vous devez voir :
mysqld is alive

// Vous pouvez aussi utiliser la commande "mysql5" :
mysql5 -u root -p

// Affiche
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.67 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

// Pour quitter, taper "quit" 

// Stopper MySQL
mysql5stop</pre>]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2008/11/23/installer-mysql-5-avec-macports-mac-osx/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Installer PostgreSQL 8.3 avec MacPorts</title><link>http://blog.myprod.net/2008/11/23/installer-postgresql-83-avec-macports/</link> <comments>http://blog.myprod.net/2008/11/23/installer-postgresql-83-avec-macports/#comments</comments> <pubDate>Sun, 23 Nov 2008 16:46:42 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[Mac OS X]]></category> <category><![CDATA[MacPorts]]></category> <category><![CDATA[PostgreSQL]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=209</guid> <description><![CDATA[Après avoir installer Apache 2.2 à l&#8217;aide de MacPorts, poursuivons avec l&#8217;installation de PostgreSQL 8.3. Nous considérons que MacPorts est installé et configuré (voir ici dans le cas contraire). Recherchez le nom du paquet qui correspond à la version 8.3 de PostgreSQL. port search postgresql Deux noms de paquets correspondent à la version 8.3 de [...]]]></description> <content:encoded><![CDATA[<p>Après avoir installer Apache 2.2 à l&#8217;aide de <strong>MacPorts</strong>, poursuivons avec l&#8217;installation de PostgreSQL 8.3.<br /> <span id="more-209"></span></p><p>Nous considérons que MacPorts est installé et configuré (<a href="http://blog.myprod.net/2008/11/18/macports-macosx/">voir ici dans le cas contraire</a>).</p><p>Recherchez le nom du paquet qui correspond à la version 8.3 de PostgreSQL.</p><pre class="brush:bash">port search postgresql</pre><p>Deux noms de paquets correspondent à la version 8.3 de PostgreSQL :</p><ul><li> &laquo;&nbsp;postgresql83&#8243; qui est le client</li><li> &laquo;&nbsp;postgresql83-server&nbsp;&raquo; qui est le serveur</li></ul><p>Le client est installé automatiquement lorsqu&#8217;on installe le serveur.</p><p>Pour connaitre toutes les options d&#8217;installation, tapez la commande suivante :</p><pre class="brush:bash">port variants postgresql83-server</pre><p>Nous allons installer PostgreSQL 8.3 avec les options d&#8217;installation par défaut :</p><pre class="brush:bash">sudo port install postgresql83-server</pre><p>MacPorts crée automatiquement l&#8217;utilisateur &laquo;&nbsp;postgres&nbsp;&raquo;, pour connaître les détails sur cet utilisateur, utilisez la commande ci-dessous :</p><pre class="brush:bash">dscl . -read /Users/postgres
// Affiche :
ppleMetaNodeLocation: /Local/Default
GeneratedUID: A20245E7-....
NFSHomeDirectory: /opt/local/var/db/postgresql83
Password: *
PrimaryGroupID: 500
RealName:
 PostgreSQL-83\ Server
RecordName: postgres
RecordType: dsRecTypeStandard:Users
UniqueID: 500
UserShell: /bin/sh</pre><p>MacPorts n&#8217;initialise pas PostgreSQL, il est nécessaire d&#8217;effectuer l&#8217;initialisation manuellement :</p><pre class="brush:bash"> sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
 sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
 sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'</pre><p>MacPorts crée automatiquement le fichier &laquo;&nbsp;plist&nbsp;&raquo; du système de gestion du démarrage des programme, voici son contenu :</p><pre class="brush:xml">
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version='1.0'>
<dict>
<key>Label</key><string>org.macports.postgresql83-server</string>
<key>ProgramArguments</key>
<array>
        <string>/opt/local/bin/daemondo</string>
        <string>--label=postgresql83-server</string>
        <string>--start-cmd</string>
        <string>/opt/local/etc/LaunchDaemons/org.macports.postgresql83-server/postgresql83-server.wrapper</string>
        <string>start</string>
        <string>;</string>
        <string>--stop-cmd</string>
        <string>/opt/local/etc/LaunchDaemons/org.macports.postgresql83-server/postgresql83-server.wrapper</string>
        <string>stop</string>
        <string>;</string>
        <string>--restart-cmd</string>
        <string>/opt/local/etc/LaunchDaemons/org.macports.postgresql83-server/postgresql83-server.wrapper</string>
        <string>restart</string>
        <string>;</string>
        <string>--pid=none</string>
</array>
<key>Debug</key><false/>
<key>Disabled</key>
<true/>
<key>OnDemand</key><false/>
<key>RunAtLoad</key><false/>
</dict>
</plist>
</pre><p>Par défaut, PostgreSQL ne sera pas lancé au démarrage.</p><p>- Si vous souhaitez que PostgreSQL soit lancé au démarrage, lancez la commande suivante :</p><pre class="brush:bash">// Le fichier "plist" sera modifié automatiquement
sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist</pre><p>- Dans le cas contraire, il faudra charger le fichier manuellement :</p><pre class="brush:bash">sudo launchctl load -F /Library/LaunchDaemons/org.macports.postgresql83-server.plist</pre><p>Dans le cas où vous en souhaitez pas lancer automatiquement PostgreSQL au démarrage, créer des alias rend le contrôle manuel du serveur PostgreSQL plus simple. Pour cela, nous allons ajouter quelques lignes à notre fichier de configuration de shell.</p><pre class="brush:bash">
cd ~
nano .profile
// Ajoutez les lignes suivantes
// Pour faire simple, on utilise directement le fichier "plist" et donc Launchd
alias pgstart='sudo launchctl load -F /Library/LaunchDaemons/org.macports.postgresql83-server.plist'
alias pgstop='sudo launchctl unload /Library/LaunchDaemons/org.macports.postgresql83-server.plist'
</pre><p>Pour vérifier le bon fonctionnement de PostgreSQL, nous pouvons utiliser :</p><ul><li>le client texte en ligne de commande : &laquo;&nbsp;psql&nbsp;&raquo;</li><li>un client graphique comme<a href="http://www.pgadmin.org/download/macosx.php" target="_blank">PgAdmin III</a> (gratuit)</li></ul><p>Pour utiliser la ligne de commande, il est souhaitable d&#8217;ajouter un fichier de configuration de Shell pour l&#8217;utilisateur &laquo;&nbsp;postgres&nbsp;&raquo;.</p><pre class="brush:bash">
sudo nano /opt/local/var/db/postgresql83/.profile
// Contenu du fichier :
export PATH=/opt/local/bin:/opt/local/sbin:/opt/local/lib/postgresql83/bin:$PATH
// Changez les propriétaires du fichier
sudo chown postgres:postgres /opt/local/var/db/postgresql83/.profile
</pre><p>Testons rapidement PostgreSQL en ligne de commande :</p><p>A titre de mémo, l&#8217;anti slash s&#8217;obtient avec la combinaison de touches suivante :<br /> [SHIFT]+[ALT]+[ : / ]</p><pre class="brush:bash">
// Démarrer le server
pgstart

// Passer sous l utilisateur "postgres"
sudo su - postgres

// Se connecter au serveur sans préciser de base de données
psql

// Connaitre l aide
\?

// Lister les bases de données
\l

// Affiche
        List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 postgres  | postgres | UTF8
 template0 | postgres | UTF8
 template1 | postgres | UTF8
(3 rows)

// Quitter
\q

// Quitter l utilisateur "postgres"
exit

// Stopper Postgres
pgstop
</pre><p>L&#8217;utilisation du client en ligne de commande est très pratique et sa connaissance est parfois indispensable. Cependant, lorsque vous travaillez en local, un client graphique comme PgAdmin III remplace la ligne de commande pour bien des tâches. Son utilisation est triviale, vous pouvez le télécharger à <a href="http://www.pgadmin.org/download/macosx.php" target="_blank">cette adresse</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2008/11/23/installer-postgresql-83-avec-macports/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Installer Apache 2.2 avec MacPorts</title><link>http://blog.myprod.net/2008/11/22/macports-installer-facilement-apache-sous-mac-os-x/</link> <comments>http://blog.myprod.net/2008/11/22/macports-installer-facilement-apache-sous-mac-os-x/#comments</comments> <pubDate>Sat, 22 Nov 2008 20:22:22 +0000</pubDate> <dc:creator>Fabien</dc:creator> <category><![CDATA[Tech]]></category> <category><![CDATA[Apache]]></category> <category><![CDATA[Mac OS X]]></category> <category><![CDATA[MacPorts]]></category><guid isPermaLink="false">http://blog.myprod.net/?p=175</guid> <description><![CDATA[Dans le billet précédent je vous ai présenté MacPorts, application qui permet d&#8217;installer aisément des logiciels &#171;&#160;Open Source&#160;&#187;. Voyons maintenant en détail comment installer Apache 2.2.x à l&#8217;aide de MacPorts. Nous considérons que MacPorts est installé et configuré (voir ici dans le cas contraire). Après avoir mis à jour le catalogue, faisons une recherche sur [...]]]></description> <content:encoded><![CDATA[<p><a title="MacPorts, catalogue de logiciels Open Source" href="http://blog.myprod.net/2008/11/18/macports-macosx/" target="_self">Dans le billet précédent</a> je vous ai présenté <strong>MacPorts</strong>, application qui permet d&#8217;installer aisément des logiciels &laquo;&nbsp;Open Source&nbsp;&raquo;. Voyons maintenant en détail comment installer Apache 2.2.x à l&#8217;aide de <strong>MacPorts</strong>.<br /> <span id="more-175"></span></p><p>Nous considérons que MacPorts est installé et configuré (<a href="http://blog.myprod.net/2008/11/18/macports-macosx/">voir ici dans le cas contraire</a>). Après avoir mis à jour le catalogue, faisons une recherche sur le nom du paquet qui correspond à la version 2.2 d&#8217;Apache.</p><pre class="brush:bash">port search apache</pre><p>Le paquet correspondant à Apache 2.2 est &laquo;&nbsp;apache2&#8243;.</p><p>Pour connaitre toutes les options d&#8217;installation, tapons la commande suivante :</p><pre class="brush:bash">port variants apache2</pre><p>Nous allons installer Apache 2.2 avec ses options d&#8217;installation par défaut.</p><pre class="brush:bash">sudo port install apache2</pre><p>La compilation n&#8217;a pas fonctionné du premier coup, &laquo;&nbsp;awk&nbsp;&raquo; était nécessaire mais non installé :</p><pre class="brush:bash">...
checking for mawk... (cached) no
checking for gawk... (cached) no
checking for nawk... (cached) no
checking for awk... (cached) no
configure: error: No awk program found

Error: The following dependencies failed to build: apr-util sqlite3 readline ncurses ncursesw openssl zlib pcre
Error: Status 1 encountered during processing.</pre><p>Suite à cette erreur, j&#8217;ai lancé l&#8217;installation de &laquo;&nbsp;gawk&nbsp;&raquo; (GNU awk) :</p><pre class="brush:bash">sudo port install gawk</pre><p>puis à nouveau &laquo;&nbsp;apache2&#8243;.</p><pre class="brush:bash">sudo port clean --all apache2
sudo port install apache2</pre><p>La compilation d&#8217;Apache et de l&#8217;ensemble de ses dépendances prend plusieurs minutes.</p><p>Utilisez le fichier &laquo;&nbsp;exemple&nbsp;&raquo; de configuration d&#8217;Apache comme fichier de configuration :</p><pre class="brush:bash">cd /opt/local/apache2/conf
sudo cp httpd.conf.sample httpd.conf</pre><p>MacPorts génère un fichier &laquo;&nbsp;.plist&nbsp;&raquo; pour la prise en charge d&#8217;Apache par le système de gestion du démarrage de programme. Le contenu de ce fichier est le suivant :</p><pre class="brush:xml">
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version='1.0'>
<dict>
<key>Label</key><string>org.macports.apache2</string>
<key>ProgramArguments</key>
<array>
        <string>/opt/local/bin/daemondo</string>
        <string>--label=apache2</string>
        <string>--start-cmd</string>
        <string>/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper</string>
        <string>start</string>
        <string>;</string>
        <string>--stop-cmd</string>
        <string>/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper</string>
        <string>stop</string>
        <string>;</string>
        <string>--restart-cmd</string>
        <string>/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper</string>
        <string>restart</string>
        <string>;</string>
        <string>--pid=none</string>
</array>
<key>Debug</key><false/>
<key>Disabled</key>
<true/>
<key>OnDemand</key><false/>
<key>RunAtLoad</key><false/>
</dict>
</plist>
</pre><p>Par défaut Apache ne sera pas lancé au démarrage, ni à la demande.</p><p>- Si vous souhaitez qu&#8217;Apache soit lancé automatiquement au démarrage, tapez la commande suivante :</p><pre class="brush:bash">// Le fichier sera modifié automatiquement en effectuant la manipulation
sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist</pre><p>- Dans le cas contraire, il faudra utiliser manuellement la commande &laquo;&nbsp;Launchctl&nbsp;&raquo; pour utiliser apache :</p><pre class="brush:bash">// Charger le fichier plist, Apache est lancé
sudo launchctl load -F /Library/LaunchDaemons/org.macports.apache2.plist
// Arrêter Apache en déchargeant le fichier plist
sudo launchctl unload /Library/LaunchDaemons/org.macports.apache2.plist</pre><p>Une autre façon de faire consiste à créer des Alias dans votre fichier de configuration de Shell. Ajoutez les lignes suivantes dans votre fichier &laquo;&nbsp;.profile&nbsp;&raquo;.</p><pre class="brush:bash">
cd ~
nano .profile
// Ajoutez les lignes suivantes
alias apache2start='sudo /opt/local/apache2/bin/apachectl -k start'
alias apache2stop='sudo /opt/local/apache2/bin/apachectl -k stop'
alias apache2restart='sudo /opt/local/apache2/bin/apachectl -k restart'
alias apache2ctl='sudo /opt/local/apache2/bin/apachectl'
</pre><p>Vous pourrez ensuite contrôler Apache en tapant les alias :</p><pre class="brush:bash">
// Pour lancer Apache
apache2start
// Pour arrêter Apache
apache2stop
...
</pre>]]></content:encoded> <wfw:commentRss>http://blog.myprod.net/2008/11/22/macports-installer-facilement-apache-sous-mac-os-x/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Served from: blog.myprod.net @ 2012-05-21 09:36:30 by W3 Total Cache -->
