Installatie webserver (2018): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 167: Regel 167:
 
=== sudo timeout ===
 
=== sudo timeout ===
  
Zie [[Sudo]] voor het aanpassen van de ''sudo timeout'' - Graag!
+
''Sudo timeout'' instellen op 1h: [[Sudo | sudo]]
  
 
=== su ===
 
=== su ===

Versie van 17 sep 2021 18:31

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 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