Logo Khaganat
Traductions de cette page?:

Ceci est une ancienne révision du document !


LAMP

LAMP est l'acronyme de Linux Apache Mysql Php.

Pour le côté “Linux” de Lamp, tout dépende de votre hébergement et de vos préférences. On conseille aux débutants de prendre une Debian Stable, qui est robuste, sécurisée et pas trop compliquée. Les experts sont aussi nombreux à rester sous cette distribution pour leurs serveurs !

Une bonne part de cette doc se base sur la documentation Ubuntu concernant LAMP.

Installer les paquets de base.

Pour Apache1) :

sudo apt install apache2

Voir aussi Sécurité : Apache2

Pour PHP

sudo apt install php php-gd php-imagick php-mcrypt php-curl php-intl

Pour Mariadb2)

sudo apt install mariadb-server mariadb-client

Ces paquets installent les autres dépendances utiles.

Pour php, les modules complémentaires sont ceux qui nous sont utiles sur Khaganat, mais suivant les CMS ils peuvent être inutiles, ou avoir besoin d'être complétés.

Se rendre à l'adresse du serveur et admirer la page “It works”. Ça veut dire que c'est installé.

Apache

Apache est en principe fonctionnel de base, mais il y a quelques petites astuces utiles pour une configuration similaire à Khaganat.

Activer la réécriture des URLs

Pour la ferme de wiki ou le pastebin (entre autre), il faut activer la réécriture des URLs.

Lancez la commande :

sudo a2enmod rewrite

Obsolète ? activer le module devrait suffire, puis ajouter l'option dans les vhost qui le demandent…

Ensuite, éditez /etc/apache2/apache2.conf et ajoutez à la fin (s'il n'y est pas):

<ifModule mod_rewrite.c>
RewriteEngine On
</ifModule>

Puis vérifier que dans le fichier /etc/apache2/sites-available/monsite.conf, l'option “AllowOverride” est sur “All” pour les parties visés par la réécriture d'url (tout le dossier /var/www pour pas se compliquer la tâche) :

Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all 

N'oubliez pas de relancer Apache :

sudo apachectl -t && sudo apachectl graceful

Modifier les urls pour aller aux dossiers (Alias)

Avec une configuration basique, Apache indique qu'il faut lire le répertoire /var/www comme répertoire de base du site, chaque dossier se rajoutant à l'adresse. Par exemple si votre dossier www est organisé de la façon suivante :

  • www
    • dossier1
      • page1.html

Alors pour accéder via le web à page1 il faudra mettre dans la barre d'adresse du navigateur www.mon_site.net/dossier1/page1.html

On change ça en faisant des alias dans le fichier /etc/apache2/sites-enable/000-default.conf, de cette façon :

Alias /adresse /var/www/dossier1
<Directory /var/www/dossier1>
	Options Indexes FollowSymLinks MultiViews
	AllowOverride All
	Order allow,deny
	Allow from all
</Directory>

Changez /adresse par ce que vous voulez ; si c'est juste la barre / alors ce sera la racine du site (ce qu'on verra en tapant www.mon_site.net/). Vous pouvez aussi pointer vers des adresses hors de /var/www , par exemple pointer vers home/user/monsite, ce qui vous permet de travailler dans un répertoire avec des droits utilisateurs basique.

Pour un site accessible à tous, les options de cet alias sont bonnes.

Relancer Apache

Vérifier avant tout que la syntaxe est propre :

sudo apachectl -t

Pour relancer le serveur apache :

sudo apachectl graceful

