Ga naar de inhoud
Home » WordPress site op OCI

WordPress site op OCI

Oracle Cloud Blog Header

We gaan een wordpress webserver in de lucht brengen. In dit voorbeeld thuis.famtenhoopen.nl.

Het domain famtenhoopen.nl is in mijn bezit (beetje essentieel πŸ™‚ )

In OCI hebben we al een netwerk gemaakt en zijn alle routetabellenen security lists up to date. De firewalld op de instanties kan dus uit!

  • Subnet database gaat naar het internet via een NAT
  • Subnet web gaan naar de buitenwereld via een Internet Gateway.

En

  • Het public ip adres van de compute instance is130.61.161.240 en zit in een public subnetwerk
  • We maken ook gebruik van een database instance die in een private subnetwerk zit op 10.0.1.3

Dat idee klinkt misschien onzinnig want de compute instance stelt niet veel voor (geekbench5 resultaat voor single core: 272 en multi core: 327) maar de disken zijn wel snel. Mocht een website voor jezelf willen hebben, dan moet dat best kunnen … denk ik. Zeker als je de database op een aparte instantie zet.Dit is ook de reden waarom ik hier aan begonnen ben LOL. Kijken wat het wordt ….

Inloggen

Inloggen gaat via ssh, een ssh key maak je via ssh-kygen. Dit is een vraag en antwoord spelletje πŸ™‚ Geef geen passphrase op!!

Via ssh -i <privatekey> user@ip-adress …. in mijn geval iets in de geest van:

ssh -i ~/Documenten/Oracle/Cloud/arjan-instance/PKI/host-web/user-opc/opc opc@130.61.161.240

Zelf doe ik het via Remmina Remote Desktop Client, maar dat is eigenlijk om het even.

Zorg ervoor dat je op beide instanties bent ingelogd

Tip van Flip

Wordt je helemaal gek van dat ge-sudo .. type dan

sudo bash

Krijg je een nieuwe shell met uid 0 (=root) en ben je van al dat ge-sudo af πŸ™‚

Tooltjes die handig kunnen zijn

ff installeren voor alle ellende echt begint πŸ™‚

sudo yum install whois telnet nmap ImageMagick

Doe dit zowel op instantie waar WordPress op komt als ook op de database instantie.

Zet ook op biede instanties de firewalld uit:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Yeaahhhh

Pakket httpd installeren op de WordPress instantie

sudo yum install httpd 
sudo systemctl start httpd
sudo systemctl enable httpd

Pakket mariadb installeren op de database instantie en ook op de WordPress instantie

sudo yum install mariadb-server
# alleen starten op de database instantie!
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation

Onthou het root wachtwoord dat je opgegeven hebt!!

Een db maken op de database instantie. WordPress gaat deze straks gebruiken.

mysql -u root -p
MariaDB>create database famtenhoopen;
quit

WordPress installeren op de WordPress instantie

PHP7 installeren, standaard is er alleen PHP5

sudo yum install oracle-php-release-el7
sudo yum install php
sudo yum install php-mysql php-json php-gd php-xml php-mbstring php-zip

WordPress overhalen en unzippen

sudo mkdir /var/www/websites
cd /var/www/websites
sudo wget .....
sudo unzip .....

Daar kreeg ik dus een wordpress map (/var/www/websites/wordpress) Ik maak een aparte map voor deze website (/var/www/websites/tenhoopen), wie weet wat er in de toekomst nog bij komt.

cd /var/www/websites
sudo mv wordpress tenhoopen
sudo chown -R apache.apache *
sudo chown apache.apache . 

Maak een bestand /etc/httpd/conf.d/wordpress.conf en zet er het volgende in

#
# settings voor wordpress websites
#
<Directory "/var/www/websites">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All

#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>

Probeer of je nu de webserver kunt herstarten. DIt doen we alleen om ff te controleren of we geen config fouten gemaakt hebben die bij een herstart boven water komen. Er kunnen dus nog steeds config fouten achterblijven … maar dat lossen we later wel op.

