Php:lamp

De Les Tutoriaux du WebMestre
Aller à : navigation, rechercher

Installation dun LAMP sous Ubuntu

TODO passage à des containers

  • Vagrant ou Docker. pour éviter de casser la configuration de mon poste de DEV !!! Merci XDEBUG !!!

Méthode Site Virtuel:

  • Un exemple:
#on édite un site virtuel qui contient:
root@jpmena-HP-ProDesk-600-G2-MT:/etc/apache2/sites-available# cat sjpmena.conf 
<VirtualHost *:80>
        ServerName jpmena.and
        ServerAlias jpmena.ovh

        ServerAdmin webmaster@localhost

        DocumentRoot "/home/jpmena/Consultant/jpmena/web"
	<Directory "/home/jpmena/Consultant/jpmena/web">
		Options Indexes FollowSymLinks ExecCGI
		AllowOverride All
		Order allow,deny
		Allow from all
		Require all granted
	</Directory>
        
        ErrorLog /var/log/apache2/jpmena.and-error.log
        
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        
        CustomLog /var/log/apache2/jpmena.and-access.log combined
        ServerSignature On
</VirtualHost>
#on active le site virtuel créé
root@jpmena-HP-ProDesk-600-G2-MT:/etc/apache2/sites-available# a2ensite sjpmena.conf 
Enabling site sjpmena.
To activate the new configuration, you need to run:
  service apache2 reload
root@jpmena-HP-ProDesk-600-G2-MT:/etc/apache2/sites-available# service apache2 reload
  • bien sûr que jpmena.and et jpmena.ovh pointent vers mon LAMP local:
root@jpmena-HP-ProDesk-600-G2-MT:/etc/apache2/sites-available# cat /etc/hosts | grep -i jpmena
127.0.1.1	jpmena-HP-ProDesk-600-G2-MT
127.0.1.1	jpmena.and	jpmena.ovh
127.0.1.1	d8jpmena.and	d8jpmena.ovh

Quelques réglages complémentaires

Augmentation de la mémoire php et du timeout apache

  • on modifie le php.ini associé au serveur web Apache de façon à avoir les valeurs ligne 9 et 18 ci dessous:
 1 root@jpmena-HP-ProDesk-600-G2-MT:/etc/php/7.0/apache2# diff -u php.ori09012017.ini php.ini | head -20
 2 --- php.ori09012017.ini	2016-07-27 21:31:57.000000000 +0200
 3 +++ php.ini	2017-03-08 13:58:14.443478675 +0100
 4 @@ -365,7 +365,7 @@
 5  ; Maximum execution time of each script, in seconds
 6  ; http://php.net/max-execution-time
 7  ; Note: This directive is hardcoded to 0 for the CLI SAPI
 8 -max_execution_time = 30
 9 +max_execution_time = 300
10  
11  ; Maximum amount of time each script may spend parsing request data. It's a good
12  ; idea to limit this time on productions servers in order to eliminate unexpectedly
13 @@ -386,7 +386,7 @@
14  
15  ; Maximum amount of memory a script may consume (128MB)
16  ; http://php.net/memory-limit
17 -memory_limit = 128M
18 +memory_limit = 1024M
19  
20  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
21  ; Error handling and logging ;

Créer une base Mysql en local

Création en ligne de commande d'une base de test avec un utilisateur de même nom

  • Tout est expliqué sur ce BLOG
  • Dans mon cas la base et l'utilisateur se nomment d8jpmena (Il s'agit de mon BLOG sous Drupal 8)
jpmena@jpmena-HP ~/CONSULTANT/BLOGWP_SAUV_TOTALE_PROD_13_06_2016 $ mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.12-0ubuntu1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE d8jpmena CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0,04 sec)

