Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Install PHP7.2 NGINX and PHP7.2-FPM on Ubuntu 16.04
########## Install NGINX ##############
# Install software-properties-common package to give us add-apt-repository package
sudo apt-get install -y software-properties-common
# Install latest nginx version from community maintained ppa
sudo add-apt-repository ppa:nginx/stable
# Update packages after adding ppa
sudo apt-get update
# Install nginx
sudo apt-get install -y nginx
# Check status
sudo service nginx
# Start nginx if it is not already running
sudo service nginx start
# At this point you should have NGINX up and running, open http://localhost on your
# browser and you should see a welcome page from NGINX
######### Install PHP7.2 and PHP7.2-FPM ################
# check what is the latest PHP version supplied by UBUNTU
sudo apt-cache show php
# You should get something like below where 'Version' would tell us the latest version available in my case is 7.0
# Package: php
# Architecture: all
# Version: 1:7.0+35ubuntu6.1
# Priority: optional
# Section: php
# Source: php-defaults (35ubuntu6.1)
# Origin: Ubuntu
# Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
# Original-Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
# Bugs: https://bugs.launchpad.net/ubuntu/+filebug
# Installed-Size: 11
# Depends: php7.0
# Filename: pool/main/p/php-defaults/php_7.0+35ubuntu6.1_all.deb
# Size: 2862
# MD5sum: c5db88de62d1dcb9679e9ae328d7c94a
# SHA1: 49d3f1d1850ac867fedf6fbc5635c33227dfde53
# SHA256: 0b1ccf22b958163669e677d6f660888eec7951d6eda3ae0f49a8e3409773cd87
# Description: server-side, HTML-embedded scripting language (default)
# Description-md5: b955c03ceec2872c327e77278c943d6a
# Phased-Update-Percentage: 90
# Supported: 5y
# Add Repository which gives us the latest php version 7.2
sudo add-apt-repository ppa:ondrej/php
# Lets now check what is the latest PHP version available now after the repository is added
sudo apt-cache show php
# You should now get something like below and notice the latest version is changed i.e Version: 1:7.2+60+ubuntu16.04.1+deb.sury.org+1
# Package: php
# Source: php-defaults (60+ubuntu16.04.1+deb.sury.org+1)
# Priority: optional
# Section: php
# Installed-Size: 12
# Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
# Architecture: all
# Version: 1:7.2+60+ubuntu16.04.1+deb.sury.org+1
# Depends: php7.2
# Filename: pool/main/p/php-defaults/php_7.2+60+ubuntu16.04.1+deb.sury.org+1_all.deb
# Size: 5654
# MD5sum: 1089c40cb9763d667b1ba2bfb0b6b2c4
# SHA1: d34c619a14854708f43ae432daf5fe5e73737072
# SHA256: 6b2b24f7232f980818a688f66fd3f9759ac9d1eb0466dee30faa5b2f4c2b36df
# Description: server-side, HTML-embedded scripting language (default)
# Description-md5: 2ccdfdb6b598dc9bdf5572917b808dcb
# Lets now install php7.2 and some important modules which we will need.
sudo apt-get install php7.2-cli php7.2-fpm php7.2-curl php7.2-gd php7.2-mysql php7.2-mbstring zip unzip
# Some modules require you to authenticate installation and prompt you for some information such as:
# Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list
# of cities, representing the time zones in which they are located.
# 1. Africa 3. Antarctica 5. Arctic 7. Atlantic 9. Indian 11. SystemV 13. Etc
# 2. America 4. Australia 6. Asia 8. Europe 10. Pacific 12. US
# Geographic area: 8
# Please select the city or region corresponding to your time zone.
# 1. Amsterdam 9. Brussels 17. Guernsey 25. Lisbon 33. Monaco 41. Rome 49. Stockholm 57. Vienna
# 2. Andorra 10. Bucharest 18. Helsinki 26. Ljubljana 34. Moscow 42. Samara 50. Tallinn 58. Vilnius
# 3. Astrakhan 11. Budapest 19. Isle_of_Man 27. London 35. Nicosia 43. San_Marino 51. Tirane 59. Volgograd
# 4. Athens 12. Busingen 20. Istanbul 28. Luxembourg 36. Oslo 44. Sarajevo 52. Tiraspol 60. Warsaw
# 5. Belfast 13. Chisinau 21. Jersey 29. Madrid 37. Paris 45. Saratov 53. Ulyanovsk 61. Zagreb
# 6. Belgrade 14. Copenhagen 22. Kaliningrad 30. Malta 38. Podgorica 46. Simferopol 54. Uzhgorod 62. Zaporozhye
# 7. Berlin 15. Dublin 23. Kiev 31. Mariehamn 39. Prague 47. Skopje 55. Vaduz 63. Zurich
# 8. Bratislava 16. Gibraltar 24. Kirov 32. Minsk 40. Riga 48. Sofia 56. Vatican
# Time zone: 27
# Once done all basic modules will be installed now, lets check the version now
php -v
# PHP 7.2.2-3+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Feb 6 2018 16:11:23) ( NTS )
# Copyright (c) 1997-2018 The PHP Group
# Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
# with Zend OPcache v7.2.2-3+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
# Lets also check if the PHP7.2-FPM is running, if not start it
sudo service php7.2-fpm status
sudo service php7.2-fpm start # (if the service isn't running already)
# Now we need to configure the Gateway so that PHP-FPM uses the UNIX socket for executing PHP files.
# For this we need to check where is the PHP7.2-fpm service running from and where are their configurations stored
sudo ps aux | grep php # (this will list php process)
# You will see the output something like below depending on how many processes are running
# root 13122 0.0 0.0 412040 14752 ? Ss 12:17 0:00 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
# www-data 13123 0.0 0.0 412040 8424 ? S 12:17 0:00 php-fpm: pool www
# www-data 13124 0.0 0.0 412040 8424 ? S 12:17 0:00 php-fpm: pool www
# root 13126 0.0 0.0 11288 868 pts/1 S+ 12:17 0:00 grep --color=auto php
# You will see the php-fpm master process is its location as /etc/php/7.2/fpm/php-fpm.conf. We now need to check the socket details
# from the PHP7.2-fpm by view this file.
vim /etc/php/7.2/fpm/php-fpm.conf
# You will see at the end of the file something like 'include=/etc/php/7.2/fpm/pool.d/*.conf' which means this process manager is using configurations from
# the pool.d directory. When viewing the /etc/php/7.2/fpm/pool.d/www.conf you will see that the PHP7.2-fpm (process manager) is
# listening to the socket at 'listen = /run/php/php7.2-fpm.sock'
# Copy the socket location i.e. /run/php/php7.2-fpm.sock and we will use this socket to tell nginx to use this socket
vim /etc/nginx/site-available/default
# You will need to tell NGINX to process the index.php files as well so replace the following line
# index index.html index.htm index.nginx-debian.html;
# to
# index index.html index.htm index.php;
# Also you will see something like the following block for 'location'
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
# Make changes so to the above block so you have the following one:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# Note we have uncommented the location, and fastcgi_pass lines and also pasted the correct socket that
# is used by our php7.2-fpm (process manager)
# lets now restart both nginx and php7.2-fpm
sudo service nginx reload
sudo service php7.2-fpm restart
# Now lets create a index.php file within the document root i.e. root /var/www/html;
touch /var/www/html/index.php
# and put phpinfo() and save it.
# now open http://localhost and you should see the screen with all php informaiton
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.