PHP-fpm pool pro více uživatelů

PHP-fpm pool pro více uživatelů
« kdy: 27. 02. 2019, 08:15:28 »
Ahoj,
mám server defacto v konfiguraci sdíleného hostingu.
Debian 9, nginx, php-fpm

Mám více vhostu, pro více vývojářů, které potřebuji mít oddělené.
Např.
Vhost blog
Uživatel SFTP: blog

Vhost Newsletters:
Uživatel SFTP: Newsletters

Problém:
Php-fpm i nginx běží pod jedním poolem a uživatelem www-data
Uživatel SFTP je součástí skupiny www-data.

Nastavím oprávnění např. na uživatele blog, vývojář může zapisovat na SFTP, web běží, ale např WordPress nejde aktualizovat, protože nemá oprávnění na soubory. Pokud upravím oprávnění na www-data tak WordPress lze aktualizovat. Pak bohužel vývojář nemůže měnit soubory na SFTP.

Řešení:
1. Napadl mně docker, bohužel daný poskytovatel VPS neposkytuje
2. Vytvořit samostatné php-fpm pooly nebo jak se to řeší?
« Poslední změna: 27. 02. 2019, 08:24:21 od Petr Krčmář »


Re:PHP-fpm pool pro více uživatelů
« Odpověď #1 kdy: 27. 02. 2019, 08:47:27 »
Osobne používam pre každý vhost vlastný php-fpm pool, ktorý beží pod konkrétnym userom a všetci sú v skupine www. Takto každý pool beží pod iným userom, logy pre každý vhost vidí iba konkrétny user, v htope vidíš konkrétne procesy, v linuxe sa vieš pohrať aj s prioritami poolov, môžeš php-fpm obmedziť na konkrétne priečinky a je toho ešte oveľa viac.
Nginx mi beží pod www, takže nemá problém čítať statický obsah a keďže php-fpm pool beží pod rovnaký userom ako je sftp user tak napr. ani WP nemá problém s aktualizáciou.

Re:PHP-fpm pool pro více uživatelů
« Odpověď #2 kdy: 27. 02. 2019, 09:21:59 »
Spíš by uživatel, pod kterým jede webserver, měl být členem skupiny daného uživatele a ne všichni uživatelé členy skupiny webserver. Pokud jsou všichni v jedné skupině, tak si mohou ti uživatelé navzájem číst data a vy potřebujete jen, aby je mohl číst webserver.

Re:PHP-fpm pool pro více uživatelů
« Odpověď #3 kdy: 27. 02. 2019, 11:07:20 »
Debian na to není úplně ideální, ale i v něm se to dá nastavit.
Dělá se to tak, že se pro každou "službu" založí vlastní uživatel.
Pod daným uživatelem běží php-fpm a vlastní instance nginx (tím pádem každá běží na jiném portu).

Na port 80/443 se pak spustí (třeba pod generickým uživatelem www/www-data) reverzní proxy, která provozy přesměruje do těch jednotlivých instancí.

Je to skvělé a spolehlivé řešení, jendnotliví uživatelé se nemohou prakticky ovlivnit, ani si vlézt navzájem na soubory.

Osobně doporučuji na to použít FreeBSD, kde se paralelně daji nakonfigurovat nginxy i php-fpm zcela jednoduše, dvěma řádky v /etc/rc.conf.

Re:PHP-fpm pool pro více uživatelů
« Odpověď #4 kdy: 27. 02. 2019, 11:17:18 »
Spíš by uživatel, pod kterým jede webserver, měl být členem skupiny daného uživatele a ne všichni uživatelé členy skupiny webserver. Pokud jsou všichni v jedné skupině, tak si mohou ti uživatelé navzájem číst data a vy potřebujete jen, aby je mohl číst webserver.

Jenze uzivatele nejsou cleny skupiny www-data.

/var/www/project_dir: project_user:www-data, rwx,r-x,---

Data muze rwx pouze dany project_user, a cist slozku muze nginx, nikdo jiny.


Re:PHP-fpm pool pro více uživatelů
« Odpověď #5 kdy: 27. 02. 2019, 11:26:50 »
Ahoj,
děkuji za odpovědi, cesta rozdělením PHP poolů je pro mě dostačující, mohl by mně někdo prosím poradit, jak vhodně pool rozdělit? Nějaký vzorová konfigurace?
Aktuálně mám jeden pool:
Kód: [Vybrat]
[global]
pid = /var/run/php/php7.2-fpm.pid
error_log = /var/log/php7.2-fpm.log

[global-pool]
user = www-data
group = www-data

listen = /var/run/php/php7.2-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

pm = dynamic
pm.start_servers = 15
pm.max_children = 25
pm.min_spare_servers = 5
pm.max_spare_servers = 25
pm.max_requests = 1000
Potřebuji rozdělit na 10 vhostů.
Děkuji

Re:PHP-fpm pool pro více uživatelů
« Odpověď #6 kdy: 27. 02. 2019, 11:29:25 »
Ahoj,
děkuji za odpovědi, cesta rozdělením PHP poolů je pro mě dostačující, mohl by mně někdo prosím poradit, jak vhodně pool rozdělit? Nějaký vzorová konfigurace?

Potřebuji rozdělit na 10 vhostů.
Děkuji

Pane kolego, to už snad nemyslíte vážně. Zde je místo na to se poradit, když nevíte, váháte, nebo se na něčem zaseknete.

Ale Vy chcete, aby jiní udělali práci za Vás!

Re:PHP-fpm pool pro více uživatelů
« Odpověď #7 kdy: 27. 02. 2019, 11:32:47 »
Pane Šilhavý, pooly vím jak rozdělit. Na to se dají najít návody.  V čem si nejsem jistý, jak rozdělit pooly, abych nedostával při nějaké zátěži 50x atd. Mohu třeba nechat globální pool a v samostatných poolech neřešit rozdělení prostředků?
Děkuji
« Poslední změna: 27. 02. 2019, 11:37:36 od SHIUNG »

Re:PHP-fpm pool pro více uživatelů
« Odpověď #8 kdy: 27. 02. 2019, 11:38:49 »
Pane Šilhavý, pooly vím jak rozdělit na to se dá najít návody, v čem si nejsem jistý jak to rozdělit abych nedostával při nějaké zátěži 50x atd.
Děkuji

Ale to musíte vyladit, odzkoušet. Na to není žádný magický návod. Pokud máte vše v jednom poolu, tak si to hospodaří s (zejm.) pamětí automaticky. Pokud pooly oddělíte, každý pool si sežere vlastní paměť. Někdy se hodí pm.dynamic, někdy pm.static. Jinak nastavené budou produkční pooly, jinak vývojové. Víc se můžete rozšoupnout u poolů, kde nastavíte na PHP kratší execution time a nižší memory limit. Šetřit musíte tam, kde to je naopak. Proto se doporučuje web oddělit od administrace, protože web obvykle nepotřebuje ani paměť, ani není žádoucí, aby request trval déle než maximálně pár krátkých sekund. U administrace naopak potřebujete víc paměti, povolit uploady apod. Crony (exporty apod) je zase lepší volat přímo /usr/bin/php a vůbec to nehnat přes FPM - pak potřebujete oddělené INI soubory i pro tato volání.

Ta problematika je prostě široká, aby se dalo poradit. Musíte něco udělat, zkusit, a když se zaseknete, zase Vám v konkrténím případě někdo rád poradí.