Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers --3 MySQL 8.0 Einführung

Annahmen und Vorbereitungen

Artikel zum Aufbau eines Linux-Servers

Letztes Mal hat eine Webanwendungsumgebung erstellt, indem PHP7.4 auf Apache2.4 kompiliert wurde. Dieses Mal werden wir jedoch weiterhin einen Datenbankserver erstellen. (⑅ • ᴗ • ⑅)

Der Datenbankserver kann vom Webserver selbst getrennt werden, diesmal ist es jedoch einfach. Daher erstellen wir zusammen mit dem Webserver MySQL für die Datenbank.

Umgebung

--Webserverprogramm: Apache 2.4.43 + PHP 7.4.6 + MySQL 8.0 --Client: Windows10 Pro

Annahme

--Benutzer als root installiert (bei meiner Überprüfung handelt es sich um ein Administratorkonto namens admin, das von sudo von dort aus verarbeitet wird)

Serverbedingungen

IP Adresse

Funktionen und Versionen zum individuellen Herunterladen und Installieren von Paketen (Stand Juni 2020)

Andere erforderliche Pakete werden mit den Standardpaketbefehlen der Distribution (dnf, apt usw.) installiert und müssen nicht einzeln heruntergeladen werden.

Zum Herunterladen können Sie auf die offizielle Website zugreifen, von dort herunterladen und per FTP übertragen oder mit wget abrufen, wenn Sie die URL der Download-Datei kennen, die Erfassungsmethode jedoch weggelassen wurde.

Arbeitsablauf

Einführung in MySQL 8.0

Installieren Sie MySQL

MySQL in den Standardpaketbefehlen der Distribution ist häufig eine ältere oder kompatible MariaDB. Wenn Sie also eine explizite Version von MySQL einführen möchten, müssen Sie das Repository von der offiziellen MySQL herunterladen.

Wenden Sie das heruntergeladene Repository an und installieren Sie MySQL.

CentOS8.1


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

Im Fall von MySQL 8.0 ** unterstützt die Authentifizierungsinfrastruktur möglicherweise Hashwerte, und die auf Hashwerten basierende Authentifizierungsinfrastruktur ist möglicherweise standardmäßig aktiviert **. Es scheint jedoch, dass dies auch in PHP7 nicht unterstützt wird (ich habe nicht gehört, dass es in 7.4 noch unterstützt wird), und wenn Sie in PHP mit einem einfachen Passwort darauf zugreifen, funktioniert die Authentifizierung nicht. Daher muss /etc/my.cnf geändert werden (für CentOS 8.1 ist es in /etc/my.cnf /etc/my.cnf.d/mysql-default-authentication-plugin.cnf enthalten Bearbeiten)

openSUSE15.1. Ubuntu20.04


# vi /etc/my.cnf

CentOS8.1


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

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


default-authentication-plugin = mysql_native_Passwort ← "#Entfernen

Starten Sie MySQL

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

Überprüfen Sie das MySQL-Protokoll nach dem Start von MySQL

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

Wenn zu diesem Zeitpunkt ** "[Hinweis] Ein temporäres Kennwort für root @ localhost: ~" generiert wird, wird das anfängliche Kennwort festgelegt **. Wenn nicht, ist es nicht gesetzt (MySQL 8.0 von CentOS 8.1 ist nicht gesetzt). Führen Sie die MySQL-Befehlszeile mit diesem Kennwort aus

python


[Kein MySQL-Anfangskennwort]
# mysql -u root
[MySQL-Anfangskennwort verfügbar]
# mysql -u root -p ← Geben Sie das ursprüngliche Passwort ein, um sich anzumelden

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '<MySQL-Root-Passwort(Kein Linux-Root-Passwort)>';
Query OK, 0 rows affected (0.00 sec)

mysql> exit

Legen Sie hier das Passwort für den tatsächlichen Betrieb von MySQL fest. Beachten Sie also, dass root nicht ** Linux root ist, sondern ** root in MySQL **.

Wenn "Abfrage OK, 0 betroffene Zeilen (0,00 Sek.)" Ausgegeben wird, ist die Einstellung des MySQL-Root-Passworts abgeschlossen. Beenden Sie also mit exit.

