Arch Linux biedt een flexibele en innovatieve systeemomgeving en is een krachtige oplossing die het meest geschikt is voor het ontwikkelen van webapplicaties op kleine niet-kritieke systemen, vanwege het feit dat het volledig Open Source is en de meest up-to-date releases biedt van Kernels en websoftware voor servers en databases.

Het hoofddoel van deze zelfstudie is om u stap voor stap te begeleiden bij het installatieproces van een van de meest gebruikte softwarecombinaties in webontwikkeling: LAMP (Linux, Apache, MySQL/MariaDB en PHP/PhpMyAdmin) en het zal u enkele handige functies (snelle en eenvoudige Bash-scripts) presenteren die niet aanwezig zijn in een Arch Linux-systeem, maar het werk van het maken van meerdere Virtual Hosts, het genereren van SSL-certificaten en Keys vereenvoudigen die nodig zijn voor veilige HTTS-transacties.
Vereisten
- Vorig proces voor het installeren van Arch Linux – sla het laatste deel met DHCP over.
- Vorige LEMP-installatie op Arch Linux – alleen het deel met het configureren van Statisch IP-adres en externe SSH-toegang.
Stap 1: Installeer Basissoftware LAMP
1. Na minimale systeeminstallatie met statisch IP-adres en externe systeemtoegang via SSH, upgrade uw Arch Linux-systeem met behulp van het pacman-hulpprogramma.
$ sudo pacman -Syu
2. Wanneer het upgradeproces is voltooid, installeer dan LAMP stuk voor stuk, installeer eerst Apache Web Server en start/controleer elke serverservice-daemon.
$ sudo pacman -S apache $ sudo systemctl start httpd $ sudo systemctl status httpd

3. Installeer de dynamische server-side scripts taal PHP en de bijbehorende Apache-module.
$ sudo pacman -S php php-apache
4. Als laatste stap, installeer de MySQL database, kies 1 (MariaDB) community database fork en start en controleer de status van de daemon.
$ sudo pacman -S mysql $ sudo systemctl start mysqld $ sudo systemctl status mysqld


Je hebt nu de basis LAMP-software geïnstalleerd en gestart met de standaardconfiguraties tot nu toe.
Stap 2: Beveilig MySQL Database
5. De volgende stap is het beveiligen van de MySQL database door een wachtwoord in te stellen voor het root-account, verwijder anonieme gebruikersaccounts, verwijder de testdatabase en sta externe aanmeldingen voor gebruiker root niet toe (druk op [Enter] voor het huidige wachtwoord van root-account en beantwoord met Ja op alle beveiligingsvragen).
$ sudo mysql_secure_installation


6. Controleer de connectiviteit met de MySQL database door het volgende commando uit te voeren, verlaat vervolgens de database shell met quit of exit opdracht.
$ mysql -u root -p

