de FEMP Stack (FreeBSD, Nginx, MySQL 8 en PHP 7.4) opzetten op FreeBSD 12

Een FEMP stack, die verwant is aan een LEMP stack op Linux, is een verzameling open-source software die gewoonlijk samen geïnstalleerd wordt om een FreeBSD server in staat te stellen dynamische websites en webapplicaties te hosten. FEMP is een acroniem dat staat voor FreeBSD (besturingssysteem), Nginx (HTTP server uitgesproken Engine-x), MySQL (databaseserver), en PHP (programmeertaal om dynamische PHP inhoud te verwerken).

In deze handleiding zetten we componenten van een FEMP stack op een FreeBSD 12.1 server met behulp van pkg, de FreeBSD pakketbeheerder.

Vereisten

Voor je aan deze gids begint, heb je het volgende nodig:

  • Een FreeBSD 12.1.
  • Een gebruiker met root privileges of sudo gebruiker om configuratiewijzigingen te maken.
  • Basiskennis van het FreeBSD systeem en de commandoregel interface wordt aanbevolen.

Eerste Stappen

Controleer de versie van FreeBSD.

uname -ro
# FreeBSD 12.1-RELEASE

Zorg ervoor dat je FreeBSD systeem up-to-date is.

freebsd-update fetch install
pkg update && pkg upgrade -y

Installeer de benodigde pakketten.

pkg install -y sudo vim bash curl

Maak een nieuwe gebruikersaccount aan met de gebruikersnaam van je voorkeur. Wij gebruiken johndoe.

adduser
# Username: johndoe
# Full name: John Doe
# Uid (Leave empty for default): <Enter>
# Login group [johndoe]: <Enter>
# Login group is johndoe. Invite johndoe into other groups? []: wheel
# Login class [default]: <Enter>
# Shell (sh csh tcsh nologin) [sh]: bash
# Home directory [/home/johndoe]: <Enter>
# Home directory permissions (Leave empty for default): <Enter>
# Use password-based authentication? [yes]: <Enter>
# Use an empty password? (yes/no) [no]: <Enter>
# Use a random password? (yes/no) [no]: <Enter>
# Enter password: your_secure_password
# Enter password again: your_secure_password
# Lock out the account after creation? [no]: <Enter>
# OK? (yes/no): yes
# Add another user? (yes/no): no
# Goodbye!

Voer het visudo commando uit en maak het commentaar op de regel %wheel ALL=(ALL) ALL ongedaan, om leden van de groep wheel toe te staan elk commando uit te voeren.

visudo

# Uncomment by removing hash (#) sign
# %wheel ALL=(ALL) ALL

Schakel nu over naar je nieuw aangemaakte gebruiker met su:

su - johndoe

OPMERKING: Vervang johndoe door je gebruikersnaam.

Stel de tijdzone in:

sudo tzsetup

Stap 1 – Hoofdlijn Nginx installeren

De Nginx webserver is momenteel een van de populairste webservers ter wereld. Het is een uitstekende keuze voor het hosten van een website.

Je kunt Nginx installeren met FreeBSD’s pakketbeheerder, pkg. Met een pakketbeheerder kun je de meeste software moeiteloos installeren vanuit een repository die door FreeBSD wordt onderhouden. Je kunt hier meer leren over het gebruik van pkg.

Om de nieuwste mainline Nginx te installeren, geef je het volgende commando:

sudo pkg install -y nginx-devel

Controleer de versie:

nginx -v
# nginx version: nginx/1.17.7

Dit commando installeert de nieuwste mainline versie, die betrouwbaar op een produktieserver gebruikt kan worden. Wil je de nieuwste stabiele release installeren, gebruik dan gewoon nginx package in plaats van nginx-devel.

Schakel nu Nginx in en start het:

sudo sysrc nginx_enable=yes
sudo service nginx start

Om te controleren of Nginx gestart is kun je het volgende commando uitvoeren:

sudo service nginx status

Als resultaat zie je iets dat lijkt op:

# Output
nginx is running as pid 17607.

Je kunt controleren of Nginx geïnstalleerd is en zonder fouten werkt door in je webbrowser het publieke IP adres van je server te bezoeken. Navigeer naar your_server_IP. Je ziet de standaard “Welkom bij nginx!” pagina.

Stap 2 – MySQL 8.0 installeren

Nu je je webserver aan de praat hebt, is het tijd om MySQL te installeren, het relationele databasemanagement systeem. De MySQL server organiseert en geeft toegang tot databases waarin je server informatie kan opslaan.

Ook hier kun je pkg gebruiken om je software te verkrijgen en te installeren.

Om MySQL 8.0 te installeren met pkg, gebruik je dit commando:

sudo pkg install -y mysql80-client mysql80-server

Dit commando installeert de nieuwste versie van de MySQL client en server, die momenteel 8.x.x is.

Controleer de versie:

mysql --version
# mysql  Ver 8.0.17 for FreeBSD12.0 on amd64 (Source distribution)

Schakel nu MySQL in en start het:

sudo sysrc mysql_enable=yes
sudo service mysql-server start

Om te controleren of MySQL gestart is kun je het volgende commando uitvoeren:

sudo service mysql-server status

Je krijgt iets te zien dat lijkt op het volgende:

# Output
mysql is running as pid 19066.

Als goed gebruik kun je het mysql_secure_installation beveiligingsscript uitvoeren dat enkele onveilige standaardinstellingen verwijdert en de toegang tot je databasesysteem enigszins beperkt.

