PHP-FPM: obična i izolirana instalacija
Ova hrvatska uputa prati dvije FPM arhitekture iz izdanja 0.2.4: obični FPM na SimbiozaHR_FPM i izolirani FPM na SimbiozaHR_FPMsecured. Obični FPM koristi zajednički web-račun i CLI za kasnije paketne radnje. Izolirani FPM ima zaseban servis, identitete i ograničeni helper pa dopušta GUI upravljanje modulima, jezicima i nadogradnjama. Ne miješajte prava ni portove tih načina.
Testni Apache i Nginx slušali su samo na 127.0.0.1. Za javni site koristite HTTPS i vlastitu domenu. Primjeri pokazuju stvarne lokalne putanje, a uz njih i prijenos na Linux. Jednokratni instalacijski tokeni i lozinke namjerno nisu zabilježeni.
1. Zajednički preduvjeti i izvorni tag
Provjerite web-poslužitelj, PHP CLI, FPM binarij i ekstenzije. Za odabranu bazu treba odgovarajući PDO driver; u dvije hrvatske provjere niže korišten je SQLite. PHP web-radnika i CLI moraju biti kompatibilni, ali pokretanje php -v ne dokazuje verziju FPM radnika. Na Debianu instalirajte php-fpm, php-cli, php-sqlite3, php-xml, php-mbstring, php-intl, php-zip, Composer 2 i acl. Ako planirate Apache, uključite rewrite, proxy i proxy_fcgi. Nginx koristi FastCGI bez Apache modula.
php -v
php -m
/opt/homebrew/sbin/php-fpm -v
composer --version
git --version
id -un
id -Gn
Čist tag preuzmite jednom, bez prenošenja .git u instalacije. Primjer koristi točan tag koji je provjeren u ovom vodiču. Ako je objavljen noviji, zamijenite ga i provjerite njegove release bilješke prije početka. Na čistom tagu bez composer.lock koristite composer update; kasnije postojeće instalacije nadograđuje Simbiozin updater, ne samostalni Composer.
SIMBIOZA_TAG=0.2.4
SIMBIOZA_FETCH_DIR="$(mktemp -d)"
mkdir "$SIMBIOZA_FETCH_DIR/release"
git -C "$SIMBIOZA_FETCH_DIR/release" init -q
git -C "$SIMBIOZA_FETCH_DIR/release" remote add origin https://github.com/kmihalj/Simbioza.git
git -C "$SIMBIOZA_FETCH_DIR/release" fetch --quiet --depth 1 origin "refs/tags/$SIMBIOZA_TAG:refs/tags/$SIMBIOZA_TAG"
git -C "$SIMBIOZA_FETCH_DIR/release" -c advice.detachedHead=false checkout --quiet "$SIMBIOZA_TAG"
cat "$SIMBIOZA_FETCH_DIR/release/VERSION"
2. Obični FPM: hrvatska instalacija
U lokalnom laboratoriju hrvatski obični FPM radi u root-owned servisu s poolom pod zajedničkim web-računom _www. Pool sluša samo na 127.0.0.1:9077. Ne oslanjajte se na korisnikov Homebrew www pool s drukčijim Unix računom. Na Linuxu prilagodite pool stvarnom servisu i računu, npr. www-data.
2.1. Hrvatski obični FPM — datoteke, Composer i prava
mkdir -p /Users/Shared/Simbioza/SimbiozaHR_FPM
rsync --archive --exclude=.git/ "$SIMBIOZA_FETCH_DIR/release/" /Users/Shared/Simbioza/SimbiozaHR_FPM/
cd /Users/Shared/Simbioza/SimbiozaHR_FPM
composer update --with-all-dependencies --optimize-autoloader
composer check-platform-reqs
mkdir -p config data/cache data/logs data/sessions data/setup-requests data/tmp resources/config/menu resources/config/theme
sudo chgrp -R _www config data resources/config/menu resources/config/theme
sudo chmod 3770 config
sudo chmod 2770 resources/config/menu resources/config/theme
sudo chmod -R g+rwX data resources/config/menu resources/config/theme
sudo chmod +a 'user:kmihalj allow read,write,append,execute,delete,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit' config
sudo find data resources/config/menu resources/config/theme -type d -exec chmod +a 'user:kmihalj allow read,write,append,execute,delete,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit' {} +
ls -lde data data/sessions data/tmp
Praktično otkrivena zamka: kada smo prvi put otvorili obični FPM prije izrade data/sessions, PHP je prijavio session_start(): No such file or directory. Nakon izrade radnih direktorija i novog jednokratnog tokena ekran je bio čist. Stoga taj redak nije opcionalan. data/tmp mora biti zapisiv i FPM radniku, ne samo održavatelju. Na Linuxu koristite uski setfacl umjesto macOS chmod +a; ne otvarajte cijeli kod chmod 777 naredbom.
2.2. FPM pool i servis za obični način
Ovo su ključne stavke hrvatskog običnog poola i globalne datoteke /opt/homebrew/etc/php/8.5/php-fpm-install-guides.conf. Pool ima vlastiti port, sesije i TMPDIR. Port ne otvarajte prema mreži.
[global]
pid = /opt/homebrew/var/run/php-fpm-install-guides.pid
error_log = /opt/homebrew/var/log/php-fpm-install-guides.log
daemonize = no
include = /opt/homebrew/etc/php/8.5/php-fpm-install-guides.d/*.conf
[simbioza-guide-hr]
user = _www
group = _www
listen = 127.0.0.1:9077
listen.allowed_clients = 127.0.0.1
pm = ondemand
pm.max_children = 4
pm.process_idle_timeout = 10s
pm.max_requests = 500
clear_env = yes
security.limit_extensions = .php
env[TMPDIR] = /Users/Shared/Simbioza/SimbiozaHR_FPM/data/tmp
php_admin_value[session.save_path] = /Users/Shared/Simbioza/SimbiozaHR_FPM/data/sessions
php_admin_value[upload_tmp_dir] = /Users/Shared/Simbioza/SimbiozaHR_FPM/data/tmp
php_admin_value[sys_temp_dir] = /Users/Shared/Simbioza/SimbiozaHR_FPM/data/tmp
Raspored datoteka: blok [global] do include spremite kao php-fpm-install-guides.conf, a hrvatski pool kao php-fpm-install-guides.d/hr.conf. Nakon izrade datoteka provjerite sintaksu. Ne kopirajte drugi pool u ovaj postupak.
sudo mkdir -p /opt/homebrew/etc/php/8.5/php-fpm-install-guides.d
sudoedit /opt/homebrew/etc/php/8.5/php-fpm-install-guides.conf
sudoedit /opt/homebrew/etc/php/8.5/php-fpm-install-guides.d/hr.conf
sudoedit /Library/LaunchDaemons/hr.simbioza-guide-ordinary.php-fpm.plist
U zadnju datoteku stavite cijeli ovaj sadržaj. Radi se o zasebnom testnom servisu, ne o zamjeni Homebrewova postojećeg FPM servisa:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>hr.simbioza-guide-ordinary.php-fpm</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/sbin/php-fpm</string>
<string>--nodaemonize</string>
<string>--fpm-config</string>
<string>/opt/homebrew/etc/php/8.5/php-fpm-install-guides.conf</string>
</array>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key><string>/opt/homebrew/var/log/php-fpm-install-guides-launchd.log</string>
<key>StandardErrorPath</key><string>/opt/homebrew/var/log/php-fpm-install-guides-launchd.log</string>
</dict>
</plist>
Za Linux nemojte kopirati macOS plist ni putanju /opt/homebrew. Postavite hrvatski pool u direktorij verzije PHP-a koju ste stvarno instalirali, primjerice /etc/php/8.4/fpm/pool.d/; zamijenite _www stvarnim web-računom, prilagodite putanje /srv/..., zatim pokrenite sudo php-fpm8.4 -t i sudo systemctl restart php8.4-fpm. Te su Linux naredbe obrazac za prilagodbu, a prikazani hrvatski prolazi provedeni su na macOS-u; provjerite naziv servisa svoje distribucije.
Na macOS-u servis mora pokretati master proces kao root kako bi pool mogao promijeniti identitet u _www. U provjeri je korišten LaunchDaemon s ProgramArguments za /opt/homebrew/sbin/php-fpm --nodaemonize --fpm-config /opt/homebrew/etc/php/8.5/php-fpm-install-guides.conf, uz RunAtLoad i KeepAlive. Na Linuxu odgovarajući PHP-FPM servis vodi systemd; provjerite systemctl status php8.4-fpm i stvarne radnike, ne samo slušanje porta.
sudo chown root:wheel /Library/LaunchDaemons/hr.simbioza-guide-ordinary.php-fpm.plist
sudo chmod 644 /Library/LaunchDaemons/hr.simbioza-guide-ordinary.php-fpm.plist
/opt/homebrew/sbin/php-fpm --test --fpm-config /opt/homebrew/etc/php/8.5/php-fpm-install-guides.conf
sudo launchctl bootstrap system /Library/LaunchDaemons/hr.simbioza-guide-ordinary.php-fpm.plist
sudo launchctl print system/hr.simbioza-guide-ordinary.php-fpm
lsof -nP -iTCP:9077 -sTCP:LISTEN
Ako je servis već učitan, nemojte drugi put izvršiti bootstrap: provjerite ga naredbom launchctl print, a izmjene konfiguracije učitajte kontrolirano. Zabilježite identitet pool radnika (_www ili www-data) i uskladite prava prije instalera.
2.3. Apache ili Nginx — birajte jedan web-poslužitelj
Na Apacheu je hrvatski obični FPM alias usmjeren na port 9077 preko mod_proxy i mod_proxy_fcgi. Apache ne pokreće FPM servis. ProxyTimeout 900 dopušta dulje zahtjeve, ali ne zamjenjuje PHP/FPM ograničenja. U produkciji koristite TLS virtualni host i samo public/ kao web-korijen.
LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so
ProxyTimeout 900
Alias /SimbiozaHR_FPM "/Users/Shared/Simbioza/SimbiozaHR_FPM/public"
<Directory "/Users/Shared/Simbioza/SimbiozaHR_FPM/public">
Options -Indexes +FollowSymLinks
AllowOverride All
Require local
DirectoryIndex index.php
<FilesMatch "\.php$">
SetHandler "proxy:fcgi://127.0.0.1:9077"
</FilesMatch>
</Directory>
/opt/homebrew/bin/httpd -t -f /opt/homebrew/etc/httpd/extra/httpd-simbioza-install-guides.conf
sudo /opt/homebrew/bin/httpd -k graceful -f /opt/homebrew/etc/httpd/extra/httpd-simbioza-install-guides.conf
Za Nginx je provjeren zaseban lokalni test na portu 8091 s HR običnim poolom 9077: sintaksa je prošla, /, /auth/login i /about vratili su 200, a /.env 403. Nginx je nakon pokusa potpuno uklonjen. Sljedeći primjer prikazuje isti FastCGI obrazac za javni TLS virtualni host; zamijenite putanje i certifikate. Nginx nikad ne koristi mod_php.
server {
listen 443 ssl;
server_name simbioza.example.org;
root /srv/simbioza/public;
index index.php;
ssl_certificate /putanja/do/fullchain.pem;
ssl_certificate_key /putanja/do/privkey.pem;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9077;
fastcgi_read_timeout 900s;
}
location ~ /\. {
deny all;
}
}
nginx -t
curl -I https://simbioza.example.org/auth/login
U lokalnom Nginx testu, gdje TLS namjerno nije bio potreban jer je sve ostalo na loopbacku, iste root, try_files, SCRIPT_FILENAME i fastcgi_pass direktive obrađivale su stvarne Simbioza stranice. Nginx ne mijenja pravila za bazu, datoteke ni FPM račun.
2.4. Priprema paketa i četiri koraka čarobnjaka — obični FPM
Obični pool nema GUI helper. Održavatelj zato prije web-obrasca u CLI-ju priprema opcionalne pakete. Naredba php scripts/installation_packages.php prepare bez popisa priprema sve; u novom instaleru svi su početno označeni, a nepotrebne odznačite. Za manji skup upotrijebite --modules=theme,calendar,email, za nijedan --modules=, a pripremljeno provjerite naredbom php scripts/installation_packages.php status. Nakon uspjeha pokrenite php scripts/installation_packages.php cleanup. Snimke niže bilježe test izdanja 0.2.4, u kojem je pripremljena samo Tema, uz privremeni Backup za početne upute. Izradite jedan token s točnom HR podputanjom.
cd /Users/Shared/Simbioza/SimbiozaHR_FPM
php scripts/installation_packages.php prepare
php scripts/installation_packages.php status
php bin/simbioza install:prepare --base-url=http://127.0.0.1:8090/SimbiozaHR_FPM
U pregledniku odaberite „Simbioza HR FPM”, hrvatski kao primarni jezik i prvog administratora. Redom provjerite preduvjete, testirajte SQLite, ispunite obrazac, pregledajte sažetak i tek tada pokrenite instalaciju.
2.5. Hrvatski obični FPM — snimke svakog ekrana
3. Izolirani FPM: zasebni računi i GUI upravljanje
Izolirani način nije samo drukčiji port. Skripta configure_fpm_setup.php stvara namjenski FPM servis, identitete i grupe za web/deploy, prava samo na potrebnim putanjama te ograničeni helper za provjerene paketne radnje. Različite instalacije moraju dobiti različite --instance oznake i portove. --check ne mijenja stanje, a --finalize se poziva tek nakon web-čarobnjaka.
3.1. Hrvatska izolirana instalacija — točan slijed
mkdir -p /Users/Shared/Simbioza/SimbiozaHR_FPMsecured
rsync --archive --exclude=.git/ "$SIMBIOZA_FETCH_DIR/release/" /Users/Shared/Simbioza/SimbiozaHR_FPMsecured/
cd /Users/Shared/Simbioza/SimbiozaHR_FPMsecured
composer update --with-all-dependencies --optimize-autoloader
composer check-platform-reqs
sudo php scripts/configure_fpm_setup.php --install --instance=hrsecure --listen=127.0.0.1:9079 --app-root=/Users/Shared/Simbioza/SimbiozaHR_FPMsecured --maintainer=kmihalj --php-fpm=/opt/homebrew/sbin/php-fpm
php scripts/configure_fpm_setup.php --check --instance=hrsecure --listen=127.0.0.1:9079 --app-root=/Users/Shared/Simbioza/SimbiozaHR_FPMsecured --maintainer=kmihalj --php-fpm=/opt/homebrew/sbin/php-fpm
php bin/simbioza install:prepare --base-url=http://127.0.0.1:8090/SimbiozaHR_FPMsecured
U web-obrascu nije potreban prethodni installation_packages.php prepare: nakon izbora Tema helper je iz GUI-ja preuzeo tagirani paket. Taj zahtjev može trajati dulje od minute. Pool u 0.2.4 zato postavlja php_admin_value[max_execution_time] = 900, a Apache proxy ProxyTimeout 900; na Nginxu uskladite fastcgi_read_timeout 900s. Prikaz 503/504 nije normalan dio postupka.
Apache alias ovog izoliranog sitea usmjeren je na 9079. Za Linux skripti predajte stvarnu putanju FPM-a i poslužiteljske direktorije; nakon generiranja pregledajte pool, servis, sudoers pravilo i prava prije otvaranja tokena.
ProxyTimeout 900
Alias /SimbiozaHR_FPMsecured "/Users/Shared/Simbioza/SimbiozaHR_FPMsecured/public"
<Directory "/Users/Shared/Simbioza/SimbiozaHR_FPMsecured/public">
Options -Indexes +FollowSymLinks
AllowOverride All
Require local
DirectoryIndex index.php
<FilesMatch "\.php$">
SetHandler "proxy:fcgi://127.0.0.1:9079"
</FilesMatch>
</Directory>
Kontrolirajte sintaksu Apachea pa ga učitajte prije web-čarobnjaka. Nginx umjesto SetHandler koristi isti provjereni location ~ \.php$ iz odjeljka 2.3, ali fastcgi_pass 127.0.0.1:9079 za ovaj site.
3.2. Hrvatski izolirani FPM — snimke svakog koraka
3.3. Učvrstite vlasništvo tek nakon dovršenog čarobnjaka
Izolirani hrvatski čarobnjak završio je instalacijom teme, migracijama i zasebnim adminom. Tek tada pozovite --finalize s istim --instance, --listen, --app-root i --php-fpm vrijednostima kao pri --install. Promjena instance samo u zadnjoj naredbi bi ciljala drugi servis. Održavatelj se nakon dodavanja u grupe mora ponovno prijaviti u shell kako bi aktivirao članstvo.
cd /Users/Shared/Simbioza/SimbiozaHR_FPMsecured
sudo php scripts/configure_fpm_setup.php --finalize --instance=hrsecure --listen=127.0.0.1:9079 --app-root=/Users/Shared/Simbioza/SimbiozaHR_FPMsecured --maintainer=kmihalj --php-fpm=/opt/homebrew/sbin/php-fpm
php scripts/configure_fpm_setup.php --check --instance=hrsecure --listen=127.0.0.1:9079 --app-root=/Users/Shared/Simbioza/SimbiozaHR_FPMsecured --maintainer=kmihalj --php-fpm=/opt/homebrew/sbin/php-fpm
4. Moduli, jezici, nadogradnje i završne provjere
Na običnom FPM-u GUI čarobnjak i uključivanje/isključivanje već prisutnog modula rade, ali instaliranje/uklanjanje paketa i nadogradnja trebaju CLI vlasnika koda. Na izoliranom FPM-u Setup GUI smije pokrenuti te radnje kroz ograničeni helper; ne dajte samom web-radniku pravo pisanja u vendor/. U HR izoliranom siteu kroz GUI smo instalirali Pristupačnost 0.1.2 te provjerili da su odmah nastali stavka Postavke → Pristupačnost i widget. Time nije provjeren samo PHP test, nego stvarni ciklus modula u pregledniku.
CLI naredbe vrijede u oba FPM načina ako ih pokreće ovlašteni deploy račun. Obvezni modul ne može se ukloniti, a opcionalni se ne uklanja bez provjere ovisnosti. Isključivanje čuva podatke; uklanjanje stvara kopiju iz koje se kasnije može vratiti modul. Jezični paketi mogu se ažurirati neovisno o izdanju aplikacije.
vendor/bin/hph modules list
vendor/bin/hph modules add calendar --fresh
vendor/bin/hph modules disable calendar
vendor/bin/hph modules enable calendar
vendor/bin/hph modules backups calendar
vendor/bin/hph modules remove calendar --yes
vendor/bin/hph modules add calendar --restore
vendor/bin/hph languages available
vendor/bin/hph languages install de
vendor/bin/hph languages update
php update.php --check
php update.php
Prije produkcijske nadogradnje zasebno kopirajte SQLite/MySQL/PostgreSQL bazu, config/, privatne korisničke datoteke i teme. Ne pokrećite redovne nadogradnje kao root. Na postojećoj instalaciji ne zamjenjujte Simbiozin updater samostalnim composer update, jer updater čuva odabrane opcionalne pakete, migracije i stanje održavanja.
Na obje hrvatske FPM instalacije provedite provjeru ispod. U našem testu obje prijave vratile su 200, oba zaključana installera 404, Composer platforma prošla, a obje baze imale 22 izvršene i nula migracija na čekanju. Na običnoj instalaciji prije toga izvršite php scripts/installation_packages.php cleanup kako bi se uklonio samo privremeni Backup paket.
cd /Users/Shared/Simbioza/SimbiozaHR_FPM
php scripts/installation_packages.php cleanup
vendor/bin/hph modules migrate-status
composer check-platform-reqs
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8090/SimbiozaHR_FPM/auth/login
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8090/SimbiozaHR_FPM/install
cd /Users/Shared/Simbioza/SimbiozaHR_FPMsecured
vendor/bin/hph modules migrate-status
composer check-platform-reqs
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8090/SimbiozaHR_FPMsecured/auth/login
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8090/SimbiozaHR_FPMsecured/install
Za svaki site na kraju ručno provjerite prijavu, početnu stranicu, izbornik, temu i očekivane module. Terminalski status servisa nije zamjena za stvarni korisnički tok. Za Apache, Nginx i FPM pravila usporedite Apache mod_proxy_fcgi, Nginx FastCGI i PHP-FPM priručnik.
Comments
0There are no comments yet.
You must sign in to add a comment.