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
- **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
```
[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
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
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)
@@ -239,7 +254,7 @@ qm create 200 \
--ostype other \
--scsihw virtio-scsi-single \
--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 \
--agent enabled=1
```
@@ -247,7 +262,7 @@ qm create 200 \
Via UI:
```
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: ✓
Disks → VirtIO SCSI, 80GB, Cache: None
CPU → 6 cores, Type: host
@@ -272,7 +287,7 @@ qm create 201 \
--ostype other \
--scsihw virtio-scsi-single \
--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 \
--agent enabled=1
@@ -312,6 +327,11 @@ freebsd-update fetch install
pkg update && pkg upgrade -y
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)
sysrc qemu_guest_agent_enable=YES
service qemu-guest-agent start
@@ -413,6 +433,8 @@ zfs set compression=lz4 data/mysql # free performance, transparent
### 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
pkg install mysql84-server
sysrc mysql_enable=YES
@@ -510,33 +532,48 @@ Crontab:
### 2.1 Base packages
Redis 8.x (currently 8.6.3 in ports) is the current major version.
```sh
pkg install nginx redis git curl wget
pkg install -y nginx redis git curl wget
sysrc nginx_enable=YES redis_enable=YES
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
portsnap fetch extract
# Or: git clone https://git.FreeBSD.org/ports.git /usr/ports
# Base PHP 8.5 + FPM
pkg install -y php85 php85-extensions
cd /usr/ports/lang/php85
make config-recursive
# Enable: bcmath curl exif fileinfo gd gettext iconv imagick intl
# mbstring opcache pcntl pdo pdo_mysql soap sockets sodium
# xml xmlreader xmlwriter xsl zip
make install clean
# Extensions needed for WordPress
pkg install -y \
php85-bcmath \
php85-curl \
php85-exif \
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 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
pkg install -y ImageMagick7
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 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
- [ ] 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