[LINUX] Compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --3. Utilisez MySQL

Hypothèses et préparatifs

Article sur la construction du serveur Linux

Dernière fois a construit un environnement d'application Web en compilant PHP7.4 sur Apache2.4, mais ** malheureusement, Raspberry Pi par défaut Linux pour Linux ne prend pas en charge MySQL et n'existe pas dans les référentiels RPM ou APT. ** Mais il est possible de connecter un serveur MySQL externe.

Même si vous voulez construire MySQL pour la base de données avec le serveur Web pour plus de simplicité, ce n'est pas le cas avec Raspberry Pi, et même si vous pouvez l'installer, il est très inapproprié pour écrire de la microSD, donc Rasppie sera utilisé à l'avenir. Si vous développez une gamme qui prend en charge un stockage équivalent au SSD M.2, il peut être possible de prendre en charge MySQL ... (✿ ・ ω ・) D'ici là, introduisez de force MySQL dans Raspeye et stockez-le. Même si une erreur survient, elle sera à nouveau annulée ...

environnement

--Programme serveur Web: Apache 2.4.46 + PHP 7.4.10. --Client: Windows10 Pro --Architecture serveur: Raspberry Pi 3B + (avec armv8) Distribution Linux: openSUSE 15.1 Leap (64bit) / Raspberry Pi OS 2020.08 version (32bit)

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à) --Dans openSUSE, le pare-feu utilise firewalld (n'utilise pas les commandes de pare-feu spécifiques à la distribution). Dans le système d'exploitation Raspberry Pi de Rasppie, pour firewalld, le lien autour d'IPv6 était un gaspillage, j'ai donc décidé d'utiliser le standard Debian ufw.

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 du client MySQL

Installation des outils client MariaDB

J'ai installé le client MariaDB car le client qui gère les commandes MySQL n'inclut pas de package qui dit clairement "MySQL" dans Linux pour Raspeye.

openSUSE15.1(RaspberryPi)


# zypper -n install mariadb-client

RaspberryPiOS(2020.08)


# apt-get -y install mariadb-client

Vous pouvez maintenant utiliser les commandes MySQL de Raspeye.

Préparation sur serveur MySQL

Utilisateurs et bases de données sur le serveur

Cette fois, j'utiliserai une machine virtuelle avec un serveur MySQL construit sur CentOS 8.1, donc [J'utiliserai la base de données intégrée dans cet article](https://qiita.com/kazumi75kitty/items/76807c637c096618a0e1#mysql%E3%82 % 92% E8% A9% A6% E3% 81% 99).

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

Le mot de passe a été changé de "test0" à "test1" pour des raisons personnelles.

Préparation sur le serveur MySQL

Tout d'abord, préparez diverses choses sur le serveur MySQL afin que MySQL soit accessible à partir d'autres terminaux.

Connectez-vous en tant que racine MySQL.

Serveur MySQL(CentOS8.1)


[Seule cette commande est exécutée sur le serveur MySQL]
# mysql -u root -p
Enter password:← Entrez le mot de passe root MySQL

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'@'192.168.1.22' IDENTIFIED BY 'test1';
↑ Adresse IP Raspeye "192.168.1.Créez un nom d'utilisateur "test" pour "22"

mysql> GRANT ALL ON manutest.* TO 'test'@'192.168.1.22';
↑ "test" vaut "192" pour la base de données "manutest".168.1.Toutes les fonctions peuvent être utilisées à partir de "22"

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.

En d'autres termes, si MySQL et Apache sont sur la même machine serveur, vous pouvez utiliser "localhost", mais cette fois vous accéderez à un autre serveur depuis Raspeye → serveur MySQL, donc nom d'utilisateur + @ mark + host comme indiqué ci-dessous , Etc

CREATE USER '' @ '' IDENTIFIED BY ''; GRANT ALL ON <nom de la base de données>. * TO '<nom d'utilisateur>' @ '<hôte de Raspeye>';

Cela signifie qu'il est nécessaire de spécifier quelque chose comme (˶ ・ ᴗ ・) ੭

Sur le serveur MySQL, il était également nécessaire d'ouvrir firewalld sur CentOS (˶ ・ ᴗ ・) ੭ \ * \ *

Serveur MySQL(CentOS8.1)


[Seule cette commande est exécutée sur le serveur MySQL]
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
# firewall-cmd --reload

** Le port MySQL est 3306 / TCP **, donc en ouvrant ce port, PHP peut accéder au serveur MySQL ...

Raspberry Pi → Vérifiez si vous pouvez vous connecter au serveur MySQL

C'est tout pour travailler sur le serveur MySQL. Revenons maintenant au Raspberry Pi et voyons si nous pouvons utiliser MySQL. Vous pouvez spécifier l'hôte avec l'option "-h" avec la commande mysql

RaspberryPi(Système d'exploitation Raspberry ・ openSUSE15.1)


# mysql -h 192.168.1.18 -u test -p
Enter password:← Entrez le mot de passe "test1"
(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)

ラズパイ→DBサーバー接続成功!!

Vous pouvez maintenant voir correctement le contenu du tableau! !! (˶˙ᵕ˙˶)

Utiliser le serveur MySQL depuis PHP

Vérifier la connexion MySQL depuis PHP

Pour le serveur MySQL, essayez d'utiliser une table de test comme vous l'avez fait la dernière fois avec la machine virtuelle CentOS.

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

Tout d'abord, avant d'utiliser la table, 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=192.168.1.18';
    $usr = 'test';
    $pass = 'test1';
    
    try {
        $db = new PDO($dsn, $usr, $pass);
        print 'Connection successful.';
        $db = NULL;
    }
    catch(PDOException $e){
        die('Connect error : '.$e->getMessage());
    }
?>

Déplacez-le vers l'emplacement de stockage / usr / local / apache2 / htdocs / de la page Web de destination où vous l'avez installé dans Lors de l'installation d'Apache.

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

Puisque la page PHP est placée, il n'est pas nécessaire de redémarrer Apache, entrez donc https: // [adresse IP du serveur Linux] /connect.php pour vérifier. Puisque 192.168.1.18 est utilisé par le serveur MySQL et que l'adresse IP du serveur Raspai Linux est 192.168.1.22, accédez à 192.168.1.22 / connect.php en entrant l'URL après https: ~ dans le navigateur.

ラズパイ上のPHP→DBサーバー接続 Enfin 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=192.168.1.18';
        $usr = 'test';
        $pass = 'test1';
        
        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/

Ensuite, lorsque vous accédez à https: // [adresse IP] /test_form.html avec un navigateur et enregistrez les données ...

ラズパイPHP→DBサーバー操作

Cela a également été enregistré avec succès! (˶ ・ ᴗ ・) ੭⚐⚑ Parce qu'il est moins puissant qu'un PC et que son stockage est microSD, ce qui n'est pas adapté à la lecture et à l'écriture de DB, c'est le moment où j'ai réalisé que Raspai peut également gérer DB en y accédant de manière externe avec un serveur DB externe.

Épilogue

Raspberry Pi est moins puissant que le PC et dispose d'un stockage microSD, donc si vous construisez un serveur exactement comme un PC, la route est relativement raide en raison du manque de mémoire et de l'incompatibilité de la base de données, mais il y a aussi des avantages uniques à l'économie d'énergie. J'ai été impressionné par le fait qu'il y en a un autre ... (♥ ´꒳` \ *)

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

Compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --3. Utilisez MySQL
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
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 compile Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web --3 MySQL 8.0 introduction
Créez des serveurs sur Linux et des réseaux locaux avec Raspberry Pi NextCloud et le partage de bureau
Créez un environnement LAMP avec Vagrant (Linux + Apache + MySQL + PHP)
J'ai créé un serveur Web avec Razpai pour regarder des anime
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
Lancer un serveur Web avec Python et Flask
Construire un serveur Web avec Apache 2.4 (httpd 2.4.43) + PHP 7.4 sous Linux --4 Security (chown et firewalld)
Création d'un environnement distribué avec la série Raspberry PI (Partie 3: Installation et configuration de dnsmasq)
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
J'ai essayé de connecter Raspeye et conect + avec l'API Web
Configurer un serveur Web avec CentOS7 + Anaconda + Django + Apache
Créez un serveur API Web ultra-rapide avec Falcon
Utilisez vl53l0x avec RaspberryPi (python)
Classique de Noël (?) Éclairage d'un arbre de Noël avec Raspberry Pi et Philips Hue
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Créer une application Web avec Django
Construire un serveur VPN avec Raspberry Pie
Utiliser une webcam avec Raspberry Pi
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
[Python + PHP] Créez un moniteur de température / humidité / pression avec Raspberry Pi
Démarrez un serveur Web en utilisant Bottle et Flask (j'ai également essayé d'utiliser Apache)
Surveillance des animaux avec Rekognition et Raspberry pi
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Configurons un serveur WEB avec Chromebook
Utiliser le capteur de mouvement PIR avec Raspberry Pi
Faire une minuterie de lavage-séchage avec Raspberry Pi
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Créez un compteur de voiture avec Raspberry Pi
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Essai et erreur]
Compilation croisée de Raspberry Pi et création d'un environnement de développement de débogage à distance avec VS Code
Création d'un système de contrôle de température avec tarte aux framboises et ESP32 (3) Réception d'un fichier Python
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
Créer un serveur local avec une commande sur une seule ligne [Mac]
Démarrez un serveur Web Python simple avec Docker
MQTT Radicon Car avec Arduino et Raspberry
Créez un environnement virtuel avec pyenv et venv
Compilez et exécutez Rust avec une seule commande
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Connectez-vous à MySQL avec Python sur Raspberry Pi
Construire un environnement de développement Python sur Raspberry Pi
[Note] Utilisez un périphérique de connexion LAN filaire avec pont WiFi-Eth sur Raspberry Pi 4B
Contrôlez la lecture de musique sur un smartphone connecté à Raspberry Pi 3 et Bluetooth avec AVRCP
Création d'un environnement distribué avec la série Raspberry PI (Partie 4: Création d'un serveur NFS et importation d'un système d'exploitation client)
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
IoT facile pour démarrer avec Raspeye et MESH
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper