Zum Inhalt

PHP-FPM

Inhalt

  • PHP 8.4.16
  • PHP-FPM
  • optionale PHP-Erweiterungen
  • optional Composer
  • optional PEAR / PECL

Einleitung

Dieses HowTo beschreibt die Installation und Konfiguration von PHP-FPM auf FreeBSD 15+ für Apache oder Nginx auf demselben Host.

Der FreeBSD-Port lang/php84 enthält bereits die CLI, CGI und FPM samt Beispielkonfigurationen. Auf dem aktuellen Quarterly-Stand für FreeBSD 15 liegt der Port bei 8.4.16. PHP-FPM ist dabei die gebündelte FastCGI-Implementierung von PHP und die saubere Basis für den Betrieb hinter Apache oder Nginx. (FreshPorts)

Diese Anleitung setzt bewusst auf PHP-FPM über FastCGI und nicht auf mod_php. Für Unix-Sockets wird in diesem HowTo der Pfad /var/run/fpm_www.sock verwendet.


Voraussetzungen

Zu den Voraussetzungen für dieses HowTo siehe bitte: Hosting System

Zusätzlich gilt für dieses HowTo:

  • Ein Webserver wie Apache oder Nginx ist bereits vorhanden oder wird direkt im Anschluss eingerichtet.
  • Der Webserver soll PHP nicht per mod_php, sondern per FastCGI über PHP-FPM anbinden.
  • Für Unix-Sockets wird in diesem HowTo der Pfad /var/run/fpm_www.sock verwendet.

PHP-FPM ist dafür ausdrücklich gedacht: Es läuft als Daemon im Hintergrund und verarbeitet CGI-/FastCGI-Anfragen, die vom Webserver weitergereicht werden. (man.freebsd.org)


Vorbereitungen

DNS Records

Für dieses HowTo sind keine zusätzlichen DNS-Records erforderlich.

Gruppen / Benutzer / Passwörter

Für dieses HowTo sind keine zusätzlichen Systemgruppen, Systembenutzer oder Passwörter erforderlich.

Verzeichnisse / Dateien

Für dieses HowTo müssen vor der Installation keine zusätzlichen Verzeichnisse oder Dateien manuell angelegt werden.

Die benötigten Beispielkonfigurationsdateien werden bereits durch lang/php84 installiert. Dazu gehören unter anderem php.ini-production, php-fpm.conf.default und php-fpm.d/www.conf.default. (FreshPorts)


Installation

Wir installieren lang/php84 und dessen Abhängigkeiten.

Bash
mkdir -p /var/db/ports/lang_php84
cat <<'EOF' > /var/db/ports/lang_php84/options
_OPTIONS_READ=php84-8.4.19
_FILE_COMPLETE_OPTIONS_LIST=CGI CLI DEBUG DTRACE EMBED FPM IPV6 LINKTHR  MYSQLND NOASLR PCRE PHPDBG ZTS
OPTIONS_FILE_SET+=CGI
OPTIONS_FILE_SET+=CLI
OPTIONS_FILE_UNSET+=DEBUG
OPTIONS_FILE_UNSET+=DTRACE
OPTIONS_FILE_SET+=EMBED
OPTIONS_FILE_SET+=FPM
OPTIONS_FILE_SET+=IPV6
OPTIONS_FILE_SET+=LINKTHR
OPTIONS_FILE_SET+=MYSQLND
OPTIONS_FILE_UNSET+=NOASLR
OPTIONS_FILE_SET+=PCRE
OPTIONS_FILE_UNSET+=PHPDBG
OPTIONS_FILE_SET+=ZTS

EOF

portmaster -w -B -g -U --force-config lang/php84 -n

Dienst in rc.conf eintragen

Der Dienst wird mittels sysrc in der rc.conf eingetragen und dadurch beim Systemstart automatisch gestartet.

Wichtig: Der FreeBSD-Dienst heißt php_fpm. Die frühere Schreibweise php-fpm wurde in den Ports-Startskripten umbenannt; die rc.conf-Variable bleibt dabei php_fpm_enable. (FreeBSD Git)

Bash
sysrc php_fpm_enable=YES

Konfiguration

Konfigurationsdateien

