Maak een Online Sociaal Netwerk met Elgg op Debian 9

In deze handleiding laat ik je zien hoe je de nieuwste Elgg versie op Debian 9 installeert en configureert om een gratis online sociaal netwerk te maken.

Elgg is een gratis open bron framework software voor sociale netwerken, geschreven in de programmeertaal PHP. Het Elgg raamwerk kan personen of organisaties helpen om krachtige sociale omgevingen te creëren in Linux onder Apache/Nginx webservers, PHP en MySQL/MariaDB database management systeem, ook bekend als LAMP of LEMP stack. Het heeft ook ingebouwde functies die het delen van bestanden, bloggen, sociale groepen of educatieve platforms op openbare of privé netwerken kunnen aandrijven.

Om het Elgg platform met succes bij je in te zetten, moet je aan de volgende eisen voldoen.

  • Een virtuele machine of een virtuele privé server met Debian 9, bij voorkeur een minimale installatie
  • Directe toegang tot de root account of een lokale gebruiker met root bevoegdheden via de server console of beheer op afstand via SSH
  • De server heeft een statisch IP adres nodig dat ingesteld is voor de externe netwerk interface om via zijn publieke IP adres toegang te hebben tot bezoekers
  • Je hebt misschien ook een publieke of private domeinnaam nodig die voor je server is ingesteld, zodat bezoekers het platform via een domeinnaam kunnen benaderen, zoals www.yourdomain.com, hoewel je nog steeds via het IP adres van je server toegang hebt tot het platform.
  • Om Elgg website registratie via e-mail adres te gebruiken, of andere platform functies te gebruiken, moet je een mailserver bij je installeren of een openbare mailserver gebruiken.

Voorschriften

Log als eerste stap in op de Debian 9 server met root privileges of met een gebruiker die root bevoegdheden heeft en voer het volgende commando uit om je systeem bij te werken met de nieuwste beveiligingspatches, software en kernel updates.

apt update
apt upgrade

Zorg er vervolgens voor dat je de naam van je machine instelt door de volgende commando’s uit te voeren. Je moet de hostname variabele die in dit voorbeeld gebruikt wordt vervangen door je eigen domein.

hostnamectl set-hostname www.socialnet.org

Nadat je de hostname van de machine hebt ingesteld, controleer je of de host juist is ingesteld door het hosts bestand te controleren met de volgende commando’s.

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

Om de machine hostname en kernel updates toe te passen, herstart je tenslotte het systeem door het volgende commando te geven.

systemctl reboot

Nadat het systeem opnieuw gestart is, log je weer in op de console en voer je het volgende commando uit om enkele systeemhulpprogramma’s te installeren die ons helpen software van het internet te downloaden en enkele soorten archiefbestanden uit te pakken

apt install wget zip unzip curl

Installeer de LAMP Stack

Om het Elgg sociaal netwerk raamwerk op onze server te kunnen uitrollen, moeten we de LAMP stack componenten installeren. Het eerste onderdeel dat we zullen installeren is de database – MariaDB – een afsplitsing van de populaire MySQL database, als database backend. De MariaDB database zal door de applicatie gebruikt worden om gebruikers, sessies, contacten, berichten, commentaar en andere informatie op te slaan. Om de MariaDB databaseserver en client software in Debian 9 te installeren via de officiële repositories, voer je het onderstaande commando uit in terminal.

apt install mariadb-server mariadb-client

Nadat de installatie van de database voltooid is, log je in op de MySQL console en voer je de volgende commando’s uit om de database root account te beveiligen, die standaard toegankelijk is zonder een wachtwoord op te geven.

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 [mysql]> update user set plugin=” where user=’root’;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [mysql]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> exit

Bye

Nadat je de bovenstaande stap hebt voltooid, voer je het mysql_secure_installationscript uit dat door de Debian stretch repositories wordt geleverd, om de MariaDB server verder te beveiligen en een sterk wachtwoord in te stellen voor de root account van de database. Antwoord vooral “ja” op alle vragen die het script stelt, zoals: om het MySQL root wachtwoord te veranderen, anonieme gebruikers te verwijderen, remote root logins uit te schakelen en de testdatabase te verwijderen, zoals in het onderstaande scriptfragment te zien is.

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!

Om de beveiliging van MariaDB te testen, probeer je in te loggen op de database vanaf de console zonder root wachtwoord. De toegang tot de database zou geweigerd moeten worden als geen wachtwoord voor de root account wordt verstrekt, zoals geïllustreerd in het onderstaande commando-uittreksel:

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

