Crée un réseau social en ligne avec Elgg sur Debian 9

Dans ce tutoriel, je vais te montrer comment installer et configurer la dernière version d’Elgg sur Debian 9 afin de créer un réseau social en ligne gratuit.

Elgg est un logiciel open source gratuit de framework de moteur social écrit dans le langage de programmation PHP. Le framework Elgg peut aider les particuliers ou les organisations à créer de puissants environnements sociaux sous Linux sous les serveurs Web Apache/Nginx, PHP et le système de gestion de base de données MySQL/MariaDB, également connu sous le nom de pile LAMP ou LEMP. Il possède également des fonctionnalités intégrées qui peuvent alimenter le partage de fichiers, les blogs, les groupes sociaux ou les plateformes éducatives sur des réseaux publics ou privés.

Pour réussir à déployer la plateforme Elgg dans tes locaux, tu dois remplir les conditions suivantes.

  • Une machine virtuelle ou un serveur privé virtuel alimenté par Debian 9, de préférence avec une installation minimale
  • Un accès direct au compte root ou un utilisateur local avec des pouvoirs root via la console du serveur ou la gestion à distance via SSH
  • Le serveur a besoin d’une adresse IP statique configurée pour l’interface réseau externe afin de pouvoir accéder aux visiteurs via son adresse IP publique
  • Tu peux aussi avoir besoin d’un nom de domaine public ou privé configuré pour ton serveur afin que les visiteurs puissent accéder à la plateforme via un nom de domaine, comme www.yourdomain.com, même si tu peux toujours accéder à la plateforme via l’adresse IP de ton serveur.
  • Pour pouvoir utiliser l’inscription au site Web d’Elgg via une adresse e-mail, ou utiliser d’autres fonctions de la plateforme, tu dois déployer un serveur de messagerie dans tes locaux ou utiliser un serveur de messagerie public.

Pré-requis

Dans un premier temps, connecte-toi au serveur Debian 9 avec les privilèges de root ou avec un utilisateur ayant les pouvoirs de root et lance la commande suivante afin de mettre à jour ton système avec les derniers correctifs de sécurité et les dernières mises à jour du logiciel et du noyau.

apt update
apt upgrade

Ensuite, assure-toi de configurer le nom de ta machine en exécutant les commandes suivantes. Tu dois remplacer la variable hostname utilisée dans cet exemple pour correspondre à ton propre domaine.

hostnamectl set-hostname www.socialnet.org

Après avoir configuré le nom d’hôte de la machine, vérifie si l’hôte a été correctement configuré en vérifiant le fichier hosts avec les commandes suivantes.

hostnamectl
cat /etc/hostname
hostname –s
hostname –f

Enfin, afin d’appliquer les mises à jour du nom d’hôte de la machine et du noyau, redémarre le système en lançant la commande suivante.

systemctl reboot

Après le redémarrage du système, connecte-toi à nouveau à la console et exécute la commande suivante pour installer certains utilitaires système qui nous aideront à télécharger des logiciels sur Internet et à extraire certains types de fichiers d’archive.

apt install wget zip unzip curl

Installe la pile LAMP

Afin de déployer le framework de réseau social Elgg sur notre serveur, nous devons installer les composants de la pile LAMP. Le premier composant que nous allons installer est la base de données – MariaDB – un fork de la populaire base de données MySQL, comme backend de base de données. La base de données MariaDB sera utilisée par l’application pour stocker les utilisateurs, sessions, contacts, messages, commentaires et autres informations. Pour installer le serveur de base de données MariaDB et le logiciel client dans Debian 9 via les dépôts officiels, exécute la commande ci-dessous dans le terminal.

apt install mariadb-server mariadb-client

Une fois l’installation de la base de données terminée, connecte-toi à la console MySQL et exécute les commandes suivantes afin de sécuriser le compte racine de la base de données, qui est accessible par défaut sans fournir de mot de passe.

mysql -h localhost
Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 2

Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

 

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use mysql ;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

MariaDB [(none)]> utiliser mysql ; MariaDB [(none)]> mettre à jour l’utilisateur, définir plugin= » où user=’root’ ;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [mysql]> supprimer les privilèges ;

Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> quitter

Bye

