Astuce Installation de PostgreSQL

Remarque :

Si vous préférez MySQL, vous pouvez suivre ce tutoriel à la place.
Il vous faudra peut-être également ajouter la ligne suivante au fichier /etc/apache2/apache2.conf puis redémarrer Apache :

Include /etc/phpmyadmin/apache.conf

Installation

  • Exécutez simplement la commande suivante :
sudo apt-get install postgresql postgresql-client postgresql-doc
  • Forcez postgreSQL à utiliser l'UTF-8. Remplacez avec la bonne version de postgreSQL (/etc/postgresql/<version>/main) dans les commandes suivantes :
sudo  pg_dropcluster --stop 9.4 main
sudo  pg_createcluster --start -e UTF-8 9.4 main

Configuration générale

Connexion distante

Par défaut, PostgreSQL n'est pas accessible à distance (ex: avec votre IDE sur votre poste de dev).

Pour l'autoriser, modifiez le fichier le fichier de configuration /etc/postgresql/<version>/main/pg_hba.conf, en remplaçant la ligne suivante par celle du dessous :

#local   all         all                               peer
local   all         all                               trust

Redémarrez le service postgresql :

sudo /etc/init.d/postgresql reload

Adminer

Quand on utilise MySQL, on le couple souvent avec PHPMyAdmin, pour pouvoir l'administrer via une interface web. Côté PostgreSQL, il n'y a pas d'outil aussi abouti.

Adminer ne s'en tire tout de même pas si mal. D'ailleurs, il permet aussi de se connecter à plein d'autres SGBD, dont MySQL.

Pour l'installer, suivez les commandes suivantes :

sudo mkdir /var/www/adminer
sudo cd /var/www/adminer
sudo wget https://www.adminer.org/latest.php
sudo mv latest.php index.php
sudo chown -R phpuser:phpuser .

Ensuite si vous utilisez les virtual host pour votre site, ajoutez-en un pour adminer. Pour cela créez par exemple le fichier /etc/sites-available/adminer.conf :

<VirtualHost *:80>
    ServerName db.adminer.dev
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/adminer
 
    ErrorLog ${APACHE_LOG_DIR}/adminer.error.log
    CustomLog ${APACHE_LOG_DIR}/adminer.access.log combined
</VirtualHost>

Remarques :

  • Vous pouvez bien sur adapter ces configurations, en particulier le nom de domaine db.adminer.dev.
  • Vous devrez probablement ajouter ce nom de domaine dans le fichier hosts de votre poste de dev pour pouvoir l'utiliser.

Activez maintenant ce virtual host et redémarrez Apache :

sudo a2ensite adminer
sudo service apache2 reload

Configuration pour votre site

Par défaut, la base de données postgres a été créée. Son propriétaire s'appelle aussi postgres. Un nouvel utilisateur système postgres a lui aussi été créé.

  • Connectez vous en tant qu'utilisateur postgres (qui est administrateur postgreSQL) :
sudo su - postgres
  • Créez un nouvel utilisateur :
createuser --interactive mypguser

Avec les options suivantes :

  • Super-utilisateur : Non
  • Créateur de base de données : Oui
  • Création de nouveaux rôles : Non

Modifiez son mot de passe :

psql
> ALTER USER mypguser WITH PASSWORD 'new_password';
  • Créez une nouvelle base de données :
createdb -O mypguser mypgdatabase
  • Si besoin, connectez-vous y pour rendre votre utilisateur propriétaire du schéma public :
psql mypgdatabase
> ALTER SCHEMA public OWNER TO mypguser;
  • Redémarrez le service postgresql :
sudo /etc/init.d/postgresql reload

Utilisation

Connectez-vous à la base avec le nouvel utilisateur :

psql -d mypgdatabase -U mypguser

Si vous n'avez pas d'erreur, alors c'est prêt (\q pour quitter la console postgreSQL).


Astuce Installer PHP 7 sous Debian 8

Par défaut, les dépôts de Debian 8 propose d'installer PHP 5.6. Si vous voulez la version 7, procédez ainsi.

  • Ajoutez un nouveau dépôt pour apt, en tant que super administrateur :
echo 'deb http://packages.dotdeb.org jessie all' > /etc/apt/sources.list.d/dotdeb.list
wget -O- https://www.dotdeb.org/dotdeb.gpg | apt-key add -
apt update
  • Installez PHP 7, avec les extensions que vous souhaitez. Probablement au moins gd, mcrypt, php-pear, intl :
