How to install PHP, PHP-FPM in Alpine Linux?

PHP is a general purpose scripting language that is used mainly for web development, it is pragmatic, easy to learn and use, it is constantly evolving with a wide community of developers who are in charge of enriching this popular programming language with new features, therefore it is constantly evolving.

PHP 8.0 introduced modern features such as: Union Types, Named arguments, Match expressions, Just In Time Compilation.

PHP-FPM should be integrated with a web server such as Apache or NGINX, PHP-FPM serves dynamic content while the web server takes care of static content also acts as reverse proxy for PHP-FPM service.

Today we are going to install PHP 8.0 on Alpine Linux.

Reading you must check:

Install

PHP-FPM introduces the concept of pools, each pool can receive connections on a TPC/IP socket (IP:Port) or UNIX socket, and can run under a different user and group. Each pool has its configuration file.

Verify you have the community repository active.

https://ams.edge.kernel.org/alpine/v3.14/community

Proceed with the installation:

# apk add php8 php8-fpm
fetch https://ams.edge.kernel.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://ams.edge.kernel.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
(1/3) Installing php8-common (8.0.9-r0)
(2/3) Installing php8 (8.0.9-r0)
(3/3) Installing php8-fpm (8.0.9-r0)
Executing busybox-1.33.1-r3.trigger
OK: 303 MiB in 77 packages

Once the process is finished you can explore the default settings, here is a sample of the directory structure:

# tree  /etc/php8/
/etc/php8/
├── conf.d
├── php-fpm.conf
├── php-fpm.d
│   └── www.conf
└── php.ini

2 directories, 3 files

You can find out the value of the listen directive by running the command:

# grep 'listen =' -R /etc/php8/
/etc/php8/php-fpm.d/www.conf:listen = 127.0.0.1:9000

The community repository provides 2 versions of PHP: 7.4, 8.0 so we must create a symbolic link to the corresponding version

# ln -s /usr/bin/php8 /usr/bin/php

Show installed version

php -v
PHP 8.0.9 (cli) (built: Jul 30 2021 03:43:07) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.9, Copyright (c) Zend Technologies

Show installed modules

php -m
[PHP Modules]
Core
date
filter
hash
json
libxml
pcre
readline
Reflection
SPL
standard
zlib

[Zend Modules]

You can lists all modules available for installing with:

# apk search php8
php8-imap-8.0.9-r0
php8-ftp-8.0.9-r0
php8-pspell-8.0.9-r0
php8-phar-8.0.9-r0
...

To install additional modules, for example curl and mysqli run:

# apk add php8-curl php8-mysqli
(1/4) Installing php8-curl (8.0.9-r0)
(2/4) Installing php8-openssl (8.0.9-r0)
(3/4) Installing php8-mysqlnd (8.0.9-r0)
(4/4) Installing php8-mysqli (8.0.9-r0)
OK: 304 MiB in 81 packages

Manage the php-fpm8 service

In this part we will learn how to start, stop or restart the php-fpm8 service, using the OpenRC initialization system. OpenRC is the default init system in distributions like Gentoo and Alpine Linux.

Check status

# rc-service php-fpm8 status
 * status: stopped

Start

# rc-service php-fpm8 start
 * Caching service dependencies ...                     [ ok ]
 * Checking /etc/php8/php-fpm.conf ...
 * /run/php-fpm8: creating directory
 * Starting PHP FastCGI Process Manager ...             [ ok ]

Now you can check if the service started successfully:

rc-service php-fpm8 status
 * status: started

Start with the Operating System

Start automatically after a system reboot with:

# rc-update add php-fpm8 default
 * service php-fpm8 added to runlevel default

Reload the configurations

Every time you make a change to the configuration files, first verify the changes with:

# php-fpm8 -t
[31-Jul-2021 23:17:01] NOTICE: configuration file /etc/php8/php-fpm.conf test is successful

the reload the configurations:

# rc-service php-fpm8 reload
 * Reloading PHP FastCGI Process Manager ...    [ ok ]

Restart

# rc-service php-fpm8 restart
 * Stopping PHP FastCGI Process Manager ...        [ ok ]
 * Checking /etc/php8/php-fpm.conf ...
 * Starting PHP FastCGI Process Manager ...        [ ok ]

Stop

# rc-service php-fpm8 stop
 * Stopping PHP FastCGI Process Manager ...       [ ok ]

To integrate PHP-FPM and NGINX see: How to install NGINX on Alpine Linux?

YouTube video

1 thought on “How to install PHP, PHP-FPM in Alpine Linux?”

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.