[LINUX] Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et créez un serveur Web ―― 1. Introduction à Apache

Hypothèses et préparatifs

Article sur la construction du serveur Linux

Je construisais un serveur Web pour x64 tel que le PC habituel et les machines virtuelles telles que Hyper-V la dernière fois, mais cette fois PC et machines virtuelles Au lieu de cela, ** construisez sur Raspberry Pi avec Apache sur un serveur Web ** (⑅ • ᴗ • ⑅)

Signification de la compilation avec le code source

Il est tout aussi simple de configurer Apache sur n'importe quelle distribution, et vous aurez la version dont vous avez besoin (les commandes de package standard varient en fonction de la version de cette distribution).

Cependant, si vous compilez tous les packages à partir de la source, vous rechercherez toutes les bibliothèques principales, donc seules celles que vous souhaitez absolument réparer et exécuter, comme Apache et PHP, compileront la source et ce qui est nécessaire pour faire Pris en charge par les commandes de package standard telles que dnf et apt

environnement

--Programme serveur Web: Apache 2.4.46 (compilation source) --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

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

Installer les fonctions de décompression make, cmake et package

openSUSE15.1(RaspberryPi)


# zypper -n install make cmake tar bzip2

RaspberryPiOS(2020.08)


# apt-get -y install make cmake tar bzip2

Installation du compilateur GCC et C ++

openSUSE15.1(RaspberryPi)


# zypper -n install gcc gcc-c++

RaspberryPiOS(2020.08)


# apt-get -y install gcc build-essential

installation de la source zlib

J'ai installé le zlib avec l'emplacement par défaut.

# cd [Répertoire où se trouvent les fichiers d'archive zlib]
# tar zxvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11/
# ./configure
# make
# make install

Installez les packages requis pour compiler Apache avec la commande de package standard de distribution

En installant des bibliothèques Perl ou SSL, vous pouvez obtenir toutes les fonctionnalités dont vous avez besoin pour Apache. Si vous ne l'exécutez pas même si cela pose problème, vous obtiendrez une erreur indiquant qu'il n'y a pas de package et la compilation sera arrêtée (´ • ω • ̥`)

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

Installez APR et sa bibliothèque d'utilitaires

APR installe la bibliothèque dans /opt/apr-1.7.0 et APR-Util installe la bibliothèque dans /opt/apt-util-1.6.1

# cd [apr-1.7.0.tar.Répertoire où se trouve gz]
# 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.Répertoire où se trouve gz]
# 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	

Installation de la compilation des sources Apache 2.4

Eh bien, voici la production. Ce travail a pris un certain temps. C'était une tarte à la râpe, donc cela peut avoir pris environ 40 minutes. ..

configurer et faire

# cd [httpd-2.4.46.tar.Répertoire où se trouve gz]
# 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

Par conséquent, en tant que spécification de configuration, spécifiez le chemin spécifié dans l'installation pour les chemins APR et APR-Util. Ici, APR a été installé dans "/opt/apr-1.7.0" et APR-Util a été installé dans "/opt/apr-util-1.6.1", et je l'ai utilisé.

J'ai également activé SSL.

