- Carte Raspberry pi
- Carte SD (au minimum 16Go)
- Optionnel : Support de stockage pour le site web (Disque dur externe (SSD de préférence) ou clé USB)
- OS : Raspberry Pi OS with desktop
- Serveur Web : Nginx
- PHP
- Mysql/MariaDB
- Un onduleur connecté à votre Raspberry permet d'éviter les risques de pertes et de dégâts dûs à des coupures de courant en programmant un arrêt propre et automatique du serveur
- Demander à votre FAI (fournisseur d'accès à Internet) une adresse ip Fixe pour votre boxe internet. Dans le cas contraire, le lien entre le domaine et l'ip du serveur va se rompre, il faudra donc, le réindiquer à chaque changements, ce qui est contraignant.
- Télécharger l'image de l'OS sur Raspberrypi.org ( choisir 'Raspberry Pi OS with desktop' si l'on souhaite l'os avec interface graphique ou 'Raspberry Pi OS Lite' si l'on souhaite l'OS seul)
- Télécharger le logiciel Etcher qui va nous permettre de flasher l'image de l'OS téléchargée au préalable sur la carte SD.
- Sur Etcher, sélectionner l'image de l'OS téléchargée (que vous aurez décompressée au préalable), sélectionner ensuite la carte SD comme cible puis cliquer sur le bouton : 'Flash'.
- Une fois le flash terminé, débrancher/rebrancher la carte SD, celle-ci va maintenant afficher 2 périphériques (un du nom de 'boot' et un second)
- A partir d'un IDE (éditeur de texte), créer un fichier nommé 'ssh' sans extenstion et enregistrez-le dans le périphérique nommé 'boot'
- Ejecter la carte SD
- Insérer la carte SD dans la Raspberry Pi, raccorder cette dernière à internet avec un câble ethernet, puis brancher l'alimentation.
- Installer nginx :
sudo apt-get install nginx
- Installer php et php-fpm (permet de faire la liaison entre php et nginx):
sudo apt-get install php php-fpm
- Créer un dossier pour le site à mettre en ligne :
sudo mkdir -p /var/www/nomdusite.domaine du site/
Exemple :
sudo mkdir -p /var/www/google.fr/
- Entrer dans le répertoire :
cd /var/www/
- Modifier les droits du dossier (voir pour créer un nouvel utilisateur plus bas) :
sudo chown -R nomdelutilisateur /var/www/nomdusite.domaine du site
Exemple (Pour donner accès à tous les utilisateurs sur la raspberry) :
sudo chown -R root:users /var/www/google.fr
- Se connecter au serveur (protocole : sftp, hôte : adresse ip locale (ex : 192.168.1.27), port : 22, identifiant : l'utilisateur à qui on a donné les droits sur le dossier, mot de passe : celui de l'utilisateur)
- Aller dans le dossier parent
- Aller dans le dossier var puis le dossier www
- Sélectionner le dossier du site
- Créer un fichier index.php
- Aller dans le dossier nginx :
cd /etc/nginx
- Configurer le dossier sites-available
cd sites-available
- Créer un nouveau fichier
sudo nano
- Ecrire dans le fichier :
server {
listen: 80;
listen [::]:80;
root /var/www/nomdusite.domaine du site;
index index.php index.html index.html index.php;
serveur_name nomdusite.domaine du site;
location ~\.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.php;
}
⚠️ ATTENTION à bien respecter les espaces et tabulations
- Sauvegarder le fichier avec un
ctrl
+X
- Revenir dans le dossier nginx :
cd /etc/nginx
- Créer un lien symbolique dans sites-enabled (Permer de copier le fichier en le liant au premier, si on modifie un fichier, l'autre est automatiquement modifié) :
ln -s /etc/nginx/sites-available/nomdusite.domaine du site /etc/nginx/sites-enabled
-
Revenir à la racine avec
cd
-
Recharger nginx pour qu'il prenne les changements en considération :
sudo systemctl reload nginx
Cette étape permet d'ouvrir une passerelle entre internet et un appareil du réseau privé, ici la raspberry
- Se connecter aux paramètres de votre box internet (en général accessible en tapant l'ip locale de la box)
- Puis copiez votre ip publique (chez orange dans 'Informations système' > onglet 'Internet' > 'IPv4 WAN'), celle-ci correspond à l'adresse qui va menez à la box sur laquelle sont reliés vos sites.
- Reliez votre domaine à votre adresse publique IPv4.
- Mettre le TTL à la durée la plus courte.
- Sur les paramètres de votre box, ajoutez une passerelle extérieure vers la Raspberry. (Chez orange, dans 'Réseau' > 'NAT/PAT' > Créer une nouvelle règle).
- Sur cette nouvelle règle, sélectionnez 'http', laisser les ports 80 80 indiqués par défaut, sélectionnez 'TCP' puis sélectionnez la raspberry.
-
- Créer un dossier pour le site à mettre en ligne :
sudo mkdir -p /var/www/nomdusite.domaine du site/
Exemple :
sudo mkdir -p /var/www/google.fr/
- Entrer dans le répertoire :
cd /var/www/
-
- Modifier les droits du dossier (voir pour créer un nouvel utilisateur plus bas) :
sudo chown -R nomdelutilisateur /var/www/nomdusite.domaine du site
-
- Aller dans le dossier dossier sites-available de nginx :
cd /etc/nginx/sites-available
-
- Créer un nouveau fichier (qui sera nommé ensuite nomdusite.domaine du site) :
sudo nano
-
- Ecrire dans le fichier :
server {
listen: 80;
listen [::]:80;
root /var/www/nomdusite.domaine du site;
index index.php index.html index.html index.php;
serveur_name nomdusite.domaine du site;
location ~\.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.php;
}
⚠️ ATTENTION à bien respecter les espaces et tabulations
- Sauvegarder le fichier avec un
ctrl
+X
- Revenir dans le dossier nginx :
cd /etc/nginx
-
- Créer un lien symbolique dans sites-enabled (Permer de copier le fichier en le liant au premier, si on modifie un fichier, l'autre est automatiquement modifié) :
ln -s /etc/nginx/sites-available/nomdusite.domaine du site /etc/nginx/sites-enabled
-
Revenir à la racine avec
cd
-
- Recharger nginx pour qu'il prenne les changements en considération :
sudo systemctl reload nginx
- SOIT : Générer son propre certificat ssl, pour cela : Voir le tuto complet
Sur les paramètres de sa box internet, ouvrir une passerelle https vers la raspberry.
Créer la clé ssl :
cd /etc/nginx/certificate
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out nginx-certificate.crt -keyout nginx.key
Ajouter dans le fichier server du site les lignes :
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/nginx/certificate/nginx-certificate.crt;
ssl_certificate_key /etc/nginx/certificate/nginx.key;
root /var/www/nomdusite.domaine du site;
index index.php index.html index.htm;
serveur_name nomdusite.domaine du site;
location ~\.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.php;
}
- SOIT : Utiliser Cloudflare (celui-ci génère automatiquement un certificat SSL et masque l'adresse IP du serveur en redirigeant vers une adresse IP Cloudflare) :
Voir le tuto pour relier Cloudflare à son serveur
Pour ajouter le certificat depuis Cloudflare
Pour installer mysql (NE PAS INSTALLER PHP, APACHE ET PHPMYADMIN): Suivre ces étapes
Pour configurer mysql Suivre ces étapes
- Se connecter à mysql
mysql -u root -p
- Créer la table
CREATE DATABASE nomdelatable;
- Donner les droits à un utilisateur pour cette table :
GRANT ALL PRIVILEGES ON nomdelatable.* TO nomdelutilisateur@'%' IDENTIFIED BY 'motdepassedelutilisateur';
⁉️ A savoir que si l'utilisateur n'existe pas, il sera automatiquement créé.
- Demander à mysql de prendre en compte les changements de privilèges :
flush privileges;
Pour vérifier la mémoire utilisée et restante :
df -h
Pour se mettre en sudo sur toutes les prochaines commandes :
sudo su root
Pour créer un nouvel utilisateur (On ne peut normalement pas se connecter au serveur avec un logiciel ftp, si le nom de l'utilisateur est 'root') :
sudo adduser nomdutilisateur
sudo passwd nomdutilisateur
Pour se connecter avec ce nom d'utilisateur :
su nomdutilisateur
L'utilisateur administrateur par défaut sur raspberry est 'pi', pour se reconnecter comme 'pi' :
su pi
Pour détecter les appareils conncectés à la raspberry :
fdisk -l
- Pour affecter un appareil externe à un dossier sur la raspberry :
Créer le dossier qui pointera vers l'appareil sur la raspberry
mkdir /home/shares/public/usb
Relier l'appareil au dossier
mount cheminverslappareil cheminversledossierraspberry
Exemple :
mount /dev/sda1 /home/shares/public/usb
Donner les droits du dossier à un propriétaire :
sudo chown -R nomdelutilisateur /home/shares/public/usb
Pour donner tous les droits d'administrateur à un utilisateur :
Accéder au fichier de configuration de sudo
sudo visudo
Ajouter les deux lignes suivantes :
pi ALL=(ALL) NOPASSWD: ALL
nomdelutilisateur ALL=(ALL) NOPASSWD: ALL
Pour supprimer un utilisateur et son dossier sur le raspberry :
sudo deluser --remove-home nomdelutilisateur
Toutes les commandes sur les utilisateurs
Pour connaitre son adresse IP Publique : Site ou alors sur les paramètres de sa box :prendre l'IPV4 wan.
- Vérifier que la ligne "sendfile" de
nginx.conf
soit à 'off' - Si ce n'est pas le cas, le mettre à off et lancer un
sudo systemctl reload nginx
- Puis sur la page du site web sur le navigateur du serveur, faire un
ctrl
+shift
=R
sources :