Installatie webserver (2018): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(40 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 5: Regel 5:
 
* Deze handleiding kan lineair doorlopen worden, maar ik vond het handiger om het als referentie te gebruiken. Bv. eerst een basis-Apache-server, gevolgd door MySQL en PHP, en daarna pas diverse finishing touches, waaronder diverse Apache-instellingen.
 
* Deze handleiding kan lineair doorlopen worden, maar ik vond het handiger om het als referentie te gebruiken. Bv. eerst een basis-Apache-server, gevolgd door MySQL en PHP, en daarna pas diverse finishing touches, waaronder diverse Apache-instellingen.
  
== Basis-installatie ==
+
== Basis ==
  
 
=== Systeemeisen ===
 
=== Systeemeisen ===
Regel 14: Regel 14:
 
* 2 XEON-processors
 
* 2 XEON-processors
  
Zo ver ik kan nagaan, is dat voldoende voor deze toepassing. Wat gebeugen betreft: [https://www.linode.com/docs/websites/hosting-a-website/ Deze] handleiding geeft aan dat je de configuratie van Apache moet aanpassen als 1GB of 2GB geheugen hebt. Daarboven wordt niet genoemd, plus dat ik de huidige servers met <code>free -g</code> de indruk heb, dat 4GB meer dan genoeg is.
+
Rationele:
 +
 
 +
* Zo ver ik kan nagaan, is dat voldoende voor deze toepassing. Wat gebeugen betreft: [https://www.linode.com/docs/websites/hosting-a-website/ Deze] handleiding geeft aan dat je de configuratie van Apache moet aanpassen als 1GB of 2GB geheugen hebt. Daarboven wordt niet genoemd, plus dat ik de huidige servers met <code>free -g</code> de indruk heb, dat 4GB meer dan genoeg is
 +
* Ik gebruik historisch deze dimensies, en handig imv. klonen, als alle VPS'en dezelfde dimensies hebben.
  
 
=== OS ===
 
=== OS ===
Regel 25: Regel 28:
 
* Locales: De keuze voor ''Engels'' in combinatie met ''Nederland'', levert een probleem op: Er is geen combinatie bekend van Engels + Nederland. Oplossing: ''en_US.utf8''. Zie ook ''Locale'' verderop in dit hoofdstuk
 
* Locales: De keuze voor ''Engels'' in combinatie met ''Nederland'', levert een probleem op: Er is geen combinatie bekend van Engels + Nederland. Oplossing: ''en_US.utf8''. Zie ook ''Locale'' verderop in dit hoofdstuk
 
* Keyboard-configuratie: Handmatig: ''Country of origin: English (US)'' » ''English (US) - English (US, euro on 5)'' - Nogal irrelevant, want dit is een server zonder eigen toetsenbord
 
* Keyboard-configuratie: Handmatig: ''Country of origin: English (US)'' » ''English (US) - English (US, euro on 5)'' - Nogal irrelevant, want dit is een server zonder eigen toetsenbord
* '''Hostname:''' Deze wordt gevraagd tijdens installatie. Later kun je deze aanpassen middels <code>sudo vim /etc/hostname</code>. Bekijk je hostname middels <code>hostname</code>
+
* '''Hostname:''' Deze wordt gevraagd tijdens installatie. Later kun je deze aanpassen middels <code>sudo vim /etc/hostname</code>. Bekijk je hostname middels <code>hostname</code>. Zie ook [[Computernaam]]
 
* Geen HTTP proxy-server
 
* Geen HTTP proxy-server
 
* Gebruikers-accounts: Vermoedelijk zullen meerdere mensen deze server bedienen en onderhouden. Waarschijnlijk zullen ze dat allemaal vanuit een eigen account-met-admin-rechten doen
 
* Gebruikers-accounts: Vermoedelijk zullen meerdere mensen deze server bedienen en onderhouden. Waarschijnlijk zullen ze dat allemaal vanuit een eigen account-met-admin-rechten doen
Regel 33: Regel 36:
 
* Installatie ''Grub'' (uiteraard).
 
* Installatie ''Grub'' (uiteraard).
  
=== SSH-toegang ===
+
=== Aliassen op werkstation ===
  
''Open SSH'' geïnstalleerd middels
+
''' /etc/hosts '''
  
sudo apt-get install openssh-server
+
In het hosts-bestand defineer ik computernamen voor de IP-adressen van m'n servers. Dat gaat via <code>sudo vim /etc/hosts</code>. Voorbeeld:
  
Daarna kon ik verder werken vanuit ''terminal'' middels
+
184.222.167.155 flip2
  
ssh inlognaam@ip-adres
+
Nu kan ik inloggen met alleen
  
=== Hosts-file-alias aanmaken ===
+
ssh flip2
  
Ik refereer liever aan een computer met een code dan met een IP-nummer. Daarom op m'n werkstation aan bestand <code>/etc/hosts</code> een regel toevoegen zoals
+
''' .bashrc '''
  
148.210.167.215 dvb2
+
Vervolgens voeg ik een alias toe aan <code>.bashrc</code> zoals:
  
Nu kan ik inloggen met alleen
+
alias flip2="ssh 184.222.167.155"
  
ssh dvb2
+
Nadat SSH key-pair-aithenticatie is opgezet, kan ik voortaan inlogen met alleen <code>flip2</code> - Heel prettig!
  
omdat de inlognaam op m'n werkstation hetzelfde is als op deze server.
+
=== SSH key pair-authenticatie ===
 
 
=== Inlog-alias aanmaken ===
 
 
 
Maar het kan nóg mooier, met deze toevoeging aan <code>.bashrc</code>:
 
  
alias dvb2="ssh dvb2"
+
In plaats van in te loggen met een inlognaam en wachtwoord, maak ik gebruik van ''key pair authentication'':
  
=== SSH key pair-authenticatie ===
+
''' SSH-server installeren '''
  
In plaats van in te loggen met een inlognaam en wachtwoord, wil ik gebruik maken van ''key pair authentication''. Implementatie:
+
Zie [[SSH]].
  
''' Sleutelpaar aanmaken '''
+
''' Sleutelpaar werkstation aanmaken '''
  
Indien je nog geen SSH-sleutelpaar hebt: Maak deze op je werkstation aan middels <code>ssh-keygen</code>. Deze sleutels staan in de map <code>~/.ssh</code>, met:
+
Indien je nog geen SSH-sleutelpaar hebt op je ''werkstation'': Maak deze op je werkstation aan middels <code>ssh-keygen</code>. In de map <code>~/.ssh</code> staan nu twee bestanden:
  
 
* <code>id_rsa</code> - Privésleutel
 
* <code>id_rsa</code> - Privésleutel
Regel 74: Regel 73:
 
''' Publieke sleutel uploaden '''
 
''' Publieke sleutel uploaden '''
  
Eenvoudig:
+
Upload de publieke sleutel naar de VPS. In dit geval gaat SSH-toegang nog via inlognaam + wachtwoord (= <code>example_user@203.0.113.10</code>):
  
 
<pre>
 
<pre>
Regel 82: Regel 81:
 
''' SSHd configureren '''
 
''' SSHd configureren '''
  
Toegevoegd aan <code>/etc/ssh/sshd_config</code>:
+
Voeg op de server de volgende instellingen toe aan bestand <code>/etc/ssh/sshd_config</code>:
  
 
<pre>
 
<pre>
Regel 93: Regel 92:
 
</pre>
 
</pre>
  
en daarna sshd herstart middels
+
en herstart sshd middels
  
 
  sudo service ssh restart
 
  sudo service ssh restart
Regel 99: Regel 98:
 
''' Test '''
 
''' Test '''
  
Login middels
+
Log in middels
  
 
  ssh inlognaam@ip-adres
 
  ssh inlognaam@ip-adres
Regel 105: Regel 104:
 
of middels de eerder gedefineerde alias:
 
of middels de eerder gedefineerde alias:
  
  dvb2
+
  flip2
  
 
=== Locale bijwerken ===
 
=== Locale bijwerken ===
Regel 126: Regel 125:
 
=== Firewall ===
 
=== Firewall ===
  
In het verleden gebruikte ik ''UFW'', en dat blijkt nog altijd een prima keuze te zijn. Je installeert 'm middels [https://www.linode.com/docs/security/firewalls/configure-firewall-with-ufw/]:
+
Zie [[UFW (firewall)]].
  
sudo apt-get install ufw
+
=== IPv6 addresses & binding ===
 
 
en hij bleek al geïnstalleerd te zijn.
 
 
 
''' Configuratie '''
 
 
 
* Al het uitgaande verkeer is toegestaan
 
* Alleen specifiek inkomend verkeer is toegestaan
 
* Dit betreft een webserver, dus inkomend verkeer op poort 80 moeten open staan
 
* Geen mailserver
 
* Websites functionereen regelmatig als SMTP-client, maar daarvoor hoeft er niet geconfigureerd te worden qua binnenkomend verkeer.
 
 
 
Ik vermoed dat dit een aardige configuratie is:
 
 
 
<pre>
 
sudo ufw default allow outgoing
 
sudo ufw default deny incoming
 
sudo ufw allow 22/tcp              # ssh
 
sudo ufw allow 80/tcp              # http
 
sudo ufw enable
 
</pre>
 
 
 
''' Test '''
 
 
 
<code>sudo ufw status</code> geeft:
 
 
 
<pre>
 
Status: active
 
 
 
To                        Action      From
 
--                        ------      ----
 
22/tcp                    ALLOW      Anywhere                 
 
80/tcp                    ALLOW      Anywhere                 
 
22/tcp (v6)                ALLOW      Anywhere (v6)           
 
80/tcp (v6)                ALLOW      Anywhere (v6)         
 
</pre>
 
 
 
''' Merk op '''
 
  
* De regels worden automatisch voor ipv4 en ipv6 toegevoegd
+
Standaard krijg ik 2^64 IP-adressen bij een VPS. Via DHCP wordt daarvan echter maar eentje toegewezen aan de VPS. Elke keer dat de VPS wordt herstart, is er een kans dat je een ander IP-adres krijgt. Da's niet handig. Op Ubuntu 18.04 gaat de configuratie van netwerkinterfaces mbv. ''YAML'' en da's nog vrij nieuw.
* Ik kan nog steeds inloggen via ssh :)
 
  
=== IPv6 addresses & binding ===
+
Ik heb het vermoeden dat dit script de complete reeks associëert met de VPS:
 
 
Standaard krijg ik 2^64 IP-adressen bij een VPS. Via DHCP wordt daarvan echter maar eentje toegewezen aan de VPS. Op Ubuntu 18.04 gaat de configuratie van netwerkinterfaces mbv. ''YAML''. Ik heb het vermoeden dat dit script de complete reeks associëert met de VPS:
 
  
 
<pre>
 
<pre>
Regel 190: Regel 149:
 
=== Eigen scripts ===
 
=== Eigen scripts ===
  
* Eigen scripts plaats ik in <code>/usr/local/bin</code>. Deze map hoeft niet schrijfbaar voor mij te zijn. De script-bestanden moeten uiteraard wel executeerbaar zijn. Zie  [http://wiki.devliegendebrigade.nl/Drush_8_installatie installatie Drush] als voorbeeld. <code>/usr/local/bin</code> is doorgaans al opgenomen in <code>$PATH</code>. Scripts liever niet in submappen onderbrengen ivm. gedoe met $PATH
+
Zie [[Eigen scripts]].
* Op een dag hoop ik hier Git voor te gebruiken.
+
 
 +
=== .profile ===
 +
 
 +
Ik vind het handig dat na inloggen, de inhoud van map <code>/var/www</code> wordt getoond, ter verificatie dat ik echt op de juiste server ben. Daarom de volgende toevoeging aan <code>~/.profile</code>:
 +
 
 +
<pre>
 +
# Toevoegingen - Strompf
 +
########################
 +
#
 +
echo " "
 +
echo "ls /var/www"
 +
ls /var/www
 +
echo " "
 +
</pre>
  
 
=== sudo timeout ===
 
=== sudo timeout ===
  
Zie [[Sudo]] voor het aanpassen van de ''sudo timeout'' - Graag!
+
''Sudo timeout'' instellen op 1h: [[Sudo | sudo]]
  
 
=== su ===
 
=== su ===
  
Ehm, <code>su</code> activeer ik toch maar niet op servers. Voor achtergrondinfo: [[Su]].
+
<code>su</code> activeer ik niet op servers. Voor achtergrondinfo: [[Su]].
  
 
=== Eigen inmappen ===
 
=== Eigen inmappen ===
Regel 209: Regel 181:
 
mkdir ~/in2
 
mkdir ~/in2
 
</pre>
 
</pre>
 +
 +
P.s.: Sinds lente 2018 lijk ik hier amper nog gebruik van te maken.
  
 
=== Backup-time! ===
 
=== Backup-time! ===
Regel 239: Regel 213:
 
#
 
#
 
# * Gebruik het adres van een domeinnaam die daadwerkelijk gehost wordt op deze server.
 
# * Gebruik het adres van een domeinnaam die daadwerkelijk gehost wordt op deze server.
#  Zo snel ik zo'n domeinnaam heb: hier invullen!
+
# * Alternatief: Gebruik de TransIP-servernaam (vind ik logischer). Die kun je oa. vinden
# * Alternatief: Gebruik de TransIP-servernaam. Die zie je met apachectl -S
+
#  via https://www.ssllabs.com/ssltest/analyze.html?d=example.com (URL aanpassen)
 +
#  of als je de server ping-et
 
# * http://wiki.devliegendebrigade.nl/Could_not_reliably_determine_..._domain_name_(Apache)
 
# * http://wiki.devliegendebrigade.nl/Could_not_reliably_determine_..._domain_name_(Apache)
 
#  
 
#  
 
# Voorbeeld:
 
# Voorbeeld:
 
#
 
#
# ServerName example.com
+
# ServerName 123-456-789-012.colo.transip.net
  
 
# Make directories non-browseable
 
# Make directories non-browseable
Regel 277: Regel 252:
 
=== Configuratie - mpm_prefork.conf ===
 
=== Configuratie - mpm_prefork.conf ===
  
Toegevoegd aan <code>mods-available/mpm_prefork.conf</code> [https://www.linode.com/docs/web-servers/lamp/install-lamp-stack-on-ubuntu-16-04/]:
+
Toegevoegd aan <code>/etc/apache2/mods-available/mpm_prefork.conf</code> [https://www.linode.com/docs/web-servers/lamp/install-lamp-stack-on-ubuntu-16-04/]:
  
 
<pre>
 
<pre>
Regel 353: Regel 328:
 
== MySQL ==
 
== MySQL ==
  
=== Installatie ===
+
Zie [[Installatie MySQL]].
  
Als vanouds:
+
== PHP ==
  
sudo apt install mysql-server
+
[[file:20180501-1013.png|thumb|Impressie van de PHP-onderdelen die nog missen voor een Drupal 7-site op een webserver die vers is geïnstalleerd (lente 2018)]]
 
 
Zie [[Versies (MySQL)]] als je je afvraagt of je dan wel een voldoende moderne versie krijgt.
 
 
 
=== Configuratie ===
 
  
* Doorloop het ''security hardening script'' (<code>sudo mysql_secure_installation</code>) - Spreekt voor zich
+
=== Backup! ===
* Problemen met inloggen na een verse installatie? Probeer <code>sudo mysql</code>. BTW: De root-loginnaam is echt <code>root</code>. Zie verder [[Gebruikers & inloggen (MySQL)]]
 
* Maak een gewoon MySQL-account aan [[Gebruikers & inloggen (MySQL)|Gebruikers & inloggen]]
 
* Geen zin om steeds je wachtwoord in te tikken? Daar is een [[Gebruikers & inloggen (MySQL) | hele goede oplossing]] voor.
 
  
== PHP ==
+
Installatie PHP is lastiger dan de onderdelen hiervoor. Daarom is dit een uitgelezen moment om een backup te maken. Sterker nog: tijdens het doorlopen van deze procedure in de lente van 2018, besloot ik om ''twee'' servers te deployen. Eén met PHP 5.6 en één met PHP 7.2. Daardoor kwam het héél handig uit, dat ik net een backup had gemaakt (TransIP ''snapshot'' om precies te zijn).
 
 
[[file:20180501-1013.png|thumb|Impressie van de PHP-onderdelen die nog missen voor een Drupal 7-site op een webserver die vers is geïnstalleerd (lente 2018)]]
 
  
 
=== Compatibiliteitsproblemen ===
 
=== Compatibiliteitsproblemen ===
Regel 410: Regel 376:
 
=== PHP 7.2 - Installatie ===
 
=== PHP 7.2 - Installatie ===
  
In de lente van 2018 op Ubuntu 18.04, werd automatisch PHP 7.2 gekozen, als ik de betreffende onderdelen insalleerde zonder versienummers mee te geven:
+
In de lente van 2018 heb ik op Ubuntu 18.04 PHP geïnstalleerd, zonder daarbij een versienummer te specificeren. Dat resulteerde in een installatie van PHP 7.2, en dat bevalt prima:
 +
 
 +
sudo apt install php libapache2-mod-php php-mysql php-curl php-xml php-gd php-mbstring
 +
 
 +
== Overig ==
 +
 
 +
=== Let's Encrypt ===
 +
 
 +
Zie [[Let's Encrypt]] voor details.
 +
 
 +
=== Drush ===
 +
 
 +
Installeer ''drush''- De ''Drupal Shell'' in <code>/usr/local/bin</code>. Zie [[Drush 8 installatie]] voor details.
 +
 
 +
=== wp-cli ===
  
sudo apt install php libapache2-mod-php php-mysql php-curl php-xml
+
Installeer de ''Wordpress Command Line Interface'' in <code>/usr/local/bin</code>.Zie [[WP-CLI (algemeen)]] voor details.
  
 
== In gebruik ==
 
== In gebruik ==
  
* Sites worden geserveerd vanuit <code>/var/www/</code>.
+
Sites worden geserveerd vanuit <code>/var/www/</code>.
  
 
=== Virtual host-bestand ===
 
=== Virtual host-bestand ===
Regel 474: Regel 454:
 
* http://wiki-oud.devliegendebrigade.nl/index.php/VPS_TransIP_-_Configuratie_okt._2014_(1)
 
* http://wiki-oud.devliegendebrigade.nl/index.php/VPS_TransIP_-_Configuratie_okt._2014_(1)
 
* http://wiki-oud.devliegendebrigade.nl/index.php/VPS_TransIP_-_Configuratie_okt._2014_(2)
 
* http://wiki-oud.devliegendebrigade.nl/index.php/VPS_TransIP_-_Configuratie_okt._2014_(2)
* http://wiki.devliegendebrigade.nl/Apache_-_Mappen_niet_browsable_maken
+
* [[Apache - Mappen niet browsable maken]]
 +
* [[Installatie webserver (2021)]]
 +
* [[IPv6]]
  
 
== Bronnen ==
 
== Bronnen ==
Regel 490: Regel 472:
 
* https://serverfault.com/questions/691294/should-i-enable-automatic-security-updates-on-a-ubuntu-server
 
* https://serverfault.com/questions/691294/should-i-enable-automatic-security-updates-on-a-ubuntu-server
 
* https://askubuntu.com/questions/153265/what-does-the-basic-ubuntu-server-package-contain-in-software-selection-during
 
* https://askubuntu.com/questions/153265/what-does-the-basic-ubuntu-server-package-contain-in-software-selection-during
* https://askubuntu.com/questions/961552/need-example-netplan-yaml-for-static-ip/961759
+
* https://askubuntu.com/questions/961552/need-example-netplan-yaml-for-static-ip/961759 - YAML & IPv6
 +
* https://www.transip.nl/knowledgebase/artikel/219-voeg-extra-ipv4-ipv6-adres-mijn/ - YAML & IPv6
  
 
=== Fail2Ban ===
 
=== Fail2Ban ===

Huidige versie van 18 sep 2021 om 07:25

Dit artikel is geschreven nav. de installatie van een TransIP-VPS in de lente van 2018. Daarnaast bevat het vrijwel alle informatie omtrent eerdere installaties, in zoverre die nu nog relevant is.

  • De betreffende VPS is een LAMP-webserver met virtuele hosts. Er wordt geen email gehost
  • Primaire handleiding: https://www.linode.com/docs/getting-started#ubuntu--debian-1
  • Deze handleiding kan lineair doorlopen worden, maar ik vond het handiger om het als referentie te gebruiken. Bv. eerst een basis-Apache-server, gevolgd door MySQL en PHP, en daarna pas diverse finishing touches, waaronder diverse Apache-instellingen.

Basis

Systeemeisen

Configuratie:

  • 4GB geheugen
  • 2 XEON-processors

Rationele:

  • Zo ver ik kan nagaan, is dat voldoende voor deze toepassing. Wat gebeugen betreft: Deze handleiding geeft aan dat je de configuratie van Apache moet aanpassen als 1GB of 2GB geheugen hebt. Daarboven wordt niet genoemd, plus dat ik de huidige servers met free -g de indruk heb, dat 4GB meer dan genoeg is
  • Ik gebruik historisch deze dimensies, en handig imv. klonen, als alle VPS'en dezelfde dimensies hebben.

OS

Software selection: Alleen Ubuntu Basic Server (experimenteel). Ik doe zo veel mogelijk handmatig
  • Operating system: Ubuntu 18.04 - Net een dag uit!
  • Installatietaal: Engels
  • Location: Europe » Netherlands
  • Locales: De keuze voor Engels in combinatie met Nederland, levert een probleem op: Er is geen combinatie bekend van Engels + Nederland. Oplossing: en_US.utf8. Zie ook Locale verderop in dit hoofdstuk
  • Keyboard-configuratie: Handmatig: Country of origin: English (US) » English (US) - English (US, euro on 5) - Nogal irrelevant, want dit is een server zonder eigen toetsenbord
  • Hostname: Deze wordt gevraagd tijdens installatie. Later kun je deze aanpassen middels sudo vim /etc/hostname. Bekijk je hostname middels hostname. Zie ook Computernaam
  • Geen HTTP proxy-server
  • Gebruikers-accounts: Vermoedelijk zullen meerdere mensen deze server bedienen en onderhouden. Waarschijnlijk zullen ze dat allemaal vanuit een eigen account-met-admin-rechten doen
  • Partitionering: Guided - use entire disk
  • Install security updates automatically: Voor de eerste keer dit geactiveerd: Problemen die ontstaan door zero-day hacks zouden voor mij veel moeilijker zijn om op te lossen, dan eventuele problemen die onstaan door fouten met updates. Plus dat ik nog nooit heb meegemaakt dat ik een update weiger, omdat ik de inhoud niet vertrouw. Zie ook [1][2]
  • Software selection: Alleen Ubuntu Basic Server. Zie afbeelding
  • Installatie Grub (uiteraard).

Aliassen op werkstation

/etc/hosts

In het hosts-bestand defineer ik computernamen voor de IP-adressen van m'n servers. Dat gaat via sudo vim /etc/hosts. Voorbeeld:

184.222.167.155 flip2

Nu kan ik inloggen met alleen

ssh flip2

.bashrc

Vervolgens voeg ik een alias toe aan .bashrc zoals:

alias flip2="ssh 184.222.167.155"

Nadat SSH key-pair-aithenticatie is opgezet, kan ik voortaan inlogen met alleen flip2 - Heel prettig!

SSH key pair-authenticatie

In plaats van in te loggen met een inlognaam en wachtwoord, maak ik gebruik van key pair authentication:

SSH-server installeren

Zie SSH.

Sleutelpaar werkstation aanmaken

Indien je nog geen SSH-sleutelpaar hebt op je werkstation: Maak deze op je werkstation aan middels ssh-keygen. In de map ~/.ssh staan nu twee bestanden:

  • id_rsa - Privésleutel
  • id_rsa.pub - Publieke sleutel.

Publieke sleutel uploaden

Upload de publieke sleutel naar de VPS. In dit geval gaat SSH-toegang nog via inlognaam + wachtwoord (= example_user@203.0.113.10):

ssh-copy-id example_user@203.0.113.10

SSHd configureren

Voeg op de server de volgende instellingen toe aan bestand /etc/ssh/sshd_config:

# Strompf - April 2018
#################################
#
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no

en herstart sshd middels

sudo service ssh restart

Test

Log in middels

ssh inlognaam@ip-adres

of middels de eerder gedefineerde alias:

flip2

Locale bijwerken

Time-zone instellen

[3]:

Specificeer de timezone met deze routine:

sudo dpkg-reconfigure tzdata

Controleer het resultaat:

date

Firewall

Zie UFW (firewall).

IPv6 addresses & binding

Standaard krijg ik 2^64 IP-adressen bij een VPS. Via DHCP wordt daarvan echter maar eentje toegewezen aan de VPS. Elke keer dat de VPS wordt herstart, is er een kans dat je een ander IP-adres krijgt. Da's niet handig. Op Ubuntu 18.04 gaat de configuratie van netwerkinterfaces mbv. YAML en da's nog vrij nieuw.

Ik heb het vermoeden dat dit script de complete reeks associëert met de VPS:

network:
        version: 2
        renderer: networkd
        ethernets:
                ens3:
                        dhcp4: yes
                        dhcp6: no
                        addresses: ['2a01:7c8:aab3:2aa::/64']
                        gateway6: 2a01:7c8:aab3::1

Bronnen: [4] & [5]

Eigen scripts

Zie Eigen scripts.

.profile

Ik vind het handig dat na inloggen, de inhoud van map /var/www wordt getoond, ter verificatie dat ik echt op de juiste server ben. Daarom de volgende toevoeging aan ~/.profile:

# Toevoegingen - Strompf
########################
#
echo " "
echo "ls /var/www"
ls /var/www
echo " "

sudo timeout

Sudo timeout instellen op 1h: sudo

su

su activeer ik niet op servers. Voor achtergrondinfo: Su.

Eigen inmappen

Gebruik ik als tijdelijke locaties voor heen- en weerfietsen van data naar en van de server:

mkdir ~/in1
mkdir ~/in2

P.s.: Sinds lente 2018 lijk ik hier amper nog gebruik van te maken.

Backup-time!

Zo vlak voor het installeren van Apache, is een mooi moment om via de TransIP-console een snapshot te maken.

Apache

  • Dit betreft een installatie met virtuele hosts
  • Websites worden geserveerd vanuit /var/www. Da's weinig schokkend, want het is één van de standaardlocaties. Standaardinstellingen voor deze locatie vind je in het Apache configuratiebestand (/etc/apache2/apache2.conf, zie ook verderop). Daarnaast kun je per virtuele host de locatie + instellingen opgeven
  • Deze map + submappen moet voor mij leesbaar en schrijfbaar zijn: Ik word helemaal tureluurs als ik eindeloos met wachtwoorden moet stoeien
  • Eén centraal logbestand. Géén aparte logbestanden of -mappen per domein!

Installatie

  • 'Handmatige' installatie ipv. gebruik Tasksel
  • Installatie Apache: sudo apt-get install apache2

Configuratie - apache2.conf

Alle aanpassingen stop ik in één stuk dat ik toevoeg aan /etc/apache2/apache2.conf. Eerdere verwijzingen in dit bestand verwijder ik:

###########################################################################################
# Strompf - All changes in one place
###########################################################################################
#
# ServerName
################################
#
# * Gebruik het adres van een domeinnaam die daadwerkelijk gehost wordt op deze server.
# * Alternatief: Gebruik de TransIP-servernaam (vind ik logischer). Die kun je oa. vinden 
#   via https://www.ssllabs.com/ssltest/analyze.html?d=example.com (URL aanpassen)
#   of als je de server ping-et
# * http://wiki.devliegendebrigade.nl/Could_not_reliably_determine_..._domain_name_(Apache)
# 
# Voorbeeld:
#
# ServerName 123-456-789-012.colo.transip.net

# Make directories non-browseable
#################################
#
# * Important!
# * http://wiki.devliegendebrigade.nl/Apache_-_Mappen_niet_browsable_maken
#
<Directory /var/www/>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

# KeepAlive Directive
#####################
#
# Actually already active by default
#
# See also: 
#
# * https://httpd.apache.org/docs/2.4/mod/core.html#keepalive and
# * https://www.linode.com/docs/web-servers/lamp/install-lamp-stack-on-ubuntu-16-04/
# * http://wiki.devliegendebrigade.nl/Installatie_webserver#Apache
#
KeepAlive on
MaxKeepAliveRequests 50
KeepAliveTimeout 5

Configuratie - mpm_prefork.conf

Toegevoegd aan /etc/apache2/mods-available/mpm_prefork.conf [6]:

# Strompf - April 2018
##########################################################
#
# * Optimized for 4GB internal memory
# * Source: https://www.linode.com/docs/web-servers/lamp/install-lamp-stack-on-ubuntu-16-04/
#
<IfModule mpm_prefork_module>
        StartServers            8
        MinSpareServers         6
        MaxSpareServers         40
        MaxRequestWorkers       200
        MaxConnectionsPerChild  10000
</IfModule>

Configuratie - Modules aan- & uitzetten

[7] + eigen toevoegingen

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo a2enmod rewrite

sudo systemctl restart apache2

Firewall bijwerken

Na bijwerken van de firewall en installie Lynx: De standaard vangpagina van Apache doet 't op de server zelf...
...En ook vanaf m'n werkstation

Digital Ocean behandelt hier nog effe ufw. Interessant.

Bekijk de ufw app list met sudo ufw app list. Ik krijg

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Bekijk de inhoud van Apache Full met sudo ufw app info "Apache Full". Output:

Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp

Voeg de regels uit dit profiel toe aan ufw: sudo ufw allow in "Apache Full". Ik vermoed dat dit effectief al het geval was, maar het geeft een goed gevoel voor de materie. De nieuwe status van ufw (sudo ufw status) wordt hiermee:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
Apache Full                ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
Apache Full (v6)           ALLOW       Anywhere (v6)      

MySQL

Zie Installatie MySQL.

PHP

Impressie van de PHP-onderdelen die nog missen voor een Drupal 7-site op een webserver die vers is geïnstalleerd (lente 2018)

Backup!

Installatie PHP is lastiger dan de onderdelen hiervoor. Daarom is dit een uitgelezen moment om een backup te maken. Sterker nog: tijdens het doorlopen van deze procedure in de lente van 2018, besloot ik om twee servers te deployen. Eén met PHP 5.6 en één met PHP 7.2. Daardoor kwam het héél handig uit, dat ik net een backup had gemaakt (TransIP snapshot om precies te zijn).

Compatibiliteitsproblemen

Drupal 7-sites kunnen niet zondermeer overweg met PHP 7.2: Tijdens een snelle test (lente 2018) kreeg ik fatal errors. Vermoedelijk zouden de betreffende modules gepatached moeten worden. Daar zit ik niet op te wachten. Ik verwacht dat dit voor Drupal 6-sites nog erger is.

Twee voorbeelden van waarschuwingen die ik kreeg van een Drupal 7-site ivm. PHP 7.2 - Dit was nog vóórdat ik fatal errors kreeg:

  • Warning: count(): Parameter must be an array or an object that implements Countable in FacetapiDependencyFacet->getDefaultSettings() (regel 139 van /var/www/example.com/sites/all/modules/facetapi_bonus/plugins/facetapi/dependency_facet.inc)
  • PHP Fatal error: Declaration of RulesRuleUI::form(&$form, &$form_state, $options = Array) must be compatible with RulesActionContainerUI::form(&$form, &$form_state, $options = Array, $iterator = NULL) in /var/www/example.com/sites/all/modules/rules/ui/ui.plugins.inc on line 0

Oplossing:

  • Twee aparte VPS'en gebruiken: Eén met PHP 5.6 en één met PHP 7.2
  • Niet relevant om te hobbyen met tussenliggende PHP-versies (7.0 & 7.1).

PHP 5.6 - Installatie

PHP 5.6 kun je niet zondermeer installeren op actuele versies van Ubuntu. Dat kan wel als je gebruik maakt van onderstaande PPA's van ondrej [8]:

sudo add-apt-repository ppa:ondrej/php
sudo add-apt-repository ppa:ondrej/apache2

sudo apt install php5.6
sudo apt install libapache2-mod-php5.6
sudo apt install php5.6-mysql
sudo apt install php5.6-curl
sudo apt install php5.6-xml
sudo apt install php5.6-gd
sudo apt install php5.6-mbstring

Vergeet niet naderhand om Apache te herstarten:

systemctl reload apache2

PHP 7.2 - Installatie

In de lente van 2018 heb ik op Ubuntu 18.04 PHP geïnstalleerd, zonder daarbij een versienummer te specificeren. Dat resulteerde in een installatie van PHP 7.2, en dat bevalt prima:

sudo apt install php libapache2-mod-php php-mysql php-curl php-xml php-gd php-mbstring

Overig

Let's Encrypt

Zie Let's Encrypt voor details.

Drush

Installeer drush- De Drupal Shell in /usr/local/bin. Zie Drush 8 installatie voor details.

wp-cli

Installeer de Wordpress Command Line Interface in /usr/local/bin.Zie WP-CLI (algemeen) voor details.

In gebruik

Sites worden geserveerd vanuit /var/www/.

Virtual host-bestand

Inclusief uitleg:

<VirtualHost *:80>

ServerName example.com

# ServerAlias
####################################################
#
# Also handy for redirecting websites to another URL
#
ServerAlias www.example.com

# DirectoryIndex
####################################################
#
# Prevent folders from being browsable by visitors
#
DirectoryIndex index.php index.html
DocumentRoot /var/www/example.com

<Directory /var/www/example.com>

   AllowOverride All
   Require all granted
   RewriteEngine on
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

</Directory>

# About logs
####################################################
#
# * Use 2 central logs. Don't use separate logs for
#   each virtual hosts: Very inconvenient!
#
LogLevel warn
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log vhost_combined

</VirtualHost>

Zie ook

Bronnen

Primaire bronnen

Installatie OS

Fail2Ban

PHP