fix: upgrade to FreeBSD 15.0, PHP 8.5 as binary pkg, Redis 8.6, MySQL 8.4.9 LTS, document MySQL 9.x EOL

This commit is contained in:
Malin
2026-05-29 08:25:02 +02:00
parent 3c4bdae145
commit b1047817e3

View File

@@ -99,18 +99,33 @@ Both nodes are VMs running on separate bare-metal hosts within the same datacent
- **Migration effort:** Lowest — still Linux, apk replaces apt, paths similar - **Migration effort:** Lowest — still Linux, apk replaces apt, paths similar
- **Verdict:** Best minimal Linux option; easier than FreeBSD but fewer operational benefits (no ZFS, no jails) - **Verdict:** Best minimal Linux option; easier than FreeBSD but fewer operational benefits (no ZFS, no jails)
### Decision: **FreeBSD 14.x on both nodes** ### Decision: **FreeBSD 15.0 on both nodes**
Tiebreaker: ZFS native on the DB node. `zfs snapshot` before any migration step, before any MySQL upgrade, before any schema change — this alone justifies the choice. PHP 8.5 builds from ports cleanly. MySQL 8.4 LTS is in pkg. All required PHP extensions are in ports. pf is simpler and more powerful than nftables for these firewall rules. Tailscale has official FreeBSD support. Tiebreaker: ZFS native on the DB node. `zfs snapshot` before any migration step, before any MySQL upgrade, before any schema change — this alone justifies the choice.
FreeBSD 15.0 over 14.x specifically because PHP 8.5 is a **binary package** on 15.0 — `pkg install php85` and all extensions install directly, no ports compilation required. FreeBSD 15.0 was released December 2, 2025 and has 6 months of production use. MySQL 8.4 LTS, Redis 8.x, and all required PHP extensions are in the binary package tree. pf is simpler and more powerful than nftables. Tailscale has official FreeBSD support.
---
## Target Stack Versions
| Component | Version | Source | Notes |
|---|---|---|---|
| OS | FreeBSD 15.0 | Release Dec 2, 2025 | Production Release, 6 months in production |
| nginx | 1.30.x | `pkg install nginx` | |
| PHP | 8.5.6 | `pkg install php85` | Binary pkg on FreeBSD 15 — no compilation |
| MySQL | 8.4.9 LTS | `pkg install mysql84-server` | LTS branch. 9.0 and 9.1 both EOL and removed from ports |
| Redis | 8.6.3 | `pkg install redis` | Redis 8.x is current major version |
| Tailscale | latest | `pkg install tailscale` | Official FreeBSD package |
--- ---
## Target Architecture ## Target Architecture
``` ```
[internet] → [NPM node, Tailscale] → [dracula-new FreeBSD, Tailscale] → [transilvan-new FreeBSD, Tailscale] [internet] → [NPM node, Tailscale] → [dracula-new FreeBSD 15.0, Tailscale] → [transilvan-new FreeBSD 15.0, Tailscale]
dracula-new (FreeBSD 14.x) transilvan-new (FreeBSD 14.x) dracula-new (FreeBSD 15.0) transilvan-new (FreeBSD 15.0)
────────────────────────── ───────────────────────────── ────────────────────────── ─────────────────────────────
nginx (pkg) ZFS pool → /var/db/mysql nginx (pkg) ZFS pool → /var/db/mysql
PHP 8.5 (ports build) recordsize=16K (InnoDB optimal) PHP 8.5 (ports build) recordsize=16K (InnoDB optimal)
@@ -219,7 +234,7 @@ Both virtual disks originate from the same physical SSD pool in Proxmox. Separat
```sh ```sh
wget -P /var/lib/vz/template/iso/ \ wget -P /var/lib/vz/template/iso/ \
https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-disc1.iso https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/15.0/FreeBSD-15.0-RELEASE-amd64-disc1.iso
``` ```
### 2. Create dracula-new (run on the HDD host) ### 2. Create dracula-new (run on the HDD host)
@@ -239,7 +254,7 @@ qm create 200 \
--ostype other \ --ostype other \
--scsihw virtio-scsi-single \ --scsihw virtio-scsi-single \
--scsi0 local:80,format=raw \ --scsi0 local:80,format=raw \
--cdrom local:iso/FreeBSD-14.2-RELEASE-amd64-disc1.iso \ --cdrom local:iso/FreeBSD-15.0-RELEASE-amd64-disc1.iso \
--boot order=ide2;scsi0 \ --boot order=ide2;scsi0 \
--agent enabled=1 --agent enabled=1
``` ```
@@ -247,7 +262,7 @@ qm create 200 \
Via UI: Via UI:
``` ```
General → Name: dracula-new General → Name: dracula-new
OS → FreeBSD (other), ISO: FreeBSD-14.2-RELEASE-amd64-disc1.iso OS → FreeBSD (other), ISO: FreeBSD-15.0-RELEASE-amd64-disc1.iso
System → Machine: q35, BIOS: OVMF (UEFI), Qemu Agent: ✓ System → Machine: q35, BIOS: OVMF (UEFI), Qemu Agent: ✓
Disks → VirtIO SCSI, 80GB, Cache: None Disks → VirtIO SCSI, 80GB, Cache: None
CPU → 6 cores, Type: host CPU → 6 cores, Type: host
@@ -272,7 +287,7 @@ qm create 201 \
--ostype other \ --ostype other \
--scsihw virtio-scsi-single \ --scsihw virtio-scsi-single \
--scsi0 local:20,format=raw,discard=on,ssd=1 \ --scsi0 local:20,format=raw,discard=on,ssd=1 \
--cdrom local:iso/FreeBSD-14.2-RELEASE-amd64-disc1.iso \ --cdrom local:iso/FreeBSD-15.0-RELEASE-amd64-disc1.iso \
--boot order=ide2;scsi0 \ --boot order=ide2;scsi0 \
--agent enabled=1 --agent enabled=1
@@ -312,6 +327,11 @@ freebsd-update fetch install
pkg update && pkg upgrade -y pkg update && pkg upgrade -y
pkg install -y qemu-guest-agent tailscale sudo curl wget pkg install -y qemu-guest-agent tailscale sudo curl wget
# Verify package versions available
pkg search php85 | head -3 # should show 8.5.6+
pkg search mysql84-server # should show 8.4.9
pkg search redis | grep "^redis" # should show 8.6.x
# Enable QEMU guest agent (so Proxmox can see VM IP, issue graceful shutdowns) # Enable QEMU guest agent (so Proxmox can see VM IP, issue graceful shutdowns)
sysrc qemu_guest_agent_enable=YES sysrc qemu_guest_agent_enable=YES
service qemu-guest-agent start service qemu-guest-agent start
@@ -413,6 +433,8 @@ zfs set compression=lz4 data/mysql # free performance, transparent
### 1.2 MySQL 8.4 LTS ### 1.2 MySQL 8.4 LTS
MySQL 8.4.9 is the correct choice. MySQL 9.0 was removed from FreeBSD ports (EOL). MySQL 9.1 expired March 2026 (EOL). The 9.x series is Oracle's "innovation" track with no long-term support guarantee. MySQL 8.4 is the current LTS branch.
```sh ```sh
pkg install mysql84-server pkg install mysql84-server
sysrc mysql_enable=YES sysrc mysql_enable=YES
@@ -510,33 +532,48 @@ Crontab:
### 2.1 Base packages ### 2.1 Base packages
Redis 8.x (currently 8.6.3 in ports) is the current major version.
```sh ```sh
pkg install nginx redis git curl wget pkg install -y nginx redis git curl wget
sysrc nginx_enable=YES redis_enable=YES sysrc nginx_enable=YES redis_enable=YES
service redis start service redis start
``` ```
### 2.2 PHP 8.5 from ports ### 2.2 PHP 8.5 from binary packages
On FreeBSD 15.0, PHP 8.5 and all extensions are available as binary packages — no ports compilation required.
```sh ```sh
portsnap fetch extract # Base PHP 8.5 + FPM
# Or: git clone https://git.FreeBSD.org/ports.git /usr/ports pkg install -y php85 php85-extensions
cd /usr/ports/lang/php85 # Extensions needed for WordPress
make config-recursive pkg install -y \
# Enable: bcmath curl exif fileinfo gd gettext iconv imagick intl php85-bcmath \
# mbstring opcache pcntl pdo pdo_mysql soap sockets sodium php85-curl \
# xml xmlreader xmlwriter xsl zip php85-exif \
make install clean php85-fileinfo \
php85-gd \
php85-imagick \
php85-intl \
php85-mbstring \
php85-mysqli \
php85-opcache \
php85-pcntl \
php85-pdo_mysql \
php85-posix \
php85-redis \
php85-soap \
php85-sockets \
php85-sodium \
php85-xml \
php85-xmlreader \
php85-xmlwriter \
php85-xsl \
php85-zip
# Install extensions individually or as group pkg install -y ImageMagick7
pkg install php85-gd php85-imagick php85-intl php85-mbstring \
php85-mysqli php85-pdo_mysql php85-redis php85-soap \
php85-sockets php85-sodium php85-xml php85-zip \
php85-opcache php85-exif php85-fileinfo php85-bcmath \
php85-curl php85-pcntl php85-posix
pkg install ImageMagick7
sysrc php_fpm_enable=YES sysrc php_fpm_enable=YES
``` ```
@@ -896,7 +933,7 @@ zfs snapshot data/mysql@post-migration-$(date +%Y%m%d)
- [ ] Confirm new Tailscale hostnames for both nodes (determines pf rules and wp-config DB_HOST) - [ ] Confirm new Tailscale hostnames for both nodes (determines pf rules and wp-config DB_HOST)
- [ ] Confirm NPM node Tailscale IP (determines pf rule on dracula-new) - [ ] Confirm NPM node Tailscale IP (determines pf rule on dracula-new)
- [ ] PHP 8.5 from ports — attempt first, fall back to pkg php84 if dependency issue - [x] PHP 8.5 — binary package on FreeBSD 15.0, `pkg install php85`. No compilation. All extensions confirmed available.
- [ ] Redis Object Cache plugin — already in plugins dir or fresh install needed - [ ] Redis Object Cache plugin — already in plugins dir or fresh install needed
- [ ] W3TC features in use beyond caching: minify? If yes, switch to standalone nginx-based minification or keep W3TC minify only with nginx page cache - [ ] W3TC features in use beyond caching: minify? If yes, switch to standalone nginx-based minification or keep W3TC minify only with nginx page cache
- [ ] ZFS pool disk — confirm second disk available on transilvan-new VM - [ ] ZFS pool disk — confirm second disk available on transilvan-new VM