Administrer un serveur dédié – part 6 : Espace Web

Vous souhaitez installer Prestashop, WordPress ou créer votre site de A à Z ? et bien il vous faut un espace web que l’on va créer maintenant.

Le socle est présent puisque dans l’article précédent nous avons terminé l’installation du serveur Web.

Cette procédure est à répéter autant de fois que vous voulez, par exemple pour ma part j’ai :


———————————————————————————

27/04/2014 : Ajout de l’expiration du mot de passe au bout de 100 jours pour plus de sécurité (cmd chage)

29/06/2014 : Ajout de « Configurer le container avec un nom de domaine »

———————————————————————————

Accès Web et SFTP

Pour créer un hébergement comme j’utilise le mode userdir, on commence par ajouter un compte « blogtuto » dans le groupe www-data (group d’Apache)

useradd -g www-data -m blogtuto
passwd blogtuto
chage -M 100 blogtuto
chown -R root:www-data /home/blogtuto/
chmod -R 750 /home/blogtuto/
chown -R blogtuto:www-data /home/blogtuto/www/
chmod -R 750 /home/blogtuto/www/
Ajouter un compte

Avec ces quelques commande plein de choses sont faites :

  • Création d’un compte
  • Modification du mot de passe (pour en mettre un compliqué : 50 caractères avec majuscules, minuscules, chiffres et caractères spéciaux)
  • Création d’un répertoire personnel /home/blogtuto avec
    • /home/blogtuto/logs pour stocker les logs apache
    • /home/blogtuto/www pour stocker les fichiers web
  • Création d’une page web de bienvenue : index.html dans le dossier www
  • Mise à jour des droits pour autoriser Apache à servir les pages et le compte blogtuto à les modifier via le SFTP.

