Bannière NyroBlog, par Côme Nicolas
Image par Côme Nicolas - ?

Tag : Shell

Chips, Twix and Mix

It was long time since I didn't make a post like this one. And it's also the first one in English. Basically, I just put some info and links without any orders. So it's possible that some of theme are old...

  • Android grows up pretty well. We can except the first real phone soon
  • Facebook Connect will allow to add a social dimension to your website
  • Firefox came out in version 3 RC1. The RC2 should come soon. If everything goes good, the finale version should come by the end of June
  • Google changed his favicon. Do you like it? I do
  • jQuery released 3 minor versions in a few time (1.2.6 at this time). They're working in the version 2 which is coming soon; a new version of the website will be done, a new logo and maybe the first final release of jQuery UI
  • TinyMCE did the same, to fix many bugs. Right now it's the version 3.0.8

And some personal news, no reasons:

  • The Lakers won yesterday the West Conference, it's official. First of the season, First of the playoffs, and the MVP for Kobe Bryant. They only have to win against the Celtics from Boston and they'll get everything this year
  • My internship by Fluidesign ends in more than 1 month
  • NyroModal was downloaded more than 2'000 times, the homepage was saw by more than 20'000 uniq visitors! A post is in preparation about that
  • After some problems in the server of Amenothès, I decided to but my own dedicated server when I'll come back in France. If somebody has some good URLs or infos about the installation or configuration of Postfix, SpamAssassin, ClamAV or anything else which could be useful, don't hesitate to write a comment! I'll take a debian to play as I want with it

Version française de ce billet

Chips, Twix et Mix

Cela fait un petit moment que je n'ai pas écrit un billet du genre. Il est donc possible que certains de ces infos soient un peu vieilles...

  • Android évolue toujours mieux. On peut espérer le 1er vrai téléphone bientôt
  • Facebook Connect permettra d'ajouter une dimension sociale à vos sites
  • Firefox a sorti en version 3 RC1. La RC2 ne devrait pas tardé, et si tout se passe bien, la version finale devrait sortir fin juin.
  • Google a changé sa favicon. Vous trouvez comment ? Moi j'aime bien.
  • jQuery a sorti 3 version mineures en peu de temps (1.2.6 à l'heure actuelle). Mon petit doigt me dit qu'il travaille sur la version 2 qui sortira bientôt, en même temps qu'une nouvelle version du site, d'un nouveau logo et de la 1ère version final de jQuery UI
  • TinyMCE en a fait de même, pour fixer des bugs. Version 3.0.8 actuellement

Et puis un peu de news perso aussi, il n'y a pas de raisons :

  • Les Lakers ont remporté hier la conférence West, c'est officiel. 1er de la saison, 1er des playoffs, et le MVP pour Kobe Bryant. Plus qu'à gagner contre les Celtics de Boston et ils auront tout eu cette année.
  • Mon stage chez Fluidesign se termine dans un peu plus d'un mois. Ensuite j'ai encore 3 semaines ici à faire le touriste. Si une envie de Cali vous prend (et qu'on se connait, c'est un minimum), des options sont possible ;)
  • NyroModal a été télécharger plus de 2 000 fois, la page du projet vue par plus de 20 000 visiteurs uniques ! Un billet sur le sujet est en préparation
  • Suite à des problèmes sur le serveur d'Amenothès, j'ai décider de me prendre un petit serveur dédié à mon retour en France. Si quelqu'un a des bonnes adresse ou des infos sur l'installation et la configuration de Postfix, SpamAssassin, ClamAV ou quoique ce soit qui me sera utile, n'hésitez pas ! Je vais prendre une debian vierge histoire de m'amuser comme je veux.

English Version of this post

Howto: Transfer a website

When I wrote this post in French, I just transfered 2 of my website.

Before I started to do it, I looked for an howto like this one to be sure to forget nothing. As I didn't find it, I'm writing it for the others!


To be sure everybody understand what we're talking about here, let me explain the problem.
When we want publish a website, we need 2 things: a domain name and a server. The server contains all the websites files (HTML, PHP, Images, etc...)

The domain name is the URL you use to access to our website; nyrodev.info for mu blog for example. This domain name should redirect your visitor to your server to access the files. Your server is reachable through an IP address. The link between your domain name et the IP address is done with the DNS. DNS are online computers which everybody can ask to know the IP address related to a domain name.

The server is here to stock your files. It's basically a computer with some special softwares. A server can contains multiple websites. That mean more than 1 domain name can point to the same server. The choice of the right files in the server will be done via many softwares well parametered for each website. I won't speak about this part here. Most of time the dedicated server provided administration tools to configure automatically every software during the website creation.

My goal is to change the server. I have to transfer the files (images, pages html, etc...), the eventual database and more. At the end, we'll change the IP address where point the domain name to use the new server.

Next you'll see some actions to do that in the good order to don't have problems, by loosing at least at visitors during the transfer time.

In the next of this post:
  • domain.com: The domain name to transfer
  • Server A: old server, where the website is at the beginning
  • Server B: new server

1. Prepare the Basics

The first step of this transfer is to prepare the server B to receive the new website. Create in your administration to get some disk space to receive your files. You can give him directly domain.com to save time. Don't forget to set the mail parameters, FTP, etc... It doesn't cause any troubles[1] as domain.com still points on the old server.

Then you can create the email and email alias that you have on the server A to don't lose any email. Regarding the databases, create them without the tables. This will be done in an other part.

2. File Transfer

For now we can transfer the static files. Don't transfer now the uploaded or dynamic files because the current website is still available in the old server, and some upload can still occurs.

If you have a SSH access on the server A, why don't create a tar.gz archive to group all the files in one compressed, to gain some time?
Go to the directory containing your files, and to create the archive:
Retrieve the file by FTP and send it to the server B, where you should also have a SSH access. In the directory where you uploaded this archive, decompress the file:
tar xvzf DIRECTORY.tar.gz
These files will probably contains some database configurations, .htaccess files with absolute path, etc... Many configurations which will be probably different in the new server. Edit them now.

If you don't have a SSH access, simply retrieve normally your files by FTP. You can make the change in the configurations files before transfer them..

Moreover don't forget about the chmod of the directories where your script has to write some files.

Right now, your website should be ready to use in the new server by simply adding the database content.

3. Temporary Website Closure

To be sure to loose nothing during the transfer, we'll disable the whole website in the server A, just before transferring the database and the dynamic files.

We'll start by closing the whole website by simply using one .htaccess file, denying everything and redirecting to a single text page to explain about the moving. The .htaccess is:
Deny from all

    Allow from all

ErrorDocument 403 http://www.domain.com/transfer.php
And you can create the file transfer.php to explain it's temporary and won't during more than 24 hours.

4. Transfer the Last Elements

Once the website is close, we can transfer the dynamic files. You're sure they won't be new in the old server. You can use the same technique used in the 2nd step.

Now the Database transfer.

If you don't have a SSH access, simply use phpMyAdmin to export your database from the server A to import it in the server B.

If you have a SSH access, it could be better to proceed differently for 2 reasons: the phpMyAdmin export is sometimes buggy, and if your database is too big, phpMyAdmin will give you some timeout errors.

We need only 2 command lines. The first to export the database in a text file in the server A:
mysqldump --host=localhost --user=USER --password=PASS --add-drop-table DATABASENAME > base.sql
Then transfer this base.sql file to the server B and execute this command:
mysql -h localhost -u USER --password=PASS DATABASENAME < base.sql
Your website should be now totally ready in the server B. If you can test it to be sure everything is OK before the final transfer.

5. Edit the DNS

Finally you can do the modification in your domain name to point it to the server B, by editing the IP address in your DNS. And wait for testing. If you want test quicker if everything is good, I strongly recomand to use the DNS server from Open DNS on your computer —why not keep them later?. The gain with Open DNS is they are very fast to update, and you can force it to refresh the cache. Do it for your domain name 15 to 20 minutes later your change.

If they're going to the new IP, refresh your DNS on your computer. For Windows: Start > Execute > cmd. Then type:
ipconfig /flushdns

And finally test on your favorite bowser after clearing your cache too. It should be OK.

During the next few days, you have to retrieve your emails in the both server as some DNS will not be up to date everywhere.

Voilà, I hope this howto will be usefull for you. For sure you have different solution for every step. I simply showed which I used and they worked perfectly for me.
If you have any suggestions, remarks, feedback, don't hesitate to comment here!

Thanks to Niko who advised me during my transfers.

[1] : The only problem you can have —and I experienced— is: If in the server B you have some website or anything else which want send email to domain.com. Actually the server B thought domain.com is hosted by itself. That mean it don't search for the IP where to send the email because it is itself! It's not really a problem if you know that. As you'll finally retrieve your emails in the server B, you'll finally get these emails. Use simply the webmail to check during the transfer.

Version Française de ce billet

Backup and Restore MySQL Database through command line

When you want backup a MySQL database, you don't have many solutions.

You can use PhpMyAdmin to backup the database but you will figured out that the export doesn't work so good: there is some information lacks like the Foreign key or other things like that. You'll also occur timeout problem when trying to backup -and restore- huge database.

You can also read a fex pages in the MySQL doc and you'll find Bash command to do exactly what you want. In only 1 line you'll be able to backup you're whole database in one text file.

Here is the backup command:

mysqldump --user=USER --password=PASS --add-drop-table DATABASENAME

This command show you all the MySQL query to execute to retrieve your entire database: the CREATE instructions, adding the constraints if needed and of course, the INSERT lines. The option --add-drop-table add the instruction to delete the table just before their creation: very useful to don't worry about cleaning the database before the backup.

If you want save more than one database, you have to replace DATABASENAME by --databases DATABASENAME1 DATABASENAME2 DATABASENAME3.

And if you want save all the database in you server, you can use --all-databases instead. Be sure the user used in the command line have access to all the databases you want back up.

Right now the command show you the query. Even if you're Flash Gordon, you can't do anything with that. A simple pipe to a file will save everything for you:

mysqldump --user=USER --password=PASS --add-drop-table DATABASENAME > DUMP.sql

To restore the database -or create it in an other server-, you have simply to upload the file saved just before and run this command in the same place of this file:

mysql -u USER --password=PASS DATABASENAME < DUMP.sql

Tutoriel : Transférer son site

Comme j'ai transférer mes 2 sites la semaine dernière, le sujet est tout chaud pour moi.

Avant de m'atteler à la tâche, j'ai chercher un petit tuto comme celui-ci, qui m'aurait permis de noter tous les points à ne pas oublier. Comme je n'ai pas trouver, je l'écris pour qu'un tel article existe !


Commençons par poser le problème, histoire que tout le monde comprenne de quoi on parle.
Lorsqu'on veut publier un site internet sur la toile, on a besoin de 2 choses : un nom de domaine et un espace disque (serveur ou simple hébergement. Le terme serveur sera utilisé par la suite) dans lequel on stockera les fichiers du site.

Le nom de domaine est l'adresse avec laquelle vous accéder au site internet; nyrodev.info pour ce blog par exemple. Ce nom de domaine doit diriger votre visiteur sur vers votre serveur pour ainsi accéder au fichier. Votre serveur est accessible avec une addresse IP unique sur la toile. La liaison entre le nom de domaine se fait grâce aux DNS. Les DNS sont des ordinateurs sur la toile que n'importe qui peut interroger pour connaître l'adresse IP attribué à un nom de domaine.

Le serveur est là où sont stockés vos fichiers. Il s'agit ni plus ni moins que d'un ordinateur avec des logiciels spéciaux d'installés. Un serveur peut contenir plusieurs sites. Ce qui veut dire que plusieurs noms de domaines pointeront sur ce même serveur. L'affichage des bons fichiers se fera par le biais d'un panel de logiciel bien paramétrer pour chaque site. Cette partie ne sera pas traité dans ce billet. Dans la plupart des cas, les serveurs dédiés proposent des outils d'administration qui configure automatiquement tous ces logiciels serveurs pour vous à la création d'un nouveau site.

Notre but est de changer de serveur. Nous devrons donc transférer les fichiers du site (images, pages html, etc...), les base de données éventuelles et bien plus encore. Au final, nous changerons l'adresse IP sur laquelle point le nom de domaine pour utiliser le nouveau serveur.

Voyons donc quelles actions doivent être réaliser et dans quel ordre pour que tout se passe bien, en perdant un minimum de visiteurs durant le transfert.

Dans la suite du billet :
  • domaine.com : le nom de domaine à transférer
  • Serveur A : ancien serveur, sur lequel le nom de domaine pointe actuellement
  • Serveur B : nouveau serveur

1. Préparer le terrain

La première étape de ce transfert est de préparer le serveur B à recevoir le nouveau site. Créer le site dans votre administration afin de lui allouer un espace. Vous pouvez lui attribuer tout de suite domaine.com, ce sera toujours ça de gagner, avec les paramétrages des serveurs de mail, de FTP, etc... Cela ne pose pas problèmes[1] puisque domaine.com pointe toujours sur l'ancien serveur.

Ensuite, vous pouvez créer tous vos emails et redirection d'emails que vous avez sur le serveur A de façon à ne perdre aucun email. Pour les base de données, créez simplement les base de données sans les tables, cette partie fera l'objet d'une autre partie.

2. Transférer les fichiers

A ce stade là, vous pouvez transférer vos fichiers statiques. Ne transférer pas dès maintenant les fichiers uploadés par les visiteurs car le site est encore accessible, et donc des uploads peuvent encore avoir lieu.

Si vous avez un accès en SSH sur votre serveur A, pourquoi ne pas créer une archive tar.gz pour tout regrouper dans un seul fichier compressé, pour gagner du temps ?
Déplacer vous dans votre répertoire contenant vos fichiers, et pour créer l'archive :
tar cvzf dossier.tar.gz dossier
Récupérer ce fichier par FTP, et transférer le sur le serveur B, sur lequel vous devrez aussi avoir un accès SSH. Dans le dossier où vous avez uploadé cette archive, décompressez vos fichiers :
tar xvzf dossier.tar.gz
Ces fichiers contiendront peut-être des configurations pour accéder à la base de donnée, des fichiers .htaccess avec des répertoires absolus, etc... Autant de configurations qui seront sans doute différent sur le nouveau serveur. Modifier les maintenant.

Si vous n'avez par accès en SSH, rapatriez simplement tous vos fichier par votre FTP normalement. Vous pouvez faire les changements de configurations avant de les transférer.

De plus, pensez aux droits des dossiers dans lesquels vos scripts écrivent vos fichiers.

A ce stade là, vous devez avoir votre site prêt à fonctionner, en ajoutant simplement vos bases de données.

3. Fermeture temporaire du site

Pour être sûr de ne perdre aucune donnée durant le transfert, nous allons empêché complètement l'accès au site sur le serveur A, avant de transférer tous les fichiers dynamiques et les base de données.

Nous allons fermer la totalité du site avec un simple fichier .htaccess, interdisant tout et redirigeant sur une simple page texte pour dire que le site déménage. Le fichier .htaccess est :
Deny from all

    Allow from all

ErrorDocument 403 http://www.domain.com/transfert.php
Et créer votre fichier transfert.php qui explique que c'est temporaire et ne devrait pas durer plus de 24h.

4. Transfert des derniers éléments

Une fois le site fermé, vous pouvez transférer vos fichiers dynamiques, uploadés par vos utilisateurs. Vous pouvez être sûr qu'il n'y en aura plus de nouveaux.

Passons au transfert de la base de donnée.

Si vous n'avez pas d'accès à SSH, utilisez simplement phpMyAdmin pour exporter votre base sur le serveur A et l'importer dans le serveur B.

Mais si vous accès en SSH, il est préférable de procéder différemment pour 2 raisons : l'export de phpMyAdmin est parfois buggé, et si votre base de donnée est trop grosse, phpMyAdmin donnera des erreurs dues au timeout du PHP.

Donc nous avons besoin ici de deux ligne de commandes. La première pour exporter dans un fichier texte :
mysqldump --host=localhost --user=LOGIN --password=PASSE --add-drop-table NOMBASE > base.sql
Transférer ensuite le fichier base.sql sur le serveur B, et exécutez cette commande :
mysql -h localhost -u LOGIN --password=PASSE BASE < base.sql
Votre site doit maintenant être totalement opérationnel sur le serveur B. Si vous pouvez, un petit test ne fera pas de mal, pour être bien sûr.

5. Modifier le DNS

Enfin, il ne vous reste plus qu'à effectuer les modifications de votre nom de domaine pour qu'il pointe sur le serveur B, en modifiant l'adresse IP des DNS de ce dernier. Et puis patienter pour tester si tout est ok. Pour teste plus rapidement si tous vos paramètres sont bons et si tout se passe bien, je vous conseille fortement d'utiliser les serveur DNS d'Open DNS sur votre ordinateur (et pourquoi pas les garder par la suite ?). L'avantage d'Open DNS est qu'ils sont très rapide à se mettre à jour, et que vous pouvez le forcer à rafraîchir son cache. Faites-le donc pour votre site 15 à 20 minutes après avoir effectuer vos changements.

S'ils pointent sur la nouvelle IP, rafraichissez les DNS de votre ordinateur. Pour Windows: Démarrez > Exécuter > cmd. Puis la ligne de commande :
ipconfig /flushdns

Et tester dans votre navigateur préférer pour voir si tout est bon, ce qui est devrait être le cas.

Durant les jours qui suivent, vous devrez récupérer des emails sur les deux serveurs, en attendant que les DNS soient à jour partout.

Voilà, j'espère que ce tutoriel vous sera utile. Bien sûr il existe différentes méthodes à chaque étape. J'ai simplement présenter celles que j'ai utiliser et qui ont marcher parfaitement pour moi.
Si vous avez des remarques, questions, feedbacks, les commentaires sont là pour ça !

Merci à Niko qui m'a conseillé lors de mes transferts.

[1] : Le seul problème qu'il peut y avoir (et qui m'est arrivé) et si sur le serveur B, vous avez d'autres sites qui envoient des mails sur domaine.com. En effet, le serveur ne perdra pas de temps à l'envoyer à l'extérieur, puisque pour lui, ce nom de domaine lui appartient. Ce n'est un problème que si on ne le sait pas. Comme vous allez au final récupérer vos emails sur ce serveur, vous les aurez quoiqu'il arrive plus tard. Un petit webmail pour vérifier tout ça durant le transfert et tout est bon.

English Version of this post