J'ai installé tous les packages requis ci-dessus et j'ai pu configurer sans erreur (\ * ´꒳` \ *) Maintenant, la compilation et l'installation essentielles. Si vous obtenez une erreur, Apache est déjà plein de fonctionnalités, il est donc difficile de savoir où l'erreur s'est produite (˙꒳ ˙ᐢ).

# make
# make install

Si vous pouvez compiler sans erreur, l'installation est terminée ♪ (\ * ˘︶˘ \ *) ...: \ * ♡

Préférences Apache

Après l'installation, vient ensuite le fichier de configuration (˙꒳ ˙ᐢ) Lorsque vous installez Apache avec la compilation source, Apache lui-même est installé dans / usr / local / apache2. Le fichier de configuration est stocké dans / usr / local / apache2 / conf /, alors configurez-y l'environnement Apache.

[Paramètres de base d'Apache]
# vi /usr/local/apache2/conf/httpd.conf

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


…
#ServerName www.example.com:80
ServerName localhost:80 ← Ajoutez cette ligne directement sous ↑
…
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
    …
    Options Indexes FollowSymLinks
↑ Au début "#Commentez avec ""
   (Ne pas autoriser l'accès inutile aux répertoires qui ne sont pas publiés en tant que pages)
…
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#LoadModule ssl_module modules/mod_ssl.so
Recherchez les deux lignes ci-dessus, et les deux sont "#Et chargez la bibliothèque so
…
#Include conf/extra/httpd-ssl.conf
↑ "#Et conf/extra/httpd-ssl.Permet de lire la conf
…
[SSL Apache(https)paramètres de]
# 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"
…

Ici, nous avons décidé que l'emplacement clé requis pour https est situé dans / usr / local / apache2 / conf /, qui est le même que le fichier de configuration.

Création de certificat SSL

À l'origine, le certificat a été créé via l'autorité de certification racine, mais ici nous donnerons la priorité à la méthode de rendre Apache compatible avec https **, donc nous n'aborderons pas l'autorité émettrice du certificat. Ainsi, lorsque vous y accédez, vous recevez un avertissement de sécurité [. .. .. ]

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

Dans le processus de création d'une clé SSL, il existe également un dialogue pour entrer le profil de l'organisation, mais vous pouvez créer le certificat sans problème en entrant ce qui suit

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=La préfecture dans laquelle vous vivez en exemple=Kanagawa>
Locality Name (eg, city) [Default City]:<what entry=Exemple de communes où vous vivez=Miura>
Organization Name (eg, company) [Default Company Ltd]:<what entry=Nom de l'organisation arbitraire>
Organizational Unit Name (eg, section) []:<what entry=Toute unité organisationnelle>
Common Name (eg, your name or your server's hostname) []:<what entry=Exemple de nom de domaine=kazumi-jam.chips.jp>
Email Address []:<what entry=Exemple d'adresse [email protected]>

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<what entry=Approprié pour le moment>
An optional company name []:<what entry=Vide Entrez pour le moment>

Je veux le coder en couleur d'une manière facile à comprendre, j'ai donc ajouté "que dois-je entrer" dans le style XML (\ * ˘︶˘ \ *) Le style de balise XML "<what entry =…" est , Que saisir "exemple =…" est un exemple d'entrée. En fait, peu importe s'il y a un blanc.

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

Après avoir créé server.csr, créez un ensemble de certificats.

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

Sans l'option "-days", elle n'est valable que pendant 90 jours et est inutile à d'autres fins que l'expérimentation. Donc ici, il est défini comme "-days 3650" pendant 10 ans. Même ainsi, le certificat lui-même n'a pas été émis par une institution approuvée par le certificat Oreore ... (\ * ˘ᗜ˘ \ *;)

Maintenant que vous avez créé le certificat SSL, modifiez les autorisations afin que personne d'autre ne puisse y toucher.

# 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 au total
drwxr-xr-x 2 racine racine 313 24 juin 13:08 extra
-rw-r--r--1 racine racine 19316 24 juin 13:07 httpd.conf
-rw-r--r--1 racine racine 13064 24 juin 13:03 magic
-rw-r--r--1 racine racine 60847 24 juin 13:03 mime.types
drwxr-xr-x 3 racine racine 37 24 juin 13:03 original
-rw-------1 racine racine 1379 24 juin 13:06 server.crt
-rw-------1 racine racine 1119 24 juin 13:04 server.csr
-rw-------1 racine racine 1675 24 juin 13:03 server.key

Avec la commande "ls -l", ** 3 fichiers liés aux clés de certificat tels que "server.crt" (les 3 dernières lignes de la liste ci-dessus) appartiennent à root et les permissions sont "rw -------" (600) ”** Confirmez que c'est le cas. C'est une faille de sécurité lorsque le contenu de la clé privée est visible par les autres utilisateurs. ..

Démarrer le service Apache

Créer et activer le script de démarrage du service Apache

Vous disposez de tous les paramètres d'environnement et des clés nécessaires pour Apache. J'aimerais donc pouvoir le démarrer. Puisque le script de démarrage est Systemd, créez-le dans / 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

Le script Systemd n'est pas expliqué en détail ici, mais comme le fichier de démarrage d'Apache lui-même se trouve dans / usr / local / apache2 / bin, vous pouvez démarrer Apache en exécutant la commande "apachectl" pour y démarrer le service Apache. Et peut être arrêté. De plus, dans le cas d'Apache, le processus du serveur Web est exécuté en tant que sous-processus (en bref, lorsqu'il est démarré et exécuté sur un certain terminal, il sera à l'état "en cours d'exécution" et d'autres opérations ne seront pas possibles. , Vous pouvez revenir à l'entrée de commande et exécuter les autres opérations telles quelles. Comprenez-vous ??), spécifiez donc forking pour Type.

Paramètres du pare-feu

Ensuite, il accepte ** les ports 80 (http) et 443 (httpd) **. En principe, ** le serveur et le client appartiennent au réseau 192.168.1.0/24 **, donc l'accès depuis un autre extérieur n'est pas accepté, alors autorisez-le avec la règle riche comme suit.

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

Démarrer et vérifier le fonctionnement

Commençons. Commencez toujours par activer Activer et confirmez que l'état est «Actif» et «En cours d'exécution».

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

**Pourtant…! !! ** ** Avec openSUSE, systemctl start httpd ** Apache n'a pas pu démarrer! !! ** (´ • ω • ̥`)