On peut déjà se connecter sur le SFTP (sftp://CT101_IP_PUBLIC:SSH_PORT) et modifier la page index.html ou créer des nouveaux fichiers dans le dossier www mais il n’est toujours pas possible de voir la page index.html car nous ne l’avons pas autorisé.

UserDir enabled blogtuto
vi /etc/apache2/apache2.conf

La ligne est à rajouter juste après « UserDir /home/*/www », un espace doit séparer chaque compte donc à la fin on peut avoir des choses comme ca :

# Configuration du module UserDir
UserDir disabled
UserDir /home/*/www
UserDir enabled blogtuto blogtuto2 blogtuto3
Configuration UserDir

Et recharger la configuration apache2

service apache2 reload
Recharger apache

Saisir http://CT101_IP_PUBLIC/~blogtuto dans votre navigateur préféré et vous devriez voir la page index.html.

 

Accès MySQL

On se connecte avec le compte root et le mot de passe que vous avez mis dans l’article précédent :

mysql -h localhost -u root -p
mysql > create database blogtutoDB;
mysql > grant all privileges on blogtutoDB.* to blogtuto@localhost identified by 'mypasswd';
mysql > flush privileges;
mysql > exit;
Création d'un accès MySQL

Avec ces commandes nous avons créé une nouvelle base de données blogtutoDB et avons attribués tous les droits sur cette base uniquement à un nouvel utilisateur blogtuto que nous créons avec le mot de passe passwd.

Si vous avez déjà mis en place les sauvegardes MySQL avec le tuto Administrer un serveur dédié – part 7 : Backup MySQL, pensez à rajouter les droits pour la sauvegarde automatique entre le grant initial et le flush privileges :

GRANT SELECT , INSERT , LOCK TABLES ON `blogtutoDB` . * TO 'mysql-backup-manager'@'localhost';
Ajouter la sauvegarde de la base en automatique

 

Configurer le container avec un nom de domaine

Une bonne pratique à avoir est de rajouter le nom de domaine dans le fichier host du container. Pour cela vous devez juste rajouter « blogtuto.com » sur la première ligne du fichier host après localhost :

vi /etc/hosts
Vous pouvez rajouter autant de domaines que vous le souhaitez séparé par des espaces.

 

Configurer le virtual host Apache avec un nom de domaine

La méthode de userdir est sympathique quand on a pas nom de domaine mais quand on en a un alors il faut configurer Apache pour reconnaître ce domaine et rediriger vers la bonne home.

Il faut donc créer un virtual host (nouveau fichier)

<VirtualHost *:80>
        ServerAdmin blogtuto@localhost
        ServerName www.blogtuto.com
        ServerAlias blogtuto.com

        DocumentRoot /home/blogtuto/www
        <Directory /home/blogtuto/www>
                Options None
                AllowOverride None
        </Directory>

        ErrorLog /home/blogtuto/logs/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /home/blogtuto/logs/access.log combined

</VirtualHost>
vi /etc/apache2/sites-available/01-blogtuto.com

Et pour le coup il y a du travail car beaucoup de configuration à faire et à expliquer.

Déjà le nom du fichier « 01-blogtuto.com » c’est une convention personnel :

  • On commence par 01, puis 02, … : Les virtual host sont pris dans l’ordre avec Apache donc si plusieurs correspondent c’est le premier qui sera pris. Donc on essaye de les classer au mieux.
  • Ensuite blogtuto.com pour la conf du domaine blogtuto.com c’est plus facile à ce souvenir mais c’est pas nécessaire techniquement tous les fichiers sont pris par apache

Pour le fichier de conf :

  • VirtualHost *:80 : On peut avoir plusieurs balise dans un fichier mais je préfère en avoir qu’un. Ici on dit que ce virtual host écoutera sur le port 80 (http et donc pas https) sur n’importe qu’elle IP comme le container en a qu’un çà sera toujours la même mais si vous avez plusieurs IP sur le même container il faut préciser
  • ServerAdmin : c’est l’adresse mail de contact qui recevra les messages d’erreurs donc mon utilisateur blogtuto@localhost
  • ServerName : La directive la plus importante qui va permettre d’identifier le virtual host à utiliser donc l’adresse la plus importante soit www.blogtuto.com ou blogtuto.com en fonction
  • ServerAlias : La directive alternative donc si vous avez mis www.blogtuto.com mettez blogtuto.com et inversement
  • DocumentRoot : Indique la racine quand on appel http://www.blogtuto.com/index.html avec DocumentRoot = /home/blogtuto/www, Apache traduit par le fichier /home/blogtuto/www/index.html (Ne pas mettre de slash à la fin)
  • Directory : On va mettre au moins une balise directory avec la même valeur que DocumentRoot et ensuite on peut rajouter d’autres si nécessaire. C’est dans cette directive qu’on va devoir mettre les configurations applicables pour un dossier/sous-dossier, … On reviendra plus tard sur les directives intéressantes à rajouter ou supprimer. On interdit tout pour le moment
  • ErrorLog et CustomLog : pour avoir des logs Apache dans le répertoire logs que nous avons créé. On se place au niveau warn pour recevoir un maximum d’information si on veut diagnostiquer un jour.

Pour prendre en compte nos modifications il faut activer le nouveau virtual host et recharger Apache :

a2ensite 01-blogtuto.com
service apache2 reload
Activer un site et recharger Apache

Encore plus loin avec Directory

AllowOverride

J’ai pris l’habitude de ne jamais autoriser AllowOverride donc le mettre à None pour une question de performance. Cette directive permet d’utiliser les fameux fichier .htaccess qui permette de réécrire la configuration d’Apache à la volée. Seulement voilà ça demande des ressources à Apache pour contrôler l’existence du fichier et modifier la configuration à la volée. Quand on a accès au serveur et que la configuration ne change pas souvent et qu’on a pas besoin que l’utilisateur choisisse les réglages c’est l’idéal. Si on a vraiment besoin de cet liberté alors je vous conseil de rajouter une directive très stricte. Je vous invite aussi à lire la doc Apache sur le sujet « Quand doit-on (ne doit-on pas) utiliser les fichiers .htaccess ? »

Donc pour résumer je n’utilise pas de fichiers htaccess. Toutes les directives que je trouve dans un htaccess je le rajoute dans la configuration de mon virtual host et comme ca je profite du cache d’Apache pour une configuration qui ne change jamais ou presque.

Pour WordPress :

<Directory /home/blogtuto/www>
  Options +SymLinksIfOwnerMatch -FollowSymLinks -ExecCGI -Includes -IncludesNOEXEC -Indexes -MultiViews
  AllowOverride None

  # BEGIN WordPress
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
  # END WordPress
</Directory>
Virtual Host Apache pour WordPress

 Forcer le WWW ou non

Il ne faut jamais que vos sites soient accessibles avec 2 URL différentes sinon les statistiques sont faussés. Donc il faut choisir entre www.blogtuto.com ou blogtuto.com.

Pour rediriger toutes les requêtes blogtuto.com vers www.blogtuto.com :

<Directory /home/blogtuto/www>
	Options +SymLinksIfOwnerMatch -FollowSymLinks -ExecCGI -Includes -IncludesNOEXEC -Indexes -MultiViews
	AllowOverride None

	# BEGIN Force WWW
	RewriteEngine On
	RewriteBase /
	RewriteCond %{HTTP_HOST} ^blogtuto.com [NC]
	RewriteRule ^(.*)$ http://www.blogtuto.com/$1 [L,R=301]
	# END Force WWW
</Directory>
Forcer WWW

 

Et inversement si vous voulez que toutes les requêtes www.blogtuto.com redirigent vers blogtuto.com :

<Directory /home/blogtuto/www>
	Options +SymLinksIfOwnerMatch -FollowSymLinks -ExecCGI -Includes -IncludesNOEXEC -Indexes -MultiViews
	AllowOverride None

	# BEGIN Force NO WWW
	RewriteEngine On
	RewriteBase /
	RewriteCond %{HTTP_HOST} !^blogtuto.com [NC]
	RewriteRule ^(.*)$ http://blogtuto.com/$1 [L,R=301]
	# END Force NO WWW
</Directory>
Force NO WWW

Leave a Comment.