Als het wachtwoord wel wordt verstrekt, zou het inloggen op de MySQL console moeten worden toegestaan, zoals in het commando-voorbeeld:

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

Nadat je de MariaDB databank geïnstalleerd en beveiligd hebt, is het tijd om de volgende componenten te installeren die nodig zijn om de Elgg applicatie uit te rollen: Apache HTTP server en PHP programmeertaal verwerkingsgateway. Om Apache webserver en de PHP interpreter te installeren, samen met alle vereiste PHP modules waarmee de server de toepassingsscripts zal uitvoeren, voer je het volgende commando uit in je server console.

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

Open en wijzig vervolgens het standaard configuratiebestand van PHP door de volgende PHP variabelen te wijzigen. Open /etc/php/7 .0/apache2/php.ini bestand om te bewerken en wijzig de volgende regels. Maak eerst een backup van het PHP configuratiebestand.

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

Zoek, bewerk en verander de volgende variabelen in php.ini configuratiebestand:

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

Verhoog de upload_max_file_size variabele als geschikt om grote bestandsbijlagen voor je toepassing te ondersteunen. Verander ook de PHP tijdzone instelling in de geografische locatie van je systeem door de lijst van tijdzones te raadplegen die door PHP docs op de volgende link http://php.net/manual/en/timezones.phpwordt gegeven.

Schakel de voor PHP7 beschikbare OPCache plugin in om de snelheid van het laden van de website te verhogen door de volgende OPCache instellingen onderaan het PHP interpreter configuratiebestand toe te voegen, onder het [opcache] verklaring, zoals hieronder beschreven:

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

Nadat je alle bovenstaande veranderingen hebt aangebracht, bewaar en sluit je het php.ini configuratiebestand, herstart je de Apache webserver om de PHP interpreter veranderingen toe te passen door het onderstaande commando uit te voeren.

systemctl restart apache2

Configureer de firewall

Om de vereiste UFW firewall toepassingsregels toe te voegen om HTTP verkeer door de systeem-firewall te laten gaan, geef je de volgende commando’s in de server console.

ufw allow WWW

of

ufw allow 80/tcp

Als je op afstand via SSH met je server verbonden bent, voeg dan de onderstaande regel toe om SSH poort 22 in je firewall te openen.

ufw allow 22/tcp

Als je de firewall regels in je Debian server beheert via iptables raw regels, voeg dan de volgende regels toe om poort 80 en 22 inkomend verkeer door de firewall te laten, zodat externe cliënten toegang kunnen krijgen tot de toepassing. Open poort 22/TCP alleen als je op afstand via SSH met de server verbonden bent.

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

Configureer Apache Web Server

Schakel bij de volgende stap de Apache herschrijfmodule in, die nodig is om webserver configuraties on the fly te wijzigen via het .htacccess bestand, en de TLS module die nodig is om HTTP transacties te beveiligen, door het onderstaande commando uit te voeren.

a2enmod rewrite ssl
a2ensite default-ssl.conf

Open vervolgens het Apache standaard SSL site configuratiebestand om het te bewerken met je favoriete teksteditor, en voeg de volgende URL herschrijfregels toe na DocumentRoot de richtlijn:

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

SSL site configuratie bestand uittreksel:

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

Breng ook de hieronder getoonde verandering aan in de regel VirtualHost om het te laten lijken op wat in het volgende uittreksel staat:

<VirtualHost *:443>

Breng dezelfde veranderingen aan in het Apache standaard configuratiebestand door het bestand /etc/apache2/sites-enabled/000-default.conf te openen om te bewerken. Voeg de volgende regels code in na DocumentRoot statement zoals in het voorbeeld hieronder.

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

Herstart tenslotte Apache daemon om alle tot nu toe ingestelde regels toe te passen en bezoek je domein of server IP adres via het HTTP protocol.

systemctl restart apache2

Omdat je de automatisch door Apache bij de installatie uitgegeven Zelfondertekende certificaten paren gebruikt, moet voor een certificaat dat door de browser niet vertrouwd wordt, een foutmelding in de browser verschijnen. Accepteer de waarschuwing om het onvertrouwde certificaat te accepteren en verder omgeleid te worden naar de Apache standaard webpagina, zoals in de onderstaande afbeelding.