apt-get -y install php7.0 libapache2-mod-php7.0 php-pear php7.0-gd php7.0-mcrypt php7.0-intl

Globalement, les paquets portent le même nom que ceux pour PHP 5.6.


Astuce Installation de PHP

Installation

PHP et ses extensions

Pour installer la version de PHP disponible par défaut sur le dépôt (PHP 5.6 pour Debian 8), procédez comme suit. Pour installer PHP 7, suivez cet article à la place.

  • Installez PHP via le gestionnaire de paquets :
sudo apt-get install libapache2-mod-php5
  • Installez les extensions dont vous avez besoin. Probablement au moins gd, mcrypt, php-pear, intl :
sudo apt-get install php5-gd php5-mcrypt php-pear php5-intl

Pour curl, il s'agit du paquet php5-curl.

Configuration de PHP

  • Modifiez le fichier /etc/php5/apache2/php.ini. A la fin du bloc Miscellaneaous, ajoutez la ligne suivante pour spécifier la locale à utiliser :
date.timezone = "Europe/Paris"
  • Redémarrez Apache :
sudo service apache2 restart

Vérification

  • Supprimez le fichier index.html de votre site (ex : /var/www/mon-site/index.html) et créez le fichier index.php à la place :
<?php
phpinfo();
?>
  • Appelez l'URL de votre site et vérifier qu'Apache vous retourne bien toute la configuration de PHP.

Composer

Si vous avez besoin de composer, installez-le via ces commandes :

sudo apt-get install curl 
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer   
 
# Vérification
composer --version

Astuce Installation d'Apache

Installation

Lancez simplement la commande suivante :

sudo apt-get install apache2

Configuration générale

Modification du charset

  • Éditez le fichier de configuration du charset :
sudo nano /etc/apache2/conf-available/charset.conf
  • Décommentez la ligne :
AddDefaultCharset UTF-8

Utilisateur Apache

Pour éviter des problèmes de droits, vous pouvez modifier l'utilisateur et le groupe unix utilisés par Apache.

Par défaut avec Debian, il s'agit de www-data:www-data.

Pour en changer, modifiez le fichier /etc/apache2/envvars avec les droits administrateur :

export APACHE_RUN_USER=phpuser 
export APACHE_RUN_GROUP=phpuser

Activation du module de réécriture d'URL

Pour activer le module rewrite d'Apache et redémarrez Apache, utilisez ces commandes :

sudo a2enmod rewrite
sudo service apache2 restart

Configuration propre à votre site

Initialisation de votre site

  • Créez le répertoire racine pour votre site :
cd /var/www
sudo mkdir mon-site
sudo chown -R phpuser:phpuser mon-site
  • Créez un fichier index.html à l'intérieur, contenant par exemple <h1>Hello world !</h1>

Configuration du virtual host

Si vous souhaitez accéder à votre site via un nom de domaine spécifique (plutôt que par son IP), ou si vous en avez besoin de plusieurs pour accéder à votre application, il vous faut configurer un virtual host.

Créez un nouveau fichier .conf dans le répertoire des sites disponibles d'Apache /etc/apache2/sites-available/. (Ex: /etc/apache2/sites-available/mon-site.conf).

<VirtualHost *:80>
    ServerAdmin admin@mon-site.com
    ServerName www.mon-site.com
    ServerAlias *.mon-site.com
    DocumentRoot /var/www/mon-site/
    <Directory /var/www/mon-site/>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/mon-site.log
    ServerSignature Off
</VirtualHost>

Explications :

  • ServerAdmin : Adresse email de la personne à prévenir en cas de problème côté Apache.
  • ServerName : Nom de domaine que vous souhaitez associer au serveur. Il doit être dans les DNS du serveur (ou si vous êtes en mode dev, dans votre fichier /etc/hosts).
  • ServerAlias : Autres domaines ou sous domaines qui prendront en compte le même fichier vHost.
  • DocumentRoot : Répertoire vers lequel Apache redirigera les adresses IP et ports spécifiés plus haut (*:80).
  • Directory : Cette instruction permet d'ajouter des options et règles au répertoire web :
    • FollowSymLinks -> Active le suivi des liens symboliques dans ce répertoire.

Activez votre virtual host, désactivez éventuellement celui par défaut puis redémarrez Apache :