Après avoir terminé l’étape ci-dessus, exécute le script d’installation mysql_secure_installation fourni par les dépôts stretch de Debian, afin de sécuriser davantage le serveur MariaDB et de configurer un mot de passe fort pour le compte root de la base de données. Essentiellement, réponds « oui » à toutes les questions posées par le script, comme : changer le mot de passe root MySQL, supprimer les utilisateurs anonymes, désactiver les connexions root à distance et supprimer la base de données de test, comme illustré dans l’extrait de script ci-dessous.

mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

 

In order to log into MariaDB to secure it, we'll need the current

password for the root user.  If you've just installed MariaDB, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

 

Enter current password for root (enter for none):

OK, successfully used password, moving on...

 

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

 

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

 

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.

 

Remove anonymous users? [Y/n] y

 ... Success!

 

Normally, root should only be allowed to connect from 'localhost'.  This

ensures that someone cannot guess at the root password from the network.

 

Disallow root login remotely? [Y/n] y

 ... Success!

 

By default, MariaDB comes with a database named 'test' that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.

 

Remove test database and access to it? [Y/n] y

 - Dropping test database...

 ... Success!

 - Removing privileges on test database...

 ... Success!

 

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

 

Reload privilege tables now? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

Afin de tester la sécurité de MariaDB, essaie de te connecter à la base de données depuis la console sans mot de passe root. L’accès à la base de données devrait être refusé si aucun mot de passe n’est fourni pour le compte root, comme illustré dans l’extrait de commande ci-dessous :

mysql -h localhost -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Si le mot de passe est fourni, la procédure de connexion à la console MySQL devrait être accordée, comme le montre l’extrait de commande :

mysql -h localhost -u root -p
Enter password:

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 15

Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit

Bye

Après avoir installé et sécurisé la base de données MariaDB, il est temps d’installer les prochains composants nécessaires au déploiement de l’application Elgg : Le serveur HTTP Apache et la passerelle de traitement du langage de programmation PHP. Pour installer le serveur Web Apache et l’interpréteur PHP ainsi que tous les modules PHP nécessaires grâce auxquels le serveur exécutera les scripts de l’application, exécute la commande suivante dans ta console de serveur.

apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-gd php7.0-opcache php7.0-mbstring php7.0-xml php7.0-mysql

Ensuite, ouvre et modifie le fichier de configuration par défaut de PHP en modifiant les variables PHP suivantes. Ouvre le fichier /etc/php/7.0/apache2/php.ini pour le modifier et changer les lignes suivantes. Au départ, fais une sauvegarde du fichier de configuration PHP.

cp /etc/php/7.0/apache2/php.ini{,.backup}
nano /etc/php/7.0/apache2/php.ini

Recherche, édite et modifie les variables suivantes dans le fichier de configuration php.ini:

file_uploads = On
default_charset = UTF-8
memory_limit = 128M
upload_max_filesize = 100M
date.timezone = Europe/London

Augmente la variable upload_max_file_size comme il convient afin de prendre en charge les pièces jointes de grande taille pour ton application. Modifie également le paramètre de fuseau horaire de PHP en fonction de l’emplacement géographique de ton système en consultant la liste des fuseaux horaires fournie par la documentation de PHP sur le lien suivant http://php.net/manual/en/timezones.php.

Active le plugin OPCache disponible pour PHP7 afin d’augmenter la vitesse de chargement du site Web en ajoutant les paramètres OPCache suivants au bas du fichier de configuration de l’interpréteur PHP, sous l’instruction [opcache] comme détaillé ci-dessous :

opcache.enable=1 
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Une fois que tu as effectué toutes les modifications ci-dessus, enregistre et ferme le php.ini fichier de configuration, redémarre le serveur Web Apache pour appliquer les modifications de l’interpréteur PHP en lançant la commande ci-dessous.

systemctl restart apache2

Configurer le pare-feu

Pour ajouter les règles d’application du pare-feu UFW requises pour permettre au trafic HTTP de passer le pare-feu du système, exécute les commandes suivantes dans la console du serveur.

ufw allow WWW

ou

ufw allow 80/tcp

Si tu es connecté à distance à ton serveur via SSH, ajoute la règle ci-dessous pour ouvrir le port SSH 22 dans ton pare-feu.

ufw allow 22/tcp

Si tu gères les règles du pare-feu dans ton serveur Debian via les règles brutes d’iptables, ajoute les règles suivantes pour autoriser le trafic entrant des ports 80 et 22 à passer le pare-feu afin que les clients externes puissent accéder à l’application. Ouvre le port 22/TCP uniquement si tu es connecté à distance au serveur via SSH.

