Source compile Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web --3 MySQL 8.0 introduction

Hypothèses et préparatifs

Article sur la construction du serveur Linux

La dernière fois a construit un environnement d'application Web en compilant la source PHP7.4 sur Apache2.4, mais cette fois, nous continuerons à créer un serveur de base de données. (⑅ • ᴗ • ⑅)

Le serveur de base de données peut être séparé du serveur Web lui-même, mais cette fois c'est facile, nous allons donc créer la base de données MySQL avec le serveur Web

environnement

supposition

--Utilisateur installé en tant que root (dans ma vérification, il s'agit d'un compte administrateur appelé admin, et il est traité par sudo à partir de là)

Conditions du serveur

adresse IP

Fonctions et versions pour télécharger et installer individuellement les packages (à partir de juin 2020)

Les autres packages requis sont installés à l'aide des commandes de package standard de la distribution (dnf, apt, etc.) et n'ont pas besoin d'être téléchargés individuellement.

Pour le téléchargement, vous pouvez accéder au site officiel, le télécharger à partir de là et le transférer par FTP, ou vous pouvez l'obtenir avec wget si vous connaissez l'URL du fichier à télécharger, mais la méthode d'acquisition est omise.

Procédure de travail

Présentation de MySQL 8.0

Installez MySQL

MySQL dans les commandes de package standard de la distribution est souvent une MariaDB plus ancienne ou compatible, donc si vous souhaitez introduire une version explicite de MySQL, vous devrez télécharger le référentiel à partir du MySQL officiel.

Appliquez le référentiel téléchargé et installez MySQL.

CentOS8.1


# dnf -y install mysql80-community-release-el8-1.noarch.rpm
# dnf -y install mysql-server

Dans le cas de MySQL 8.0 ** L'infrastructure d'authentification peut prendre en charge les valeurs de hachage, et l'infrastructure d'authentification basée sur les valeurs de hachage peut être activée par défaut **. Cependant, il semble que cela ne soit pas pris en charge même dans PHP7 (je n'ai pas entendu dire qu'il est toujours pris en charge dans 7.4), et si vous y accédez avec un mot de passe simple en PHP, l'authentification ne fonctionnera pas. Par conséquent, il est nécessaire de modifier /etc/my.cnf (pour CentOS 8.1, il est inclus dans /etc/my.cnf /etc/my.cnf.d/mysql-default-authentication-plugin.cnf Éditer)

openSUSE15.1. Ubuntu20.04


# vi /etc/my.cnf

CentOS8.1


# vi /etc/my.cnf.d/mysql-default-authentication-plugin.cnf

my.cnf ou mysql-default-authentication-plugin.cnf


default-authentication-plugin = mysql_native_mot de passe ← "#Retirer

Démarrez MySQL

# systemctl start mysqld
# systemctl enable mysqld
# systemctl status mysqld

Vérifiez le journal MySQL après le démarrage de MySQL

# less -r /var/log/mysqld.log

À ce moment-là, si ** "[Note] Un mot de passe temporaire est généré pour root @ localhost: ~" existe, le mot de passe initial est défini **. Sinon, il n'est pas défini (MySQL 8.0 de CentOS 8.1 n'est pas défini). Exécutez la ligne de commande MySQL avec ce mot de passe

python


[Pas de mot de passe initial MySQL]
# mysql -u root
[Mot de passe initial MySQL disponible]
# mysql -u root -p ← Entrez le mot de passe initial pour vous connecter

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '<Mot de passe root MySQL(Pas un mot de passe root Linux)>';
Query OK, 0 rows affected (0.00 sec)

mysql> exit

Ici, définissez le mot de passe pour le fonctionnement réel de MySQL. Notez donc que root n'est pas ** Linux root, mais ** root dans MySQL **.

Si "Requête OK, 0 lignes affectées (0,00 sec)" est affiché, le réglage du mot de passe racine MySQL est terminé, alors quittez avec exit.

Maintenant, essayez de vous connecter avec le mot de passe root MySQL après avoir défini

# mysql -u root -p
Enter password:← Entrez le mot de passe root MySQL

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.17 Source distribution

Copyright (c) 2000, 2019, 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>

Si cela se produit, la connexion racine MySQL réussira. Ou vous pouvez le vérifier ci-dessous

# mysqladmin ping -u root -p
Enter Password:← Entrez le mot de passe root MySQL
mysqld is alive