https://yourdomain.tld

SSL Waarschuwing

Apache standaard pagina

Om HTTPS verkeer door de UFW firewall te laten passeren, moet je de volgende regel toevoegen om inkomend 443/TCP verkeer toe te laten met het onderstaande commando.

ufw allow 'WWW Full'

of

ufw allow 443/tcp

Als iptables de standaard firewall toepassing is die geïnstalleerd is om je Debian systeem op netwerkniveau te beschermen, voeg dan de volgende regel toe om poort 443 inkomend verkeer in de firewall toe te staan, zodat bezoekers je domeinnaam kunnen doorbladeren.

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

Maak tenslotte het PHP info bestand aan in het root pad van je webserver document door het volgende commando uit te voeren.

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

Bezoek het PHP info script bestand door een browser te openen op de volgende URL:

https://yourdomain.tld/info.php

Controleer de PHP instellingen en scroll naar beneden naar datumconfiguratie om de PHP tijdzone configuratie te controleren.

PHP datum instellingen

Installeer de Elgg software

Om het Elgg sociaal netwerk platform in je systeem te installeren, bezoek je eerst de Elgg officiële download pagina op https://elgg.org/about/download en pak je het nieuwste zip pakket gecomprimeerde archief door het onderstaande commando uit te voeren.

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

Pak vervolgens het Elgg zip archiefbestand uit in je huidige werkdirectory en maak een lijst van de uitgepakte bestanden door de volgende commando’s te geven.

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

Verwijder bij de volgende stap het standaard index.html bestand dat Apache webserver naar het webroot pad installeerde en het eerder gemaakte info.php bestand door de volgende commando’s te geven.

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

Kopieer vervolgens de hele inhoud van de uitgepakte Elgg directory, inclusief het verborgen .htaccess bestand, naar het document root pad van je webserver door het volgende commando te geven.

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

Nadat je de Elgg installatie bestanden naar je domein webroot pad gekopieerd hebt, maak je een directory met de naam data voor de Elgg toepassing, één niveau hoger dan je domein webroot, door het volgende commando te geven. De data directory zal door de Elgg toepassing gebruikt worden om diverse gebruikers-gerelateerde bestanden op te slaan. Deze gegevensmap kan overal in de hiërarchie van je server-bestandssysteem worden aangemaakt, met de opmerking dat je de Apache runtime gebruiker schrijfrechten op deze map moet geven.

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

Voer vervolgens de onderstaande commando’s uit om de Apache runtime gebruiker volledige schrijfrechten op het web root pad te geven. Gebruik het ls commando om de permissies op te sommen van de geïnstalleerde bestanden van de applicatie die zich in de /var/www/html/ directory bevinden.

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

Alvorens met het installatieproces via een web browser te beginnen, log je in op de MariaDB database console en maak je de Elgg database en een gebruiker met een wachtwoord die gebruikt zal worden om deze database te beheren, door de volgende commando’s uit te voeren. Zorg ervoor dat je de in deze handleiding gebruikte databasenaam, gebruiker en wachtwoord dienovereenkomstig vervangt.

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)]> maak database elgg_db;
Query OK, 1 row affected (0.00 sec) 
MariaDB [(none)]> verleen alle rechten op elgg_db.* aan 'elgg_user'@'localhost' geïdentificeerd met 'password1234';
Query OK, 0 rows affected (0.00 sec) 
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec) 
MariaDB [(geen)]> exit

Bye 

Laten we nu verder gaan met de installatie van Elgg. Open eerst een browser en navigeer via het HTTPS protocol naar het IP adres of de domeinnaam of FQDN van je server.

https://yourdomain.tld

Op het welkomstscherm toont het installatieprogramma een introductiebericht dat je informeert dat je voor de installatie van de Elgg platform software zes stappen moet volgen. Druk gewoon op Next om het installatieproces te starten, zoals te zien is in onderstaande schermafbeelding.

Welkom bij Elgg

Vervolgens ontleedt het Elgg installatieprogramma je systeem en controleert of aan de PHP en webserver eisen is voldaan om het programma te installeren. Druk op Next om verder te gaan met het installatieproces, zoals te zien is in de onderstaande schermafbeelding.

Elgg vereisten