mysql> GRANT ALL ON `d8jpmena`.* TO `d8jpmena`@localhost IDENTIFIED BY 'd8jpmena';
Query OK, 0 rows affected, 1 warning (0,02 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d8jpmena           |
| dru8rif            |
| economie           |
| igpde              |
| mysql              |
| performance_schema |
| phpmyadmin         |
| rif                |
| sys                |
+--------------------+
10 rows in set (0,01 sec)

mysql> exit;
Bye

Script d'automatisation de création d'une base de test avec un utilisateur de même nom

  • le script:
jpmena@jpmena-HP ~/Documents/M2ITecPHPAvance $ cat createUserDatabase.sh 
#!/usr/bin/env bash

#l'accès à l'administration MYSQL en ligne de commande
export MYSQLHOST='localhost'
export MYSQLUSER='root'
export MYSQLPASSWD='root'

#la base que je veux créer
export MYDB='doctrinedb'
export MYDBUSER=${MYDB}
export MYDBPASS=${MYDB}

#la commande à passer

#cat <<EOF
mysql -u${MYSQLUSER} -p${MYSQLPASSWD} -h ${MYSQLHOST} <<EOF                                                     
CREATE DATABASE IF NOT EXISTS ${MYDB} CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL ON \`${MYDB}\`.* TO \`${MYDBUSER}\`@localhost IDENTIFIED BY '${MYDBPASS}';
EOF
resmysql=$?

echo "code retour de l'opération ${resmysql}"
  • exécution du script en question :
jpmena@jpmena-HP ~/Documents/M2ITecPHPAvance $ ./createUserDatabase.sh 
mysql: [Warning] Using a password on the command line interface can be insecure.
code retour de l'opération 0

Remote Debugging via Xdebug

installation de Xebug (php7):

  • Installation:
    • (ne pas oublier de redémarrer apache / pour prise en compte)
#installation Ubuntu du paquet correpondant 
root@jpmena-HP:~# apt-get install php-xdebug 
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
  linux-headers-4.4.0-21 linux-headers-4.4.0-21-generic linux-headers-4.4.0-22 linux-headers-4.4.0-22-generic
Veuillez utiliser « apt autoremove » pour les supprimer.
Les NOUVEAUX paquets suivants seront installés :
  php-xdebug
0 mis à jour, 1 nouvellement installés, 0 à enlever et 22 non mis à jour.
Il est nécessaire de prendre 316 ko dans les archives.
Après cette opération, 1 255 ko d'espace disque supplémentaires seront utilisés.
Réception de:1 http://fr.archive.ubuntu.com/ubuntu xenial/universe amd64 php-xdebug amd64 2.4.0-1 [316 kB]
316 ko réceptionnés en 0s (1 383 ko/s)
Sélection du paquet php-xdebug précédemment désélectionné.
(Lecture de la base de données... 317981 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../php-xdebug_2.4.0-1_amd64.deb ...
Dépaquetage de php-xdebug (2.4.0-1) ...
Paramétrage de php-xdebug (2.4.0-1) ...
#penser à redémarrer apache !!!!
root@jpmena-HP:~# service apache2 restart

Paramétrage spécifique pour XDebug

  • même si on se connecte depuis NetBeans le même PC, il faut autoriser le remote Debugging
    • tout en limitant le debugging aux clients locaux (localhost)
  • Drupal demande que le niveau de récursivité de XDebug dépasse la valeur par défaut,
    • on doit la spécifier: il est recommandé de la porter à 500 pour Drupal8
#on va dans la partie configuration de php7!!!
root@jpmena-HP:~# cd /etc/php/7.0/
#on voit une partie cliente (cli) et une partie serveur (apache2)
root@jpmena-HP:/etc/php/7.0# ll
total 20
drwxr-xr-x 5 root root 4096 avril 26 15:08 ./
drwxr-xr-x 3 root root 4096 avril 26 15:08 ../
drwxr-xr-x 3 root root 4096 juin   8 09:32 apache2/
drwxr-xr-x 3 root root 4096 juin   8 13:57 cli/
drwxr-xr-x 2 root root 4096 juin  29 16:44 mods-available/
#on voit que notre module x-debug.ini a été activé
root@jpmena-HP:/etc/php/7.0# ll apache2/conf.d/ | grep debug
lrwxrwxrwx 1 root root   38 juin  29 16:44 20-xdebug.ini -> /etc/php/7.0/mods-available/xdebug.ini
##contenu initial
root@jpmena-HP:/etc/php/7.0# cat mods-available/xdebug.ini 
zend_extension=xdebug.so
##on sauvegarde ce contenu de départ
root@jpmena-HP:/etc/php/7.0# cp -pv mods-available/xdebug.ini mods-available/xdebug.ini.ori29062016
'mods-available/xdebug.ini' -> 'mods-available/xdebug.ini.ori29062016'
#on va compléter ce contenu
root@jpmena-HP:/etc/php/7.0# vim mods-available/xdebug.ini
##pour obtenir
root@jpmena-HP:/etc/php/7.0# diff -u mods-available/xdebug.ini mods-available/xdebug.ini.ori29062016
--- mods-available/xdebug.ini	2016-06-29 17:05:09.387892833 +0200
+++ mods-available/xdebug.ini.ori29062016	2016-03-14 23:53:29.000000000 +0100
@@ -1,8 +1 @@
 zend_extension=xdebug.so
-
-xdebug.remote_enable=On
-xdebug.remote_host="localhost"
-xdebug.remote_port=9000
-xdebug.remote_handler="dbgp"
-
-xdebug.max_nesting_level=500
#on redémarre le serveur apache pour prendre en compte cette nouvelle configuration php
root@jpmena-HP:/etc/php/7.0# service apache2 restart

On vérifie la configuration spécifique de XDebug

  • on crée un php d'affichage de la configuration à la racine apache:
root@jpmena-HP:/etc/php/7.0# cd /var/www/html/
root@jpmena-HP:/var/www/html# ll
total 20
drwxr-xr-x 2 root root  4096 sept. 11  2015 ./
drwxr-xr-x 3 root root  4096 sept. 11  2015 ../
-rw-r--r-- 1 root root 11321 sept. 11  2015 index.html
root@jpmena-HP:/var/www/html# echo "<?php phpinfo(); ?>" > info.php
  • on accède alors à la configuration php via http://localhost/info.php
  • la page est longue et au niveau du chapitre x-debug (les modules php sont classés par ordre alphabétique), on retrouve nos variables ...
  • Autre façon de paramétrer le fichier xdebug.ini:
    • Je commente la ligne 6 ci dessous !
    • Je de-commente la ligne 5 ci dessous
  • Le serveur qui a un LAMP avec un XDEBUG ainsi paramétré, peut recevoir des demande de pas à pas sur le code PHP
    • que l'IDE soit installé localement ou qu'il soit présent sur l'hôte dans le cas où notre LAMP/XDEBUG se trouve sur une machine virtuelle/ conteneur
 1 root@jpmena-HP-ProDesk-600-G2-MT:/etc/php/7.0/mods-available# cat xdebug.ini 
 2 zend_extension=xdebug.so
 3 
 4 xdebug.remote_enable=On
 5 xdebug.remote_connect_back=1
 6 #xdebug.remote_host=localhost
 7 xdebug.remote_port=9000
 8 xdebug.remote_handler="dbgp"
 9 
10 xdebug.max_nesting_level=500
11 # ne pas oublier de redémarrer Apache une fois les modifications effectuées
12 root@jpmena-HP-ProDesk-600-G2-MT:/etc/php/7.0/mods-available# service apache2 restart

Se connecter avec NetbBeans/XDebug