lang/php84 installiert die Standarddateien für PHP und PHP-FPM bereits mit. Für produktive Systeme ist php.ini-production die saubere Ausgangsbasis. Die globale FPM-Konfiguration liegt unter /usr/local/etc/php-fpm.conf, die Standard-Pool-Datei unter /usr/local/etc/php-fpm.d/www.conf. (FreshPorts)

php.ini einrichten

Bash
cat <<'EOF' > /usr/local/etc/php.ini
[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
zend.exception_ignore_args = On
zend.exception_string_param_max_len = 0
expose_php = Off
max_execution_time = 60
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_DEPRECATED
display_errors = Off
display_startup_errors = Off
log_errors = On
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
arg_separator.input = "&"
arg_separator.output = "&"
html_errors = Off
error_log = "/var/log/php_error.log"
sys_temp_dir = "/tmp"
upload_tmp_dir = "/tmp"
user_ini.filename = ""
zend.multibyte = On
zend.script_encoding = "UTF-8"
[CLI Server]
cli_server.color = On
[Date]
date.timezone = "Europe/Berlin"
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]
pcre.backtrack_limit = "8000000"
[Pdo]
[Pdo_mysql]
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = Off
mail.mixed_lf_and_crlf = Off
mail.log = "/var/log/php_sendmail.log"
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly = On
session.cookie_samesite = Lax
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.cookie_secure = On
session.save_path = "/tmp"
session.sid_bits_per_character = 6
session.sid_length = 48
session.use_only_cookies = On
session.use_strict_mode = On
[Assertion]
zend.assertions = -1
[COM]
[mbstring]
mbstring.detect_order = "auto"
mbstring.strict_detection = On
[gd]
[exif]
exif.encode_jis = "UTF-8"
exif.encode_unicode = "UTF-8"
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled = 1
soap.wsdl_cache_dir = "/tmp"
soap.wsdl_cache_ttl = 86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[dba]
[opcache]
opcache.enable_cli = Off
opcache.enable_file_override = On
opcache.error_log = "/var/log/php_opcache.log"
opcache.interned_strings_buffer = 16
opcache.log_verbosity_level = 2
opcache.max_accelerated_files = 32768
opcache.revalidate_freq = 60
opcache.revalidate_path = On
[curl]
curl.cainfo = "/usr/local/share/certs/ca-root-nss.crt"
[openssl]
openssl.cafile = "/usr/local/share/certs/ca-root-nss.crt"
[ffi]
EOF

php-fpm.conf einrichten

Bash
cat <<'EOF' > /usr/local/etc/php-fpm.conf
EOF

php-fpm.d/www.conf einrichten

Für Unix-Sockets sind listen.owner, listen.group und listen.mode die richtigen Parameter. Genau diese Direktiven sind in der PHP-Dokumentation für Socket-Rechte vorgesehen. Außerdem ist pm.max_requests sinnvoll, wenn du Worker nach einer bestimmten Anzahl Requests neu starten willst, um Speicherlecks in Drittbibliotheken abzufangen. (PHP)

Bash
cat <<'EOF' > /usr/local/etc/php-fpm.d/www.conf
[www]
user = www
group = www

listen = /var/run/fpm_www.sock
listen.owner = www
listen.group = www
listen.mode = 0660

pm = dynamic
pm.max_children = 64
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 16
pm.max_requests = 500

clear_env = yes
catch_workers_output = yes
security.limit_extensions = .php

pm.status_path = /fpm-status
ping.path = /fpm-ping
ping.response = pong

request_terminate_timeout = 70s
EOF

Logdateien anlegen

Bash
install -m 0664 -g www /dev/null /var/log/php_error.log
install -m 0664 -g www /dev/null /var/log/php_opcache.log
install -m 0664 -g www /dev/null /var/log/php_sendmail.log

Konfiguration prüfen

Vor dem ersten Start sollte die Konfiguration immer geprüft werden. php-fpm -t ist genau dafür gedacht und testet die FPM-Konfigurationsdatei, ohne den Dienst produktiv zu starten. (man.freebsd.org)

Bash
php -v
php-fpm -t
service php_fpm start
sockstat -4 -6 -l | grep fpm

Datenbanken

Für dieses HowTo sind keine Datenbanken erforderlich.


Zusatzsoftware

Mögliche Zusatzsoftware wird hier installiert und konfiguriert.

PHP-Erweiterungen installieren

lang/php84-extensions ist ein Meta-Port. Er installiert standardmäßig nur einen Kernsatz an Erweiterungen. Zusätzliche Module wie mbstring, gd, pdo_mysql oder anwendungsspezifische Module müssen bewusst über Portoptionen oder eigene Slave-Ports ergänzt werden. (FreshPorts)

Bash
mkdir -p /var/db/ports/converters_php84-mbstring
cat <<'EOF' > /var/db/ports/converters_php84-mbstring/options
_OPTIONS_READ=php84-mbstring-8.4.19
_FILE_COMPLETE_OPTIONS_LIST=REGEX
OPTIONS_FILE_SET+=REGEX

EOF

mkdir -p /var/db/ports/devel_oniguruma
cat <<'EOF' > /var/db/ports/devel_oniguruma/options
_OPTIONS_READ=oniguruma-6.9.10
_FILE_COMPLETE_OPTIONS_LIST=DOCS EXAMPLES
OPTIONS_FILE_UNSET+=DOCS
OPTIONS_FILE_UNSET+=EXAMPLES

EOF

mkdir -p /var/db/ports/databases_php84-dba
cat <<'EOF' > /var/db/ports/databases_php84-dba/options
_OPTIONS_READ=php84-dba-8.4.19
_FILE_COMPLETE_OPTIONS_LIST=CDB DB4 FLATFILE GDBM INIFILE LMDB QDBM TOKYO
OPTIONS_FILE_SET+=CDB
OPTIONS_FILE_UNSET+=DB4
OPTIONS_FILE_SET+=FLATFILE
OPTIONS_FILE_UNSET+=GDBM
OPTIONS_FILE_SET+=INIFILE
OPTIONS_FILE_SET+=LMDB
OPTIONS_FILE_UNSET+=QDBM
OPTIONS_FILE_UNSET+=TOKYO

EOF

mkdir -p /var/db/ports/databases_php84-pdo_mysql
cat <<'EOF' > /var/db/ports/databases_php84-pdo_mysql/options
_OPTIONS_READ=php84-pdo_mysql-8.4.19
_FILE_COMPLETE_OPTIONS_LIST=MYSQLND
OPTIONS_FILE_SET+=MYSQLND

EOF

mkdir -p /var/db/ports/graphics_php84-gd
cat <<'EOF' > /var/db/ports/graphics_php84-gd/options
_OPTIONS_READ=php84-gd-8.4.19
_FILE_COMPLETE_OPTIONS_LIST=JIS WEBP X11
OPTIONS_FILE_UNSET+=JIS
OPTIONS_FILE_SET+=WEBP
OPTIONS_FILE_UNSET+=X11

EOF

mkdir -p /var/db/ports/graphics_gd
cat <<'EOF' > /var/db/ports/graphics_gd/options
_OPTIONS_READ=libgd-2.3.3
_FILE_COMPLETE_OPTIONS_LIST=PNG JPEG WEBP TIFF XPM HEIF AVIF LIQ FREETYPE FONTCONFIG RAQM ICONV THREADS
OPTIONS_FILE_SET+=PNG
OPTIONS_FILE_SET+=JPEG
OPTIONS_FILE_SET+=WEBP
OPTIONS_FILE_SET+=TIFF
OPTIONS_FILE_UNSET+=XPM
OPTIONS_FILE_UNSET+=HEIF
OPTIONS_FILE_UNSET+=AVIF
OPTIONS_FILE_UNSET+=LIQ
OPTIONS_FILE_SET+=FREETYPE
OPTIONS_FILE_SET+=FONTCONFIG
OPTIONS_FILE_SET+=RAQM
OPTIONS_FILE_SET+=ICONV
OPTIONS_FILE_SET+=THREADS

EOF

mkdir -p /var/db/ports/graphics_jpeg-turbo
cat <<'EOF' > /var/db/ports/graphics_jpeg-turbo/options
_OPTIONS_READ=jpeg-turbo-3.1.3
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS

EOF

mkdir -p /var/db/ports/devel_nasm
cat <<'EOF' > /var/db/ports/devel_nasm/options
_OPTIONS_READ=nasm-2.16.03
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS

EOF

mkdir -p /var/db/ports/devel_libgit2
cat <<'EOF' > /var/db/ports/devel_libgit2/options
EOF

mkdir -p /var/db/ports/security_libssh2
cat <<'EOF' > /var/db/ports/security_libssh2/options
EOF