OK s'il dit "mysqld est vivant"

Essayez MySQL

Créer une base de données avec des utilisateurs

Puisque MySQL a fonctionné, créons en fait une base de données avec les utilisateurs.

--Nom de la base de données: manutest

Connectez-vous d'abord en tant que racine MySQL.

# mysql -u root -p
Enter password:← Entrez le mot de passe root MySQL

mysql> CREATE DATABASE manutest CHARACTER SET utf8;
↑ Code de caractère UTF pour la base de données "manutest"-Créer en 8

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| manutest           |← La base de données créée s'affiche
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY 'test0';
↑ Créer le nom d'utilisateur "test" avec le mot de passe "test0"

mysql> GRANT ALL ON manutest.* TO 'test'@'localhost';
↑ Permettre à l'utilisateur "test" d'utiliser toutes les fonctions de la base de données "manutest"

S'il n'y a pas d'erreur et que "Requête OK, 0 ligne affectée" s'affiche, la base de données et l'utilisateur ont été créés.

** Si une erreur de politique de mot de passe se produit **

Si vous obtenez une erreur si vous enfreignez la politique de mot de passe, il semble que vous puissiez vérifier l'état de la politique et le modifier.

mysql> SHOW VARIABLES LIKE 'validate_password%';
↑ S'il s'agit d'un ensemble vide, il n'y a pas de politique, mais si c'est le cas, il sera
 validate_password_la longueur est de 8, valider_password.la politique est "MOYENNE"

mysql> SET GLOBAL validate_password.length=4;
mysql> SET GLOBAL validate_password.policy=LOW;
↑ Vous pouvez désormais définir un mot de passe de 4 caractères maximum ou un mot de passe simple à des fins de test.

mysql> SET GLOBAL validate_password.length=8;
mysql> SET GLOBAL validate_password.policy=MEDIUM;
↑ Au retour

Maintenant, essayons si MySQL peut être utilisé avec l'utilisateur de test et la base de données créés.

mysql> exit
Bye

# mysql -u test -p
Enter password:← Entrez le mot de passe "test0"
(Omission)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| manutest           |← Succès si la base de données créée est affichée
+--------------------+
2 rows in set (0.00 sec)

Créez une table et mettez-y des données

Maintenant, créons une table dans la base de données créée et y mettons des données!

Cette fois, nous allons créer cette table pour les tests. Nom de la table: ** testtb **

id name memo
Moule INT VARCHAR(64) VARCHAR(256)
Attributs requis PRIMARY KEY NOT NULL Valeur initiale NULL
Autres attributs AUTO_INCREMENT - -
mysql> USE manutest;
mysql> CREATE TABLE testtb (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(64) NOT NULL, memo VARCHAR(256) DEFAULT NULL);
Query OK, 0 rows affected (0.11 sec)

mysql> SHOW TABLES;
+--------------------+
| Tables_in_manutest |
+--------------------+
| testtb             |
+--------------------+
1 row in set (0.00 sec)

Après avoir créé la table avec succès, insérons les données. Dans la table de test testtb, id est automatiquement numéroté et le nom est requis, insérez donc les valeurs suivantes à titre d'exemple.

--id: (omis en raison de la numérotation automatique) --name: test

mysql> INSERT INTO testtb (name, memo) VALUES ('tester', 'Only for test.');
mysql> SELECT * FROM testtb;
+----+-----------+----------------+
| id | name      | memo           |
+----+-----------+----------------+
|  1 |tester| Only for test. |
+----+-----------+----------------+
1 row in set (0.00 sec)

Les données ainsi enregistrées ont été enregistrées dans la base de données sans être déformées ♪ C'est un succès!

Essayez de travailler avec MySQL sur PHP

Maintenant que j'ai confirmé l'installation et le fonctionnement de MySQL sans aucun problème, j'aimerais enfin gérer MySQL depuis PHP.

MySQL va se fermer et créer une page PHP.

Vérifier la connexion MySQL depuis PHP

Tout d'abord, créez un PHP récepteur qui enregistre les données reçues par POST avec PHP dans la base de données MySQL! Avant cela, vous devez vous assurer que vous pouvez vous connecter à MySQL avec PHP (\ * ˘ᗜ˘ \ *;)

Créer une page de confirmation de connexion

# cd ~
# vi connect.php

connect.php


<?php
    $dsn = 'mysql:dbname=manutest; host=127.0.0.1';
    $usr = 'test';
    $pass = 'test0';
    
    try {
        $db = new PDO($dsn, $usr, $pass);
        print 'Connection successful.';
        $db = NULL;
    }
    catch(PDOException $e){
        die('Connect error : '.$e->getMessage());
    }
?>

Déplaçons-le vers l'emplacement de stockage / usr / local / apache2 / htdocs / de la page Web de destination installée dans installation Apache!

# mv connect.php /usr/local/apache2/htdocs/

La page PHP étant organisée, il n'est pas nécessaire de redémarrer Apache en particulier, alors entrez https: // [adresse IP du serveur Linux] /connect.php pour confirmer. Cette fois, l'adresse IP du serveur Linux est 192.168.1.18, alors accédez à 192.168.1.18 / connect.php en entrant l'URL après https: ~ dans le navigateur.

conn.png Si connect.php réussit à se connecter, le message ci-dessus sera affiché, donc l'image ci-dessus montre que la connexion a réussi! !!

Vérifiez si les données peuvent être enregistrées de PHP vers MySQL

Ensuite, vérifiez si les données peuvent être enregistrées. Créez à nouveau une page Web.

Tout d'abord, à partir du formulaire d'inscription.

# vi test_form.html

test_form.html


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Page de test- Test page</title>
</head>
<body>
<form method="POST" action="test_form.php">
    <input type="text" name="name" />
    <input type="text" name="memo" />
    <input type="submit" value="Submit" />
</form>
</body>
</html>

Créez ensuite PHP pour ajouter les données reçues du formulaire à la base de données MySQL

# vi test_form.php

test_form.php


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Entrée de test- Test insert</title>
</head>
<body>
<?php
    function getDb(){
        $dsn = 'mysql:dbname=manutest; host=127.0.0.1';
        $usr = 'test';
        $pass = 'test0';
        
        try {
            $db = new PDO($dsn, $usr, $pass);
            $db->exec('SET NAMES utf8');
        }
        catch(PDOException $e){
            die('Connect error : '.$e->getMessage());
        }
        
        return $db;
    }
    
    try {
        $db = getDb();
        
        $stt = $db->prepare('INSERT INTO testtb (name, memo) VALUES (:one, :two)');
        
        $stt->bindValue(':one', $_POST['name']);
        $stt->bindValue(':two', $_POST['memo']);
        $stt->execute();
        
        print $_POST['name'].' - '.$_POST['memo'].' : Insert OK.';
        
        $stt = $db->query("SELECT * FROM testtb");
?>
    <table border="1">
<?php
        while($row = $stt->fetch(PDO::FETCH_ASSOC)){
?>
        <tr>
            <td><?php print $row['name']; ?></td>
            <td><?php print $row['memo']; ?></td>
        </tr>
 <?php
        }
?>
   </table>
<?php
         $db = NULL;
   }
    catch(PDOException $e){
        die('Process error : '.$e->getMesssage());
    }
?>
</body>
</html>

Déplacez les deux fichiers ci-dessus vers l'emplacement des données de la page Web d'Apache.

# mv test_form.* /usr/local/apache2/htdocs/

Maintenant, essayez d'accéder à https: // [adresse IP] /test_form.html avec votre navigateur.

reg1.png Mettez quelques chaînes dans les formes gauche et droite ... (de préférence en japonais) et appuyez sur Soumettre

reg2.png Réussi! Les données saisies ont été POSTÉES sur PHP et enregistrées dans la base de données MySQL. Vérifions-le également depuis la ligne de commande.

En PHP, le test utilisateur se connecte à une base de données appelée manutest, vous pouvez donc également vous connecter à MySQL avec test à partir d'une commande.

# mysql -u test -p
Enter password:← Entrez le mot de passe "test0"

mysql> USE manutest;
mysql> SELECT * FROM testtb;
+----+-----------------+----------------+
| id | name            | memo           |
+----+-----------------+----------------+
|  1 |tester| Only for test. |
|  2 |crêpe|envie de manger|
+----+-----------------+----------------+
2 rows in set (0.00 sec)

Il a été ajouté correctement! !! (\ * ˘ᗜ˘ \ *) ...: \ * ♡

Épilogue

Apache et PHP + MySQL ont été fréquemment utilisés dans ce modèle, à la fois dans mon expérience professionnelle antérieure et dans les grandes entreprises. Au contraire, j'estime que Java était rare.

PHP est moins cher et plus ouvert que la licence commerciale de Java, donc je pense qu'il est plus facile pour les grandes entreprises et, bien sûr, pour les petites et moyennes entreprises de l'introduire.

En ce qui concerne le coût d'introduction d'Apache + PHP + MySQL sous Linux, je n'ai pas besoin de licence, donc je pense que le coût de la main-d'œuvre pour le salaire et le coût de l'équipement indépendamment du PC utilisé ou de la tarte aux râpes.

Si le coût d'installation est de 2500 yens par heure, il faudra 2 heures pour construire un nouveau serveur Web et serveur de fichiers, et le total sera de 5000 yens. De plus, si la combinaison d'un PC ou d'un Raspeye d'occasion et d'un nouveau disque dur ou SSD coûte 30000 à 40000 yens, le nouveau coût d'installation est inférieur à 50000 yens, cela prend donc 6 minutes plutôt que d'acheter une machine Windows Server coûteuse pour 300000 yens. Je pense que les solutions informatiques seront enrichies même pour les petites et moyennes entreprises et la gestion individuelle.

En particulier, dans le cas de l'IoT tel que Raspeye, il est prévu qu'il puisse être combiné avec des propriétés physiques telles que des capteurs de manière hybride et converti en données, donc à l'avenir je voudrais élargir mes horizons et le mettre sur Qiita (˙꒳). ˙ᐢ)

Futur et prochaine fois

En plus de créer un serveur d'applications Web à l'aide de PHP, j'aimerais aborder la création d'un serveur d'applications Web à l'aide de Java (OpenJDK).

Recommended Posts

Source compile Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web --3 MySQL 8.0 introduction
Source compilez Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web ―― 1. Introduction à Apache
Source compile Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web --2 introduction PHP
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --2 introduction PHP
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et créez un serveur Web ―― 1. Introduction à Apache
Compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --3. Utilisez MySQL
[Partie 2] Construisons un serveur Web avec EC2 Linux
Construire un serveur Web avec Apache 2.4 (httpd 2.4.43) + PHP 7.4 sous Linux --4 Security (chown et firewalld)
[Introduction à AWS] Mémorandum de création d'un serveur Web sur AWS
Créez un environnement LAMP avec Vagrant (Linux + Apache + MySQL + PHP)
Construire un serveur Samba sur Arch Linux
Configurons un serveur WEB avec Chromebook
Créer un serveur HTTP Apache et Wildfly sur Oracle Linux 8
Le débutant de la CTF a tenté de créer un serveur problématique (Web) [Problème]
Comment créer un environnement Python sur Amazon Linux 2
Une super introduction à Linux
Construction de serveur Web Linux (Ubuntu et Apache)
Exécutez un serveur Linux avec GCP
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
Construisez Linux sur un environnement Windows. Étapes pour installer Laradock et migrer
Construire un serveur de cache Pypi sur QNAP
Comment créer mon propre serveur Linux
Créer un serveur NFS sur Arch Linux
Comment mettre à jour PHP sur Amazon Linux 2
Comment installer Apache (httpd) sur CentOS7
Comment installer php7.4 sur Linux (Ubuntu)
Comment installer Apache (httpd) sur CentOS8
Construire un environnement Django sur Raspai (MySQL)
Essayez de créer une nouvelle commande sous Linux
Serveur Web pour remplacer Apache: optimisation des performances uWSGI
Je ne peux pas dormir tant que je n'ai pas construit un serveur !! (Introduction au serveur Python faite en un jour)
[Linux] Introduction à Linux
Commande Yum pour accéder à MySQL avec Python 3 sous Linux
Comment installer Linux sur un PC UEFI 32 bits
Comment créer un environnement Django (python) sur Docker
[Partie 1] Configurons un serveur Micra sur Linux
Préparation à l'utilisation d'Ansible sur un serveur Linux existant
Comment exécuter Django sur IIS sur un serveur Windows
[Linux] Comment installer un package sur un serveur qui n’a pas d’environnement Internet (autonome)
Comment démarrer un serveur WEB simple qui peut exécuter des cgi de php et python
J'ai construit un environnement de l'installation de centos à l'extension de source php sur Linux, mais que faire en cas d'erreur de navigateur