ExpressionEngine CMS met Nginx installeren op FreeBSD 12

ExpressionEngine is een volwassen, flexibel, veilig, gratis open-source inhoudbeheersysteem (CMS) geschreven in PHP. De broncode ervan wordt gehost op Github. Met ExpressionEngine kun je volwaardige websites bouwen, een web app maken, of inhoud aan mobiele toepassingen serveren. Allemaal zonder dat je complexe programmeerkennis nodig hebt. Deze gids leidt je door het installatieproces van ExpressionEngine op een verse FreeBSD 12 met PHP, MariaDB als databank, en Nginx als webserver.

Vereisten

ExpressionEngine vereist een webserver met PHP en MySQL/MariaDB. De aanbevolen software stack en versies zijn:

  • PHP versie 7.0 of hoger, draaiend met PHP-FPM en met de volgende PHP extensies (gd, fileinfo, intl, mbstring).
  • MySQL versie 5.6 of hoger of Percona versie 5.6 of hoger. Dezehandleiding zal MariaDB gebruiken.
  • Een webserver zoals Nginx of Apache. Deze handleiding gebruikt Nginx.

Vereisten

  • Een besturingssysteem met FreeBSD 12.
  • Een niet-root gebruiker met sudo rechten.

Ik zal in deze handleiding de domeinnaam example.com gebruiken. Vervang het woord example.com door je eigen domeinnaam overal waar het voorkomt in de onderstaande commando’s en configuratiebestanden (vooral in het Nginx configuratiebestand en de Let’s encrypt commando’s).

Eerste stappen

Controleer je FreeBSD versie:

uname -ro
# FreeBSD 12.0-RELEASE

Stel de tijdzone in:

tzsetup

Werk je besturingssysteem pakketten (software) bij. Dit is een belangrijke eerste stap omdat je er zeker van bent dat je de laatste updates en beveiligingsfixes hebt voor de standaard softwarepakketten van je besturingssysteem:

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

Installeer enkele essentiële pakketten die nodig zijn voor het basisbeheer van het FreeBSD 12.0 besturingssysteem:

pkg install -y sudo vim unzip wget bash socat

Installeer PHP

Installeer PHP, en ook de nodige PHP uitbreidingen:

sudo pkg install -y php72 php72-mbstring php72-tokenizer php72-pdo php72-pdo_mysql php72-openssl php72-hash php72-json php72-phar php72-filter php72-zlib php72-dom php72-xml php72-xmlwriter php72-xmlreader php72-curl php72-session php72-ctype php72-iconv php72-gd php72-simplexml php72-zip php72-filter php72-tokenizer php72-calendar php72-fileinfo php72-intl php72-phar php72-soap php72-xmlrpc

Om PHP gecompileerd in modules te tonen, kun je:

php -m

ctype
curl
exif
fileinfo
. . .
. . .

Controleer de PHP versie:

php --version

 

# PHP 7.2.16 (cli) (built: Apr 30 2019 08:37:17) ( NTS )
# Copyright (c) 1997-2018 The PHP Group
# Zend Engine v3.3.5, Copyright (c) 1998-2018 Zend Technologies
# with Zend OPcache v7.3.5, Copyright (c) 1999-2018, by Zend Technologies

Start en schakel de PHP-FPM dienst in:

sudo sysrc php_fpm_enable=yes
sudo service php-fpm start

Installeer MariaDB

Installeer de MariaDB databaseserver:

sudo pkg install -y mariadb102-client mariadb102-server

Controleer de MariaDB versie:

mysql --version
# mysql  Ver 15.1 Distrib 10.2.23-MariaDB, for Linux (x86_64) using readline 5.1

Start de MariaDB dienst en schakel die in:

sudo sysrc mysql_enable="yes"
sudo service mysql-server start

Voermysql_secure installation script uit om MariaDB beter tebeveiligen en stel het wachtwoord in voor MariaDB root gebruiker:

sudo mysql_secure_installation

Beantwoord elk van de vragen:

Would you like to setup VALIDATE PASSWORD plugin? N
New password: your_secure_password
Re-enter new password: your_secure_password
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Maak verbinding met MariaDB shell als de root gebruiker:

sudo mysql -u root -p
# Enter password

Maak een lege MariaDB database en gebruiker voor Shopware en onthoud de credentials:

mysql> CREATE DATABASE dbname;
mysql> GRANT ALL ON dbname.* TO 'username' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;

Sluit MariaDB af:

mysql> exit

Vervang dbname, username en password door je eigen namen.

Installeer Acme.sh client en verkrijg het Let’s Encrypt certificaat (optioneel)