Doc d'Apache : Redémarre le démon Apache httpd en douceur. Si le démon n'est pas en cours d'exécution, il est démarré. À la différence d'un redémarrage normal, les connexions en cours ne sont pas fermées. Comme effet de bord, les anciens fichiers journaux ne seront pas fermés immédiatement. Cela signifie que si l'on utilise un script de rotation des journaux, un délai suffisant sera nécessaire afin d'être sûr que les fichiers journaux seront bien fermés avant leur traitement par le script de rotation. Cette option vérifie automatiquement les fichiers de configuration (de la même manière que l'option configtest ) avant de lancer le redémarrage, afin d'être sûr que le fonctionnement du démon ne sera pas compromis. Équivalent à apachectl -k graceful.

Droits sur www

Plusieurs possibilités pour permettre, en tant qu'utilisateur Lambda3), de modifier ce qui se trouve dans le dossier /var/www.

Le plus simple et rapide est d'attribuer les droits de ce dossier au groupe www-data, et de mettre lambda dans le groupe www-data.

sudo adduser lambda www-data
chown -R www-data:www-data /var/www

Méthode alternative :

Pour ajouter l'utilisateur lambda à www-data, il y a aussi la commande

usermod -a -G www-data lambda

Les deux sont similaires.

Relancer la session pour que les droits soient pris en compte pour l'utilisateur en cours.

Il vaut mieux laisser le groupe www-data gérer les droits, de base, parce que sinon c'est un beau bazar. Ajouter l'utilisateur “lambda” dans ce groupe permet de modifier tout sans se prendre la tête.

La sécurité voudrait sans doute que www-data n'aie pas les droits, mais cela demande de bien tout comprendre, sinon apache va juste tout bloquer. Donc, ici, faites simple.

Si certains cms posent problèmes, la suite de commande suivante sur le dossier en question peut réattribuer les droits à www-data et permettre de les résoudre (à lancer en étant root) :

chgrp -R www-data Dossier
chown -R www-data Dossier
chmod -R g+w Dossier

chgrp pour réaffecter le groupe propriétaire, chown pour changer le propriétaire tout court (moins important, en théorie chgrp devrait déjà régler la plupart des soucis), chmod pour donner les bonnes permissions de lecture/écriture sur le dossier (g pour groupe, + pour ajouter, w pour write, donc “écrire”). L'option -R permet la récursivité (que le changement s'applique dans les sous-dossiers).

Proxy

Certains services sont accessibles via des ports particuliers. C'est ce que fait Etherpad par exemple : lors de son installation, il est accessible à l'adresse http://monserveur.com:9001.

Pour qu'on puisse y accéder via l'adresse web http://monserveur.com/pad, il faut mettre un proxy en place dans Apache.

Commencer par activer les modules de proxy :

a2enmod proxy proxy_http

Puis ajouter ce genre d'information dans /etc/apache2/sites-availables/monsite.conf :

<VirtualHost *:80>

  ProxyVia On
  ProxyRequests Off
  ProxyPass /pad/ http://localhost:9001/
  ProxyPassReverse /pad/ http://localhost:9001/
  ProxyPreserveHost on
  <Proxy *>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Proxy>

</VirtualHost>

Relancez le service apache

sudo apachectl -t && sudo apachectl graceful

Votre etherpad devrait être accessible à la bonne adresse !

Astuces diverses

Configuration personnalisée

On peut se faire un fichier de configuration appelant diverses modifs sur tous les sites, par exemple dans /etc/apache2/conf-available/bidouilles.conf.

Ensuite on peut l'appeler dans chaque config de site en ajoutant la ligne suivante (dans /etc/apache2/sites-enabled/monsite-le-ssl.conf) :

Include /etc/apache2/conf-available/bidouilles.conf

Possible de l'activer globalement aussi, sans doute ?

Virer le tracker de Facebook

Quand on partage un lien sur Facebook, et qu'on arrive sur le site, Facebook fait de l'injection pour suivre ses internautes (à voir si c'est encore le cas aujourd'hui). On peut régler ça au niveau d'Apache et mettre Facebook dehors, en ajoutant cela dans un fichier de conf :

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{QUERY_STRING} ^(.*)(?:^|&)fbclid=(?:[^&]*)((?:&|$).*)$ [NC]
  RewriteCond %1%2 (^|&)([^&].*|$)
  RewriteRule ^(.*) $1?%2 [R=301,L]
</IfModule>

Il faut bien sûr avoir le module rewrite activé.

Mariadb (ex mysql)

Installation

Le fonctionnement de Mariadb (remplaçant Mysql) a un peu évolué et peut rendre certains tutoriels obsolètes. Entre autre, plus de mot de passe pour root, qui en contrepartie n'est plus accessible que via localhost, ce qui casse tout pour phpmyadmin.

Pour rappel, pour l'installation :

sudo apt install mariadb-server mariadb-client