apt-get install -y iptables-persistent
iptables -I INPUT -p tcp --destination-port 80 -j ACCEPT
iptables -I INPUT -p tcp --destination-port 22 -j ACCEPT
netfilter-persistent save
systemctl restart netfilter-persistent
systemctl status netfilter-persistent
systemctl enable netfilter-persistent.service

Configure le serveur Web Apache

À l’étape suivante, active le module de réécriture Apache nécessaire pour modifier les configurations du serveur Web à la volée via le fichier .htacccess et le module TLS nécessaire pour sécuriser les transactions HTTP, en envoyant la commande ci-dessous.

a2enmod rewrite ssl
a2ensite default-ssl.conf

Ensuite, ouvre le fichier de configuration du site SSL par défaut d’Apache pour le modifier avec ton éditeur de texte préféré, et ajoute les règles de réécriture d’URL suivantes après la directive DocumentRoot

nano /etc/apache2/sites-enabled/default-ssl.conf

Extrait du fichier de configuration du site SSL :

<Directory /var/www/html>
  Options +FollowSymlinks
  AllowOverride All
  Require all granted
</Directory>

Apporte également la modification indiquée ci-dessous à la ligne VirtualHost pour qu’elle ressemble à ce qui est indiqué dans l’extrait qui suit :

<VirtualHost *:443>

Ajoute les mêmes modifications au fichier de configuration par défaut d’Apache en ouvrant le fichier /etc/apache2/sites-enabled/000-default.conf pour le modifier. Insère les lignes de code suivantes après l’instruction DocumentRoot comme indiqué dans l’exemple ci-dessous.

<Directory /var/www/html>
  Options +FollowSymlinks
  AllowOverride All
  Require all granted
</Directory

Enfin, redémarre le démon Apache pour appliquer toutes les règles configurées jusqu’à présent et visiter ton domaine ou l’adresse IP de ton serveur via le protocole HTTP.

systemctl restart apache2

Comme tu utilises les paires de certificats auto-signés automatiquement émis par Apache lors de l’installation, pour un certificat qui n’est pas fiable par le navigateur, un avertissement d’erreur devrait s’afficher dans le navigateur. Accepte l’avertissement afin d’accepter le certificat non fiable et de continuer à être redirigé vers la page Web par défaut d’Apache, comme illustré dans l’image ci-dessous.

https://yourdomain.tld

Avertissement SSL

Page par défaut d'Apache

Afin d’autoriser le trafic HTTPS à traverser le pare-feu UFW, tu dois ajouter la règle suivante pour autoriser le trafic 443/TCP entrant en lançant la commande ci-dessous.

ufw allow 'WWW Full'

ou

ufw allow 443/tcp

Si iptables est l’application pare-feu par défaut installée pour protéger ton système Debian au niveau du réseau, ajoute la règle suivante pour autoriser le trafic entrant du port 443 dans le pare-feu afin que les visiteurs puissent naviguer sur ton nom de domaine.

iptables -I INPUT -p tcp --destination-port 443 -j ACCEPT
netfilter-persistent save
systemctl restart netfilter-persistent
systemctl status netfilter-persistent

Enfin, crée le fichier PHP info dans le chemin de la racine du document de ton serveur Web en exécutant la commande suivante.

echo '<?php phpinfo(); ?>'| tee /var/www/html/info.php

Visite le fichier script PHP info en ouvrant un navigateur à l’URL suivante :

https://yourdomain.tld/info.php

Vérifie les paramètres PHP et fais défiler vers le bas la configuration de la date pour vérifier la configuration du fuseau horaire PHP.

Paramètres de date PHP

Installer le logiciel Elgg

Afin de déployer la plateforme de réseau social Elgg dans ton système, visite d’abord la page de téléchargement officielle d’Elgg à l’adresse https://elgg.org/about/download et récupère la dernière archive compressée du paquet zip en lançant la commande ci-dessous.

wget -O elgg-2.3.5.zip https://elgg.org/getelgg.php?forward=elgg-2.3.5.zip
ls

Ensuite, extrais le fichier d’archive zip d’Elgg dans ton répertoire de travail actuel et liste les fichiers extraits en émettant les commandes suivantes.

unzip elgg-2.3.5.zip
ls -al elgg-2.3.5

À l’étape suivante, supprime le fichier index.html par défaut installé par le serveur Web Apache dans le chemin webroot et le fichier info.php créé précédemment en envoyant les commandes ci-dessous.

