Dossier de téléchargement sur stockage externe (Plesk) avec shell chrooted

Lecture de 2 minutes

Prérequis

  • Comme les symlinks ne fonctionnent pas comme prévu dans un environnement chrooted, on doit mounter le disque dans un dossier de l'envirionnement chrooted. Par exemple :
mount --bind /source /destination

Variables utilisées

  • Subscription name : (ex.: jmcouillard.com)
  • Domain name : (ex.: jmcouillard.com)
  • user:group : user:group (ex.: jmcouillard:psacln)
  • user:group : user:group (ex.: jmcouillard:psacln)
  • hostname : (ex.: jmcouillard.com, 66.223.63.12)

Étape 1 : Copier le dossier de fichier

Drupal 9

mkdir /storage/var/www/vhosts/<subscription>/
mkdir /storage/var/www/vhosts/<subscription>/<domain>/
mkdir /storage/var/www/vhosts/<subscription>/<domain>/files/
cp -R /var/www/vhosts/<subscription>/httpdocs/<domain>/web/sites/default/files/** /storage/var/www/vhosts/<subscription>/<domain>/files/
chown -R <user:group> /storage/var/www/vhosts/<subscription>/
rm -Rf /var/www/vhosts/<subscription>/httpdocs/<domain>/web/sites/default/files
mkdir /var/www/vhosts/<subscription>/httpdocs/<domain>/web/sites/default/files
chown -R <user:group> /var/www/vhosts/<subscription>/httpdocs/<domain>/web/sites/default/files
chmod 755 -R /var/www/vhosts/<subscription>/httpdocs/<domain>/web/sites/default/files
mount --bind /storage/var/www/vhosts/<subscription>/<domain>/files/ /var/www/vhosts/<subscription>/httpdocs/<domain>/web/sites/default/files

Drupal 7

mkdir /storage/var/www/vhosts/<subscription>/
mkdir /storage/var/www/vhosts/<subscription>/<domain>/
mkdir /storage/var/www/vhosts/<subscription>/<domain>/files/
cp -R /var/www/vhosts/<subscription>/httpdocs/<domain>/sites/default/files/** /storage/var/www/vhosts/<subscription>/<domain>/files/
chown -R <user:group> /storage/var/www/vhosts/<subscription>/
rm -Rf /var/www/vhosts/<subscription>/httpdocs/<domain>/sites/default/files
mkdir /var/www/vhosts/<subscription>/httpdocs/<domain>/sites/default/files
chown -R <user:group> /var/www/vhosts/<subscription>/httpdocs/<domain>/sites/default/files
chmod 755 -R /var/www/vhosts/<subscription>/httpdocs/<domain>/sites/default/files
mount --bind /storage/var/www/vhosts/<subscription>/<domain>/files/ /var/www/vhosts/<subscription>/httpdocs/<domain>/sites/default/files

Wordpress

mkdir /storage/var/www/vhosts/<subscription>/
mkdir /storage/var/www/vhosts/<subscription>/<domain>/
mkdir /storage/var/www/vhosts/<subscription>/<domain>/uploads/
cp -R /var/www/vhosts/<subscription>/httpdocs/<domain>/wp-content/uploads/** /storage/var/www/vhosts/<subscription>/<domain>/uploads/
chown -R <user:group> /storage/var/www/vhosts/<subscription>/
rm -Rf /var/www/vhosts/<subscription>/httpdocs/<domain>/wp-content/uploads/
mkdir /var/www/vhosts/<subscription>/httpdocs/<domain>/wp-content/uploads
chown -R <user:group> /var/www/vhosts/<subscription>/httpdocs/<domain>/wp-content/uploads/
chmod 755 -R /var/www/vhosts/<subscription>/httpdocs/<domain>/wp-content/uploads/
mount --bind /storage/var/www/vhosts/<subscription>/<domain>/uploads/ /var/www/vhosts/<subscription>/httpdocs/<domain>/wp-content/uploads/

Étape 2 : Ajouter le mount automatiquement au démarrage

Option 1 : utiliser un script au démarrage

Il s'agit de créer un fichier .sh qui sera exécuté au démarrage du serveur.

Sur le serveur, créer un fichier .sh et lui accorder les autorisations d'exécution (744). Par exemple : /root/startup-mount-script.sh. Ensuite, remplir le fichier avec chacun des dossier à reconnecter au démarrage.

Exemple pour Drupal :

mount --bind /storage/var/www/vhosts/<subscription>/<domain>/files/ /var/www/vhosts/<subscription>/httpdocs/<domain>/sites/default/files

Exemple pour Wordpress :

mount --bind /storage/var/www/vhosts/<subscription>/<domain>/uploads/ /var/www/vhosts/<subscription>/httpdocs/<domain>/wp-content/uploads

Pour exécuter le script au démarrage, l est possible d'y arriver simplement en utilisant Plesk. Dans la section Scheduled tasks, créer un tâche avec comme paramètre de temporalité @reboot :

Plesk scheduled task screenshot

Option 2 : la vraie méthode, risquée (fstab)

Dans le fichier /etc/fstab, ajouter la ligne suivante sous la forme /source /destination none bind. Utilisez la commande suivante pour automatiser l'ajout de la ligne :

Exemple pour Drupal :

echo '/storage/var/www/vhosts/<subscription>/<domain>/files/ /var/www/vhosts/<subscription>/httpdocs/<domain>/sites/default/files    none    bind' >> /etc/fstab

Exemple pour Wordpress :

echo '/storage/var/www/vhosts/<subscription>/<domain>/uploads/ /var/www/vhosts/<subscription>/httpdocs/<domain>/wp-content/uploads    none    bind' >> /etc/fstab

Attention : un fichier fstab qui contient des dossiers non existants ou non valide empêchera le serveur de démarrer!!!