Versuchen Sie nun, sich nach dem Einstellen mit dem MySQL-Root-Passwort anzumelden

# mysql -u root -p
Enter password:← Geben Sie das MySQL-Root-Passwort ein

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>

In diesem Fall ist die MySQL-Root-Anmeldung erfolgreich. Oder Sie könnten es unten überprüfen

# mysqladmin ping -u root -p
Enter Password:← Geben Sie das MySQL-Root-Passwort ein
mysqld is alive

OK, wenn "mysqld lebt" steht

Probieren Sie MySQL aus

Erstellen Sie eine Datenbank mit Benutzern

Da MySQL funktioniert hat, erstellen wir tatsächlich eine Datenbank mit Benutzern.

Melden Sie sich zuerst als MySQL-Root an.

# mysql -u root -p
Enter password:← Geben Sie das MySQL-Root-Passwort ein

mysql> CREATE DATABASE manutest CHARACTER SET utf8;
↑ Zeichencode UTF für Datenbank "manutest"-Erstellen Sie in 8

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| manutest           |← Die erstellte Datenbank wird angezeigt
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY 'test0';
↑ Benutzername "test" mit Passwort "test0" erstellen

mysql> GRANT ALL ON manutest.* TO 'test'@'localhost';
↑ Benutzer "test" darf alle Funktionen für die Datenbank "manutest" verwenden.

Wenn keine Fehler vorliegen und "Abfrage OK, 0 Zeilen betroffen" angezeigt wird, wurden die Datenbank und der Benutzer erstellt.

** Wenn ein Kennwortrichtlinienfehler auftritt **

Wenn Sie eine Fehlermeldung erhalten, wenn Sie gegen die Kennwortrichtlinie verstoßen, können Sie den Richtlinienstatus anscheinend überprüfen und ändern.

mysql> SHOW VARIABLES LIKE 'validate_password%';
↑ Wenn es sich um einen leeren Satz handelt, gibt es keine Richtlinie. Wenn dies jedoch der Fall ist, wird dies zunächst der Fall sein
 validate_password_Länge ist 8, validieren_password.Politik ist "MITTEL"

mysql> SET GLOBAL validate_password.length=4;
mysql> SET GLOBAL validate_password.policy=LOW;
↑ Jetzt können Sie zu Testzwecken ein Passwort mit bis zu 4 Zeichen oder ein einfaches Passwort festlegen.

mysql> SET GLOBAL validate_password.length=8;
mysql> SET GLOBAL validate_password.policy=MEDIUM;
↑ Bei der Rückkehr

Probieren wir nun aus, ob MySQL mit dem erstellten Testbenutzer und der Datenbank verwendet werden kann.

mysql> exit
Bye

# mysql -u test -p
Enter password:← Geben Sie das Passwort "test0" ein
(Unterlassung)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| manutest           |← Erfolgreich, wenn die erstellte Datenbank angezeigt wird
+--------------------+
2 rows in set (0.00 sec)

Erstellen Sie eine Tabelle und fügen Sie Daten ein

Jetzt erstellen wir eine Tabelle in der erstellten Datenbank und fügen Daten darin ein!

Dieses Mal erstellen wir diese Tabelle zum Testen. Tabellenname: ** testtb **

id name memo
Schimmel INT VARCHAR(64) VARCHAR(256)
Erforderliche Attribute PRIMARY KEY NOT NULL Anfangswert NULL
Andere Attribute 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)

Nachdem Sie die Tabelle erfolgreich erstellt haben, geben Sie die Daten tatsächlich ein. In der Testtabelle testtb wird die ID automatisch nummeriert und der Name ist erforderlich. Geben Sie daher die folgenden Werte als Beispiel ein.

--id: (Wegen automatischer Nummerierung weggelassen) --name: test

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

Die auf diese Weise registrierten Daten wurden in der Datenbank registriert, ohne verstümmelt zu werden ♪ Es ist ein Erfolg!

Versuchen Sie, mit MySQL unter PHP zu arbeiten

Nachdem ich die Installation und den Betrieb von MySQL ohne Probleme bestätigt habe, möchte ich MySQL endlich von PHP aus handhaben.

MySQL wird beendet und eine PHP-Seite erstellt.

Überprüfen Sie die MySQL-Verbindung von PHP

Erstellen Sie zunächst ein empfangendes PHP, das die von POST mit PHP empfangenen Daten in der MySQL-Datenbank registriert! Vorher müssen Sie sicherstellen, dass Sie mit PHP eine Verbindung zu MySQL herstellen können (\ * ˘ᗜ˘ \ *;)

Erstellen Sie eine Verbindungsbestätigungsseite

# 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());
    }
?>

Verschieben wir dies an den Speicherort / usr / local / apache2 / htdocs / der Zielwebseite, die in [Apache-Installation] installiert ist (https://qiita.com/kazumi75kitty/items/daaf8ff8feb50ad04f41)!

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

Da die PHP-Seite angeordnet ist, muss Apache nicht neu gestartet werden. Geben Sie daher zur Bestätigung https: // [IP-Adresse des Linux-Servers] /connect.php ein. Diesmal lautet die IP-Adresse des Linux-Servers 192.168.1.18. Greifen Sie also auf 192.168.1.18 / connect.php zu, indem Sie die URL nach https: ~ im Browser eingeben.

conn.png Wenn connect.php erfolgreich eine Verbindung herstellen kann, wird die obige Meldung ausgegeben, sodass das obige Bild zeigt, dass die Verbindung erfolgreich war! !!

Überprüfen Sie, ob Daten von PHP nach MySQL registriert werden können

Überprüfen Sie anschließend, ob die Daten registriert werden können. Erstellen Sie erneut eine Webseite.

Zunächst aus dem Anmeldeformular.

# vi test_form.html

test_form.html


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Testseite- 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>

Erstellen Sie als Nächstes PHP, das die vom Formular empfangenen Daten zur MySQL-Datenbank hinzufügt.

# vi test_form.php

test_form.php


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Testeingabe- 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>

Verschieben Sie die beiden oben genannten Dateien an den Speicherort der Apache-Webseitendaten.

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

Versuchen Sie nun, mit Ihrem Browser auf https: // [IP-Adresse] /test_form.html zuzugreifen.

reg1.png Fügen Sie die Zeichenfolgen entsprechend in die linke und rechte Form ein ... (vorzugsweise auf Japanisch) und drücken Sie Senden

reg2.png Erfolgreich! Die eingegebenen Daten wurden an PHP gesendet und in der MySQL-Datenbank registriert. Lassen Sie es uns auch über die Befehlszeile überprüfen.

In PHP stellt der Benutzertest eine Verbindung zu einer Datenbank namens manutest her, sodass Sie sich auch mit test from a command bei MySQL anmelden können.

# mysql -u test -p
Enter password:← Geben Sie das Passwort "test0" ein

mysql> USE manutest;
mysql> SELECT * FROM testtb;
+----+-----------------+----------------+
| id | name            | memo           |
+----+-----------------+----------------+
|  1 |Prüfung| Only for test. |
|  2 |Pfannkuchen|will essen|
+----+-----------------+----------------+
2 rows in set (0.00 sec)

Es wurde richtig hinzugefügt! !! (\ * ˘ᗜ˘ \ *) ...: \ * ♡

Nachwort

Apache und PHP + MySQL wurden in diesem Muster häufig verwendet, sowohl in meiner bisherigen Berufserfahrung als auch in großen Unternehmen. Im Gegenteil, ich glaube, Java war knapp.

PHP ist billiger und offener als Javas kommerzielle Lizenz, daher denke ich, dass es für große Unternehmen und natürlich kleine und mittlere Einzelpersonen einfacher ist, es einzuführen.

Was die Kosten für die Einführung von Apache + PHP + MySQL unter Linux angeht, benötige ich keine Lizenz. Ich bin daher der Meinung, dass die Lohnkosten für das Gehalt und die Kosten für die Ausrüstung unabhängig vom verwendeten PC oder Raspelkuchen sind.

Wenn die Installationskosten 2500 Yen pro Stunde betragen, dauert der Aufbau eines neuen Webservers und Dateiservers 2 Stunden, und die Gesamtsumme beträgt 5000 Yen. Wenn eine neue Kombination aus gebrauchtem PC oder Raspeltorte und Festplatte oder SSD 30.000 bis 40.000 Yen kostet, betragen die Kosten für die Neuinstallation weniger als 50.000 Yen. Daher dauert es 6 Minuten, anstatt einen teuren Windows Server-Computer für 300.000 Yen zu kaufen. Ich bin der Meinung, dass IT-Lösungen auch für kleine und mittlere Unternehmen sowie für das individuelle Management bereichert werden.

Insbesondere im Fall von IoT wie Raspeye wird erwartet, dass es auf hybride Weise mit physikalischen Eigenschaften wie Sensoren kombiniert und in Daten umgewandelt werden kann. Daher möchte ich in Zukunft meinen Horizont erweitern und auf Qiita (˙꒳) setzen. ˙ᐢ)

Zukunft und nächstes Mal

Zusätzlich zum Erstellen eines Web-App-Servers mit PHP möchte ich auf das Erstellen eines Web-App-Servers mit Java (OpenJDK) eingehen.

Recommended Posts

Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers --3 MySQL 8.0 Einführung
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers ―― 1. Einführung in Apache
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers --2 PHP-Einführung
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --2 PHP Einführung
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver. 1. Apache-Einführung
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --3. Verwenden Sie MySQL
[Teil 2] Erstellen wir einen Webserver mit EC2 Linux
Webserverkonstruktion mit Apache 2.4 (httpd 2.4.43) + PHP 7.4 unter Linux ―― 4. Sicherheit (chown und firewalld)
[Einführung in AWS] Memorandum zum Erstellen eines Webservers auf AWS
Erstellen Sie eine LAMP-Umgebung mit Vagrant (Linux + Apache + MySQL + PHP)
Erstellen Sie einen Samba-Server unter Arch Linux
Lassen Sie uns einen WEB-Server mit Chromebook einrichten
Erstellen Sie Apache HTTP Server und Wildfly unter Oracle Linux 8
CTF-Anfänger haben versucht, einen Problemserver (Web) zu erstellen [Problem]
So erstellen Sie eine Python-Umgebung unter Amazon Linux 2
Eine super Einführung in Linux
Aufbau eines Linux-Webservers (Ubuntu & Apache)
Führen Sie einen Linux-Server mit GCP aus
Erstellen Sie mit Docker eine CentOS Linux 8-Umgebung und starten Sie Apache HTTP Server
Erstellen Sie Linux in einer Windows-Umgebung. Schritte zum Installieren und Migrieren von Laradock
Erstellen Sie einen Pypi-Cache-Server auf QNAP
Wie baue ich meinen eigenen Linux-Server?
Erstellen Sie einen NFS-Server unter Arch Linux
So aktualisieren Sie PHP unter Amazon Linux 2
So installieren Sie Apache (httpd) unter CentOS7
Wie installiere ich php7.4 unter Linux (Ubuntu)
So installieren Sie Apache (httpd) unter CentOS8
Erstellen Sie eine Django-Umgebung auf Raspai (MySQL)
Versuchen Sie, einen neuen Befehl unter Linux zu erstellen
Webserver als Ersatz für Apache: uWSGI-Leistungsoptimierung
Ich kann nicht schlafen, bis ich einen Server erstellt habe !! (Einführung in den Python-Server an einem Tag)
[Linux] Einführung in Linux
Yum-Befehl zum Zugriff auf MySQL mit Python 3 unter Linux
So installieren Sie Linux auf einem 32-Bit-UEFI-PC
So erstellen Sie eine Django (Python) -Umgebung auf Docker
[Teil 1] Lassen Sie uns einen Micra-Server unter Linux einrichten
Vorbereiten der Verwendung von Ansible auf einem vorhandenen Linux-Server
So führen Sie Django unter IIS auf einem Windows-Server aus
[Linux] So installieren Sie ein Paket auf einem Server ohne Internetumgebung (eigenständig)
So starten Sie einen einfachen WEB-Server, der CGI von PHP und Python ausführen kann
Ich habe eine Umgebung von der Centos-Installation bis zur Erweiterung der PHP-Quelle unter Linux erstellt, aber was tun, wenn ein Browserfehler auftritt?