sudo a2ensite mon-site
sudo a2dissite default
sudo service apache2 restart
Vérification

Appelez la page d'accueil de votre site via un navigateur ou wget depuis votre répertoire utilisateur :

cd ~
wget mon-site.com
cat index.html

 Vous devez retrouver le contenu de votre fichier index.html : <h1>Hello world !</h1>


Astuce Installation d'un environnement LAPP sous Debian

Cette suite d'articles donne un exemple d'installation d'un environnement LAPP sous Debian, destiné au développement (= pas pour la production). Il peut tout à fait servir de base pour un LAMP (= MySQL à la place de PostgreSQL)

Le wizard d'installation de Debian

Dans cet exemple les configurations choisies sont en italique.

  • Choisissez 64 bit install au boot sur le CD.
  • Choisissez la langue et la localisation -> France
  • Indiquez le nom de la machine (= celui visible sur le réseau) -> debian-server
  • Indiquez le domaine réseau -> (laisser vide si vous n'êtes pas dans un réseau d'entreprise, sinon renseignez-le)
  • Indiquez et confirmer le mot de passe root -> ****** 
  • Indiquez le nom de l'utilisateur courant à créer -> phpuser
  • Indiquez les identifiants (login/mot de passe) pour cet utilisateur -> phpuser/phpuser
  • Choisissez la méthode de partitionnement -> Assisté - utiliser un disque entier
  • Choisissez le disque à partitionner -> <le seul disponible>
  • Choisissez le schéma de partitionnement -> Tout dans une seule partition
  • Terminez le partitionnement et appliquez les changements
  • Appliquez les changements sur les disques
  • Configurez l'outil de gestion des paquets :
    • Langue -> France
    • Miroir -> ftp.fr.debian.org
    • Mandataire -> <vide>
  • Refusez l'envoi de statistiques à propos des paquets installés
  • Sélectionnez les ensembles de logiciels que vous voulez installer (au moins Serveur SSH) :
    • Environnement de bureau Debian (= mode graphique)
    • Serveur d'impression
    • Serveur SSH
    • Utilitaires usuels du système
  • Acceptez l'installation de GRUB
  • Continuez en démarrant le nouveau système

Modification du système

