J'ai publié sur le forum il y a peu à propos de cours. J'ai décidé de mettre en place, en local, un serveur d'hébergement WEB mais qui hébergerait de nombreux sites web. En gros, reproduire un serveur tel que Hostinger, où un utilisateur pourrait avoir son espace pour héberger son site.
N'y connaissant rien, je suis allé un peu en tâtonnant, concrètement, je ne savais pas quoi mettre en place. Après quelques recherches, j'ai donc décidé de développer plusieurs fonctionnalités
Installation de Apache
Configuration des virtualhosts pour chaque nouveau utilisateur
Créer des sites en HTTPS
Création des espaces SFTP
CHROOT pour que les développeurs n'aient accès qu'à leurs espaces ou sont stockés leurs sites
Dans l'optique de simuler au mieux la réalité, j'ai décidé de faire des scripts
#!/bin/bash
# Vérifier si l'utilisateur est root
if [ "$(id -u)" -ne 0 ]; then
echo "Ce script doit être exécuté en tant que superutilisateur (root)." >&2
exit 1
fi
# Demander à l'utilisateur de choisir entre HTTP et HTTPS
read -r -p "Voulez-vous créer un site en HTTP ou en HTTPS? (http/https) " protocole
# Demander à l'utilisateur d'entrer le nom du dossier
read -p "Veuillez entrer le nom du dossier : " nom_dossier
# Vérification de la présence du paramètre
if [ -z "$nom_dossier" ]; then
echo "Veuillez spécifier un nom de dossier."
exit 1
fi
# Création du dossier dans /var/www
mkdir -p "/var/www/$nom_dossier"
# Création du fichier HTML avec le contenu spécifié
echo "<h1>Test $nom_dossier</h1>" | sudo tee "/var/www/$nom_dossier/index.html" > /dev/null
# Demander à l'utilisateur s'il souhaite fournir des alias
read -r -p "Voulez-vous ajouter des alias à la directive ServerAlias? (oui/non) " add_alias
if [ "$add_alias" = "oui" ]; then
# Demande à l'utilisateur de fournir les alias (séparés par des espaces)
read -r -p "Veuillez fournir les alias (séparés par des espaces) à ajouter à la directive ServerAlias : " aliases
else
aliases=""
fi
# Préparation du contenu commun du fichier de configuration
config_common="\n\tServerName $nom_dossier\n\tDocumentRoot \"/var/www/$nom_dossier\"\n\tErrorLog /var/log/apache2/error.$nom_dossier.log\n\tCustomLog /var/log/apache2/access.$nom_dossier.log combined"
if [ "$protocole" = "https" ]; then
# Générer un certificat et une clé
mkdir -p /tmp/ssl_conf
openssl req -x509 -newkey rsa:2048 -nodes -keyout /tmp/ssl_conf/$nom_dossier.key -out /tmp/ssl_conf/$nom_dossier.crt -days 365 -subj "/CN=$nom_dossier"
# Copier la clé et le certificat dans les dossiers appropriés
mkdir -p /etc/apache2/ssl.crt /etc/apache2/ssl.key
cp /tmp/ssl_conf/$nom_dossier.crt /etc/apache2/ssl.crt/
cp /tmp/ssl_conf/$nom_dossier.key /etc/apache2/ssl.key/
# Ajout de la configuration spécifique à HTTPS
config_https="<VirtualHost *:443>$config_common\n\tServerAlias www.$nom_dossier.fr\n\tSSLEngine on\n\tSSLCertificateFile /etc/apache2/ssl.crt/$nom_dossier.crt\n\tSSLCertificateKeyFile /etc/apache2/ssl.key/$nom_dossier.key\n</VirtualHost>"
# Création du fichier de configuration HTTPS
echo -e "$config_https" | sudo tee "/etc/apache2/sites-available/$nom_dossier-le-ssl.conf" > /dev/null
# Activer le site HTTPS
sudo a2ensite "$nom_dossier-le-ssl.conf"
else
# Ajout de la configuration spécifique à HTTP
config_http="<VirtualHost *:80>$config_common"
# Ajout des alias fournis par l'utilisateur pour la configuration HTTP
if [ -n "$aliases" ]; then
config_http+="\n\tServerAlias $aliases"
fi
config_http+="\n</VirtualHost>"
# Création du fichier de configuration HTTP
echo -e "$config_http" | sudo tee "/etc/apache2/sites-available/$nom_dossier.conf" > /dev/null
# Activer le site HTTP
sudo a2ensite "$nom_dossier.conf"
fi
# Redémarrer le service apache2
sudo systemctl reload apache2
echo "Fichier de configuration créé et activé : $config_file"
#Créer l'utilisateur associé au VirtualHost
#Demande le nom de l'utilisateur
echo "Entrez le nom de l'utilisateur à créer : ";
read user_name
# Crée l'utilisateur et l'ajouter dans le groupe sftp_web
sudo useradd --shell /bin/false "$user_name";
sudo usermod -a -G sftp_web; "$user_name";
sudo mkdir /home/"$user_name";
# Définit le mot de passe pour l'utilisateur
sudo passwd "$user_name";
# Droit pour que l'utilisateur puisse accéder à son dossier
sudo chown "$user_name""$user_name"/var/www/"$nom_dossier";
sudo chmod 700 /var/www/"$nom_dossier";
# Crée un lien symbolique pour rediriger l'utilisateur lorsqu'il se connecte en SFTP
sudo ln -sn /var/www/"$nom_dossier"/home/"$user_name"/
echo "L'utilisateur "$user_name" a été créé avec succès";
Du coup, je viens vous demander votre aide pour trouver d'autres idées afin de rendre mon projet plus réaliste car je trouve que mon serveur est un peu limité au final. Mon prof m'a donné l'idée de limiter l'espace pour chaque utilisateur mais y a t'il d'autres éléments à mettre en place ?
J'ai aussi testé des outils comme cPannel, mais du coup, je préfère tout faire pour savoir concrètement comment cela fonctionne.
Merci pour votre aide :)
Question sur la gestion d'un serveur web apache
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.