PHP 8.2 FPM et PhpMyAdmin

On a installé jusqu’à maintenant apache2, postgresql, certbot (letsencrypt), mysql ou mariadb, mais nous n’avons pas d’outil visuel pour administrer mysql. Autant en desktop j’utilise des outils tels que DbVisualizer, autant pour mysql sur un serveur je préfère utiliser phpMyAdmin pour ne pas avoir de port MySQL ouvert à l’exterieur.

Pour ce faire, il faudrait tout d’abord avoir PHP qui tourne sur le serveur. L’une des raison qui nous ont poussé à installer ce nouveau serveur est d’ailleurs le fait que Debian 12 contient PHP en version 8.2 – nos autres serveurs étant des anciennes Ubuntu et Debian avec tout un tas de truc tournant dessus, on ne peut pas se permettre de migrer vers une version plus récente juste pour PHP et l’option d’installer les version fournies par le PPA d’ondrej ne me réjouie pas sur un serveur en Prod.

On passe donc à la partie installation de PHP:

apt install php8.2-fpm php8.2-gd php8.2-mysql php8.2-imap php8.2-cli libapache2-mod-fcgid php-pear mcrypt imagemagick php8.2-curl php8.2-intl php8.2-pspell php8.2-sqlite3 php8.2-tidy php8.2-xmlrpc php8.2-xsl memcached php-memcache php-imagick php8.2-zip php8.2-mbstring memcached php8.2-soap php8.2-opcache php-apcu php8.2-mcrypt

Il existe bien entendu d’autre paquets contenant des modules PHP disponibles que vous pouvez installer en fonction de vos besoins.

On créé donc un un sous domaine, ainsi qu’un certificat SSL Letsencrypt tel que décrit dans les articles précédents et un virtualhost /etc/apache2/site-available/001-com.toto.phpmyadmin.conf sous apache :

<VirtualHost *:80>
        ServerName phpmyadmin.toto.com
        ServerAdmin webmaster@localhost
        DocumentRoot /srv/www/com.toto.phpmyadmin/public
        <Directory /srv/www/com.toto.phpmyadmin/public/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Require all granted
        </Directory>
        <IfModule mod_ssl.c>
                Include /etc/apache2/conf-available/options-force-ssl.conf
        </IfModule>
        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/com.toto.phpmyadmin-error.log
        CustomLog ${APACHE_LOG_DIR}/com.toto.phpmyadmin-access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName phpmyadmin.sasedev.com
        ServerAdmin webmaster@localhost
        DocumentRoot /srv/www/com.toto.phpmyadmin/public
        <Directory /srv/www/com.toto.phpmyadmin/public/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Require all granted
        </Directory>
        Header always set Strict-Transport-Security "max-age=500; includeSubDomains; preload"
        <IfModule mod_expires.c>
                ExpiresActive Off
        </IfModule>
        Include /etc/apache2/conf-available/letsencrypt-include.conf
        SSLCertificateKeyFile    /etc/letsencrypt/live/phpmyadmin.toto.com/privkey.pem
        SSLCertificateFile       /etc/letsencrypt/live/phpmyadmin.toto.com/cert.pem
        SSLCertificateChainFile  /etc/letsencrypt/live/phpmyadmin.toto.com/chain.pem
        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/com.toto.phpmyadmin-error.log
        CustomLog ${APACHE_LOG_DIR}/com.toto.phpmyadmin-access.log combined
</VirtualHost>
</IfModule>

que l’on activera par la suite.

On passe donc maintenant à la création de répertoires au téléchargement de phpMyAdmin :

sudo -u www-data mkdir /srv/www/com.toto.phpmyadmin
sudo -u www-data wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip -P /srv/www/com.toto.phpmyadmin/
sudo -u www-data unzip /srv/www/com.toto.phpmyadmin/phpMyAdmin-5.2.1-all-languages.zip -d /srv/www/com.toto.phpmyadmin/
sudo -u www-data mv /srv/www/com.toto.phpmyadmin/phpMyAdmin-5.2.1-all-languages/ /srv/www/com.toto.phpmyadmin/public