openSUSE15.1(raspberryPi)


# journalctl -xe

Lorsque j'ai vérifié le journal du journal obtenu par la commande ci-dessus, j'ai trouvé que ** openSUSE de Raspberry Pi n'a pas l'utilisateur "démon" initialement spécifié dans le fichier de configuration Apache **. J'ai donc décidé de créer un nouvel utilisateur pour démarrer le processus Apache. .. ..

openSUSE15.1(raspberryPi)


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

…(Omission)…
Changer en démon utilisateur ← apache
Passer au démon de groupe ← utilisateurs
…(Omission)…

# systemctl start httpd

Dans openSUSE, par défaut le groupe d'utilisateurs est le même que le nom d'utilisateur, non créé, mais créé en tant que groupe "utilisateurs".

Vous pouvez maintenant le démarrer avec "systemctl start httpd"! !!

Du côté client Windows, entrez https: // [Adresse IP du serveur Linux] / dans le navigateur pour confirmer.

Ici, le serveur Web Linux est 192.168.1.18, alors allez sur https://192.168.1.18. Bien sûr, le certificat n'est pas émis par une institution de confiance, vous obtiendrez donc une erreur de confidentialité ;; dans ce cas, sélectionnez "Accéder tel quel" pour continuer (bien que cela se comporte différemment dans Chrome et Firefox).

itwks.png

L'image ci-dessus est une capture d'une machine virtuelle, mais le même écran que ci-dessus apparaît sur le Raspberry Pi, donc c'est un succès! !! (˶˙ᵕ˙˶)

la prochaine fois

Présentez PHP et publiez les fondations du serveur d'applications Web

Recommended Posts

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
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 une caméra de surveillance WEB avec Raspberry Pi et OpenCV
Créez des serveurs sur Linux et des réseaux locaux avec Raspberry Pi NextCloud et le partage de bureau
Créer un environnement Tensorflow avec Raspberry Pi [2020]
J'ai créé un serveur Web avec Razpai pour regarder des anime
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)
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
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
Créez un environnement LAMP avec Vagrant (Linux + Apache + MySQL + PHP)
Créer une application Web avec Django
Construire un serveur VPN avec Raspberry Pie
Utiliser une webcam avec Raspberry Pi
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
Surveillance des animaux avec Rekognition et Raspberry pi
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
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
Configurons un serveur WEB avec Chromebook
Faire une minuterie de lavage-séchage avec Raspberry Pi
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Introduction et utilisation de la bouteille Python ・ Essayez de configurer un serveur Web simple avec une fonction de connexion
Démarrez un serveur Web en utilisant Bottle et Flask (j'ai également essayé d'utiliser Apache)
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
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]
Construire un environnement Django sur Raspai (MySQL)
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
Construire un environnement de développement Python sur Raspberry Pi
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)
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
Détecter l'état de port du masque avec OpenCV et Raspberry Pi
[Partie 2] Construisons un serveur Web avec EC2 Linux
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Créer un serveur HTTP Apache et Wildfly sur Oracle Linux 8
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Le débutant de la CTF a tenté de créer un serveur problématique (Web) [Problème]
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python