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:
91
README.md
91
README.md
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user