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
@zainulhasan

This comment has been minimized.

Copy link

commented Mar 31, 2018

very useful.Thanks

@lucasdcrk

This comment has been minimized.

Copy link

commented Apr 3, 2018

Thanks!

@truelineinfotech

This comment has been minimized.

Copy link

commented Apr 24, 2018

works for me. thank you very much friend.

@jonasrafael

This comment has been minimized.

Copy link

commented May 17, 2018

amz! thanks!

@kiukishenkaec

This comment has been minimized.

Copy link

commented May 18, 2018

Спасибо!

@gotzmann

This comment has been minimized.

Copy link

commented May 30, 2018

The very best and actual summary I've ever read recently. Thanks!

@nawawishkid

This comment has been minimized.

Copy link

commented May 31, 2018

Thanks!

@gustihs

This comment has been minimized.

Copy link

commented Jun 2, 2018

Thanks!

@ahmeti

This comment has been minimized.

Copy link

commented Jun 2, 2018

Great!

@riteshjha

This comment has been minimized.

Copy link

commented Jun 25, 2018

Thank you very much

@gopalkriagg

This comment has been minimized.

Copy link

commented Jul 3, 2018

Very well written! Thank you!

@eSlider

This comment has been minimized.

Copy link

commented Jul 26, 2018

Thx! 👍

@berkayk

This comment has been minimized.

Copy link

commented Jul 27, 2018

Thanks for this snippet. After running sudo add-apt-repository ppa:ondrej/php command, I had to run sudo apt-get update to show the cache.

@rroslan

This comment has been minimized.

Copy link

commented Aug 10, 2018

I am using all the same version, default install for phpmyadmin, except to changes in the sockets in nginx default files. Still no go. The page just keeps reloading until it stops with a blank page. Be grateful if someone offers a solution.

@bullet64

This comment has been minimized.

Copy link

commented Aug 16, 2018

Thank you.

@gabrielinbuon

This comment has been minimized.

Copy link

commented Aug 22, 2018

Check status

sudo service nginx
should be
sudo service nginx status

@benjemen

This comment has been minimized.

Copy link

commented Aug 23, 2018

Had to run sudo apt-get install python-software-properties before, to install it on an AWS EC2 instance.

@ermst4r

This comment has been minimized.

Copy link

commented Aug 29, 2018

works! thanks!

@terrylinooo

This comment has been minimized.

Copy link

commented Aug 30, 2018

wget https://cdn.proviscript.sh/components/ubuntu_16.04/php-fpm.sh
./php-fpm.sh

https://github.com/Proviscript/proviscript

@ultrasamad

This comment has been minimized.

Copy link

commented Aug 30, 2018

Cool. You can add php-pgsql to the php modules to be installed as it's used quite often.

@yilmazerhakan

This comment has been minimized.

Copy link

commented Sep 19, 2018

Thanks

@Philoreiser

This comment has been minimized.

Copy link

commented Oct 18, 2018

Thanks! This note helps a lot.

@yrsunuwar-idnepal

This comment has been minimized.

Copy link

commented Nov 15, 2018

Thanks a lot

@dannycoulombe

This comment has been minimized.

Copy link

commented Nov 26, 2018

I am using all the same version, default install for phpmyadmin, except to changes in the sockets in nginx default files. Still no go. The page just keeps reloading until it stops with a blank page. Be grateful if someone offers a solution.

Same issue here. I'm using WSL.

@JaysNV

This comment has been minimized.

Copy link

commented Dec 12, 2018

It's what I searching for days,... finally I found this.
I successed install nginx and php7.2 on my raspbian jessie.
thanks for the instruction, very detailed.

@MikeRzhevsky

This comment has been minimized.

Copy link

commented Dec 26, 2018

Great, thanks!

@flockast

This comment has been minimized.

Copy link

commented Jan 13, 2019

I am using all the same version, default install for phpmyadmin, except to changes in the sockets in nginx default files. Still no go. The page just keeps reloading until it stops with a blank page. Be grateful if someone offers a solution.

Same issue here. I'm using WSL.

http {
...
fastcgi_buffering off;
...
}

success

@ahmetcelikezer

This comment has been minimized.

Copy link

commented Jan 26, 2019

Thanks, is the order of index important for executing the order? I just wrote "index index.php index.html" cause I want to execute .php first, if it exists in the folder and if it's not .html

@Splendorr

This comment has been minimized.

Copy link

commented Feb 7, 2019

I got stuck after line 56, because I had to run apt-get update after adding the new php source to see 7.2 in the list.

@hdushku

This comment has been minimized.

Copy link

commented Mar 12, 2019

Very useful, thank you

@Zingphoy

This comment has been minimized.

Copy link

commented May 15, 2019

great help!

@SaifurRahmanMohsin

This comment has been minimized.

Copy link

commented May 27, 2019

At L146, its "sites-available" and not "site-available".

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.