Deze website maken

Doel 

Een Drupal Content Management Systeem maken, precies zoals deze site

Benodigdheden 
  • Een computer met Arch Linux (liever geen RPi dit keer) of een Digital Ocean Droplet
Tutorial 

Met "deze website maken" bedoel ik precies dat, deze website na maken. Deze website is een Drupal CMS wat draait op Nginx, PHP-fpm and MariaDB. Dit alles draait op een Arch Linux server. In deze tutorial zet ik de server op op een Digital Ocean virtuele server (DO noemt dit een Droplet). Dit kost je 5 dollar per maand en als je na een dag stopt betaal je ook maar voor een dag. Zorg wel zelf voor goede backups als je die er niet bij neemt, zelf heb ik een keer meegemaakt dat de server ineens helemaal corrupt was door een hardware fout bij Digital Ocean. Verder heb ik nog nooit gehoord dat dit voorkwam trouwens dus die kans lijkt klein.
Disclaimer: In de links naar Digital Ocean zit mijn referral code, als jij 10$ bij Digital Ocean spendeert krijg ik ook 10$! En dan nog een kleine tip, als je googled op "Digital Ocean coupon" vind je vaak 5 of 10$ kortingen wat betekend dat je eerste of eerste twee maanden spelen gratis zijn! (Deze tip is niet handig voor mijn referral code winst overigens ;))

Je kunt natuurlijk ook de website op je eigen computer draaien, een RPi zou ik niet aanraden, we gaan een Drupal systeem opzetten en je zult zien dat je daar liever een sterkere (virtuele) PC voor gebruikt. Op dit moment draait deze website overigens op mijn server thuis, een systeem gebaseerd op een moederboard van Asus, een Intel Celeron processor en 2x2 GB RAM. Ik ga de website wel weer verplaatsen naar een Droplet, deze server is ook mijn NAS en ik heb geen idee wat de impact gaat zijn als er meer en meer verkeer gaat komen. Bovendien kun je Droplets (VMs) bij Digital Ocean met 1 klik op de knop meer RAM en CPU geven. Als je dit leest kan het dus zijn dat de site alweer bij Digital Ocean draait.

Ok, ter zake! We beginnen met het aanmaken van een account op Digital Ocean of gebruik je eigen computer. Kies voor een Arch Linux Droplet of zet Arch Linux op je computer. Je kunt overigens ook spelen met Arch Linux in een VM. Misschien post ik hier nog wel eens een Virtualbox image.

Digital Ocean stuurt je een mail als je server klaar is, meestal binnen een minuut. Je kunt direct op je server inloggen via ssh als root, onder Windows met Putty en onder Linux en osX met een standaard Terminal:
ssh root@ip.adr.van.server
(In putty vul je zelf de juiste details in.)
We beginnen eerst de boel te updaten met
pacman -Syu
De rest van deze paragraaf is alleen relevant voor mensen die op een DO Droplet bezig zijn. De update zal falen door een oude fout. Om dit te omzeilen moeten we een set commando's in een bepaalde volgorde geven:
pacman -Syu --ignore filesystem,bash
pacman -S bash
pacman -Su
Let op, de Kernel update niet! Dat komt door hoe DO met VMs omgaat. Na deze stappen kun je wel gewoon updaten met
pacman -Syu

Nu gaan we eerst wat tutorials van deze website uitvoeren. Het mooie is dat Arch Linux op welke PC dan ook gewoon hetzelfde werkt als op de RPi. Als je klaar bent kom je hier weer terug voor de volgende...

De server beveiligen

Als eerste gaan we de boel beveiligen, de server zal blootgesteld worden aan het internet en het internet is een jungle vol wilde dieren die jouw PC willen kraken om spam of andere troep te verspreiden. Als je een server online zet moet je hem echt up-to-date houden en goed beveiligen. Als dit je bang maakt kun je ook eerst spelen achter de standaard firewall van je router/modem, daar ben veilig. Maar hoe dan ook, voer eerst alle stappen uit van de onderstaande tutorial en kom dan terug. Lees waar "RPi" staat maar gewoon "server".
De RPi beveiligen

De webserver software opzetten

Mooi, je server is nu veilig(er), ssh je server in als je aangemaakte, gewone gebruiker maar wordt maar meteen root (met su) voor de volgende tutorial waarin we een webserver aanzetten met PHP mogelijheden.
De RPi als webserver

MariaDB