mkdir -p /var/db/ports/www_libhttp
cat <<'EOF' > /var/db/ports/www_libhttp/options
EOF

mkdir -p /var/db/ports/graphics_png
cat <<'EOF' > /var/db/ports/graphics_png/options
_OPTIONS_READ=png-1.6.55
_FILE_COMPLETE_OPTIONS_LIST=APNG SIMD
OPTIONS_FILE_SET+=APNG
OPTIONS_FILE_SET+=SIMD

EOF

mkdir -p /var/db/ports/graphics_tiff
cat <<'EOF' > /var/db/ports/graphics_tiff/options
_OPTIONS_READ=tiff-4.7.1
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS

EOF

mkdir -p /var/db/ports/archivers_libdeflate
cat <<'EOF' > /var/db/ports/archivers_libdeflate/options
_OPTIONS_READ=libdeflate-1.25
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS

EOF

mkdir -p /var/db/ports/graphics_jbigkit
cat <<'EOF' > /var/db/ports/graphics_jbigkit/options
_OPTIONS_READ=jbigkit-2.1
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS

EOF

mkdir -p /var/db/ports/graphics_webp
cat <<'EOF' > /var/db/ports/graphics_webp/options
_OPTIONS_READ=webp-1.6.0
_FILE_COMPLETE_OPTIONS_LIST=IMGCONV X11
OPTIONS_FILE_SET+=IMGCONV
OPTIONS_FILE_UNSET+=X11

EOF

mkdir -p /var/db/ports/graphics_giflib
cat <<'EOF' > /var/db/ports/graphics_giflib/options
_OPTIONS_READ=giflib-5.2.2
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS

EOF

mkdir -p /var/db/ports/print_freetype2
cat <<'EOF' > /var/db/ports/print_freetype2/options
_OPTIONS_READ=freetype2-2.14.2
_FILE_COMPLETE_OPTIONS_LIST=BROTLI DEBUG DOCS LONG_PCF_NAMES PNG SUBPIXEL_RENDERING TABLE_VALIDATION
OPTIONS_FILE_SET+=BROTLI
OPTIONS_FILE_UNSET+=DEBUG
OPTIONS_FILE_UNSET+=DOCS
OPTIONS_FILE_SET+=LONG_PCF_NAMES
OPTIONS_FILE_SET+=PNG
OPTIONS_FILE_UNSET+=SUBPIXEL_RENDERING
OPTIONS_FILE_SET+=TABLE_VALIDATION

EOF

mkdir -p /var/db/ports/print_libraqm
cat <<'EOF' > /var/db/ports/print_libraqm/options
_OPTIONS_READ=libraqm-0.10.3
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS

EOF

mkdir -p /var/db/ports/converters_fribidi
cat <<'EOF' > /var/db/ports/converters_fribidi/options
_OPTIONS_READ=fribidi-1.0.16
_FILE_COMPLETE_OPTIONS_LIST=OPTIMIZED_CFLAGS TEST
OPTIONS_FILE_UNSET+=OPTIMIZED_CFLAGS
OPTIONS_FILE_UNSET+=TEST

EOF

mkdir -p /var/db/ports/print_harfbuzz
cat <<'EOF' > /var/db/ports/print_harfbuzz/options
_OPTIONS_READ=harfbuzz-13.1.1
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS

EOF

mkdir -p /var/db/ports/devel_gobject-introspection
cat <<'EOF' > /var/db/ports/devel_gobject-introspection/options
_OPTIONS_READ=gobject-introspection-1.84.0
_FILE_COMPLETE_OPTIONS_LIST=TEST
OPTIONS_FILE_UNSET+=TEST

EOF

mkdir -p /var/db/ports/x11-fonts_fontconfig
cat <<'EOF' > /var/db/ports/x11-fonts_fontconfig/options
_OPTIONS_READ=fontconfig-2.17.1
_FILE_COMPLETE_OPTIONS_LIST=BITMAPS DOCS NLS TEST HINTING_NONE HINTING_SLIGHT HINTING_MEDIUM HINTING_FULL
OPTIONS_FILE_SET+=BITMAPS
OPTIONS_FILE_UNSET+=DOCS
OPTIONS_FILE_SET+=NLS
OPTIONS_FILE_UNSET+=TEST
OPTIONS_FILE_UNSET+=HINTING_NONE
OPTIONS_FILE_SET+=HINTING_SLIGHT
OPTIONS_FILE_UNSET+=HINTING_MEDIUM
OPTIONS_FILE_UNSET+=HINTING_FULL