sudo systemctl restart httpd

Disable SELinux op de WordPress instantie en de database instantie

SELinux is enabled. Dat is heel goed maar voor nu een beetje overkill.Als je het aan laat staan krijg je bij de installatie van WordPress volgende cryptische fouten (LOL ja het was vallen en opstaan de eerste keer):

[Thu Jun 25 18:42:14.045018 2020] [php7:warn] [pid 5990] [client 80.60.218.224:39002] PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
[Thu Jun 25 18:42:14.045047 2020] [php7:error] [pid 5990] [client 80.60.218.224:39002] PHP Fatal error: Unknown: Failed opening required '/var/www/html/wp-admin/install.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0

Dussssss……

Je kunt SELinux gaan tweaken maar je kunt het ook uitzetten. Doe het volgende om het uit te zetten:

#wat is de status van SELinux
sudo sestatus
cd /etc/sysconfig
sudo vi selinux 
#zet SELINUX op disabled en save file en exit

Vervolgens reboot je het systeem, en SELinux is disabled.

Webserver testen op de WordPress instantie

Je moet nu toegang hebben tot je website (http://130.61.161.240/ en die brengt je naar het begin van de installatie van WordPress. De eerste vraag is … welke taal? Daarna begint het echte werk πŸ™‚

Weet je de gegevens over je database …. Let’s go!! (de installatie begint nu).

Na de installatie log je in als de gebruiker die je hebt opgegeven. Vervolgens voer je alle updates uit waar WordPress over mekkert.

Van IP naar een leesbaar thuis.famtenhoopen.nl

Zorg ervoor dat in je DNS de servernaam een A record heeft! In dit voorbeeld is dat thuis.famtenhoopen.nl

Als je dit A record hebt aangemaakt dan geduld, alle name servers moeten dit nog wel krijgen. Controleer of je via de WordPress instance succesvol

dig thuis.famtenhoopen.nl

hebt kunnen uitvoeren. Doe dit ook vanaf de computer die je nu zelf gebruikt. Als beide thuis.famtenhoopen.nl hebben kunnen resolven, dan kun je verder gaan. Anders gewoon wachten, nachtje slapen is vaak voldoende LOL

Kijk nu of je op je website kunt komen via http://thuis.famtenhoopen.nl (mogelijk eerst de cache van je browser leeg maken πŸ™‚ )

?????????Inloggen doe je via http://thuis.famtenhoopen.nl/wp-login.php, doe dit vanaf je eigen computer??????

Virtual Hosts aanpassen op de WordPress instantie

We willen straks van http naar https, dat gaan we doen met Lets Encrypt. Die kan heel veel zelf zolang het maar over virtual hosts gaat. Dat moet dus nu voor elkaar worden gebutst.

Wat hebben we nu aan virtual hosts:

sudo apachectl -S

Dat is nog even wat knutselwerk, pas het volgende aan in /etc/httpd/conf/httpd.conf

Voeg de volgende twee regels toe aan het eind:

# Load Virtual Hosts definition
IncludeOptional sites-enabled/*.conf

Save het bestand.

Maak een map aan sites-enabled

sudo mkdir /etc/httpd/sites-enabled

Virtual host config maken:

sudo vi /etc/httpd/sites-enabled/thuis.famtenhoopen.nl.conf

Inhoud wordt:

<VirtualHost *:80>
  ServerName thuis.famtenhoopen.nl
  DocumentRoot /var/www/websites/famtenhoopen  
</VirtualHost>

Restart apache:

sudo systemctl restart httpd

Het volgende command laat alle geconfigureerde Virtual Hosts zien:

sudo apachectl -S

Als alles verloopt naar verwachting kun je nog steeds bij http://thuis.famtenhoopen.nl komen. Let goed op de adres balk .. hier kan (mogelijk) het ip adres te staan.

In WordPress onder Settings β‡’ General moet je nu nog het wordpress adres (URL) en site adres (URL) aanpassen. Maak van beide http://thuis.famtenhoopen.nl

Lets Encrypt

De website https maken gaat dus via Lets Encrypt.

**************************************************

Je moet echter wel een domein naam in je bezit hebben!!! EN je moet een A-Record hebben in je DNS voor je site (in dit geval thuis.famtenhoopen.nl).

Heb je dat niet dat krijg je het niet aan de praat want Lets Encrypt checked dit.

**************************************************

Zet nu in de cloud poort 443 ook nog open anders kom je niet binnen via https://… πŸ™‚ (Hint: Netwerken β‡’ Virtuele cloudnetwerken β‡’ “VCN” β‡’ “Subnet” β‡’ Security List)

Volg nu de instructies op zoals beschrevenop https://certbot.eff.org/lets-encrypt/centosrhel7-apache

… OF …

In het kort:

sudo yum install certbot python2-certbot-apache

Restart apache zodat je zeker weet dat alles goed geconfigureerd en actief is:

sudo systemctl restart httpd

Configutreer nu ssl via

sudo certbot --apache

Restart apache zodat je zeker weet dat alles goed geconfigureerd en actief is:

sudo systemctl restart httpd

En kijk of je bij https://thuis.famtenhoopen.nl kunt komen (heb je redirect aangezet dan kun je ook naar http://thuis.famtenhoopen.nl gaan, die gaat dan automatisch door naar https://thuis…

Nog even redirect, tijdens sudo certbot – -apache kreeg je hier een vraag over. Heb je yes gezegd dan is /etc/httpd/sites-enabled/thuis.famtenhoopen.nl.conf aangepast. Er zijn drie regels bijgevoegd, hier het eindresultaat:

<VirtualHost *:80>
  ServerName thuis.famtenhoopen.nl
  DocumentRoot /var/www/html 
  RewriteEngine on
  RewriteCond %{SERVER_NAME} =thuis.famtenhoopen.nl
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

De 3 rode regels zijn toegevoegd, wil je toch geen redirect (DAT IS GEEN GOED IDEE) zet dan een # voor deze regels.

Nadat je apache gerestart hebt (sudo systemctl restart httpd) is het actief.

Er kunnen vreemde dingen gebeuren πŸ™‚ Het legen van de cache van je browser kan dit probleem oplossen (ja ja .. ik had ook last van vallen en opstaan πŸ™‚ ).

Ik had de 3 rode regels voorzien van een # en kan daarna wel bij http://… komen maar niet bij https://… Legen van de logfiles en daarna herstarten van Apache gaf mij de volgende ellende:

[Mon Jun 29 09:34:48.457649 2020] [ssl:warn] [pid 5970] AH01909: RSA certificate configured for web.web.backbone.oraclevcn.com:443 does NOT include an ID which matches the server name
[Mon Jun 29 09:34:48.480099 2020] [ssl:warn] [pid 5970] AH01909: RSA certificate configured for web.web.backbone.oraclevcn.com:443 does NOT include an ID which matches the server name

Welke virtual hosts zijn er?

sudo apachectl -S
VirtualHost configuration:
*:443                  is a NameVirtualHost
         default server web.web.backbone.oraclevcn.com (/etc/httpd/conf.d/ssl.conf:56)
         port 443 namevhost web.web.backbone.oraclevcn.com (/etc/httpd/conf.d/ssl.conf:56)
         port 443 namevhost thuis.famtenhoopen.nl (/etc/httpd/sites-enabled/thuis.famtenhoopen.nl-le-ssl.conf:2)
*:80                   thuis.famtenhoopen.nl (/etc/httpd/sites-enabled/thuis.famtenhoopen.nl.conf:1)
ServerRoot: "/etc/httpd"
...
...
...

Via /etc/httpd/conf.d/ssl.conf er twee bijgekregen πŸ™‚ Ga naar /etc/httpd/conf.d/ssl.conf en zet een hekje voor alle regels te beginnen bij:

<VirtualHost _default_:443>

en eindigen bij

</VirtualHost>

Let op: deze twee regels moeten ook een # krijgen!!

Bij het plaatsen van de #jes kwam je ook deze regels tegen:

# Use separate log files for the SSL virtual host; note that LogLevel
# is not inherited from httpd.conf.
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

Deze regels moet je plaatsen vlak boven </VirtualHost> in /etc/httpd/sites-enabled/thuis.famtenhoopen.nl-le-ssl.conf

Herstarten apache

sudo systemctl restart httpd

Controle op aanwezigheid van meerder virtual hosts:

sudo apachectl -SVirtualHost configuration:
*:443 thuis.famtenhoopen.nl (/etc/httpd/sites-enabled/thuis.famtenhoopen.nl-le-ssl.conf:2)
*:80 thuis.famtenhoopen.nl (/etc/httpd/sites-enabled/thuis.famtenhoopen.nl.conf:1)
ServerRoot: "/etc/httpd"
.........

Nu komen we ergens πŸ™‚ Maar hij doet het nog steeds niet. Logs leeg maken en herstarten. Dat geeft geen errors in de ssl hoek. Naar de browser en laden van https://thuis.famtenhoopen.nl geeft in de browser ERR_ADDRESS_UNREACHABLE

Maar dat wist je natuurlijk al πŸ™‚ Want …. inderdaad de firewall staat poort 443 nog te blocken. Om dat op te lossen:

sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
sudo firewall-cmd --reload

Nu doet ie precies wat ie doen moet πŸ™‚ Gefeliciteerd.

Mocht je de RewriteRules hebben voor zien van een #, dan is het verstandig om die nu weg te halen (en restart apache vervolgens). Op die wijze heb je er voor gezorgd dat al het verkeer naar de website “veilig” is.

Dit zorgt ervoor dat alleen hosts met deze ip-adressen bij het admin gedeelte van WordPress kunnen komen.

Onderhoud Lets Encrypt Certificaten

De certificaten verlopen na (geloof) 3 maanden, dus automatisch updaten via de cron van root. Voeg de volgende regel toe aan de cron van root:

sudo crontab -e
# voeg de volgende regel toe
0 0,12 * * * /bin/certbot renew -q

WordPress configureren

Inloggen doe je via http://thuis.famtenhoopen.nl/ doe dit vanaf je eigen computer. Configureer hier wordpres

Weet je de database naam, databae host , user en password…:)

Nog een keer Flip…

Installeer de Wordfence Security plugin en activeer 2FA!!!!! en de UpdraftPlus WordPress Backup plugin om te zorgen dat je altijd een backup hebt.

Met installeren bedoel ik installerern EN configurerern… anders heb je er nog niets aan LOL

 

NFS (TODO)

Voor onderhoud is het makkelijk om de website map te exporteren over NFS. Niet de hele dag πŸ™‚ alleen als het nodig is.

NFS server installeren:

sudo yum install nfs-utils

In de firewall zet je de volgende poorten open in de secruity list (hier hoe het moet met firewalld):

sudo firewall-cmd --permanent --zone=public --add-port=111/tcp 
sudo firewall-cmd --permanent --zone=public --add-port=111/udp
sudo firewall-cmd --permanent --zone=public --add-port=2049/tcp
sudo firewall-cmd --permanent --zone=public --add-port=2049/udp
sudo firewall-cmd --reload

In /etc/exports zet je

/blabla *(rw,root_squash,sync,no_subtree_check)

Als je het sterretje veranderd in het ip-adres van je nfs-client wordt het een stuk veiliger

Start en enable NFS:

sudo systemctl start nfssudo systemctl enable nfs

Plezier ermee πŸ™‚