Nous pouvons maintenant activer le nouveau virtualhost et redémarrer apache.

Votre application web phpMyAdmin étant maintenant en ligne, il est temps maintenant de vous y connecter en utilisant les paramètres de compte choisies lors de l’installation du serveur de base de donnée.

Créez une base de donnée phpmyadmin, puis un compte “pma” limité à une connexion locale et ayant les droits d’administration de cette base de donnée. On peuple par la suite la base de donnée en utilisant le script fourni par phpMyAdmin :

mysql -u root -p password < /srv/www/com.toto.phpmyadmin/public/sql/create_tables.sql

il ne nous reste plus qu’à créer le fichier /srv/www/com.toto.phpmyadmin/public/config.inc.php qui contiendra les paramètres :

<?php
declare(strict_types=1);

/**
 * Servers configuration
 */
$i = 0;
/**
 * First server
 */
$i++;
$cfg['Servers'][$i]['verbose'] = '';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = 3306;
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Servers'][$i]['hide_db'] = '^(mysql|phpmyadmin|information_schema|performance_schema|sys)$';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controluser'] = 'phpmyadmin';
$cfg['Servers'][$i]['controlpass'] = 'monSuperPasswordDeLaMortQuiTue';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
//$cfg['Servers'][$i]['tracking_version_auto_create'] = true;
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['MaxTableUiprefs'] = 1000;
/* End of servers configuration */

$cfg['blowfish_secret'] = 'da6dd27d0d8494ac5a796dfd037c1b1d'; // use https://standingtech.com/blowfish-salt-generator-online/
$cfg['DefaultLang'] = 'fr'; // en
$cfg['ServerDefault'] = 1;
$cfg['TempDir'] = "../var/tmp/";
$cfg['UploadDir'] = "../var/upload";
$cfg['SaveDir'] = "../var/saves";
$cfg['SessionSavePath'] =  "../var/sessions/";
$cfg['DisableShortcutKeys'] = true;
$cfg['MaxDbList'] = 1000;
$cfg['MaxTableList'] = 2500;
$cfg['ShowHint'] = true;
$cfg['MaxCharactersInDisplayedSQL'] = 10000;
$cfg['QueryHistoryDB'] = true;
$cfg['QueryHistoryMax'] = 1000;
$cfg['DefaultConnectionCollation'] = 'utf8mb4_unicode_ci';
$cfg['ShowDbStructureCharset'] = true;
$cfg['ShowDbStructureCreation'] = true;
$cfg['ShowDbStructureLastUpdate'] = true;
$cfg['ShowDbStructureLastCheck'] = true;
$cfg['RetainQueryBox'] = true;
$cfg['Console']['AlwaysExpand'] = true;
$cfg['Export']['method'] = 'custom';
$cfg['Export']['compression'] = 'zip';
$cfg['Export']['as_separate_files'] = true;
$cfg['Export']['sql_drop_table'] = true;
$cfg['Export']['sql_if_not_exists'] = true;
$cfg['Export']['sql_delayed'] = true;
$cfg['Export']['sql_max_query_size'] = 500000;
$cfg['IgnoreMultiSubmitErrors'] = true;
$cfg['DefaultTransformations']['Substring'] = array ( 0 => '0',  1 => 'all',  2 => '…',);
$cfg['DefaultTransformations']['External'] = array (  0 => '0',  1 => '-f /dev/null -i -wrap -q',  2 => '1',  3 > 1', );
$cfg['DefaultTransformations']['PreApPend'] = array ();
$cfg['DefaultTransformations']['DateFormat'] = array (  0 => '0',  1 => 'local',);
$cfg['DefaultTransformations']['Inline'] = array (  0 => '100',  1 => '100',);
$cfg['DefaultTransformations']['TextImageLink'] = array (  0 => '100',  1 => '50',);
$cfg['DefaultTransformations']['TextLink'] = array ();
$cfg['RowActionLinksWithoutUnique'] = true;
$cfg['UserprefsDeveloperTab'] = true;
$cfg['DBG']['sql'] = true;

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.