Cloudinit is een manier om virtuele machines (in bijvoorbeeld Proxmox) op te zetten met enkele standaardwaarden zoals gebruikers, ssh-keys, standaardpakketten of bepaalde commando’s dat moeten uitgevoerd worden. In deze post zal ik de basis toelichten.
Categorie archieven: Devops
Proxmox templates maken
Ik gebruik proxmox in mijn homelab om VM’s te draaien maar standaard moet je elke VM installeren vanaf een iso. Gelukkig kan je templates maken en ze met cloud init opzetten. In deze post toon ik hoe ik mijn images maak.
Apache, PHP en MySQL installeren op FreeBSD
Ik ben de laatste tijd wat aan het experimenteren met FreeBSD. In deze post licht ik toe hoe ik een Apache, MySQL en PHP stack op FreeBSD heb geïnstalleerd.
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.
UFW basics
Op een server is een firewall onmisbaar. Op Debian & Ubuntu is UFW de eenvoudigste manier om een firewall in te stellen. UFW staat voor “The Uncomplicated Firewall” en is dan ook zeer eenvoudig in gebruik. In deze post leg ik de basis uit van UFW.
Freebsd Installeren
Ik heb altijd “FreeBSD” zien staan als optie als ik een VM aanmaakte bij een cloudprovider, maar ik heb er nooit mee geëxperimenteerd. Ik heb besloten om er mee te experimenteren in een VM. In deze post zal ik de installatie van FreeBSD toelichten
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
ProFTPd installeren in Debian 12
Ik heb een geupdate handleiding gemaakt die SFTP gebruikt in plaats van SFTP
ProFTPd is een FTP server die zeer praktisch is. Het laat toe om virtuele gebruikers aan te maken en meer. In deze post ga ik toelichten hoe ik ProFTPd configureer met Virtual user support en TLS.
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