EOF

mkdir -p /var/db/ports/textproc_enchant2
cat <<'EOF' > /var/db/ports/textproc_enchant2/options
_OPTIONS_READ=enchant2-2.8.14
_FILE_COMPLETE_OPTIONS_LIST= ASPELL HSPELL HUNSPELL NUSPELL ZEMBEREK
OPTIONS_FILE_UNSET+=ASPELL
OPTIONS_FILE_UNSET+=HSPELL
OPTIONS_FILE_SET+=HUNSPELL
OPTIONS_FILE_UNSET+=NUSPELL
OPTIONS_FILE_UNSET+=ZEMBEREK

EOF

mkdir -p /var/db/ports/lang_php84-extensions
cat <<'EOF' > /var/db/ports/lang_php84-extensions/options
_OPTIONS_READ=php84-extensions-1.0
_FILE_COMPLETE_OPTIONS_LIST=BCMATH BZ2 CALENDAR CTYPE CURL DBA DOM ENCHANT EXIF FFI FILEINFO FILTER FTP GD GETTEXT GMP ICONV INTL LDAP MBSTRING MYSQLI ODBC OPCACHE PCNTL PDO PDO_DBLIB PDO_FIREBIRD PDO_MYSQL PDO_ODBC PDO_PGSQL PDO_SQLITE PGSQL PHAR POSIX READLINE SESSION SHMOP SIMPLEXML SNMP SOAP SOCKETS SODIUM SQLITE3 SYSVMSG SYSVSEM SYSVSHM TIDY TOKENIZER XML XMLREADER XMLWRITER XSL ZIP ZLIB
OPTIONS_FILE_SET+=BCMATH
OPTIONS_FILE_SET+=BZ2
OPTIONS_FILE_SET+=CALENDAR
OPTIONS_FILE_SET+=CTYPE
OPTIONS_FILE_SET+=CURL
OPTIONS_FILE_SET+=DBA
OPTIONS_FILE_SET+=DOM
OPTIONS_FILE_SET+=ENCHANT
OPTIONS_FILE_SET+=EXIF
OPTIONS_FILE_SET+=FFI
OPTIONS_FILE_SET+=FILEINFO
OPTIONS_FILE_SET+=FILTER
OPTIONS_FILE_SET+=FTP
OPTIONS_FILE_SET+=GD
OPTIONS_FILE_SET+=GETTEXT
OPTIONS_FILE_SET+=GMP
OPTIONS_FILE_SET+=ICONV
OPTIONS_FILE_SET+=INTL
OPTIONS_FILE_UNSET+=LDAP
OPTIONS_FILE_SET+=MBSTRING
OPTIONS_FILE_SET+=MYSQLI
OPTIONS_FILE_UNSET+=ODBC
OPTIONS_FILE_SET+=OPCACHE
OPTIONS_FILE_SET+=PCNTL
OPTIONS_FILE_SET+=PDO
OPTIONS_FILE_UNSET+=PDO_DBLIB
OPTIONS_FILE_UNSET+=PDO_FIREBIRD
OPTIONS_FILE_SET+=PDO_MYSQL
OPTIONS_FILE_UNSET+=PDO_ODBC
OPTIONS_FILE_SET+=PDO_PGSQL
OPTIONS_FILE_SET+=PDO_SQLITE
OPTIONS_FILE_SET+=PGSQL
OPTIONS_FILE_SET+=PHAR
OPTIONS_FILE_SET+=POSIX
OPTIONS_FILE_SET+=READLINE
OPTIONS_FILE_SET+=SESSION
OPTIONS_FILE_SET+=SHMOP
OPTIONS_FILE_SET+=SIMPLEXML
OPTIONS_FILE_UNSET+=SNMP
OPTIONS_FILE_UNSET+=SOAP
OPTIONS_FILE_SET+=SOCKETS
OPTIONS_FILE_SET+=SODIUM
OPTIONS_FILE_SET+=SQLITE3
OPTIONS_FILE_SET+=SYSVMSG
OPTIONS_FILE_SET+=SYSVSEM
OPTIONS_FILE_SET+=SYSVSHM
OPTIONS_FILE_UNSET+=TIDY
OPTIONS_FILE_SET+=TOKENIZER
OPTIONS_FILE_SET+=XML
OPTIONS_FILE_SET+=XMLREADER
OPTIONS_FILE_SET+=XMLWRITER
OPTIONS_FILE_SET+=XSL
OPTIONS_FILE_SET+=ZIP
OPTIONS_FILE_SET+=ZLIB

EOF

portmaster -w -B -g -U --force-config lang/php84-extensions -n

mkdir -p /var/db/ports/mail_panda-cclient
cat <<'EOF' > /var/db/ports/mail_panda-cclient/options
_OPTIONS_READ=panda-cclient-20130621
_FILE_COMPLETE_OPTIONS_LIST=IPV6 MBX_DEFAULT SSL SSL_AND_PLAINTEXT
OPTIONS_FILE_SET+=IPV6
OPTIONS_FILE_UNSET+=MBX_DEFAULT
OPTIONS_FILE_SET+=SSL
OPTIONS_FILE_UNSET+=SSL_AND_PLAINTEXT

EOF

portmaster -w -B -g -U --force-config mail/pecl-imap -n

Die IMAP-Erweiterung ist auf FreeBSD als eigener Port mail/pecl-imap verfügbar. FreshPorts beschreibt sie als separate PHP-Erweiterung für IMAP, NNTP, POP3 und lokale Mailboxen. (FreshPorts)

Composer installieren

Composer ist ein Dependency-Manager für PHP und damit nützlich, aber kein Pflichtbestandteil von PHP-FPM selbst. (PHP)

Bash
mkdir -p /var/db/ports/devel_php-composer
cat <<'EOF' > /var/db/ports/devel_php-composer/options
_OPTIONS_READ=php84-composer-2.9.5
_FILE_COMPLETE_OPTIONS_LIST=CURL
OPTIONS_FILE_SET+=CURL

EOF

portmaster -w -B -g -U --force-config devel/php-composer -n

PEAR installieren

PEAR ist das klassische PHP Extension and Application Repository und bleibt vor allem für ältere oder legacy-lastige Workflows relevant. Für moderne Anwendungen ist es meist optional. (FreshPorts)

Bash
mkdir -p /var/db/ports/devel_pear
cat <<'EOF' > /var/db/ports/devel_pear/options
_OPTIONS_READ=php84-pear-1.10.18
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS

EOF

portmaster -w -B -g -U --force-config devel/pear -n

PECL YAML installieren

Wenn Anwendungen YAML direkt in PHP benötigen, ist textproc/pecl-yaml der passende Port. Auf PHP 8.4 heißt das resultierende Paket php84-pecl-yaml. Auch das ist optional und anwendungsabhängig. (FreshPorts)

Bash
portmaster -w -B -g -U --force-config textproc/pecl-yaml -n

Aufräumen

Überflüssige oder temporäre Verzeichnisse und Dateien entsorgen.

Zusatzsoftware Installation

Nicht erforderlich.

Zusatzsoftware Konfiguration

Nicht erforderlich.


Abschluss

PHP-FPM kann nun gestartet werden.

Bash
service php_fpm start

Für spätere Änderungen:

Bash
service php_fpm reload
service php_fpm restart

php-fpm -t bleibt der saubere Vorab-Test für Änderungen an der FPM-Konfiguration. Der Dienstname auf FreeBSD ist dabei php_fpm. (man.freebsd.org)


Referenzen

  • FreshPorts: lang/php84 — Portinhalt, Beispielkonfigurationen, Paketstände. (FreshPorts)
  • FreeBSD Ports UPDATING — Umbenennung des Dienstnamens von php-fpm auf php_fpm. (FreeBSD Git)
  • PHP Manual — FastCGI Process Manager (FPM). (PHP)
  • PHP Manual — FPM-Konfiguration (listen.owner, listen.group, listen.mode, pm.max_requests). (PHP)
  • FreeBSD Manpage — php-fpm(8) (-t, Konfigurationspfade, Hintergrunddienst). (man.freebsd.org)
  • FreshPorts: lang/php84-extensions. (FreshPorts)
  • PHP Manual — Composer-Einführung. (PHP)
  • FreshPorts: devel/pear. (FreshPorts)
  • FreshPorts: textproc/pecl-yaml. (FreshPorts)
  • FreshPorts: mail/pecl-imap. (FreshPorts)