Un tutoriel expliquant comment configurer mariadb : Debian 9 Stretch : installer et configurer MariaDB

Pour résumer… lancez la commande suivante (en tant que root : sudo su root, ça ne marchera pas sinon) et choisissez les réponses avec précaution :

mysql_secure_installation

Pour certains soucis, les commandes suivantes peuvent aider. Ou tout casser, donc à faire uniquement si vous avez un problème. Je note ça là pour le retrouver en cas de besoin…

mysql -u root -p mysql
SELECT plugin FROM user WHERE user='root';
UPDATE user SET plugin='' WHERE user='root';
FLUSH PRIVILEGES;
EXIT;

Phpmyadmin

Installation

Phpmyadmin est considéré comme une potentielle faille de sécurité et s'en passer serait mieux. En même temps, se passer de base de données serait l'idéal…

Bref, en dépit de ces considérations, phpmyadmin est une façon bien pratique de gérer une base de donnée quand on a peu de connaissances, parce que ça assiste bien le travail. Donc… on va tenter de l'installer.

sudo apt-get install phpmyadmin

Sélectionner “apache” dans les options, puis pour la base de donnée, le laisser faire.

Veuillez indiquer le mot de passe pour le compte d'administration qui servira à créer la base de données MySQL ainsi que les utilisateurs.    
Mot de passe de l'administrateur de la base de données :

C'est le mot de passe root.

Choisissez le mot de passe de la base de donnée… et n'oubliez pas de le faire passer de façon sécurisée aux autres admins.

Localisation web

Par défaut, phpmyadmin est accessible à l’adresse site.net/phpmyadmin, ce qui aide un utilisateur malveillant à trouver la porte. On peut le modifier via le fichier /etc/apache2/conf.d/phpmyadmin.conf, en changeant l'alias par défaut :

Alias /phpmyadmin /usr/share/phpmyadmin

pour, par exemple :

Alias /ploufphpmyadmin /usr/share/phpmyadmin

Le simple ajout du “plouf” devant devrait déjà éviter les attaques automatiques !

Relancer Apache pour que ce soit pris en compte.

Avoir un autre login que “root” serait aussi bien. Mais peut-on le changer facilement ?

Importer une base de donnée

Pour importer une base de donnée via phpmyadmin (par exemple celle du forum, sauvée avant), il faut créer la base, lui associer un utilisateur qui aura les accès sur cette base uniquement, puis importer le .sql sauvegardé.

Si la base est trop grosse, il y aura une erreur. Modifier /etc/php5/apache2/php.ini pour augmenter la taille maximale autorisée. phpmyadmin fait une erreur mettant en lien ce qu'il faut modifier.

Diverses commandes Mysql

Création d'un utilisateur et d'une base mysql pour les différents services :

Ouvrir mysql en ligne de commande mysql

$ mysql -u root -p 

Le mot de passe sera demandé.

Pas de mot de passe ? pas de souci. Il suffit de passer en root et de se connecter directement

sudo -i
mariadb

et hop vous devriez avoir le prompt.

Lister les bases de données

show databases; 

Créer une base de données :

mysql> create database MaBaseDeDonnées ; 

Lister les utilisateurs :

select user,host,password from mysql.user; 

Créer un utilisateur et lui donner des droits d'accès à la base sans mot de passe mais uniquement en local :

mysql> GRANT ALL ON MaBaseDeDonnées.* TO Utilisateur@localhost ; 

Faire la même chose mais avec un mot de passe :

mysql> GRANT ALL PRIVILEGES ON MaBaseDeDonnées.* TO Utilisateur@localhost IDENTIFIED BY 'MotDePasse' ; 

Ne pas oublier de mettre à jour la base après des modifications:

mysql> FLUSH PRIVILEGES; 

Ressortir du mode console :

exit;

Sauvegardes

1)
Vous pouvez aussi installer autre chose, comme Nginx, mais c'est plus du “LAMP” (on parle alors de LEMP).
2)
Vous pouvez installer Mysql au lieu de Mariadb, mais c'est moins bien…
3)
oui, notre utilisateur test s'appelle “Lambda”.
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/lamp.1685341708.txt.gz · Dernière modification : 2023/05/29 08:28 de zatalyz

Licences Mentions légales Accueil du site Contact