In het volgende installatiescherm configureer je de MySQL database instellingen door de MySQL databasenaam op te geven, de server host (gebruik localhost als de database op hetzelfde knooppunt geïnstalleerd wordt), de database gebruikersnaam en het wachtwoord dat eerder voor de installatie van Elgg gemaakt werd. Gebruik de databasetabel prefix als standaard of verander het als je een extra beveiligingslaag voor je toepassing wilt toevoegen. Kies tenslotte je standaard tijdzone instelling voor de toepassing en klik op Next om naar het volgende installatiescherm te gaan. Gebruik de onderstaande schermafbeelding als leidraad voor het instellen van deze stap.

Database instellingen

Bij de volgende stap configureer je de Elgg website door een naam voor de site toe te voegen en een email adres voor gebruikerscommunicatie. Verander ook het URL adres van de site als dat niet juist gedetecteerd werd en voeg het volledige pad naar de website gegevens directory. Stel tenslotte je standaard toegangsniveau tot de website in voor nieuwelingen en klik op Volgende om verder te gaan met het installatieproces.

Configureer site in Elgg

Maak vervolgens de eerste admin account voor je website, door het veld Display Name te vullen met de naam van je admin account. Voeg ook het e-mailadres, de gebruikersnaam en het wachtwoord van de admin account toe, zoals in de onderstaande afbeelding. Als je deze stap voltooid hebt, klik je op Next om verder te gaan en het installatieproces te voltooien.

Maak een admin account aan

Als het installatieproces voltooid is, druk je op “Ga naar site” om naar het Elgg admin dashboard te worden omgeleid.

Elgg Installatie is voltooid

Nadat je op het Elgg dashboard bent ingelogd, navigeer je naar het menu Configure -> Plugins uit het rechter paneel en begin je de gewenste Elgg plugins in te schakelen door op de knop Activate voor de gekozen plugin te drukken.

Elgg beheerderspaneel

Je kunt de Elgg toepassing ook bezoeken door via het HTTPS protocol naar je server IP adres of domeinnaam te navigeren. Gebruik de inloggegevens die tijdens het installatieproces voor de admin account zijn ingesteld om in te loggen in de Elgg sociale motor toepassing, zoals in de onderstaande schermafbeelding.

https://yourdomain.tld

Elgg Sociaal netwerk

Als laatste stap, als je bezoekers wilt dwingen veilig op de Elgg website te surfen via het HTTPS protocol dat het verkeer tussen de server en de client browsers versleutelt, ga dan terug naar de Debian server console en bewerk het .htaccess bestand dat in het root pad van je websitedocument staat, door het onderstaande commando uit te voeren.

nano /var/www/html/.htaccess

Zoek in het .htaccess bestand naar de<IfModule mod_rewrite.c> regel en voeg de onderstaande regels toe na RewriteEngine Aan verklaring om al je domeinverkeer automatisch om te leiden naar HTTPS.

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

Hier kun je ook enkele PHP variabelen voor je website veranderen. Zoek naar <IfModule mod_php7.c> directive en voeg onder deze regel je eigen PHP instellingen toe, zoals: verhoog de bestands-upload grootte voor het domein of schakel enkele standaard PHP configuraties voor de server uit, zoals in het onderstaande uittreksel:

# 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

Om de Elgg toepassing in de wachtrij meldingen te laten versturen, systeemlogs in de database te laten rouleren en rommel in de database te laten verzamelen (de database compacter maken door ingangen die niet meer nodig zijn te verwijderen), maak je een crontab bestand voor met de onderstaande configuraties. Ook moet deze crontab opdracht eigendom zijn van en uitgevoerd worden door de Apache runtime gebruiker.

crontab -u www-data –e

Crontab bestand uittreksel. De uitvoer van de cron taak van elke opdracht wordt weggegooid naar het Linux /dev/null zwart gat bestand. Vervang de in dit script gebruikte domeinnaam variabele($ELGG) dienovereenkomstig.

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}

Gefeliciteerd! Het Elgg sociale media platform is met succes geïnstalleerd en geconfigureerd bij jou op een Debian 9 server. Als je een geregistreerde publieke domeinnaam gebruikt om de Elgg toepassing aan publiek gerichte bezoekers te tonen, kun je overwegen een SSL certificaat te kopen, uitgegeven door een vertrouwde Certificate Authority of een gratis certificaat paar te krijgen van Let’s Encrypt CA.

Om de Elgg toepassing verder te beheren, bezoek je de documentatie pagina’s op het volgende adres: http://learn.elgg.org/en/stable/index.html