rm /var/www/html/index.html
rm /var/www/html/info.php

Ensuite, copie tout le contenu du répertoire Elgg extrait, y compris le fichier .htaccess caché, dans le chemin de la racine des documents de ton serveur Web en envoyant la commande suivante.

cp -rf elgg-2.3.5/* /var/www/html/
cp elgg-2.3.5/.htaccess /var/www/html/

Après avoir copié les fichiers d’installation d’Elgg dans le chemin webroot de ton domaine, crée un répertoire nommé data pour l’application Elgg, un niveau au-dessus du webroot de ton domaine, en envoyant la commande suivante. Le répertoire data sera utilisé par l’application Elgg pour stocker divers fichiers liés à l’utilisateur. Ce répertoire de données peut être créé n’importe où dans la hiérarchie du système de fichiers de ton serveur, avec la remarque que tu dois accorder à l’utilisateur d’exécution d’Apache les droits d’écriture sur ce répertoire.

mkdir  /var/www/data
chown www-data:www-data /var/www/data

Ensuite, exécute les commandes ci-dessous afin d’accorder à l’utilisateur d’exécution d’Apache les droits d’écriture complets sur le chemin de la racine web. Utilise la commande ls pour répertorier les permissions des fichiers installés de l’application situés dans le répertoire /var/www/html/.

chown -R www-data:www-data /var/www/html/
ls –al /var/www/html/

Avant de commencer le processus d’installation via un navigateur Web, connecte-toi à la console de la base de données MariaDB et crée la base de données Elgg et un utilisateur avec un mot de passe qui sera utilisé pour gérer cette base de données, en lançant les commandes suivantes. Veille à remplacer le nom de la base de données, l’utilisateur et le mot de passe utilisés dans ce tutoriel en conséquence.

mysql –u root -p
Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 2

Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

 

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> créer une base de données elgg_db ;

Query OK, 1 row affected (0.00 sec) 

MariaDB [(none)]> accorde tous les privilèges sur elgg_db.* à ‘elgg_user’@’localhost’ identifié par ‘password1234’ ;

Query OK, 0 rows affected (0.00 sec) 

MariaDB [(none)]> vide les privilèges ;

Query OK, 0 rows affected (0.00 sec) 

MariaDB [(none)]> exit

Bye 

Maintenant, procédons à l’installation d’Elgg. Ouvre d’abord un navigateur et navigue vers l’adresse IP ou le nom de domaine ou le FQDN de ton serveur via le protocole HTTPS.

https://yourdomain.tld

Sur l’écran de bienvenue, le programme d’installation affiche un message d’introduction qui t’informe que le logiciel de la plateforme Elgg nécessite six étapes à suivre pour installer l’application. Appuie simplement sur le bouton Suivant pour lancer le processus d’installation, comme illustré dans la capture d’écran ci-dessous.

Bienvenue à Elgg

Ensuite, le programme d’installation d’Elgg analysera ton système et vérifiera si les exigences de PHP et du serveur Web sont remplies pour installer l’application. Appuie sur le bouton Suivant pour poursuivre le processus d’installation, comme le montre la capture d’écran ci-dessous.

Exigences d'Elgg

Dans l’écran d’installation suivant, configure les paramètres de la base de données MySQL en indiquant le nom de la base de données MySQL, l’hôte du serveur (utilise localhost si la base de données est installée sur le même nœud), le nom d’utilisateur de la base de données et le mot de passe créé précédemment pour installer Elgg. Utilise le préfixe de table de la base de données par défaut ou modifie-le si tu veux ajouter une couche de sécurité supplémentaire pour ton application. Enfin, sélectionne ton paramètre de fuseau horaire par défaut pour l’application et clique sur le bouton Suivant pour passer à l’écran d’installation suivant. Utilise la capture d’écran ci-dessous comme guide pour configurer cette étape.

Paramètres de la base de données

À l’étape suivante, configure le site Elgg en ajoutant un nom pour le site et une adresse e-mail pour la communication avec les utilisateurs. Modifie également l’adresse URL du site si elle n’a pas été correctement détectée et ajoute le chemin complet du site Web données du site. Enfin, configure le niveau d’accès au site par défaut pour les nouveaux utilisateurs et clique sur le bouton Suivant pour poursuivre le processus d’installation.

Configurer le site dans Elgg

Ensuite, crée le premier compte administrateur pour ton site Web, en remplissant le champ Display Name avec le nom de ton compte administrateur. Ajoute également l’adresse e-mail du compte admin, le nom d’utilisateur et le mot de passe, comme illustré dans l’image ci-dessous. Lorsque tu as terminé cette étape, clique sur le bouton Suivant pour continuer et terminer le processus d’installation.

Créer compte administrateur

Une fois le processus d’installation terminé, clique sur le bouton « Aller sur le site » pour être redirigé vers le tableau de bord d’administration d’Elgg.

L'installation d'Elgg est terminée

Après t’être connecté au tableau de bord d’Elgg, navigue dans le menu Configurer -> Plugins du panneau de droite et commence à activer les plugins Elgg dont tu as besoin en cliquant sur le bouton Activer pour le plugin sélectionné.

Panneau d'administration d'Elgg

Tu peux aussi visiter l’application Elgg en naviguant vers l’adresse IP ou le nom de domaine de ton serveur via le protocole HTTPS. Utilise les informations d’identification configurées pour le compte administrateur pendant le processus d’installation afin de te connecter à l’application du moteur social Elgg, comme le montre la capture d’écran ci-dessous.

https://yourdomain.tld

Réseau social Elgg

Pour finir, si tu veux obliger les visiteurs à naviguer en toute sécurité sur le site Web d’Elgg via le protocole HTTPS qui crypte le trafic entre le serveur et les navigateurs clients, retourne à la console du serveur Debian et modifie le fichier .htaccess situé dans le chemin de la racine du document de ton site Web, en lançant la commande ci-dessous.

nano /var/www/html/.htaccess

Dans le fichier .htaccess, cherche la ligne<IfModule mod_rewrite.c> et ajoute les règles ci-dessous après RewriteEngine On afin de rediriger automatiquement tout le trafic de ton domaine vers HTTPS.

RewriteEngine On
# Redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]

Ici, tu peux aussi modifier certaines variables PHP pour ton site Web. Cherche la directive <IfModule mod_php7.c> et sous cette ligne, ajoute tes propres paramètres PHP, par exemple : augmente la taille de téléchargement des fichiers pour le domaine ou désactive certaines configurations PHP par défaut du serveur, comme le montre l’extrait ci-dessous :

# Alter web server PHP settings
php_value session.use_trans_sid 0
php_value register_globals 1
php_value upload_max_filesize 100M
php_value post_max_size 100M

Pour que l’application Elgg envoie des notifications en file d’attente, fasse tourner les journaux système dans la base de données et collecte les déchets dans la base de données (en compactant la base de données en supprimant les entrées qui ne sont plus nécessaires), crée un fichier crontab pour avec les configurations ci-dessous. De plus, ce travail crontab doit être détenu et exécuté par l’utilisateur d’exécution Apache.

crontab -u www-data –e

Extrait du fichier Crontab. La sortie de la tâche cron de chaque tâche sera rejetée dans le fichier Linux /dev/null fichier de trou noir. Remplace la variable du nom de domaine($ELGG) utilisée dans ce script en conséquence.

GET="curl -k"
ELGG="https://www.socialnet.org/"

OUT=" > /dev/null 2>&1"

* * * * * $GET ${ELGG}cron/minute/${OUT}
*/5 * * * * $GET ${ELGG}cron/fiveminute/${OUT}
15,30,45,59 * * * * $GET ${ELGG}cron/fifteenmin/${OUT}
30,59 * * * * $GET ${ELGG}cron/halfhour/${OUT}
@hourly $GET ${ELGG}cron/hourly/${OUT}
@daily $GET ${ELGG}cron/daily/${OUT}
@weekly $GET ${ELGG}cron/weekly/${OUT}
@monthly $GET ${ELGG}cron/monthly/${OUT}
@yearly $GET ${ELGG}cron/yearly/${OUT}
@reboot $GET ${ELGG}cron/reboot/${OUT}

Félicitations ! La plateforme de médias sociaux Elgg a été installée et configurée avec succès dans tes locaux sur un serveur Debian 9. Si tu utilises un nom de domaine public enregistré pour exposer l’application Elgg aux visiteurs publics, tu devrais envisager d’acheter un certificat SSL émis par une autorité de certification de confiance ou obtenir une paire de certificats gratuits de l’autorité de certification Let’s Encrypt.

Afin de mieux administrer l’application Elgg, consulte les pages de documentation à l’adresse suivante : http://learn.elgg.org/en/stable/index.html.

Vous aimerez aussi...