sudo mysql_secure_installation

Je wordt gevraagd een wachtwoord in te stellen, gevolgd door enkele andere vragen. Voer een sterk wachtwoord in en druk dan voor de rest van de vragen op ENTER om de standaardwaarden te kiezen.

Stap 3 – PHP 7.4 installeren

PHP is een server-side scripting taal die ontworpen is voor webontwikkeling. PHP is een onmisbaar onderdeel van de FEMP stack. Ook worden gewoonlijk Python of Perl gebruikt in plaats van PHP. Toch wordt PHP als de meest populaire optie het meest gebruikt. Samen met de database geeft het je web sites of apps dynamisch gedrag.

Maak weer gebruik van het pkg systeem om PHP componenten te installeren.

Om PHP 7.4 te installeren met pkg, voer je dit commando uit:

sudo pkg install -y php74

Controleer de PHP versie:

php --version
# PHP 7.4.0 (cli) (built: Jul 18 2019 01:14:37) ( NTS )
# Copyright (c) 1997-2018 The PHP Group
# Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies

Dit commando installeert de nieuwste versie van PHP, 7.4.

Schakel nu PHP-FPM in en start het:

sudo sysrc php_fpm_enable=yes
sudo service php-fpm start

Om te controleren of PHP-FPM gestart is kun je het volgende commando uitvoeren:

sudo service php-fpm status

Als resultaat zie je iets dat lijkt op:

# Output
php_fpm is running as pid 23005.

Installeren van PHP Modules (Optioneel)

Om de functionaliteit van PHP te verbeteren, kun je optioneel enkele extra modules installeren.

Om de momenteel gecompileerde PHP modules te zien, kun je dit uitvoeren:

php -m

# [PHP Modules]
# Core # date
# libxml
# mysqlnd
# pcre
# Reflection
# SPL
# standard
# [Zend Modules]

Om naar beschikbare PHP modules te zoeken, kun je dit commando gebruiken:

pkg search ^php74-*

De resultaten zullen meestal PHP 7.4 modules zijn die je kunt installeren:

# Output
# php74-7.4.7                    PHP Scripting Language
# php74-Ice37-3.7.2              Modern alternative to object middleware such as CORBA/COM/DCOM/COM+
# php74-aphpbreakdown-2.2.2      Code-Analyzer for PHP for Compatibility Check-UP
# php74-aphpunit-1.8             Testing framework for unit tests
# php74-bcmath-7.4.7             The bcmath shared extension for php
# php74-brotli-0.7.0             Brotli extension for PHP
# php74-bsdconv-11.5.0           PHP wrapper for bsdconv
# php74-bz2-7.4.7                The bz2 shared extension for php
# php74-calendar-7.4.7           The calendar shared extension for php
# php74-composer-1.8.6           Dependency Manager for PHP
# php74-ctype-7.4.7              The ctype shared extension for php
# php74-curl-7.4.7               The curl shared extension for php
# . . .

Als je na onderzoek besluit dat je een pakket moet installeren, kun je dat doen met het pkg install commando. De meeste PHP webapplicaties zullen aanvullende modules nodig hebben, dus het is goed om te weten hoe je ze kunt zoeken.

Stap 4 – Nginx configureren om PHP module te gebruiken

Voordat je PHP gebruikt, moet je het configureren om met Nginx te werken.

Draai sudo vim /usr/local/etc/nginx/test.conf en vul het bestand met de onderstaande inhoud:

server {

  listen 80;
  server_name SERVER_IP; # Replace with your IP or hostname
  root /usr/local/www/nginx-dist;
  index index.php index.html index.htm;

  location / {
    try_files $uri $uri/ =404;
  }

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

}

Bewaar het bestand en sluit vim af.

Nu moeten we test.conf opnemen in het hoofdbestand nginx.conf. Het hoofdconfiguratiebestand voor Nginx staat onder /usr/local/etc/nginx als nginx.conf.

Voer sudo vim /usr/local/etc/nginx/nginx.conf uit om het hoofdconfiguratiebestand in Vim te openen en voeg de volgende regel toe aan het blok http {}.

include test.conf;

Test de Nginx configuratie:

sudo nginx -t

Omdat je configuratiewijzigingen in Nginx hebt aangebracht, moet je de dienst opnieuw laden om ze te laten toepassen. Anders werkt Nginx nog met de eerdere configuratie:

sudo service nginx reload

Stap 5 - PHP verwerking testen

Om te testen of je systeem correct voor PHP geconfigureerd is, kun je een heel eenvoudig PHP script maken. Je noemt dit script info.php. Standaard staat de root ingesteld op /usr/local/www/nginx-dist. Je kunt het info.php bestand onder die plaats maken door te typen:

sudo vim /usr/local/www/nginx-dist/info.php

En voeg deze code aan dat bestand toe:

<?php phpinfo(); ?>

Navigeer naar http://your_server_IP/info.php en je ziet de volgende pagina:

Na de installatie en instelling van de FEMP stack moet je het info.php bestand verwijderen om te voorkomen dat de informatie over de server aan het publiek onthuld wordt:

sudo rm /usr/local/www/nginx-dist/info.php

Conclusie

Gefeliciteerd, je hebt met succes een FEMP stack op je FreeBSD 12.1 VPS geïnstalleerd. Nu heb je meerdere keuzes voor wat je nu gaat doen. Je hebt een platform geïnstalleerd waarmee je de meeste soorten websites en web software erop kunt installeren.