Je website met HTTPS beveiligen is niet noodzakelijk, maar het is een goed gebruik om je site verkeer te beveiligen. Om een TLS certificaat van Let’s Encrypt te verkrijgen zullen we acme.sh client gebruiken. Acme.sh is een zuivere Unix shell software voor het verkrijgen van TLS certificaten van Let’s Encrypt zonder afhankelijkheden.

Download en installeer acme.sh:

sudo pkg install -y acme.sh

Controleer de versie van acme.sh:

acme.sh --version
# v2.8.2

Verkrijg RSA en ECC/ECDSA certificaten voor je domein/hostname:

# RSA 2048
acme.sh --issue --standalone -d example.com --keylength 2048
# ECDSA
acme.sh --issue --standalone -d example.com --keylength ec-256

Als je nep-certificaten wilt om te testen kun je de --stagingvlag aan de bovenstaande commando’s toevoegen.

Na het uitvoeren van de bovenstaande commando’s staan jecertificaten en sleutels in:

  • Voor RSA: /home/username/example.com map.
  • Voor ECC/ECDSA: /home/username/example.com_ecc map.

Om je uitgegeven certs op te sommen kun je uitvoeren:

acme.sh --list

Maak een directory om je certs in op te slaan. We zullen een directory gebruiken/etc/letsencrypt.

mkdir -p /etc/letsecnrypt/example.com sudo mkdir -p /etc/letsencrypt/example.com_ecc

Installeer/kopieer certificaten naar/etc/letsencryptmap.

# RSA
acme.sh --install-cert -d example.com --cert-file /etc/letsencrypt/example.com/cert.pem --key-file /etc/letsencrypt/example.com/private.key --fullchain-file /etc/letsencrypt/example.com/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"
# ECC/ECDSA
acme.sh --install-cert -d example.com --ecc --cert-file /etc/letsencrypt/example.com_ecc/cert.pem --key-file /etc/letsencrypt/example.com_ecc/private.key --fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"

Alle certificaten worden om de 60 dagen automatisch vernieuwd.

Verlaat na het verkrijgen van de certs de root gebruiker en ga terug naar de normale sudo gebruiker:

exit

Installeer Nginx

Installeer de NGINX webserver:

sudo pkg install -y nginx

Controleer de NGINX versie:

nginx -v
# nginx version: nginx/1.14.2

Start de NGINX dienst en schakel hem in:

sudo sysrc nginx_enable=yes
sudo service nginx start

Configureer Nginx voor ExpressionEngine door te draaien:

sudo vim /usr/local/etc/nginx/expressionengine.conf

En vul het bestand met de volgende configuratie:

server {

  listen 443 ssl;
  listen 80;
  
  server_name example.com;
  root /usr/local/www/expressionengine;
  # RSA
  ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
  # ECDSA
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;
  index index.php;
  
  location / {
    index index.php;
    try_files $uri $uri/ @ee;
  }
  
  location @ee {
    rewrite ^(.*) /index.php?$1 last;
  }
  
  location ~* \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi_params;
    fastcgi_index index.php5;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }

}

Voer sudo vim /usr/local/etc/nginx/nginx.conf uit en voeg de onderstaande regel toe aan http {} blok om Shopware config op te nemen.

include expressionEngine.conf;

Controleer Nginx configuratie op syntaxfouten:

sudo nginx -t

Herlaad Nginx service:

sudo service nginx reload

Installeer ExpressionEngine

Maak een document root map waar ExpressionEngine in moet komen te staan:

sudo mkdir -p /usr/local/www/expressionengine

Navigeer naar de document root map:

cd /usr/local/www/expressionengine

Download de laatste versie van ExpressionEngine en pak de bestanden uit in een map op je server:

sudo wget -O ee.zip --referer https://expressionengine.com/ 'https://expressionengine.com/?ACT=243'
sudo unzip ee.zip
sudo rm ee.zip

Verander het eigendom van de /usr/local/www/expressionengine map in www:

sudo chown -R www:www /usr/local/www/expressionengine

Wijs je browser naar de URL van het admin.php bestand dat je uploadde. Bijvoorbeeld: http://example.com/admin.php. Volg de instructies op het scherm om ExpressionEngine te installeren. Als de installatie wizard klaar is, moet je de system/ee/installer/ directory hernoemen of verwijderen van je server.

Voltooi de ExpressionEngine installatie

Voltooi de ExpressionEngine installatie door de gegevens van de database en de beheerdersaccount in te voeren:

Instellingen beheerdersaccount

Daarna zie je de standaard login pagina:

Eerst inloggen op ExpressionEngine

Dit is het ExpressionEngine administratie dashboard:

ExpressionEngine Dashboard

En hier is de frontend pagina:

Website in ExpressionEngine CMS

Dat is het! De ExpressionEngine installatie is voltooid.