Paradise GTP

Premium
Inscription
30 Juin 2013
Messages
4 265
Réactions
4 409
Points
21 005
RGCoins
20
You must be registered for see images attach

Dans ce tutoriel, nous allons voir comment installer et configurer un serveur web (Apache) et SQL directement sur un serveur Ubuntu.
Je ne ferai pas la partie sécurisation du serveur, mais uniquement l'installation.

Pour réaliser ce tutoriel, il vous faudra évidemment un serveur (dans mon cas, sous Ubuntu 22.04) et éventuellement un ou plusieurs noms de domaine.

You must be registered for see images attach

Une fois connecté à votre serveur en SSH (dans mon cas, j'utilise PuTTY), nous allons commencer par mettre à jour notre serveur si cela n'a pas déjà été fait.

Premièrement, nous allons mettre à jour la liste des paquets disponibles.
Code:
sudo apt-get update

Ensuite, nous allons mettre à jour nos paquets (cette mise à jour peut durer plusieurs minutes).
Code:
sudo apt-get upgrade

Une fois notre serveur à jour, nous allons procéder à l'installation d'Apache.
Code:
sudo apt install apache2

Pour la réalisation de ce tutoriel, j'ai loué un nom de domaine (paradisergfr.eu). De votre côté, il faudra remplacer par vos informations dans la suite du tutoriel.
Nous allons maintenant créer le répertoire dans lequel nous déposerons les fichiers de notre site (PHP, HTML, CSS, JS…).
Code:
sudo mkdir -p /var/www/paradisergfr.eu/public_html

Si nous nous connectons avec FileZilla à notre serveur, nous pouvons voir que notre répertoire s'est correctement créé.
You must be registered for see images attach


Pour éviter tout problème de droits, nous allons modifier les autorisations sur notre dossier /var/www.
Code:
sudo chmod -R 755 /var/www

Maintenant, nous allons créer un fichier index.html pour vérifier que tout fonctionne bien. Vous êtes libre de mettre ce que vous voulez dans ce fichier. Comme nous n'avons pas encore installé PHP, il est important de créer un fichier HTML.
HTML:
<html>
  <head>
    <title>Bienvenue !</title>
  </head>
  <body>
    <h1>Cela fonctionne correctement !</h1>
  </body>
</html>

Une fois le fichier créé, nous allons le placer dans notre répertoire public_html.

Maintenant, il va falloir créer notre fichier d'hôte virtuel afin que les requêtes vers notre serveur soient redirigées vers notre dossier public_html.
Les fichiers d’hôte virtuel sont les fichiers qui spécifient la configuration réelle de nos hôtes virtuels et dictent comment le serveur web Apache répondra aux diverses requêtes de domaine.

Lors de l'installation d'Apache, un fichier d'hôte virtuel par défaut est créé. Vous pouvez le retrouver dans le répertoire suivant : /etc/apache2/sites-available/000-default.conf. Ce que nous allons donc faire, c'est copier ce fichier pour créer le nôtre. Vous pouvez le faire directement depuis FileZilla en le prenant sur votre poste, ou à l'aide de cette commande :
Code:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/paradisergfr.eu.conf

Pour la modification du fichier (car oui, il faut le modifier), vous pouvez le faire depuis votre ordinateur, soit avec Nano (ou un autre éditeur de texte de votre serveur). Pour ma part, je récupère le fichier sur mon poste. Une fois les commentaires supprimés (ligne commençant par #), vous devriez avoir quelque chose comme ça :
You must be registered for see images attach


En premier lieu, il faut modifier la valeur de ServerAdmin, qui est une adresse e-mail sur laquelle l'administrateur du site (logiquement, vous) peut recevoir des mails.

Ensuite, on rajoute deux directives. La première, ServerName, correspond au domaine de base qui doit correspondre à cette définition d'hôte virtuel ; il s'agira de votre domaine. La seconde, appelée ServeurAlias, définit d'autres noms qui doivent correspondre comme s'ils étaient le nom de base. C'est utile pour faire correspondre les hôtes que vous avez définis, comme www.

Pour finir, il faut modifier DocumentRoot pour mettre le répertoire de votre dossier public_html créé précédemment.
Voici, pour mon exemple, le fichier VirtualHost :
Code:
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName paradisergfr.eu
    ServerAlias www.paradisergfr.eu
    DocumentRoot /var/www/paradisergfr.eu/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Une fois que notre fichier est en place sur notre serveur, il va falloir l'activer en utilisant cette commande :
Code:
sudo a2ensite paradisergfr.eu.conf

Avec cette commande, vous pouvez aussi désactiver la configuration par défaut d'Apache :
Code:
sudo a2dissite 000-default.conf

Dans votre console, vous voyez qu'il est indiqué qu'il faut redémarrer Apache pour que les modifications soient prises en compte.
Code:
sudo systemctl restart apache2

Pour finir, depuis l'hébergeur (dans mon cas, OuiHeberg) où vous louez votre nom de domaine, il va falloir modifier les DNS afin de faire pointer votre domaine vers votre serveur Apache.
Normalement, vous devriez avoir une (ou des) entrées A pointant vers une adresse IP qui correspond à une page de votre hébergeur. Nous allons modifier ces entrées pour pointer vers l'adresse IP de votre serveur. Le processus de modification ou d'ajout peut varier en fonction de votre hébergeur, je vous laisse chercher de votre côté.
You must be registered for see images attach


Félicitations ! Votre serveur Apache est correctement installé et votre nom de domaine est bien redirigé vers le serveur !
You must be registered for see images attach

Vous pouvez maintenant effectuer cette opération pour chacun de vos noms de domaine. Un serveur peut héberger plusieurs sites


You must be registered for see images attach

Maintenant que nous avons procédé à l'installation du serveur Apache, nous allons également installer le serveur PHP et SQL.

Commençons par installer MySQL Server. Cette installation ne vous demandera aucun mot de passe ni de modifications de configuration. Veuillez noter que cette installation de MySQL n'est pas sécurisée.
Code:
sudo apt-get install mysql-server mysql-client mysql-common

Cependant, il existe un script pour sécuriser l'installation. À travers une série d'invites, vous pourrez effectuer des changements aux options de sécurité de MySQL.
Code:
sudo mysql_secure_installation

La première question vous demande de choisir le mot de passe pour l'utilisateur root (MySQL).
La seconde question vous demande si vous voulez activer la validation des mots de passe afin qu'ils soient suffisamment sécurisés.
La troisième question vous demande si vous voulez retirer les accès anonymes.
La quatrième question vous demande si vous voulez retirer l'accès root distant.
La cinquième question vous demande si vous voulez retirer la base 'test' et ses accès.
La dernière question vous demande si vous voulez mettre à jour les privilèges suite à vos modifications.

Vous pouvez maintenant tester la connexion en utilisant cette commande.
Code:
mysql -ulogin -pmotdepasse

En remplaçant ces informations par ce que vous avez défini (le "-u" pour l'utilisateur et "-p" pour le mot de passe doivent être devant vos informations).

Vous devriez tomber sur la console SQL. (Commande pour en sortir : exit)
You must be registered for see images attach


Maintenant que votre serveur SQL est installé, pour plus de visibilité, nous allons procéder à l'installation de PHPMyAdmin.
Code:
sudo apt install phpmyadmin

Lors de l'installation, il vous sera demandé de choisir un mot de passe pour l'utilisateur MySQL phpmyadmin, d'indiquer le mot de passe que vous avez précédemment choisi pour l'utilisateur root ainsi que le type de serveur que vous utilisez (dans notre cas, Apache2).

Une fois que l'installation est terminée, si vous vous rendez à l'adresse suivant VOTRESITE/phpmyadmin, vous devriez avoir la page de connexion à PHPMyAdmin. (VOTRESITE est bien sûr à remplacer par votre domaine)
You must be registered for see images attach


Vous pouvez donc vous connecter avec vos identifiants et accéder à l'interface de PHPMyAdmin.

Le problème est que l'accès à votre PHPMyAdmin est configuré par défaut, c'est-à-dire que l'URL /phpmyadmin est la première adresse qu'une personne mal intentionnée va tester pour accéder à votre base de données.
Ce que nous allons donc faire, c'est modifier l'alias de la page d'accès. Pour cela, nous allons récupérer (ou éditer directement) le fichier de configuration /etc/phpmyadmin/apache.conf.

Dans votre fichier, vous aurez au début l'alias d'accès :
Alias /phpmyadmin /usr/share/phpmyadmin

Il faut donc modifier "/phpmyadmin" par ce que vous voulez. Pour ma part, je vais mettre "/database" (je ne vous recommande pas non plus /database).
Une fois votre fichier mis à jour, il va falloir recharger la configuration d'Apache avec cette commande :
Code:
sudo systemctl reload apache2

Si vous retentez d'accéder à votre page "/phpmyadmin", elle ne devrait plus fonctionner, mais l'adresse "/database" devrait fonctionner normalement.

Si vous souhaitez avoir plus de sécurité sur votre page PHPMyAdmin, vous pouvez configurer un .htaccess ainsi qu'un .htpasswd (ceci est recommandé).
Pour ce faire, nous allons à nouveau modifier notre fichier Apache.conf pour ajouter la directive " AllowOverride All ".
You must be registered for see images attach


Nous allons donc créer un fichier .htaccess basique. Vous pouvez bien sûr y mettre ce que vous souhaitez, comme par exemple un blocage sur toutes les adresses IP sauf la vôtre, etc.
Code:
AuthType Basic
AuthName "Accès restreint"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Nous allons déposer notre fichier .htaccess dans le dossier /usr/share/phpmyadmin.

Maintenant, il ne nous reste plus qu'à créer notre fichier .htpasswd.
Code:
sudo htpasswd -c /etc/phpmyadmin/.htpasswd utilisateur

Il faut bien entendu remplacer "utilisateur" par le nom d'utilisateur de votre choix. Ensuite, saisissez votre mot de passe et validez.
Redémarrez ensuite votre service Apache, puis en vous rendant sur votre page PHPMyAdmin, vous devriez maintenant être invité à fournir les identifiants :
You must be registered for see images attach


Pour finir, on va procéder à l'installation de PHP avec la commande suivante.
Code:
sudo apt-get install php

Maintenant, est-ce que cela fonctionne ? (J'espère bien)

Je vais donc créer un fichier config.php pour établir la connexion à ma base de données. (J'ai préalablement créer une base de données tutorielrgfr)
PHP:
<?php
session_start();
$BDD_hote = 'localhost';
$BDD_bd = 'tutorielrgfr';
$BDD_utilisateur = 'root';
$BDD_mot_passe = '';

try{
    $bdd = new PDO('mysql:host='.$BDD_hote.';dbname='.$BDD_bd, $BDD_utilisateur, $BDD_mot_passe);
    $bdd->exec("SET CHARACTER SET utf8mb4");
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
    echo 'Erreur : '.$e->getMessage();
    echo 'N° : '.$e->getCode();
}
ini_set("dislay_errors",1);
error_reporting(0);

Voici le contenu de ma table "utilisateurs" :
You must be registered for see images attach


Dans ma page index.php, je vais essayer de récupérer ses informations pour les afficher. Voici son contenu :
PHP:
<?php
require_once('config.php');

$id = 1;
$query = "SELECT * FROM utilisateurs WHERE id_utilisateur = :id";
$statement = $bdd->prepare($query);
$statement->execute(array(
  ":id" => $id
));
$resultat = $statement->fetch();
$pseudo = $resultat['pseudo'];

echo "Bienvenue à $pseudo !";

Maintenant, voici le résultat : comme on peut le voir, PHP fonctionne correctement, et notre base de données aussi.
You must be registered for see images attach


You must be registered for see images attach

Pour continuer, nous allons voir comment générer un certificat SSL pour votre site avec Cerbot. Il faut commencer par l'installer sur votre serveur.
Code:
sudo apt install certbot python3-certbot-apache python3-certbot-nginx

Avant de faire la demande pour le certificat SSL, vous devez arrêter Apache sur votre serveur.
Code:
sudo systemctl stop apache2

Maintenant, vous pouvez faire la demande de certificat. (les URL sont bien sur à adapter).
Code:
sudo certbot certonly -d  paradisergfr.eu -d www.paradisergfr.eu

Lorsqu'il vous demande, veuillez choisir Apache (choix 1), puis saisir votre adresse e-mail. L'adresse e-mail sert à vous envoyer des mails quand il faudra renouveler votre certificat, donc il est recommandé d'en mettre une valide.
Ensuite, acceptez les conditions d'utilisation (en appuyant sur :ok:). Vous devriez ensuite recevoir une réponse indiquant que la demande a réussi.
You must be registered for see images attach


Maintenant, nous allons installer les modules SSL et rewrite et redémarrer Apache.
Code:
a2enmod ssl
a2enmod rewrite
service apache2 restart

En exécutant la commande apachectl -M vous devriez maintenant voir les modules SSL et rewrite apparaître..
You must be registered for see images attach


Vous vous souvenez tout à l'heure ? On avait créé un fichier d'hôte virtuel ? Il va falloir le modifier, cette fois-ci il sera un peu plus important.
Pour commencer, vos certificats SSL générés se trouvent ici : /etc/letsencrypt/live puis dans le dossier qui correspond à votre domaine.

Voici le fichier qui met en place certificat SSL, et qui redirige les requêtes en HTTP redirige vers HTTPS. Il faut bien sûr le modifier avec vos informations.
Pour information, le port 443 est le HTTPS et le 80 HTTP.

Code:
<IfModule mod_ssl.c>
<VirtualHost *:443>

        ServerAdmin [email protected]
        ServerName paradisergfr.eu
        ServerAlias www.paradisergfr.eu

        DocumentRoot /var/www/paradisergfr.eu/public_html

        <Directory />
                Require all denied
                Options -Indexes -Includes -ExecCGI -FollowSymlinks
        </Directory>

        <Directory /var/www/paradisergfr.eu/public_html>
                Require all granted
                Options -Indexes -Includes -ExecCGI +FollowSymlinks
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLCertificateFile /etc/letsencrypt/live/paradisergfr.eu/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/paradisergfr.eu/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf

</VirtualHost>
</IfModule>


<VirtualHost *:80>

        RewriteEngine on
        RewriteCond %{SERVER_NAME} =www.paradisergfr.eu [OR]
        RewriteCond %{SERVER_NAME} =paradisergfr.eu
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

        ServerAdmin [email protected]
        ServerName paradisergfr.eu
        ServerAlias www.paradisergfr.eu

        DocumentRoot /var/www/paradisergfr.eu/public_html

        <Directory />
                Require all denied
                Options -Indexes -Includes -ExecCGI -FollowSymlinks
        </Directory>

        <Directory /var/www/paradisergfr.eu/public_html>
                Require all granted
                Options -Indexes -Includes -ExecCGI +FollowSymlinks
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Pour rappel, l'emplacement où doit se trouver le fichier est : /etc/apache2/sites-available. Ensuite, vous devez redémarrer (encore) Apache.
Code:
service apache2 restart

Si vous avez tout bien fait, lorsque vous vous rendez sur votre site, vous devriez maintenant être en HTTPS ! Vous serez également automatiquement redirigé vers HTTPS si vous saisissez http://.
You must be registered for see images attach



Vous avez maintenant les bases pour transformer un serveur Linux en serveur Web. Cependant, je vous recommande vivement de mettre en place un peu de sécurité !

Si besoin, je reste disponible :blush: !

Correction et reformulation des phrases : ChatGPT
 

WhiiTe'

Administateur
Ancien staff
Inscription
22 Octobre 2011
Messages
14 721
Réactions
8 520
Points
32 595
RGCoins
-1 686
Tutoriel intéressant pour monter son premier site ;)

Je rajouterai quelques remarques tout de même :
  1. Il est conseillé de faire un VirtualHost par fichier, en l'occurrence un fichier de conf pour le VHost HTTP 80 et un autre VHOST pour le HTTPS 443
  2. PHPMyAdmin est un excellent outil quand on est en cours de dev, mais il n'est pas recommandé de le laisser traîner sur un serveur car, en cas de faille côté PHPMyAdmin vous exposez votre application en production et également vos bases de données. Il vaut mieux ouvrir son service SQL vers une IP fixe (chez soi?) et utiliser des outils bureautique de gestion de DB
  3. Pour les aspects sécurité du serveur, comme tu l'as mentionné à la fin, il est primordial de ne pas s'arrêter là, et de suivre des recommandations de sécurité:
    1. etc..
    2. (par exemple sur ton site, on voit que t'es en Apache/2.4.52 (Ubuntu)
  4. Pour finir, aujourd'hui ce genre d'installation est de moins en moins fréquente, avec Docker, on peut builder très rapidement une application WEB prête pour dev, avec une sécurité déjà mise en place, et pour envisager une production stable à terme, vaut mieux commencer dès le début par ça :)

PS: si tu veux réellement cacher l'IP de ton serveur derrière, utilise un proxy Cloudflare :p
 
Dernière édition:

Paradise GTP

Premium
Inscription
30 Juin 2013
Messages
4 265
Réactions
4 409
Points
21 005
RGCoins
20
Tutoriel intéressant pour monter son premier site ;)

Je rajouterai quelques remarques tout de même :
  1. Il est conseillé de faire un VirtualHost par fichier, en l'occurrence un fichier de conf pour le VHost HTTP 80 et un autre VHOST pour le HTTPS 443
  2. PHPMyAdmin est un excellent outil quand on est en cours de dev, mais il n'est pas recommandé de le laisser traîner sur un serveur car, en cas de faille côté PHPMyAdmin vous exposez votre application en production et également vos bases de données. Il vaut mieux ouvrir son service SQL vers une IP fixe (chez soi?) et utiliser des outils bureautique de gestion de DB
  3. Pour les aspects sécurité du serveur, comme tu l'as mentionné à la fin, il est primordial de ne pas s'arrêter là, et de suivre des recommandations de sécurité:
    1. etc..
    2. (par exemple sur ton site, on voit que t'es en Apache/2.4.52 (Ubuntu)
  4. Pour complétement changer de sujet, aujourd'hui ce genre d'installation et de moins en moins fréquente, avec Docker, on peut builder très rapidement une application WEB prête pour dev, avec une sécurité déjà mise en place, et pour envisager une production stable à terme, vaut mieux commencer dès le début par ça :)

PS: si tu veux réellement cacher l'IP de ton serveur derrière, utilise un proxy Cloudflare :p

Merci pour les précisions je modifierai le sujet plus tard pour rajouter les quelques informations que tu as donné

Comme je dis c’est un tutoriel pour les bases, il ne faut pas s’arrêter à ça mais ça reste du fonctionnel

Non pour l’adresse Ip du serveur je sais bien qu’avec le nom de domaine on peut la retrouver, le serveur ne me sert pas plus qu’à ça donc c’est pas grave
C’est juste que par habitude je mets pas (ou j’évite) de mettre des adresses Ip mais c’est vrai que c’est con si il y a le nom de domaine 🤣
 

WhiiTe'

Administateur
Ancien staff
Inscription
22 Octobre 2011
Messages
14 721
Réactions
8 520
Points
32 595
RGCoins
-1 686
Non pour l’adresse Ip du serveur je sais bien qu’avec le nom de domaine on peut la retrouver, le serveur ne me sert pas plus qu’à ça donc c’est pas grave
C’est juste que par habitude je mets pas (ou j’évite) de mettre des adresses Ip mais c’est vrai que c’est con si il y a le nom de domaine 🤣
Sauf si tu passes par Cloudflare :p Les IPs qu'on verra seront celles de Cloudflare et l'IP de ton serveur derrière est en théorie masqué
 

iUNeIV

CryptoMineur
Premium
Inscription
25 Novembre 2012
Messages
1 486
Réactions
286
Points
20 534
RGCoins
0
Super guide mec.
 
Haut