Jails gebruiken in FreeBSD

FreeBSD heeft standaard een functie waarmee je jails kan aanmaken (vergelijkbaar met Linux containers). In freebsd zijn deze zeer uitgebreid: Er zijn “Thick Jails” waar elke jail zijn eigen bestandssysteem heeft, “Thin jails” waar maar een paar mappen verschillen en de rest word overgenomen van het basissysteem, en zelfs Linux Jails, waarmee je Linux applicaties kan draaien op een freeBSD kernel! In deze post leg ik uit hoe je Thick Jails kan gebruiken, maar je kan meer lezen over de andere soorten jails in de FreeBSD documentatie.

Lees verder

Nat instellen in proxmox

Binnen proxmox word standaard gebruik gemaakt van briding. Dit is echter niet altijd handig (we hebben bijvoorbeeld maar 1 IP adres tot onze beschikking. Gelukkig kunnen we met iptables aan maquerading doen.

Voeg het volgende toe aan /etc/network/interfaces:

auto vmbr1
iface vmbr1 inet static
        address  10.0.0.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0

        post-up   echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o enp35s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/24' -o enp35s0 -j MASQUERADE
        ## do do a port-forward to the VM with "lan" ip 10.0.0.3 from the host port 8080 the VM port 80
        ## you can use a line like this.
        # post-up   iptables -t nat -A PREROUTING -i enp35s0 -p tcp --dport 8080 -j DNAT --to 10.10.10.3:80

vervolgens kunnen we het netwerk herladen met

ifreload -a

 

Pelican & Jenkins

Met de volgende jenkinsfile kan je automatisch een Pelican site bouwen met Jenkins. Dit maakt gebruik van deSFTP publish en Docker plugins

pipeline {
  agent {
    docker {
      image 'python:3.8'
    }
  }
  stages {
    stage('setup') {
      steps {
        withEnv(["HOME=${env.WORKSPACE}"]) {
          sh 'python -m pip install --user --upgrade pip "pelican[markdown]"'
          sh 'python --version'
          sh 'python -m pelican --version'
        }
      }
    }
    stage('publish - web') {
      steps {
        withEnv(["HOME=${env.WORKSPACE}"]) {
          sh 'python -m pelican content -s publishconf.py'
        }
        sshPublisher(
          publishers: [
            sshPublisherDesc(
              configName: 'vincentlammens.be',
              sshRetry: [retries: 5, retryDelay: 10000],
              transfers: [
                sshTransfer(
                  remoteDirectory: '',
                  removePrefix: 'output/',
                  sourceFiles: 'output/**/*'
                )
              ]
            )
          ]
        )
      }
    }
  }
  
  post {
    always {
      cleanWs()
    }
  }
}

Caching met apache’s mod_cache

Caching is bij drukbezochte sites een must. Het verminderd de load op de webserver door de gegenereerde pagina’s op te slaan. Hierdoor word de database minder belast bij dynamische websites waardoor de webserver meer tijd heeft voor andere bezoekers.

Apache heeft een module, `mod_cache` die door middel van een paar opslagmechanismen (disk, shared memory, redis, memcached of zelf een DBM file) een snelle cache voorziet voor Apache. mod_cache is standaard als 1e laag in de processing stack, maar dit kan aangepast worden.

Eenvoudige configuratie

In de documentatie staat een voorbeeld van een eenvoudige configuratie. Als we deze
lichtjes aanpassen voor onze omgeving (in dit geval gaan we `/var/cache/httpd` gebruiken om de cache op te slaan, je moet deze map standaard zelf nog aanmaken).

<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheRoot "/var/cache/httpd"
CacheEnable disk "/"
CacheDirLevels 2
CacheDirLength 2
CacheLock on
CacheLockMaxAge 5
CacheIgnoreHeaders Vary DNT User-Agent Accept Accept-Encoding Accept-Language
</IfModule>
</IfModule>

Hierna moeten we zorgen dat mod_cache en mod_cach_disk zijn ingeladen met `a2enmod mod_cache mod_cache_disk`.

Vervolgens moet onze applicatie `Cache-control:` headers meegeven. Deze worden gebruikt om te vertellen hoe lang een pagina mag gecached worden. Afhankelijk van het soort pagina, en de updatefrequentie stel je deze in. Een blog waar vaak updates worden gepost is `300` seconden bijvoorbeeld een goed begin. Vaste pagina’s op die blog die zelden veranderen (zoals de ‘about’ pagina) kunnen dan weer een langere tijd krijgen, zoals `3600` seconden of zelfs `86400` seconden (1 dag).

Met apache komt standaard ook htcacheclean, een tool om de disk cache op te schonen. Deze tool kan je als daemon of als cronjob pereodiek uitvoeren om de groote van de cache map te beperken. Het onderstaande commando zal zorgen dat er maximaal 1GB aan data cachen, of 50000 inodes in gebruik nemen.

htcacheclean -p /var/cache/httpd -l1G -L50000 -n -t