Le Journal de Nikrou - Mot-clé - postgresqlCe journal n'est pas un blog!2024-01-09T15:52:56+01:00urn:md5:501048fab0be4d1978e39dded54e4f42DotclearEncore une migration...urn:md5:1ed7a5a1d63421ed967b83919a7687202024-01-09T16:39:00+01:002024-01-09T16:52:56+01:00NicolasPHPkimsufipostgresql <p>En ce début d'année, après <a class="ref-post" href="https://www.nikrou.net/post/2008/10/11/Migration-reussie">une première migration</a>, puis <a class="ref-post" href="https://www.nikrou.net/post/2010/06/20/Migration-vers-un-nouveau-Kimsufi">une deuxième</a> et <a class="ref-post" href="https://www.nikrou.net/post/2014/10/18/Et-encore-une-migration-kimsufi">une troisième</a>, j'ai de nouveau migré mon serveur dédié sur une nouvelle machine, avec plus d'espace disque, plus de mémoire, plus de performance processeur et pour moins cher. Que demander de plus ?<br />
<br />
J'en ai profité pour passer postgreSQL de la version 14 à la version 16. Au passage, la configuration est un peu plus stricte et je suis tombé sur un message un peu abscon : <br />
<em>user does not have a valid scram secret</em><br />
<br />
Le mot de passe de l'utilisateur était trop simple ou plus exactement, l'algorithme pour chiffrer le mot de passe était trop simple. Jusqu'à présent c'était <a href="https://fr.wikipedia.org/wiki/MD5">md5</a>. PostgreSQL conseille très fortement un algorithme <a href="https://datatracker.ietf.org/doc/html/rfc7677">scram-sha-256</a>.<br />
<br />
Pour cela il suffit, par exemple de se connecter au serveur avec la commande psql et pour chaque mot de passe n'utilisant pas le bon algorthme de taper : </p>
<pre>
<code class="language-sql">postgres=# \password NOM_DU_ROLE</code></pre>
<p>puis en réponse de taper le mot de passe et la confirmation.</p>Mise à jour de PostgreSQLurn:md5:9d4eb0ca857a2f7859609957bbe32d962018-01-21T17:55:00+01:002018-01-21T17:55:00+01:00Nicolasmigrationphyxopostgresql <p>J'ai un peu tardé mais j'ai finalement mis à jour ma base de données PostgreSQL vers la version 10 sortie au mois d'octobre 2017. Il y a plein de changements intéressants, surtout au niveau des performances mais un changement qui aura son importance : <a href="https://www.postgresql.org/">PostgreSQL</a> est passé comme de nombreux projets à la version majeure sur un chiffre.</p>
<p>En continuant sur les migrations, je vais devoir <a class="ref-post" href="https://www.nikrou.net/post/2017/03/14/Pr%C3%A9paration-de-migration-de-Piwigo-%C3%A0-Phyxo">continuer/commencer la mise à jour de ma galerie photo</a> qui utilise bien évidemment <a href="https://www.phyxo.net/">Phyxo</a>, de Mysql à PostgreSQL.</p>Phyxo 1.2.0 est de sortie !urn:md5:1216c75af610c42c61792164d44c24032014-09-28T21:20:00+02:002014-11-11T14:11:20+01:00NicolasPhyxobehatphyxopiwigopostgresql<p>Une nouvelle version de <a href="http://www.phyxo.net/" rel="external">Phyxo</a>, la version 1.2.0 est disponible. Si vous utilisez <a href="http://piwigo.org/" rel="external">piwigo</a> et que vous venez d'installer (ou de mettre à jour) vers la version 2.7.0, vous ne devriez pas être surpris.</p> <p>Visuellement, que ce soit côté administration, ou côté visiteur, vous ne verrez certainement pas de différences. Mais sous le capot, cela commence à diverger de plus en plus. Avec Phyxo vous pouvez utiliser votre moteur de base de données préféré PostgreSQL, SQLite ou bien MysSQL. Vous n'êtes pas limité à MySQL.</p>
<div>Je commence à ajouter de plus en plus de tests unitaires en utilisant l'excellent framework <a href="http://docs.atoum.org/" hreflang="fr" rel="external">Atoum</a>, de tests fonctionnels en utilisant <a href="http://docs.behat.org/" rel="external" hreflang="en">Behat</a> et même quelques tests javascript en utilisant <a href="http://jasmine.github.io/" rel="external" hreflang="en">jasmine</a>.
<p>Tout cela n'apporte rien directement aux visiteurs mais une fois la couverture de tests plus importante, cela rendra le code plus sûr, et évitera <a href="https://www.nikrou.net/post/2006/06/07/101-comment-ne-pas-faire-de-regressions-fonctionnelles" hreflang="en" rel="external">les regressions fonctionnelles</a>.</p>
<p>La version 1.2.0 apporte tout de même une fonctionnalité supplémentaire par rapport à piwigo : un administrateur peut autoriser les visiteurs de sa galerie à tagger les photos. Le principe est le même que le plugin que j'avais écrit pour piwigo user_tags mais cette fois c'est natif. L'idée est d'ajouter dans la prochaine version de Phyxo, la possibilité pour l'administrateur de modérer les tags ajoutés/supprimés.</p>
<p>Si vous avez installer une version précédente, la mise à jour de la base de donnée devrait s'effectuer automatiquement.</p>
<p>Dans la liste des choses que j'aimerais ajouter dans les prochaines versions :</p>
<ul>
<li>La modération des tags ajoutés/supprimés par les visiteurs</li>
<li>continuer à "nettoyer" le code : suppression des arobases inutiles par exemple.</li>
<li>Ajouter plus de tests automatiques</li>
<li>Faire fonctionner <a href="https://travis-ci.org/nikrou/phyxo" hreflang="en" rel="external">travis</a></li>
<li>Utiliser les sources javascript non minifiées</li>
</ul>
<p>Vous pouvez télécharger la version 1.2.0 :</p>
<ul>
<li>au <a href="http://download.phyxo.net/phyxo-1.2.0.zip">format zip</a> (phyxo-1.2.0.zip - 13Mo)</li>
<li>au <a href="http://download.phyxo.net/phyxo-1.2.0.tgz">format tar.gz</a> (phyxo-1.2.0.tgz - 8,4Mo)</li>
</ul>
</div>Mise à jour de PostgreSQLurn:md5:41569929af07b391efc6ac86e286e78d2013-10-13T20:19:00+02:002016-02-07T14:10:41+01:00NicolasGénéraldebianpostgresql <p>Mon serveur <a hreflang="en" rel="external" href="http://www.postgresql.org/">PostgreSQL</a> était encore en version 8.4 depuis un moment et j'ai décidé de faire la mise à jour. Rien de plus simple :</p>
<pre><code class="language-bash"># apt-get install postgresql-9.3
# pg_dropcluster 9.3 main --stop
# pg_upgradecluster 8.4 main</code></pre><p>Le changement de port se fait aussi pendant la migration. A la fin du script de mise à jour l'ancien cluster est arrêté. On peut le relancer mais il faudra se rappeler qu'il sera accessible sur le port 5433 au lieu de 5432 (par défaut évidemment). </p>Comment faire des tests fonctionnels ?urn:md5:34eca4f3388d99c916da9d3902305bd92013-04-09T16:42:00+02:002016-02-07T14:11:52+01:00NicolasDéveloppementbehatphyxopiwigopostgresqltests<p>Développer une application web de manière itérative sur de longues années et en gardant une compatibilité ascendante maximum n'est pas chose aisée sans faire de régression. Je me demandais déjà il y a quelques années <a href="https://www.nikrou.net/post/2006/06/07/101-comment-ne-pas-faire-de-regressions-fonctionnelles">comment ne pas faire de régressions fonctionnelles</a>. Sans forcément faire du développement piloté par les tests (ce qui me semble pourtant toujours aussi intéressant), le choix d'un outil n'est pas chose aisé.</p> <p>Pendant longtemps, j'ai utilisé <a hreflang="fr" rel="external" href="http://symfony.com/legacy">symfony</a> (dans sa première mouture) qui venait avec ses outils "maison" permettant de faire des tests unitaires mais aussi des tests fonctionnels, en simulant notamment un navigateur. C'était très bien. Je suis depuis passé à la version 2 et il n'y a pas d'équivalent. De plus les tests de symfony sont fait avec <a hreflang="fr" rel="external" href="http://www.phpunit.de/">PHPUnit</a> et je n'ai jamais réussi à me faire à ce framework et je ne m'y fais toujours pas.</p><p>Je n'ai pas trouvé d'équivalent à <a hreflang="fr" rel="external" href="http://simpletest.org/">simpletest</a> (un peu vieillisant pour rester gentil) ou <a hreflang="en" rel="external" href="http://www.symfony-project.org/api/1_4/sfBrowser">sfBrowser</a>. </p><p>J'ai ce besoin aussi bien pour des développements nouveaux mais aussi pour faire évoluer des applications où aucun test n'a été écrit. L'idée est d'alors de tester l'application de l'extérieur, en boîte noire. En cherchant à droite à gauche, je me suis finalement décidé à utiliser <a hreflang="en" rel="external" href="http://www.behat.org/">Behat</a>, même si ce n'est pas forcément sa vocation première. Behat est un framework permettant de faire du développement piloté par le comportement - <a hreflang="fr" rel="external" href="http://fr.wikipedia.org/wiki/Behavior_Driven_Development">BDD</a>. Dit autrement, on écrit des tests correspondant aux fonctionnalités de l'application. Le gros avantage de Behat est que les tests sont écrits en langage naturel. Cela ressemble à ça :</p>
<pre><code class="language-yaml">Fonctionnalité: Avoir un compte bancaire
Afin d'offrir aux utilisateurs la possibilité d'avoir un compte bancaire
Etant donné que je suis inscrit
Je dois être capable d'ajouter ou de retirer de l'argent sur mon compte
</code></pre><p>J'ai bien sûr une idée derrière la tête en expliquant tout cela. Depuis quelques semaines, j'essaie tant bien que mal de couvrir le périmètre fonctionnel de <a hreflang="fr" rel="external" href="http://piwigo.org/">piwigo</a>. L'idée est de pouvoir ensuite faire revivre le support de PostgreSQL. Oui oui quand j'ai une idée... Les quelques tests que j'ai écrit sont déjà disponibles : <a href="https://github.com/nikrou/phyxo">mon dépôt github</a>.</p>Migration vers un nouveau Kimsufi - dernière étapeurn:md5:6e3afbc46e96a42fa492f86cae03969d2010-07-02T22:59:00+02:002016-02-07T15:27:15+01:00NicolasGénéralapachedotclearpiwigopostgresql<p>Aujourd'hui, j'ai basculé sur le nouveau serveur. C'est la dernière étape de la migration.</p> <p>Depuis l'interface d'administration d'OVH, j'ai basculé mon IP fail-over de mon ancien serveur vers le nouveau. En une ou deux minutes, c'était le nouveau serveur qui répondait.</p><p>Je n'ai pas tout basculer et je suis pratiquement sûr d'avoir oublié des choses mais j'ai migré ce journal (un autre un peu plus secret) En revanche je suis passé à la toute dernière version de dotclear (la 2.2). La migration est aussi facile que pour Piwigo. Bon en même temps, c'est normal, <a hreflang="fr" href="http://fr.piwigo.org/forum/profile.php?id=3449">P@t</a> a copié. :-)</p><p>J'en ai profité pour passer sur <a hreflang="en" href="http://www.postgresql.org/">une vraie base de données</a>. </p><p>J'ai découvert une chose un peu par hasard mais j'ai compris comment profiter des urls propres. J'ai choisit PATH_INFO comme mode de lecture des urls. Dans le fichier <strong>inc/config.php</strong> j'ai jouté ce code :</p>
<pre class="language-php"><code>if (!isset($_SERVER['ORIG_PATH_INFO'])) {
if (isset($_SERVER['REDIRECT_URL'])) {
$_SERVER['ORIG_PATH_INFO'] = $_SERVER['REDIRECT_URL'];
} else {
$_SERVER['ORIG_PATH_INFO'] = '';
}
}
$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];</code></pre><p>Dans la configuration d'apache, j'ai ajouté cela:</p>
<pre class="language-apache"><code>RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1
Options -MultiViews</code></pre><p>C'est surtout la dernière ligne qui fait qu'en son absence cela ne fonctionne pas. L'option <a hreflang="en" href="http://httpd.apache.org/docs/2.2/content-negotiation.html#multiviews">MultiViews</a> n'est pas compatible avec le mode <a hreflang="en" href="http://httpd.apache.org/docs/2.2/rewrite/">Rewrite</a>, en tout cas pour ce cas là.</p>Migration vers un nouveau Kimsufi - deuxième étapeurn:md5:0eaea07d758d91f1dc9dda3d875bcdbc2010-06-29T22:43:00+02:002016-02-07T15:28:40+01:00NicolasGénéraldebiandotclearfreegitgitosislinuxphotophppiwigopostgresql<p>La deuxième étape de la migration de mon nouveau serveur, après les <a hreflang="fr" href="https://www.nikrou.net/post/2010/06/20/Migration-vers-un-nouveau-Kimsufi">déclaration DNS sur l'ancien serveur</a>, est l'installation de tous les services sur le nouveau serveur.</p> <p>Je n'héberge pas énormément de services (des sites web, <a hreflang="fr" href="https://www.nikrou.net/post/2009/02/20/Mettre-en-place-un-d%C3%A9p%C3%B4t-central-git">un serveur git</a>, un dépôt non officiel debian, un serveur de mail,...).</p><p>J'ai commencé par réinstaller le nouveau serveur avec mes choix de tailles de partitions. J'aurais pu utiliser <a hreflang="en" href="http://gparted.sourceforge.net/">gparted</a> pour les redimensionner et passer ensuite à <a hreflang="fr" href="http://fr.wikipedia.org/wiki/Gestion_par_volumes_logiques">lvm</a> mais étant donné toute la place disponible et le peu de temps qu'il faut pour réinstaller tout le système (moins de 10 minutes) je n'ai pas hésité : j'ai remis une <a hreflang="en" href="http://www.debian.org/">debian 5.0</a>, 64bits.</p><p>Je n'en avais pas parlé la dernière fois mais il faut aussi ajouter une adresse IP "virtuelle" qui est en fait l'adresse IP fail-over. Cela se passe dans le fichier <strong>/etc/network/interfaces</strong> :</p><p>Il faut ajouter quelque chose comme ça :</p>
<pre class="language-bash"><code>auto eth0:0
iface eth0:0 inet static
address I.P.FAIL.OVER
netmask 255.255.255.0
broadcast I.P.FAIL.255
gateway I.P.FAIL.254</code></pre>
<p>Après il suffit de relancer le service :</p>
<pre class="language-bash">/etc/init.d/networking restart</code></pre>
<p>J'ai fait la même chose sur le nouveau serveur pour pouvoir tester que le basculement fonctionnait plutôt que de le faire au dernier moment et s'apercevoir de problèmes.</p><p>Pour le moment je migre les services à fonctionnalités ou configurations identiques mais je pense que je vais passer tous mes sites avec une base <a hreflang="en" href="http://www.postgresql.org/">PostgreSQL</a> au lieu de <a hreflang="en" href="http://dev.mysql.com/">MySQL</a>. Pour <a hreflang="fr" href="http://www.dotclear.net/">Dotclear</a> cela ne posera pas de problème, pour <a hreflang="en" href="http://www.redmine.org/">redmine</a> non plus et finalement pour <a hreflang="fr" href="http://fr.piwigo.org/">Piwigo</a> non plus. Une fois le serveur bien en place, je migrerais aussi ma galerie familiale qui est actuellement sur <a hreflang="fr" href="http://pagesperso.free.fr/">les pages perso de free</a>.</p>Une nouvelle version majeure de Piwigourn:md5:f3e4ef14ed2e7017a16e4ea593fee1762010-05-19T20:39:00+02:002013-11-19T10:22:17+01:00NicolasDéveloppementphppiwigopluginpostgresqlsqlsqlite<p><a href="http://fr.piwigo.org/" hreflang="fr">Piwigo</a> est un logiciel permettant de gérer facilement sa propre galerie photos. </p> <p>Une nouvelle version majeure - <a href="http://fr.piwigo.org/basics/downloads" hreflang="fr">la 2.1</a> - vient de sortir. Vous pouvez facilement mettre à jour depuis une version antérieure ou faire une installation toute "neuve".</p>
<p>Une des évolutions que je trouve intéressante est la possibilité d'utiliser une autre base de données que Mysql. Si vous utilisez Piwigo depuis longtemps et que vous venez de mettre à jour vous pouvez néanmoins changer de base de données grâce au plugin <a href="http://piwigo.org/ext/extension_view.php?eid=394" hreflang="fr">Database Migration</a>. Vous pouvez alors utiliser <a href="http://sqlite.org/" hreflang="en">SQLite</a> ou <a href="http://www.postgresql.org/" hreflang="en">PostgreSQL</a>.</p>