Stap 3: Wijzig het hoofdconfiguratiebestand van Apache
7. De volgende configuraties hebben voornamelijk betrekking op de Apache Web Server om een dynamische interface te bieden voor Virtual Hosting met PHP-scripts, SSL of niet-SSL Virtual Hosts en kunnen worden uitgevoerd door de httpd-servicebestandsconfiguraties te wijzigen.
Open eerst het hoofdbestand van Apache-configuratie met je favoriete teksteditor.
$ sudo nano /etc/httpd/conf/httpd.conf
Voeg helemaal onderaan het bestand de volgende twee regels toe.
IncludeOptional conf/sites-enabled/*.conf IncludeOptional conf/mods-enabled/*.conf

De rol van Include statements hier is om Apache te vertellen dat vanaf nu verder configuraties gelezen moeten worden uit alle bestanden die zich bevinden in /etc/httpd/conf/sites-enabled/ (voor Virtuele Hosting) en /etc/httpd/conf/mods-enabled/ (voor geactiveerde server modules) systeempaden die eindigen in een .conf extensie.
8. Nadat Apache is geïnstrueerd met deze twee richtlijnen, maak de benodigde systeemdirectories aan door de volgende commando’s uit te voeren.
$ sudo mkdir /etc/httpd/conf/sites-available $ sudo mkdir /etc/httpd/conf/sites-enabled $ sudo mkdir /etc/httpd/conf/mods-enabled
De sites-available pad bevat alle configuratiebestanden van virtuele hosts die niet geactiveerd zijn in Apache, maar het volgende Bash-script zal deze directory gebruiken om websites die daar zijn geplaatst te koppelen en te activeren.
Stap 4: Maak a2eniste en a2diste Apache Commando’s aan
9. Nu is het tijd om a2ensite en a2dissite Apache-scripts aan te maken die dienen als commando’s om het configuratiebestand van virtuele hosts in te schakelen of uit te schakelen. Typ het cd commando om terug te keren naar uw $HOME gebruikerspad en maak uw bash a2eniste en a2dissite scripts aan met behulp van uw favoriete editor.
$ sudo nano a2ensite
Voeg de volgende inhoud toe aan dit bestand.
#!/bin/bash if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled ; then echo "-------------------------------" else mkdir /etc/httpd/conf/sites-available mkdir /etc/httpd/conf/sites-enabled fi avail=/etc/httpd/conf/sites-available/$1.conf enabled=/etc/httpd/conf/sites-enabled site=`ls /etc/httpd/conf/sites-available/` if [ "$#" != "1" ]; then echo "Use script: n2ensite virtual_site" echo -e "\nAvailable virtual hosts:\n$site" exit 0 else if test -e $avail; then sudo ln -s $avail $enabled else echo -e "$avail virtual host does not exist! Please create one!\n$site" exit 0 fi if test -e $enabled/$1.conf; then echo "Success!! Now restart Apache server: sudo systemctl restart httpd" else echo -e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site" exit 0 fi fi

Maak nu het a2dissite bash-scriptbestand aan.
$ sudo nano a2dissite
Voeg de volgende inhoud toe.
#!/bin/bash avail=/etc/httpd/conf/sites-enabled/$1.conf enabled=/etc/httpd/conf/sites-enabled site=`ls /etc/httpd/conf/sites-enabled` if [ "$#" != "1" ]; then echo "Use script: n2dissite virtual_site" echo -e "\nAvailable virtual hosts: \n$site" exit 0 else if test -e $avail; then sudo rm $avail else echo -e "$avail virtual host does not exist! Exiting" exit 0 fi if test -e $enabled/$1.conf; then echo "Error!! Could not remove $avail virtual host!" else echo -e "Success! $avail has been removed!\nsudo systemctl restart httpd" exit 0 fi fi

10. Nadat de bestanden zijn aangemaakt, ken uitvoeringsmachtigingen toe en kopieer ze naar een $PATH uitvoerbare directory om ze overal in het systeem beschikbaar te maken.
$ sudo chmod +x a2ensite a2dissite $ sudo cp a2ensite a2dissite /usr/local/bin/

Stap 5: Maak Virtuele Hosts aan in Apache
11. De standaardconfiguratie van een virtuele host voor de Apache-webserver op Arch Linux wordt geleverd door het bestand httpd-vhosts.conf dat zich bevindt in het pad /etc/httpd/conf/extra/, maar als je een systeem hebt dat veel virtuele hosts gebruikt, kan het erg moeilijk zijn om bij te houden welke website is geactiveerd of niet. Als je een website wilt uitschakelen, moet je alle bijbehorende richtlijnen uitcommentariëren of verwijderen en dat kan een lastige opgave zijn als je systeem veel websites bevat en je website meerdere configuratierichtlijnen heeft.
Het gebruik van de paden sites-available en sites-enabled vergemakkelijkt aanzienlijk het proces van het inschakelen of uitschakelen van websites en behoudt ook al uw websitesconfiguraties, ongeacht of ze geactiveerd zijn of niet.
In de volgende stap gaan we de eerste virtuele host construeren die wijst naar de standaard localhost met het standaard DocumentRoot-pad voor het serveren van websitebestanden (/srv/http.
$ sudo nano /etc/httpd/conf/sites-available/localhost.conf
Voeg hier de volgende Apache-richtlijnen toe.
<VirtualHost *:80> DocumentRoot "/srv/http" ServerName localhost ServerAdmin [email protected] ErrorLog "/var/log/httpd/localhost-error_log" TransferLog "/var/log/httpd/localhost-access_log" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order deny,allow Allow from all Require all granted </Directory> </VirtualHost>

De belangrijkste verklaringen hier zijn de Port– en ServerName-richtlijnen die Apache instrueren om een netwerkverbinding te openen op poort 80 en alle verzoeken met de naam localhost door te sturen naar bestanden die zich bevinden in het pad /srv/http/.
12. Nadat het localhost-bestand is aangemaakt, activeer je het en herstart je de httpd daemon om de wijzigingen te bekijken.
$ sudo a2ensite localhost $ sudo systemctl restart httpd

13. Ga vervolgens met je browser naar http://localhost, als je het uitvoert vanaf een Arch-systeem, of naar http://Arch_IP als je een extern systeem gebruikt.

Stap 6: SSL inschakelen met virtuele hosting op LAMP
SSL (Secure Sockets Layer) is een protocol dat is ontworpen om HTTP-verbindingen over netwerken of internet te versleutelen, waardoor gegevens worden verzonden via een beveiligd kanaal met behulp van symmetrische/asymmetrische cryptografische sleutels en dat wordt geleverd in Arch Linux door het OpenSSL-pakket.
14. Standaard is het SSL-module niet ingeschakeld op Apache in Arch Linux en kan worden geactiveerd door de mod_ssl.so-module uit het hoofdconfiguratiebestand httpd.conf en het bestand Include httpd-ssl.conf in het extra httpd-pad te expliciet te maken.
Maar om dingen te vereenvoudigen gaan we een nieuw modulebestand aanmaken voor SSL in het mods-enabled-pad en laten we het hoofdconfiguratiebestand van Apache ongemoeid. Maak het volgende bestand voor de SSL-module aan en voeg de onderstaande inhoud toe.
$ sudo nano /etc/httpd/conf/mods-enabled/ssl.conf
Voeg de volgende inhoud toe.
LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so Listen 443 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLPassPhraseDialog builtin SSLSessionCache "shmcb:/run/httpd/ssl_scache(512000)" SSLSessionCacheTimeout 300

15. Maak nu een virtueel hostbestand aan dat naar dezelfde localhostnaam verwijst, maar deze keer met SSL-serverconfiguraties, en verander de naam iets zodat je weet dat het voor localhost met SSL staat.
$ sudo nano /etc/httpd/conf/sites-available/localhost-ssl.conf
Voeg de volgende inhoud toe aan dit bestand.
<VirtualHost *:443> DocumentRoot "/srv/http" ServerName localhost ServerAdmin [email protected] ErrorLog "/var/log/httpd/localhost-ssl-error_log" TransferLog "/var/log/httpd/localhost-ssl-access_log" SSLEngine on SSLCertificateFile "/etc/httpd/conf/ssl/localhost.crt" SSLCertificateKeyFile "/etc/httpd/conf/ssl/localhost.key" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/srv/http/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog "/var/log/httpd/ssl_request_log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order deny,allow Allow from all Require all granted </Directory> </VirtualHost>

Naast de Port– en ServerName-directives, zijn andere belangrijke directives hier degene die wijzen naar het bestand van het SSL-certificaat en het SSL-sleutel-bestand die nog niet zijn aangemaakt. Start Apache Web Server niet opnieuw op, anders krijg je foutmeldingen.
16. Installeer de benodigde SSL-certificaatbestands- en -sleutels door het OpenSSL-pakket te installeren met het onderstaande commando.
$ sudo pacman -S openssl
17. Maak vervolgens het volgende Bash script dat automatisch al je Apache Certificaten en Sleutels creëert en opslaat in het systeempad /etc/httpd/conf/ssl/.
$ sudo nano apache_gen_ssl
Voeg de volgende bestandsinhoud toe, sla het op en maak het uitvoerbaar.
#!/bin/bash mkdir /etc/httpd/conf/ssl cd /etc/httpd/conf/ssl echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx SSL certificate!" read cert openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key chmod 600 $cert.key openssl req -new -key $cert.key -out $cert.csr openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt echo -e " The certificate "$cert" has been generated!\nPlease link it to Apache SSL available website!" ls -all /etc/httpd/conf/ssl exit 0

$ sudo chmod +x apache_gen_ssl
Als je wilt dat het script beschikbaar is in het hele systeem, kopieer het dan naar een uitvoerbaar $PATH.
$ sudo cp /apache_gen_ssl /usr/local/bin/
18. Genereer nu je Certificaat en Sleutels door het script uit te voeren. Geef je SSL-opties op en vergeet de certificaatnaam en Algemene Naam niet om overeen te komen met je officiële domein (FQDN).
$ sudo ./apache_gen_ssl


Na het maken van het certificaat en de sleutels, vergeet niet om je SSL Virtual Host certificaat- en sleutelconfiguraties aan te passen om overeen te komen met de naam van dit certificaat.
19. De laatste stap is om de nieuwe SSL Virtual Host te activeren en je server te herstarten om de configuraties toe te passen.
$ sudo a2ensite localhost-ssl $ sudo systemctl restart httpd

Dat is het! Om dit te verifiëren, open je browser en voeg Arch IP toe aan de URL met het HTTPS-protocol: https://localhost of https://system_IP.

Stap 7: Activeer PHP op Apache
20. Standaard serveert Apache alleen HTML-statische bestanden inhoud in Arch Linux zonder ondersteuning voor dynamische scripttalen. Om PHP te activeren, open eerst het hoofdconfiguratiebestand van Apache en zoek en verwijder de volgende LoadModule verklaring (php-apache werkt niet met mod_mpm_event in Arch Linux).
$ sudo nano /etc/httpd/conf/httpd.conf
Gebruik [Ctrl]+[w] om de volgende regel te zoeken en te wijzigen zodat deze eruitziet als dit.
#LoadModule mpm_event_module modules/mod_mpm_event.so

21. Maak vervolgens een nieuw bestand aan voor de PHP-module in de map mods-enabled met de volgende inhoud.
$ sudo nano /etc/httpd/conf/mods-enabled/php.conf
Voeg de exact volgende inhoud toe (je moet mod_mpm_prefork gebruiken).
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so LoadModule php5_module modules/libphp5.so Include conf/extra/php5_module.conf

22. Om de instelling te controleren maak je een PHP-bestand genaamd info.php aan in je DocumnetRoot (/srv/http/), herstart vervolgens Apache en ga in je browser naar het bestand info.php: https://localhost/info.php.
<?php phpinfo(); ?>
$ sudo systemctl restart httpd

Dat is alles! Als alles eruitziet zoals in de bovenstaande afbeelding, dan heb je nu PHP dynamische server-side scriptingtaal ingeschakeld op Apache en kun je nu websites ontwikkelen met Open Source CMS zoals WordPress bijvoorbeeld.
Als je Apache syntaxisconfiguraties wilt controleren en een lijst van geladen modules wilt bekijken zonder de httpd-daemon te herstarten, voer dan de volgende commando’s uit.
$ sudo apachectl configtest $ sudo apachectl -M
Stap 8: PhpMyAdmin installeren en configureren
23. Als je niet bedreven bent in MySQL-opdrachtregel en een eenvoudige externe toegang tot de MySQL-database via een webinterface wilt, dan heb je het PhpMyAdmin-pakket nodig dat is geïnstalleerd op je Arch-box.
$ sudo pacman -S phpmyadmin php-mcrypt
24. Nadat de pakketten zijn geïnstalleerd, moet je enkele PHP-uitbreidingen inschakelen (mysqli.so, mcrypt.so – voor interne authenticatie) en je kunt ook andere modules inschakelen die nodig zijn voor toekomstige CMS-platforms zoals openssl.so, imap.so of iconv.so enzovoort.
$ sudo nano /etc/php/php.ini
Zoek de bovengenoemde extensies op en haal de opmerkingstekens weg.
extension=mcrypt.so extension=mssql.so extension=mysqli.so extension=openssl.so extension=iconv.so extension=imap.so extension=zip.so extension=bz2.so

Ook, in hetzelfde bestand, zoek en lokaliseer de open_basedir verklaring en voeg het PhpMyAdmin systeempad toe (/etc/webapps/ and /usr/share/webapps/) om ervoor te zorgen dat PHP toegang heeft tot en bestanden kan lezen in die mappen (Als je, ook, het DocumentRoot-pad van Virtual Hosts wilt wijzigen van /srv/http/ naar een andere locatie, dan moet je het nieuwe pad hier ook toevoegen).

25. Het laatste wat je moet doen om toegang te krijgen tot de PhpMyAdmin Web Interface is het toevoegen van PhpMyAdmin Apache-verklaringen op Virtual Hosts. Als beveiligingsmaatregel zul je ervoor zorgen dat de PhpMyAdmin Web Interface alleen toegankelijk is vanaf localhost (of systeem-IP-adres) via het HTTPS-protocol en niet vanaf andere verschillende Virtual Hosts. Dus, open je localhost-ssl.conf Apache-bestand en voeg onderaan, voor de laatste verklaring de volgende inhoud toe.
$ sudo nano /etc/httpd/conf/sites-enabled/localhost-ssl.conf
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin" <Directory "/usr/share/webapps/phpMyAdmin"> DirectoryIndex index.html index.php AllowOverride All Options FollowSymlinks Require all granted </Directory>

26. Herstart vervolgens de Apache-daemon en ga met je browser naar het volgende adres en je zou toegang moeten hebben tot je PhpMyAdmin Web Interface: https://localhost/phpmyadmin of https://system_IP/phpmyadmin.

27. Als je, nadat je bent ingelogd op PhpMyAdmin, een fout onderaan ziet met betrekking tot een blowfish_secret, open en bewerk het bestand /etc/webapps/phpmyadmin/config.inc.php en voeg een willekeurige string toe zoals in de volgende verklaring, vernieuw vervolgens de pagina.
$cfg['blowfish_secret'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;

Stap 9: Schakel LAMP systeembreed in.
28. Als je wilt dat de LAMP-stack automatisch wordt gestart na een systeemherstart, voer dan de volgende commando’s uit.
$ sudo systemctl enable httpd mysqld

Dit zijn enkele belangrijke configuratie-instellingen op LAMP die nodig zijn om een Arch Linux systeem om te vormen tot een eenvoudig maar krachtig, snel en robuust webplatform met geavanceerde server software voor kleine niet-kritieke omgevingen. Als je echter koppig bent en het nog steeds wilt gebruiken in een grote productieomgeving, moet je jezelf bewapenen met veel geduld en extra aandacht besteden aan pakketupdates en regelmatig systeemback-upimages maken voor een snel systeemherstel in geval van systeemstoringen.