Zo, je server draait een firewall, root kan niet via ssh inloggen, PHP draait netjes op Nginx. Lekker hoor. Maar nu nog de laatste stappen, het installeren van het Drupal content management systeem (CMS). De pakketten die we nodig hebben (nginx, mariadb, drupal, postfix, php en php-fpm) zijn al voor een deel geïnstalleerd, installeer alles wat we nog meer nodig hebben:
pacman -Sy mariadb drupal postfix
De standaard MariaDB configuratie is niet helemaal goed veilig maar dat kunnen we oplossen met een ingebouwd script. Start eerst MariaDB en zorg dat het na elke reboot ook opstart.
systemctl start mysqld
systemctl enable mysqld
En voer het script uit (je bent nog steeds root overigens).
/usr/bin/mysql_secure_installation
Kies een root paswoord (root is in dit geval beheerder van alle databases, niet de root van het systeem) en beantwoord alle vragen met de standaard antwoorden.
Als je klaar bent gaan we de database maken die Drupal zal gebruiken voor het opslaan van inhoud. Inhoud zoals de pagina die je nu leest.
mysql -u root -p
create database databasenaam;
Vervang "databasenaam" met een naam die je zelf kiest en onthoudt deze naam voor later.
grant all privileges on databasenaam.* to gebruikersnaam@localhost IDENTIFIED BY 'wachtwoord';
Vervang "databasenaam", "gebruikersnaam" en "wachtwoord" door zelf te kiezen waarden en vergeet nooit de laatste ";". Je maakt nu een database die niet van root is, dat is veiliger, zo heeft het Drupal systeem straks niet het recht om zomaar andere databases aan te passen. Sluit de MariaDB (vroeger trouwens MySQL) af.
exit

Postfix

We hadden ook nog Postfix geinstalleerd, postfix kennen we natuurlijk van de tutorial "Je eigen mailserver". Gelukkig hoeven we Postfix niet zo uitgebreid te configureren als we slechts Drupal de mogelijkheid willen geven mailtje te versturen. Het enige wat we hoeven te doen is de URL van je website in te voeren in de Postfix config file.
nano /etc/postfix/main.cf
Vind de regel die begint met "mydomain =" en zet daar de naam van je website achter, dus zoiets:
mydomain = rpi.nl.eu.org
Start Postfix en zorg dat Postfix na elke reboot start:
systemctl enable postfix
systemctl start postfix

GD

GD hebben we ook nodig, deze plugin geeft Drupal straks de mogelijkheid om plaatjes te schalen en van kwaliteit te veranderen. Installeer GD:
pacman -S php-gd
Open de file /etc/php/php.ini:
nano /etc/php/php.ini
Haal nu de ";" weg voor extension=pdo_mysql.so zodat er staat:
extension=pdo_mysql.so
Doe hetzeflde met de regel:
extension=gd.so
Tip: je kunt zoeken in nano met ctrl-W.

Nginx: extra configuratie

Om later lange URLs te kunnen gebruiken moet je in de Nginx config file aanpassen:
nano /etc/nginx/nginx.conf
En toevoegen als eerste regel van de http sectie:
server_names_hash_bucket_size  64;
Houd de file open en zorg dat er onder het "server" gedeelte bij "location" het volgende staat (sommige dingen staan er al):
location / {
            root   /usr/share/nginx/html/;
            index  index.html index.htm index.php;

            try_files $uri $uri/ @rewrite;
            }

            client_max_body_size 100M;

            location @rewrite {
            rewrite ^/(.*)$ /index.php?q=$1;
            }
"try_files $uri $uri/ @rewrite;" zorgt er voor dat je later gebruik kunt maken van clean urls binnen Drupal. "client_max_body_size 100M;" zorgt er voor dat je grotere files dan de standaard 2 MB kunt uploaden, misschien wil je dit wel iets lager zetten dus, vooral als onbekenden je site gaan gebruiken.

Drupal

Dan rest ons nog slechts de installatie van Drupal zelf. De files hadden we aan het begin van de tutorial al binnen gehaald met pacman, ze zijn te vinden in /usr/share/webapps/drupal/. We halen is de standaard Nginx website map helemaal leeg en kopieren daarna de Drupal files erin:
rm -rf /usr/share/nginx/html/
cp -rv /usr/share/webapps/drupal/ /usr/share/nginx/html/
Dat was het. Als je nu surft naar het IP adres van je Digital Ocean Droplet of je server dan kun je daar aan de Drupal installatie beginnen, je hebt hiervoor de naam van de database nodig en de database gebruikersnaam en het bijbehorende wachtwoord. Als je een DNS A-record hebt voor je eigen domeinnaam kun je die naar dit IP wijzen en dan zie je daar voortaan je site.

Veel plezier.

Bronnen