Installation de sudo

  • Connectez-vous en administrateur -> root/******
  • Installez la commande sudo :
apt-get install sudo

Configuration du sudo

Ajoutez l'utilisateur phpuser au groupe sudo :

adduser phpuser sudo

Autoriser la connexion SSH en root

Par défaut, Debian 8 n'autorise pas cette connexion, ce qui est gênant lors de l'utilisation d'un outil comme WinSCP, Filezilla ou Nautilus pour explorer les fichiers.

Pour l'autoriser, modifiez le fichier /etc/ssh/sshd_config et remplacer la ligne :

PermitRootLogin without-password

par

PermitRootLogin yes

Redémarrez ensuite le service SSH :

service ssh restart

Amélioration de la console

Modifier le fichier .bashrc permet d'améliorer l'affichage de la console et d'ajouter des alias de commande.

  • Connectez-vous avec l'utilisateur -> phpuser/phpuser
  • Modifiez le fichier .bashrc avec nano et décommentez les lignes suivantes :
alias ll='ls -l'
alias la='ls -1'
alias l='ls -CF'

Si vous voulez avoir une console colorée, décommentez la ligne suivante :

force_color_prompt=yes

et modifiez la ligne suivante en la remplaçant par celle du dessous :

#PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' 
PS1='\[\e[33;01m\]\u \[\033[31;01m\][\[\033[0;37m\]\w\[\033[31;01m\]] \$\[\033[00m\] '
  • Ajouter cette ligne à la fin du fichier, pour pouvoir exécuter les commandes de /usr/sbin facilement :
export PATH=$PATH:/usr/sbin
  • Enregistrez les modifications avec Ctrl+X

Mise à jour de la distribution et de la liste des paquets

  • Lancez les commandes suivantes pour procéder à la mise à jour :
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
  • Acceptez d'installer les éventuels paquets à mettre à jour
  • Modifiez le fichier /etc/apt/sources.list avec nano en tant qu'administrateur :
deb http://security.debian.org/ etch/updates main contrib non-free
  • Mettez à jour la liste des dépôts et installez les bibliothèques de base :
sudo apt-get update
sudo apt-get install build-essential

Autre

Installez les outils dont vous avez besoin (ex: Screen, ...).


Astuce Ajouter un bouton d'action en back-office

Lorsque vous êtes sur la page qui liste les types de contenu par exemple, il y a le bouton Ajouter un type de contenu en haut à gauche.

Plus généralement, lorsqu'on liste des éléments (nœuds, liens de menu, ...), on propose souvent un lien pour en ajouter de nouveaux.

Si vous utilisez les vues Drupal pour ajouter des pages de liste en back-office, vous vous voudrez probablement ce genre de bouton. Cela ne se fait pas dans la configuration de la vue, mais via un fichier my_module.links.action.yml. Par exemple :

# Article
node.add.article
  route_name: node.add
  route_parameters:
    node_type: article
  title: 'Ajouter un Temps Fort'
  appears_on:
    - view.my_view_article.display_1
    - view.other_view.display_name

Explication :

On indique

  • la route (et ses paramètres) vers laquelle devra pointer le bouton d'action
  • le libellé du bouton (title)
  • sur quelle(s) page(s) il devra apparaître (= ids de routes)

Remarque :

Pour une vue, l'id de la route est composée du préfixe 'view', du nom technique de la vue, puis du nom technique de l'affichage de la vue (une vue pouvant avoir plusieurs affichages).

Ces deux ID techniques sont visibles dans l'URL lorsque vous éditez un affichage d'une vue. Ex : http://www.mysite.fr/admin/structure/views/view/my_view_article/edit/display_1.


Astuce Le module Help

Le module Help fait partie du cœur de Drupal et est activé par défaut.

Il permet d'ajouter un message au haut de la page d'édition d'un contenu :

Module help

Pour cela il suffit d'éditer votre type de contenu, et de remplir la zone de texte sous le champ title (le HTML est accepté) :

Module help configuration

Pour que le message apparaisse dans le formulaire d'édition, il faudra que le bloc Aide soit activé dans une des régions de votre thème d'administration. C'est le cas pour celui par défaut (Seven).


Astuce Modifier un élément de liste dans un formulaire

Pour ajouter une classe CSS sur un élément de formulaire basique (input, select, ...), on ajoute la clé #attributes à son render array.

Par contre pas possible de le faire pour une liste de boutons radio par exemple. La classe s'ajoutera sur le conteneur à la place.

Il existe donc la clé #after_build pour remédier à ce problème (cf. documentation). Elle attend une liste de noms de fonction en valeur.

Chacune de ces fonctions sera exécutée après coup pour modifier le render array de l'élément.
À ce moment de l'exécution, les sous-éléments (ici les boutons radio) on déjà été ajoutés et peuvent donc être modifiés.

Par exemple dans ma méthode buildForm() :

$form['my_field'] = [
  '#type' => 'radios',
  '#title' => t('My field'),
  '#options' => [
    0 => t('No'),
    1 => t('Yes'),
  ],
  '#after_build' => ['_my_module_radio_add_class']
];

Et dans mon fichier my_module.module :

function _my_module_radio_add_class(array $element, FormState $form_state) {
  $options = array_keys($element['#options']);
 
  // Parcours des sous-éléments options
  foreach ($options as $values) {
    $element[$values]['#attributes']['class'][] = 'myclass';
  }
  return $element;
}

Astuce Rediriger en 404 ou 403

Si vous voulez rediriger l'utilisateur vers la page 404 ("Page introuvable") ou 403 ("Vous n'avez pas le droit d’accéder à cette page") de Drupal, vous faisiez sans doute ça en Drupal 7 :

return drupal_access_denied();
return drupal_not_found();

Voici l'équivalent pour Drupal 8 :

use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
throw new AccessDeniedHttpException();
throw new NotFoundHttpException();

Astuce Drupal dans un sous-répertoire

Si vous utilisez Drupal dans un sous-répertoire servi par Apache (ex : /var/www/html/mon_site), ou derrière un reverse proxy qui ajoute un contexte à l'URL (ex : http://mon-domaine.fr/mon-contexte) il est possible que seule la page d'accueil fonctionne.

Vous aurez alors une erreur 404 sur toutes les autres pages (ex : http://mon-domaine.fr/mon-contexte/user/login).

Il vous faut alors modifier le .htaccess à la racine du site, en modifiant la ligne :

# RewriteBase /

Décommentez-la et remplacer le / par le contexte ou le sous-répertoire. Ex :

# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
RewriteBase /mon-contexte