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

Vincent Dauce • February 15, 2014

admin

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)

Ajouter un compte:

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/

Avec ces quelques commande plein de choses sont faites :

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é.

vi /etc/apache2/apache2.conf:

UserDir enabled blogtuto

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 UserDir:

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

Et recharger la configuration apache2

Recharger apache:

service apache2 reload

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 :

Création d'un accès MySQL:

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;

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 :

Ajouter la sauvegarde de la base en automatique:

GRANT SELECT , INSERT , LOCK TABLES ON `blogtutoDB` . * TO 'mysql-backup-manager'@'localhost';

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)

vi /etc/apache2/sites-available/01-blogtuto.com:

<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>

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 :

Pour le fichier de conf :

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

Activer un site et recharger Apache:

a2ensite 01-blogtuto.com
service apache2 reload

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 :

Virtual Host Apache 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>

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 :

Forcer WWW:

<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>

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

Force NO WWW:

<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>