Today I’m gonna write about PHP (php-fpm) installation from source codes. Yes, we know PHP is not compiled language but behind scene, when you are installing PHP you have to compile it like I’ll do.
But, this is not big deal. I’m serious. I will use CentOS (7.4.1153) for in this article.
Install some dependencies
You can install new updates with
yum update -y but I will just update my server repo packages with
yum makecache. In container system you have to that because you don’t want to see 1GB container size for small web application.
I have to download
libmcrypt-devel that’s why I will install epel-release with
yum install -y epel-release
and you will install those packages
yum install -y gcc gcc-c++ libxml2-devel pkgconfig openssl-devel bzip2-devel curl-devel libpng-devel libjpeg-devel libXpm-devel freetype-devel gmp-devel libmcrypt-devel mariadb-devel aspell-devel recode-devel autoconf bison re2c libicu-devel libwebp-devel libjpeg-turbo-devel freetype-devel libmcrypt-devel perl
If you are using composer (Package Dependency Manager, after version 1.6) you can check PHP extension requirements with this way.
after that you can install those extensions.
Let’s download source file
In this stage you can use wget but, I am using cURL because this is default for CentOS/RHEL system. Let’s download it.
curl -sSJOL "http://us3.php.net/distributions/php-7.1.13.tar.xz"
I usually download source files to /tmp folder. I recommend this way because you won’t use it again. Right?
mkdir /tmp/source mv php-7.1.13.tar.xz /tmp/source/php.tar.xz cd /tmp/source tar -xf php.tar.xz # we will decompress it without output rm -f php.tar.xz # we won't use it again mv php /usr/src/php # we will compile it over there (/usr/src/php) cd /usr/src/php
Now we will configure it right now with
./configure \ --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --with-config-file-scan-dir=/usr/local/php/etc/conf.d \ --enable-bcmath \ --with-bz2 \ --with-curl \ --enable-filter \ --enable-fpm \ --with-gd \ --enable-gd-native-ttf \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --enable-intl \ --enable-mbstring \ --with-mcrypt \ --enable-mysqlnd \ --with-mysql-sock=/var/lib/mysql/mysql.sock \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-pdo-sqlite \ --disable-phpdbg \ --disable-phpdbg-webhelper \ --enable-opcache \ --with-openssl \ --enable-simplexml \ --with-sqlite3 \ --enable-xmlreader \ --enable-xmlwriter \ --enable-zip \ --with-zlib \ --with-webp-dir \ --with-xpm-dir
Yess, first stage successful. If you got an error, you can google it. Most of error means you didn’t download right package (for dependencies). For example, if you wanted to use php-gd you have to download freetype-devel etc.
Second stage you compile it with
I’m gonna use this line
-j means worker also known as CPU cores. I am using i5-3320M physically 2 cores but you can see if you are run
nproc 4. That’s why I’m using nproc. It is to easy to use.
This process can take ten minutes or 1 minutes depends on your system/CPU
Test it (Optional)
If you are using for development machine it is not neceserly, but I’m doing for this stuff (testing) when I install to server. This is optional. It can take over then ten minutes
Now, system ready to install the php to /usr/local/php/
This tutorial not provide any security solution. You have to do that when you are install new server like iptable, directory owners or permissions…
You can use development configuration file (php.ini-development) or default production configuration file. I will use production configuration file.
Other lines of codes you have to do.
mkdir /usr/local/php/etc/conf.d cp /usr/src/php/php.ini-production /usr/local/php/lib/php.ini cp /usr/src/php/sapi/fpm/www.conf /usr/local/php/etc/php-fpm.d/www.conf cp /usr/src/php/sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf
When you are run it you will see PHP version 7.1.13.
If you have a problem/error let me know. I can help you about that. Contact with me with disqus.