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 ** (⑅ • ᴗ • ⑅)
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
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.
openSUSE15.1(RaspberryPi)
# zypper -n install make cmake tar bzip2
RaspberryPiOS(2020.08)
# apt-get -y install make cmake tar bzip2
openSUSE15.1(RaspberryPi)
# zypper -n install gcc gcc-c++
RaspberryPiOS(2020.08)
# apt-get -y install gcc build-essential
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
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
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
Nun, hier ist die Produktion. Diese Arbeit dauerte einige Zeit. Es war eine Raspeltorte, also hat es ungefähr 40 Minuten gedauert. ..
# 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 ♪ (\ * ˘︶˘ \ *) ...: \ * ♡
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.
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. ..
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.
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
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).
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! !! (˶˙ᵕ˙˶)
Führen Sie PHP ein und veröffentlichen Sie die Grundlagen des Web-App-Servers