summaryrefslogtreecommitdiffstats
path: root/docs/DAEMON_SOCKET_ACTIVATION.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/DAEMON_SOCKET_ACTIVATION.md')
-rw-r--r--docs/DAEMON_SOCKET_ACTIVATION.md122
1 files changed, 122 insertions, 0 deletions
diff --git a/docs/DAEMON_SOCKET_ACTIVATION.md b/docs/DAEMON_SOCKET_ACTIVATION.md
new file mode 100644
index 0000000..1a027a3
--- /dev/null
+++ b/docs/DAEMON_SOCKET_ACTIVATION.md
@@ -0,0 +1,122 @@
+---
+title: Socket Activation with Popular Daemons
+category: Manuals and Documentation for Users and Administrators
+layout: default
+SPDX-License-Identifier: LGPL-2.1-or-later
+---
+
+## nginx
+
+nginx includes an undocumented, internal socket-passing mechanism based on the `NGINX` environmental variable. It uses this to perform reloads without having to close and reopen its sockets, but it's also useful for socket activation.
+
+**/etc/nginx/my-nginx.conf**
+
+```
+http {
+ server {
+ listen [::]:80 ipv6only=on;
+ listen 80;
+ }
+}
+```
+
+**/etc/systemd/system/my-nginx.service**
+
+```
+[Service]
+User=nginx
+Group=nginx
+Environment=NGINX=3:4;
+ExecStart=/usr/sbin/nginx -c/etc/nginx/my-nginx.conf
+PrivateNetwork=true
+```
+
+
+**/etc/systemd/system/my-nginx.socket**
+
+```
+[Socket]
+ListenStream=80
+ListenStream=0.0.0.0:80
+BindIPv6Only=ipv6-only
+After=network.target
+Requires=network.target
+
+[Install]
+WantedBy=sockets.target
+```
+
+
+## PHP-FPM
+
+Like nginx, PHP-FPM includes a socket-passing mechanism an environmental variable. In PHP-FPM's case, it's `FPM_SOCKETS`.
+
+This configuration is possible with any web server that supports FastCGI (like Apache, Lighttpd, or nginx). The web server does not need to know anything special about the socket; use a normal PHP-FPM configuration.
+
+Paths are based on a Fedora 19 system.
+
+### First, the configuration files
+
+**/etc/php-fpm.d/my-php-fpm-pool.conf**
+
+```
+[global]
+pid = /run/my-php-fpm-pool.pid ; Not really used by anything with daemonize = no, but needs to be writable.
+error_log = syslog ; Will aggregate to the service's systemd journal.
+daemonize = no ; systemd handles the forking.
+
+[www]
+listen = /var/run/my-php-fpm-pool.socket ; Must match systemd socket unit.
+user = nginx ; Ignored but required.
+group = nginx ; Ignored but required.
+pm = static
+pm.max_children = 10
+slowlog = syslog
+```
+
+
+**/etc/systemd/system/my-php-fpm-pool.service**
+
+```
+[Service]
+User=nginx
+Group=nginx
+Environment="FPM_SOCKETS=/var/run/my-php-fpm-pool.socket=3"
+ExecStart=/usr/sbin/php-fpm --fpm-config=/etc/php-fpm.d/my-php-fpm-pool.conf
+KillMode=process
+```
+
+
+**/etc/systemd/system/my-php-fpm-pool.socket**
+
+```
+[Socket]
+ListenStream=/var/run/my-php-fpm-pool.socket
+
+[Install]
+WantedBy=sockets.target
+```
+
+
+### Second, the setup commands
+
+```sh
+sudo systemctl --system daemon-reload
+sudo systemctl start my-php-fpm-pool.socket
+sudo systemctl enable my-php-fpm-pool.socket
+```
+
+
+After accessing the web server, the service should be running.
+
+```sh
+sudo systemctl status my-php-fpm-pool.service
+```
+
+
+It's possible to shut down the service and re-activate it using the web browser, too. It's necessary to stop and start the socket to reset some shutdown PHP-FPM does that otherwise breaks reactivation.
+
+```sh
+sudo systemctl stop my-php-fpm-pool.socket my-php-fpm-pool.service
+sudo systemctl start my-php-fpm-pool.socket
+```