[LINUX] Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver. 1. Apache-Einführung

Annahmen und Vorbereitungen

Artikel zum Aufbau eines Linux-Servers

Ich habe beim letzten Mal einen Webserver für x64 wie den üblichen PC und virtuelle Maschinen wie Hyper-V erstellt, diesmal handelt es sich jedoch um einen PC und eine virtuelle Maschine Bauen Sie stattdessen ** mit Apache auf einem Webserver auf Raspberry Pi auf ** (⑅ • ᴗ • ⑅)

Bedeutung des Kompilierens mit Quellcode

Es ist genauso einfach, Apache auf jeder Distribution zu konfigurieren, und Sie haben die Version, die Sie benötigen (die Standardpaketbefehle variieren je nach Version dieser Distribution).

Wenn Sie jedoch alle Pakete aus der Quelle kompilieren, durchsuchen Sie alle wichtigen Bibliotheken, sodass nur diejenigen, die Sie unbedingt fest ausführen möchten, wie Apache und PHP, die Quelle kompilieren und was für make erforderlich ist. Unterstützt von Standardpaketbefehlen wie dnf und apt

Umgebung

Annahme

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

Vorbereitung

Installieren Sie die Dekomprimierungsfunktionen make, cmake und package

openSUSE15.1(RaspberryPi)


# zypper -n install make cmake tar bzip2

RaspberryPiOS(2020.08)


# apt-get -y install make cmake tar bzip2

Installation von GCC und C ++ Compiler

openSUSE15.1(RaspberryPi)


# zypper -n install gcc gcc-c++

RaspberryPiOS(2020.08)


# apt-get -y install gcc build-essential

Installation der zlib-Quelle

Ich habe die zlib mit dem Standardspeicherort installiert, ohne sie zu ändern.

# cd [Verzeichnis, in dem sich zlib-Archivdateien befinden]
# tar zxvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11/
# ./configure
# make
# make install

Installieren Sie die zum Kompilieren von Apache erforderlichen Pakete mit dem Befehl Distribution Standard Package

Durch die Installation von Perl- oder SSL-Bibliotheken erhalten Sie alle Funktionen, die Sie für Apache benötigen. Wenn Sie es nicht ausführen, auch wenn es problematisch ist, wird eine Fehlermeldung angezeigt, dass kein Paket vorhanden ist und die Kompilierung gestoppt wird (´ • ω • ̥`).

openSUSE15.1(RaspberryPi)


# zypper -n install ncurses-devel perl libaio1 libaio-devel perl-Data-Dump libexpat-devel pcre pcre-devel libopenssl-devel

RaspberryPiOS(2020.08)


# apt-get -y install libncurses5-dev perl libaio1 libaio-dev libexpat1-dev libpcre3 libpcre3-dev libssl-dev

Installieren Sie APR und seine Dienstprogrammbibliothek

APR installiert die Bibliothek in /opt/apr-1.7.0 und APR-Util installiert die Bibliothek in /opt/apt-util-1.6.1

# cd [apr-1.7.0.tar.Verzeichnis, in dem sich gz befindet]
# tar xvzf apr-1.7.0.tar.gz
# cd apr-1.7.0/
# ./configure --prefix=/opt/apr-1.7.0
# make
# make install

# cd [apr-util-1.6.1.tar.Verzeichnis, in dem sich gz befindet]
# tar xvzf apr-util-1.6.1.tar.gz
# cd apr-util-1.6.1/
# ./configure --prefix=/opt/apr-util-1.6.1 --with-apr=/opt/apr-1.7.0
# make
# make install	

Installieren der Apache 2.4-Quellkompilierung

Nun, hier ist die Produktion. Diese Arbeit dauerte einige Zeit. Es war eine Raspeltorte, also hat es ungefähr 40 Minuten gedauert. ..

konfigurieren und machen

# cd [httpd-2.4.46.tar.Verzeichnis, in dem sich gz befindet]
# tar xvzf httpd-2.4.46.tar.gz
# cd httpd-2.4.46/
# ./configure --with-apr=/opt/apr-1.7.0 --with-apr-util=/opt/apr-util-1.6.1 --enable-so --enable-ssl --enable-mods-shared=all --enable-mpms-shared=all

Geben Sie daher als Konfigurationsspezifikation den in der Installation angegebenen Pfad für die Pfade APR und APR-Util an. Hier wurde APR in "/opt/apr-1.7.0" und APR-Util in "/opt/apr-util-1.6.1" installiert und ich habe es verwendet.

Ich habe auch SSL aktiviert.

Ich habe oben alle erforderlichen Pakete installiert und konnte sie ohne Fehler konfigurieren (\ * ´꒳` \ *). Nun die wesentliche Kompilierung und Installation. Wenn Sie dort einen Fehler erhalten, ist Apache bereits voll von Funktionen, sodass es mühsam ist, herauszufinden, wo der Fehler aufgetreten ist (˙꒳ ˙ᐢ).

# make
# make install

Wenn Sie fehlerfrei kompilieren können, ist die Installation abgeschlossen ♪ (\ * ˘︶˘ \ *) ...: \ * ♡

Apache-Einstellungen

Nach der Installation folgt die Einstellungsdatei (˙꒳ ˙꒳). Wenn Sie Apache mit Quellkompilierung installieren, wird Apache selbst in / usr / local / apache2 installiert. Die Konfigurationsdatei wird in / usr / local / apache2 / conf / gespeichert. Konfigurieren Sie daher die Apache-Umgebung darin.

[Apache Grundeinstellungen]
# vi /usr/local/apache2/conf/httpd.conf

/usr/local/apache2/conf/httpd.conf


…
#ServerName www.example.com:80
ServerName localhost:80 ← Fügen Sie diese Zeile direkt unter ↑ hinzu
…
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
    …
    Options Indexes FollowSymLinks
↑ Am Anfang "#Mit "" auskommentieren
   (Lassen Sie keinen unnötigen Zugriff auf Verzeichnisse zu, die nicht als Seiten veröffentlicht wurden)
…
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#LoadModule ssl_module modules/mod_ssl.so
Suchen Sie nach den beiden Zeilen oben, und beide sind "#Und lade die so Bibliothek
…
#Include conf/extra/httpd-ssl.conf
↑ "#Und conf/extra/httpd-ssl.Ermöglicht das Lesen von conf
…
[Apache SSL(https)Einstellungen von]
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf

/usr/local/apache2/conf/extra/httpd-ssl.conf


…
SSLCertificateFile "/usr/local/apache2/conf/server.crt"
…
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
…

Hier haben wir entschieden, dass sich der für https erforderliche Schlüsselspeicherort in / usr / local / apache2 / conf / befindet, der mit der Konfigurationsdatei identisch ist.

Erstellung von SSL-Zertifikaten

Ursprünglich wurde das Zertifikat über die Root-Zertifizierungsstelle erstellt. Hier wird jedoch der Methode Vorrang eingeräumt, mit der Apache mit https ** kompatibel gemacht werden kann, sodass die Zertifizierungsstelle nicht berührt wird. Wenn Sie darauf zugreifen, erhalten Sie eine Sicherheitswarnung [. .. .. ]]

# cd /usr/local/apache2/conf/
# openssl genrsa -out server.key 2048
# openssl req -new -key server.key -out server.csr

Beim Erstellen eines SSL-Schlüssels gibt es auch einen Dialog zum Eingeben des Profils der Organisation. Sie können das Zertifikat jedoch problemlos erstellen, indem Sie Folgendes eingeben

python


# openssl req -new -key server.key -out server.csr

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:<what entry=Die Präfektur, in der Sie leben, ist ein Beispiel=Kanagawa>
Locality Name (eg, city) [Default City]:<what entry=Gemeinden, in denen Sie leben, Beispiel=Miura>
Organization Name (eg, company) [Default Company Ltd]:<what entry=Name einer beliebigen Organisation>
Organizational Unit Name (eg, section) []:<what entry=Jede Organisationseinheit>
Common Name (eg, your name or your server's hostname) []:<what entry=Beispiel für einen Domainnamen=kazumi-jam.chips.jp>
Email Address []:<what entry=Beispiel für eine [email protected]>

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<what entry=Vorerst angemessen>
An optional company name []:<what entry=Leer Geben Sie vorerst ein>

Ich möchte es auf leicht verständliche Weise farblich kennzeichnen, daher habe ich im XML-Stil (\ * ˘︶˘ \ *) "Was soll ich eingeben" hinzugefügt. Der XML-Tag-Stil "<what entry = ..." ist , Was "example = ..." einzugeben ist, ist ein Beispiel für die Eingabe. Eigentlich spielt es keine Rolle, ob es ein Leerzeichen gibt.

Beispiel:
State or Province Name (full name) []: Kanagawa Pref.
Locality Name (eg, city) [Default City]: Miura city

Erstellen Sie nach dem Erstellen von server.csr eine Reihe von Zertifikaten.

# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

Ohne die Option "-days" ist sie nur 90 Tage gültig und für andere Zwecke als zum Experimentieren unbrauchbar. Hier wird es also für 10 Jahre als "-days 3650" festgelegt. Trotzdem wurde das Zertifikat selbst nicht von einer Institution ausgestellt, der das Oreore-Zertifikat vertraut ... (\ * ˘ᗜ˘ \ *;)

Nachdem Sie das SSL-Zertifikat erstellt haben, ändern Sie die Berechtigungen so, dass niemand anderes sie berühren kann.

# chmod 600 /usr/local/apache2/conf/server.crt
# chmod 600 /usr/local/apache2/conf/server.csr
# chmod 600 /usr/local/apache2/conf/server.key
# ls -l /usr/local/apache2/conf/
108 insgesamt
drwxr-xr-x 2 Wurzel Wurzel 313 24. Juni 13:08 extra
-rw-r--r--1 Wurzel Wurzel 19316 24. Juni 13:07 httpd.conf
-rw-r--r--1 Wurzel Wurzel 13064 24. Juni 13:03 magic
-rw-r--r--1 Wurzel Wurzel 60847 24. Juni 13:03 mime.types
drwxr-xr-x 3 Wurzel Wurzel 37 24. Juni 13:03 original
-rw-------1 Wurzel Wurzel 1379 24. Juni 13:06 server.crt
-rw-------1 Wurzel Wurzel 1119 24. Juni 13:04 server.csr
-rw-------1 Wurzel Wurzel 1675 24. Juni 13:03 server.key

Mit dem Befehl "ls -l" gehören ** 3 Dateien, die sich auf Zertifikatschlüssel wie "server.crt" beziehen (die unteren 3 Zeilen in der obigen Liste), root und die Berechtigungen sind "rw -------". (600) ”** Bestätigen Sie, dass dies der Fall ist. Es ist eine Sicherheitsverletzung, wenn der Inhalt des privaten Schlüssels für andere Benutzer sichtbar ist. ..

Starten Sie den Apache-Dienst

Erstellen und aktivieren Sie das Startskript für den Apache-Dienst

Sie haben alle notwendigen Umgebungseinstellungen und Schlüssel für Apache. Also möchte ich es starten können. Da das Startskript Systemd ist, erstellen Sie es in / etc / systemd / system

# cd /etc/systemd/system
# vi httpd.service

httpd.service


[Unit]
Description=Apache

[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl stop

[Install]
WantedBy=multi-user.target

Das Systemd-Skript wird hier nicht im Detail erläutert. Da sich die Apache-Startdatei selbst in / usr / local / apache2 / bin befindet, können Sie Apache starten, indem Sie den Befehl "apachectl" ausführen, um den Apache-Dienst darin zu starten. Und kann gestoppt werden. Im Fall von Apache wird der Prozess des Webservers als Unterprozess ausgeführt (kurz gesagt, wenn er auf einem bestimmten Terminal gestartet und ausgeführt wird, befindet er sich im Status "Ausführen" und andere Vorgänge sind nicht möglich. , Sie können zur Befehlseingabe zurückkehren und andere Operationen so ausführen, wie sie sind. Verstehen Sie?), Geben Sie also Forking für Type an.

Firewall-Einstellungen

Dann akzeptiert es ** Ports 80 (http) und 443 (httpd) **. Als Voraussetzung ** gehören der Server und der Client zum Netzwerk von 192.168.1.0/24 **, sodass der Zugriff von anderen nicht akzeptiert wird. Lassen Sie ihn daher mit der folgenden Rich-Regel zu.

openSUSE15.1(RaspberryPi)(firewalld)


# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="80" protocol="tcp" accept'
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="443" protocol="tcp" accept'
# firewall-cmd --reload

RaspberryPiOS2020.08(ufw)


# ufw allow proto tcp from 192.168.1.0/24 to any port 80
# ufw allow proto tcp from 192.168.1.0/24 to any port 443
# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 30303/tcp                  ALLOW IN    192.168.1.0/24
[ 2] 5900:5999/tcp              ALLOW IN    192.168.1.0/24
[ 3] 80/tcp                     ALLOW IN    192.168.1.0/24
[ 4] 443/tcp                    ALLOW IN    192.168.1.0/24

Starten und überprüfen Sie den Betrieb

Fangen wir an. Beginnen Sie immer mit Aktivieren Aktivieren und bestätigen Sie, dass der Status "Aktiv" und "Wird ausgeführt" lautet.

# systemctl start httpd
# systemctl enable httpd
# systemctl status httpd

**Jedoch…! !! ** ** ** Mit openSUSE konnte systemctl start httpd ** Apache nicht gestartet werden! !! ** (´ • ω • ̥`)

openSUSE15.1(raspberryPi)


# journalctl -xe

Als ich das mit dem obigen Befehl erhaltene Journalprotokoll überprüfte, stellte ich fest, dass ** in openSUSE von Raspberry Pi nicht der Benutzer "Daemon" vorhanden ist, der ursprünglich in der Apache-Konfigurationsdatei angegeben wurde **. Deshalb habe ich beschlossen, einen neuen Benutzer zu erstellen, um den Apache-Prozess zu starten. .. ..

openSUSE15.1(raspberryPi)


# useradd -m apache
# passwd apache
# vi /usr/local/apache2/conf/httpd.conf

…(Unterlassung)…
Wechseln Sie zu User Daemon ← Apache
Wechseln Sie zu Group Daemon ← Benutzern
…(Unterlassung)…

# systemctl start httpd

In openSUSE entspricht die Benutzergruppe standardmäßig dem Benutzernamen, der nicht erstellt, sondern als "Benutzer" -Gruppe erstellt wurde.

Sie können es jetzt mit "systemctl start httpd" starten! !!

Geben Sie auf der Windows-Clientseite zur Bestätigung https: // [IP-Adresse des Linux-Servers] / in den Browser ein.

Hier lautet der Linux-Webserver 192.168.1.18. Gehen Sie also zu https://192.168.1.18. Natürlich wird das Zertifikat nicht von einer vertrauenswürdigen Institution ausgestellt, daher wird ein Datenschutzfehler angezeigt. Wählen Sie in diesem Fall "Zugriff wie besehen" aus, um fortzufahren (obwohl es sich in Chrome und Firefox anders verhält).

itwks.png

Das Bild oben ist eine Aufnahme einer virtuellen Maschine, aber auf dem Raspberry Pi wird derselbe Bildschirm wie oben angezeigt. Es ist also ein Erfolg! !! (˶˙ᵕ˙˶)

nächstes Mal

Führen Sie PHP ein und veröffentlichen Sie die Grundlagen des Web-App-Servers

Recommended Posts

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
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
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers --3 MySQL 8.0 Einführung
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Erstellen Sie Server in Linux und lokalen Netzwerken mit Raspberry Pi NextCloud und Desktop-Sharing
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Ich habe mit Razpai einen Webserver erstellt, um Anime zu schauen
Erstellen Sie mit Docker eine CentOS Linux 8-Umgebung und starten Sie Apache HTTP Server
Starten Sie einen Webserver mit Python und Flask
Webserverkonstruktion mit Apache 2.4 (httpd 2.4.43) + PHP 7.4 unter Linux ―― 4. Sicherheit (chown und firewalld)
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 3: Installieren und Konfigurieren von dnsmasq)
Einfache Einführung in Home Hack mit Raspberry Pi und discord.py
Ich habe versucht, Raspeye und conect + mit der Web-API zu verbinden
Richten Sie einen Webserver mit CentOS7 + Anaconda + Django + Apache ein
Erstellen Sie mit Falcon einen Light-Speed-Web-API-Server
Erstellen Sie eine LAMP-Umgebung mit Vagrant (Linux + Apache + MySQL + PHP)
Erstellen Sie eine Webanwendung mit Django
Aufbau eines VPN-Servers mit Raspberry Pie
Verwenden einer Webkamera mit Raspberry Pi
Weihnachtsklassiker (?) Einen Weihnachtsbaum mit Raspberry Pi und Philips Hue anzünden
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Erstellen Sie einen Kanji-Kompass mit Raspberry Pi und Sense Hat
Haustierüberwachung mit Rekognition und Raspberry pi
[Raspberry Pi] Fügen Sie ein Thermometer und ein Feuchtigkeitsmessgerät hinzu
Erstellen Sie mit Raspberry Pi einen WLAN-Ethernet-Konverter und einen einfachen Router
[Python + PHP] Erstellen Sie mit Raspberry Pi einen Temperatur-, Feuchtigkeits- und Druckmonitor
Lassen Sie uns einen WEB-Server mit Chromebook einrichten
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Bedienen Sie das Oszilloskop mit dem Raspberry Pi
Einführung und Verwendung der Python-Flasche ・ Versuchen Sie, einen einfachen Webserver mit Anmeldefunktion einzurichten
Starten Sie einen Webserver mit Bottle and Flask (ich habe auch versucht, Apache zu verwenden)
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Stellen Sie Docker in Windows Home und führen Sie einen einfachen Webserver mit Python aus
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
Cross-Compilieren von Raspberry Pi und Erstellen einer Remote-Debug-Entwicklungsumgebung mit VS Code
Erstellen eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (3) Empfangen einer Python-Datei
[Für Anfänger] Ich habe mit Raspberry Pi einen menschlichen Sensor erstellt und LINE benachrichtigt!
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Erstellen Sie einen lokalen Server mit einem einzeiligen Befehl [Mac]
Erstellen Sie eine Django-Umgebung auf Raspai (MySQL)
Starten Sie mit Docker einen einfachen Python-Webserver
MQTT Radicon Car mit Arduino und Himbeere
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
Kompilieren Sie Rust und führen Sie es mit einem einzigen Befehl aus
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Steuern Sie die Musikwiedergabe auf einem Smartphone, das mit Raspberry Pi 3 und Bluetooth mit AVRCP verbunden ist
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 4: Erstellen eines NFS-Servers und Importieren eines Client-Betriebssystems)
Erstellen Sie einen Farbsensor mit einem Raspeltorte und einer Kamera
Einfaches IoT, um mit Raspeye und MESH zu beginnen
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Ermitteln Sie den Tragezustand der Maske mit OpenCV und Raspberry Pi
[Teil 2] Erstellen wir einen Webserver mit EC2 Linux
Messen Sie Temperatur und Luftfeuchtigkeit mit Raspberry Pi3 und visualisieren Sie mit Ambient
Erstellen Sie Apache HTTP Server und Wildfly unter Oracle Linux 8
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
CTF-Anfänger haben versucht, einen Problemserver (Web) zu erstellen [Problem]
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden