Lenteur d’une application Rails lors de la première requête : configurer Phusion Passenger

La configuration de Phusion Passenger se trouve dans le fichier de configuration principal du serveur web choisi. Par exemple pour Apache2, dans /etc/apache2/apache2.conf.

Il existe deux paramètres à configurer :

  1. passenger_pool_idle_time, qui autorise par défaut 5 minutes d’inactivité avant d’arrêter une application. On peut paramétrer à 86400 secondes (1j), ou à 0 qui a pour effet d’arrêter l’application seulement s’il manque des ressources.
  2. passenger_max_preloader_idle_time, qui autorise par défaut 5 minutes d’inactivité avant d’arrêter le processus qui précharge des forks de l’application lors des montées en charge. Le mettre à 0 signifie qu’il restera toujours prêt.

Le processus de préchargement d’une application permet de démarrer une appli en 10% du temps habituel nécessaire, selon la doc.

Debian : monter un disque externe à chaud sur une VM

Si vous avez une vm sous Debian, avec un disque « branché » après démarrage et que vous ne souhaitez pas redémarrer votre vm pour la prise en compte de ce disque (ce que l’on appelle monter des ressources à chaud), cet article est pour vous.

Première chose, « branchez » votre disque sur votre VM.

Ensuite, connectez-vous en ssh et passez en root.

Un petit fdisk -l, à ce moment là vous ne voyez pas le nouveau disque, zut ! Il y a seulement le disque actuel avec ses partitions, par exemple sda, sda1, sda2, …

Pour cela nous allons devoir demander à notre Debian de « re-scanner » les disques connectés, c’est parti.

Tapez : echo "- - -" > /sys/class/scsi_host/host{NB}/scan, {NB} étant un chiffre souvent 0, 1 et 2 par exemple. Il faut le faire sur tous pour savoir les nombres, faites un ls /sys/class/scsi_host/.

Une fois ceci fait on relance un fdisk -l et là, magie, vous retrouvez votre nouveau disque ainsi que les partitions présentes sur celui-ci, par exemple sdb, sdb1, sdb2, …

A partir de là, cela se simplifie, il ne reste plus qu’à monter la partition souhaitée avec pour la partition sdb1 et un dossier créé pour la « réception » du montage /mon_dossier_de_destination_pour_montage : mount /dev/sdb1 /mon_dossier_de_destination_pour_montage

Ensuite, il ne vous reste plus qu’a parcourir le dossier monté en allant dans le dossier cd /mon_dossier_de_destination_pour_montage

Et voilà, fini 😉

Source : http://monblog.system-linux.net/blog/2014/02/27/ajout-dun-disque-a-chaud-vmwa-lvm/comment-page-1/, https://doc.ubuntu-fr.org/mount_fstab

Gérer les sources de vos gems

Par défaut, lorsqu’on installe une gem avec un gem install, l’url de téléchargement de cette gem est https://rubygems.org. Il peut cependant être intéressant de modifier ou d’ajouter des sources de téléchargement, notamment lorsqu’on possède un serveur de gem perso.

Pour cela, quelques commandes sont utiles :

Lister les sources

$ gem sources -l
*** CURRENT SOURCES ***
 
https://rubygems.org/

Ajouter une source

$ gem sources -a http://url-de-mon-serveur-de-gem
http://url-de-mon-serveur-de-gem added to sources

Supprimer une source

$ gem sources -r http://url-de-mon-serveur-de-gem
http://url-de-mon-serveur-de-gem removed from sources

Source : http://guides.rubygems.org/command-reference/#gem-sources

Configurer un serveur de temps sous debian 8

Pour configurer votre serveur de temps, passer en root et éditez le fichier /etc/default/ntpdate avec :

vi /etc/default/ntpdate

Ce fichier permet de configurer votre outil ntpdate.
Pour modifier les serveurs de temps par défauts qui sont les serveurs de chez Debian, vous pouvez éditer la ligne :

NTPSERVERS = "Liste_Des_Serveurs_De_Temps_Séparés_Par_Des_Espaces"

Dans cette variable vous pouvez indiquer une IP ou encore un nom d’hôte.

Pour lancer une mise à jour ponctuelle :
sudo ntpdate adresse_du_serveur

Et voilà, 😉

Source : https://doc.ubuntu-fr.org/ntpdate

Commandes Linux utiles pour de l’administration système

Retourner au répertoire précédent :

cd -

Lister par ordre naturel (« 1, 20, 100 » et non « 1, 100, 20 ») :

ls -vl

Lancer une recherche récursive dans un répertoire, qui scanne le contenu des fichiers (plus d’infos) :

grep --color=auto -iRnH 'TEXTE' *

Afficher en temps réel les nouvelles lignes d’un fichier :

tail -f monfichier

Lister les 1000 dernières lignes d’un fichier :

tail -n1000 monfichier

Copier d’un serveur à un autre :

scp -r3 user@serverA:monfichier user@serverB:monfichier

Créer plusieurs fichiers rapidement :

touch prefix-{fichier1,fichier2,fichier3}.html

Connaitre sa version de Debian :

cat /etc/debian_version
# ou
cat /etc/issue
# ou
lsb_release -a

Logrotate et projet Rails

Logrotate est un utilitaire Unix qui vous permet de limiter la taille de vos fichiers de log. Pour cela, il procède en deux étapes :

  • la rotation : il archive le fichier de log sous un autre nom (et supprime la plus ancienne archive)
  • la compression : il compresse le fichier de log avant de l’archiver

Pour ajouter vos propres configurations à logrotate, vous pouvez soit éditer le fichier /etc/logrotate.conf, soit ajouter un fichier dans le répertoire /etc/logrotate.d.

Dans un projet Rails, les log sont stockés dans le fichier log/production.log (ou log/development.log si vous êtes en environnement de développement). Mais ces fichiers grossissent au fil du temps (sans qu’on s’en rende forcément compte d’ailleurs). Il est donc intéressant de les archiver/compresser avec logrotate.

Voici un exemple de configuration logrotate que nous avons mis en place sur l’un de nos projets :

/chemin-vers-le-projet/log/production.log {
        compress # compresse les anciens fichiers de log avec gzip
        delaycompress # retarde le processus de compression jusqu'à la prochaine rotation
        rotate 5 # conserve 5 fichiers archivés
        missingok # le processus ne s'arrête pas à chaque erreur et poursuit avec le fichier de log suivant
        notifempty # empêche la rotation de s'effectuer si le fichier de log est vide
        minsize 50M # le fichier est archivé s'il fait plus de 50 Mo
        dateext # stocke les fichiers archivés sous le format production.log-YYYYMMDD
        copytruncate # copie le fichier avant de le vider. Permet d'éviter les erreurs.
}

Pour lancer manuellement logrotate selon une configuration, on peut exécuter :

  logrotate -f /etc/logrotate.d/mon-fichier-de-conf

Sources : doc.ubuntu-fr.org, linux.die.net

Incron ne fonctionne pas

Si vous utilisez incron pour surveiller un fichier et déclencher un script bash lorsque ce fichier est modifié,par exemple, il se peut que cela ne fonctionne pas. Dans notre cas, le problème est survenu sur une vm qui a été dupliquée.

Quelques trucs à vérifier :

  • Le script a les droits d’exécution pour l’utilisateur qui lance le incron
  • L’utilisateur qui lance le incron est présent dans le fichier /etc/incron.allow et n’est pas dans le fichier /etc/incron.deny
  • Un petit redémarrage du démon, juste au cas où /etc/init.d/incron restart

Et normalement, tout va mieux 😉

Changer l’adresse ip d’un serveur debian et son hostname

Si vous avez besoin de changer l’adresse ip de votre serveur sous une debian 8 c’est relativement simple :

  1. Éditez (en root) le fichier /etc/network/interfaces et changer la ligne « address » située sous « iface eth0 inet static » en mettant ici la nouvelle adresse ip souhaitée.
  2. Redémarrer le serveur pour que ce soit pris en compte (sinon il se peut qu’avec la connexion ssh en cours, l’arrêt et le redémarrage de l’interface réseau pose souci).

Voilà pour l’adresse ip, passons au hostname. Ce n’est pas plus compliqué :

  1. Éditez le fichier /etc/hostname et remplacez son contenu par le nouveau nom désiré.
  2. Éditez le fichier /etc/hosts et remplacer partout où l’ancien nom est indiqué par le nouveau, quand je dis partout il y a souvent un ou deux endroit.
  3. Redémarrer le serveur pour la prise en compte du changement et voilà, terminé.

Plus d’infos sur : https://wiki.debian.org/fr/NetworkConfiguration, http://naeh.net/changer-le-hostname-dun-serveur-sous-debian/ et bien d’autres

 

Configurer MySQL 5.5 en UTF8

Par défaut MySQL utilise l’encodage Latin1 et la collation latin1_swedish_ci. Pour qu’il utilise l’encodage utf-8 et la collation utf8_unicode_ci, il faut créer un fichier utf8.cnf dans le répertoire /etc/mysql/conf.d/ et y insérer les lignes suivantes :

[client]
default-character-set=utf8
 
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
 
[mysql]
default-character-set=utf8

Les prochaines bases de données créées avec ruby on rails (par exemple) seront ainsi encodées par défaut en utf-8.

Source : http://stackoverflow.com/questions/13900983/mysql-5-5-utf8-trouble