Skip to content

Instantly share code, notes, and snippets.

@GhazanfarMir
Last active May 14, 2024 03:26
Show Gist options
  • Save GhazanfarMir/03bd1f1f770a3834d47274586d46ea62 to your computer and use it in GitHub Desktop.
Save GhazanfarMir/03bd1f1f770a3834d47274586d46ea62 to your computer and use it in GitHub Desktop.
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 status
# 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 <[email protected]>
# Original-Maintainer: Debian PHP Maintainers <[email protected]>
# 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
# Update packages after adding ppa
sudo apt update
# 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 <[email protected]>
# 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
@ermst4r
Copy link

ermst4r commented Aug 29, 2018

works! thanks!

@terrylinooo
Copy link

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

https://github.com/Proviscript/proviscript

@ultrasamad
Copy link

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

@yilmazerhakan
Copy link

Thanks

@Philoreiser
Copy link

Thanks! This note helps a lot.

@yrsunuwar-idnepal
Copy link

Thanks a lot

@dannycoulombe
Copy link

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
Copy link

JaysNV 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
Copy link

Great, thanks!

@flockast
Copy link

flockast 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
Copy link

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
Copy link

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
Copy link

hdushku commented Mar 12, 2019

Very useful, thank you

@Zingphoy
Copy link

great help!

@mohsin
Copy link

mohsin commented May 27, 2019

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

@mayurschavan
Copy link

Thanks Buddy, It helped me a lot.

@boon89
Copy link

boon89 commented Oct 4, 2019

thank so much

@esosam
Copy link

esosam commented Oct 6, 2019

this help I was able to make it work, thanks.

@esosam
Copy link

esosam commented Oct 6, 2019

This is my config laravel file in sites-enabled
server {
listen 80;
#listen [::]:80 ipv6only=on default_server;
root /var/www/html/MyTestProject/public;
index index.php index.html index.htm;
server_name _;

location / {
    try_files $uri $uri/ /index.php?$query_string;        
}


location ~ \.php$ {
     try_files $uri $uri/ /index.php?$query_string;
     fastcgi_split_path_info  ^(.+\.php)(/.+)$;
     fastcgi_index            index.php;
     fastcgi_pass             unix:/var/run/php/php7.2-fpm.sock;
     include                  fastcgi_params;
     fastcgi_param   PATH_INFO       $fastcgi_path_info;
     fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

}

@mackinven
Copy link

This is super useful. Big thanks.

@GhazanfarMir
Copy link
Author

This is super useful. Big thanks.

Glad it was useful 👍

@dosencode
Copy link

good job

@FoxRocks76
Copy link

I've spent the last two hours searching the web for this solution...thank you SO much for taking the time to write this!!

@yuriks2000
Copy link

Thank you! Really helped!

@rachanonpeasu
Copy link

Thanks you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment