How to install PHP 7 on EC2 t2.micro Instance running Amazon Linux Distro
Asked Answered
P

14

40

I want to install the latest PHP 7.0 on an AWS EC2 T2.Micro Instance. So far I have read that currently AWS do not support PHP 7. But hey.. This is just a virtual server in the cloud with me having the full control over its configuration, so there must be some way to get PHP 7 running on this one.

Any help much appreciated.

My box is as below

$ cat /etc/*-release
---------------------------------------
NAME="Amazon Linux AMI"
VERSION="2015.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2015.09"
PRETTY_NAME="Amazon Linux AMI 2015.09"
ANSI_COLOR="0;33"
CPE_NAME="[*not significant*]"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2015.09

$ uname -a
---------------------------------------
Linux ip-xxx-xxx-xxx-xxx 4.1.13-18.26.amzn1.x86_64 #1 [date] x86_64 x86_64 x86_64 GNU/Linux

$ uname -mrs
---------------------------------------
Linux 4.1.13-18.26.amzn1.x86_64 x86_64

$ cat /proc/version
---------------------------------------
Linux version 4.1.13-18.26.amzn1.x86_64 (mockbuild@gobi-build-64010) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) )
Populace answered 19/1, 2016 at 9:59 Comment(1)
Any chance you could accept my answer? :)Sinclair
S
71

You can now use the official php7 packages. Here an easy to follow guide.

1. Install Apache 2.4 and PHP 7.0 on Amazon Linux AMI

# Remove current apache & php 
sudo yum remove httpd* php*

# Install Apache 2.4
sudo yum install httpd24

# Install PHP 7.0 
# automatically includes php70-cli php70-common php70-json php70-process php70-xml
sudo yum install php70

# Install additional commonly used php packages
sudo yum install php70-gd
sudo yum install php70-imap
sudo yum install php70-mbstring
sudo yum install php70-mysqlnd
sudo yum install php70-opcache
sudo yum install php70-pdo
sudo yum install php70-pecl-apcu

2. Modify DirectoryIndex to include index.php

sudo nano /etc/httpd/conf/httpd.conf

find this:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

and modify it to look like this:

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

If a directory contains an index.html and an index.php, the server will serve the index.html with this setup. If you do not want that to happen, you have the following options:

Reverse the order, so index.php is served when both files exist:

 <IfModule dir_module>
    DirectoryIndex index.php index.html
 </IfModule>

Only use index.php as the DirectoryIndex:

<IfModule dir_module>
    DirectoryIndex index.php
</IfModule>

3. Start the Apache web server

sudo service httpd start

4. Configure the Apache web server to start at each system boot

sudo chkconfig httpd on

5. Test your installation

Create phpinfo.php:

echo '<?php print phpinfo();' | sudo tee --append /var/www/html/phpinfo.php

Open your browser and enter your instance's public IP in the address bar followed by /phpinfo.php

Example: http://xxx.xxx.xxx.xxx/phpinfo.php

Note: Don't forget to allow incoming connections for HTTP (port 80) in the Security Groups of your instance, else your request will time out.

Sinclair answered 14/11, 2016 at 3:21 Comment(6)
No, ?> is only required, if you add further html code after the PHP code. One reason I never end a file containing php with ?> is that it won't add accidental empty lines to the final html.Sinclair
I was wondering about that because I was having issues getting phpinfo() to work. It turned out that I had to re-install Apache and PHP 7. Thanks!Thrasher
Hello guys, em getting his error: No package httpd24 available.Goerke
After running these commands, I had to do yum remove php5* to force remove it and only then everything started to work. Otherwise yum remove php* was not removing it, causing no php to work.Coagulate
Worked great. FYI you can use php71 now.Benioff
Thanks, worked like charm :). Yes, do yum remove php7* instead of php*Rozellarozelle
H
34

I got this running on my instance. You need http2.2 for it to work with the webtatic repo. I had so many repos there were a bunch of different version incompatibilities. I didn't keep great notes but looking at my history I basically did this:

# Remove current php & apache
sudo service httpd stop
sudo yum remove httpd* php* 

# Remove any third party repos that aren't relevant
sudo yum repolist
sudo yum remove remi-safe

# Install Standard Apache for Amazon AMI
sudo yum install httpd   #specify http22 if you get a different version

# Download webtatic
mkdir -p /tmp/php7
cd /tmp/php7
wget https://mirror.webtatic.com/yum/el6/latest.rpm

# Install webtatic repo
sudo yum install latest.rpm
sudo vi /etc/yum.repos.d/webtatic.repo  'set repo enables
sudo yum clean all

# Install base php7
sudo yum install --enablerepo=webtatic php70w
php -v   #Should say something like  PHP 7.0.2 (cli) (built: Jan  9 2016 16:09:32) ( NTS )
sudo yum install php70w-opcache
sudo yum install php70w-xml
sudo yum install php70w-pdo
sudo yum install php70w-mysqlnd
sudo yum install php70w-gd
sudo yum install php70w-apcu
sudo yum install php70w-pecl-apcu
sudo yum install php70w-mbstring
sudo yum install php70w-imap

# Restart apache
sudo service httpd restart
Henleyonthames answered 7/2, 2016 at 19:58 Comment(1)
This answer works great doing this after I used CloudFormation to quickly get a site up for a php7 testing platform. The other answers did not work in my case, but rather they caused apache (httpd) to not see php at all.Heiney
Z
32

Current answer to problem (not original version in question) - worth knowing since this is a bit simpler and php7 isn't available in the standard repos for Amazon Linux 2, and this didn't come up until I searched a bit harder:

amazon-linux-extras install php7.2

The version of extras can be checked with a list command if v7.2 is no longer current:

amazon-linux-extras list
Zealous answered 4/6, 2018 at 3:41 Comment(0)
V
13

There are now official php7 packages for aws linux as of July 14, 2016. See the announcement at https://forums.aws.amazon.com/ann.jspa?annID=3902

To list available packages, run yum list php70*

Vet answered 19/7, 2016 at 13:28 Comment(1)
For me it seamed to work after I enabled the "amzn-updates" repo in yumTitleholder
O
10

The other answers seem to only work with Apache 2.2 but not 2.4.

Here's how I installed php7 on Amazon Linux running Apache 2.4:

First, if php is already installed, then remove it:

sudo yum remove php5*

Take note of the php5 packages that are being removed as you'll need to install the php7 versions of them. The php7 package names have a fairly direct and unambiguous mapping from their php5 counterparts as you'll see below. The rest of the instructions cover a classic LAMP stack and may be sufficient for your use-case.

Using instructions from http://www.spidersoft.com.au/2015/php-7-on-ami-linux-ec2/

wget http://mirrors.mediatemple.net/remi/enterprise/remi-release-6.rpm
sudo yum install remi-release-6.rpm

edit /etc/yum.repos.d/epel.repo and set enabled=1

sudo yum upgrade -y
sudo yum install php70 php70-php-fpm php70-php-xml php70-php-pdo php70-php-mysqlnd php70-php-gd php70-php-pecl-apcu php70-php-mbstring php70-php-mcrypt php70-php-opcache

Now you should have php70-php-fpm installed, which you can use in conjunction with apache:

Start the fpm daemon:

sudo service php70-php-fpm start

Switch Apache from prefork to mpm event worker (this is required because mod_php isn't thread safe) in /etc/httpd/conf.modules.d/00-mpm.conf:

LoadModule mpm_event_module modules/mod_mpm_event.so

Instruct apache to pass all php requests to php-fpm by adding the following lines in /etc/httpd/conf/httpd.conf

<FilesMatch \.php$>
         SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
DirectoryIndex /index.php index.php

Restart apache using sudo service httpd restart. If everything went ok you should be able to verify the installation by requesting a php file containing phpinfo().

If you have existing shell scripts that use php's cli interpreter and thus start with #!/usr/bin/php, you have to set up a symlink to /usr/bin/php since the binary is now named /usr/bin/php70. You can do this as follows:

sudo ln -s /usr/bin/php70 /usr/bin/php

For more info on how to configure php-fpm see https://wiki.apache.org/httpd/PHP-FPM

Ovoid answered 13/2, 2016 at 17:30 Comment(1)
Small notices: use "service php70-php-fpm ..." command instead. ProxyPassMatch works with Apache 2.2 (with mod_proxy_fcgi in EPEL), and Apache 2.4, but with the latest, it's simpler to use SetHandler to proxy.Rebane
S
10

I was installing PHP 7.0 on a production box that already has apache 2.4 and PHP 5.5. I wanted to install PHP 7.0 alongside it in a way that would have no Server outage. This is what I did.

# Install PHP 7.0 
# automatically includes php70-cli php70-common php70-json php70-process php70-xml
sudo yum install php70

# Install additional commonly used php packages
sudo yum install php70-gd
sudo yum install php70-imap
sudo yum install php70-mbstring
sudo yum install php70-mysqlnd
sudo yum install php70-opcache
sudo yum install php70-pecl-apcu

This happily installed PHP 7 alongside PHP 5.5. The trick was to tell apache to use 7.0. I'm not sure if this was the best way, but I achieved this by changing these 2 permalinks:

ln -sf /etc/httpd/conf.d/php-conf.7.0 /etc/alternatives/php.conf
ln -sf /etc/httpd/conf.modules.d/15-php-conf.7.0 /etc/alternatives/10-php.conf

At this point apache is still happily running 5.5. Then when you restart apache it should be working with 7.0 (maybe 7.0.1). This is the no downtime way. I'd still recommend doing what I did, which is to rebuild PROD on another instance (create a TEST server) and test it all once before actually doing it on PROD. Good luck!

Oh, and right now the php command will still run 5.5. You can either change any scripts or CRON jobs to point to php7 or change the default version by running

alternatives --config php
Sake answered 8/2, 2017 at 11:4 Comment(2)
These steps can also be followed for upgrading to 7.1 (which is now available) by changing any php70 to php71 (7.0 to 7.1)Sake
Thanks. Worked like a charm for php72.Fibrinous
D
4

It's simple. Just:

sudo amazon-linux-extras install -y php7.2
Dud answered 21/3, 2019 at 8:36 Comment(0)
M
3

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html

can follow this step-by-step guide for LAMP installation

sudo yum update -y

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

sudo service httpd start
Mazur answered 3/7, 2017 at 2:51 Comment(1)
Loaded plugins: langpacks, update-motd No package httpd24 available. No package php70 available. No package mysql56-server available. No package php70-mysqlnd available.Goerke
Z
2

If you want a quick copy-paste install:

wget http://mirrors.mediatemple.net/remi/enterprise/remi-release-6.rpm
sudo yum install -y remi-release-6.rpm
sudo yum update -y
sudo yum install -y --enablerepo=epel php70

Test with:

php70 -v

And if you want the executable to be php:

ln -s /usr/bin/php70 /usr/local/bin/php 
php -v
Zoe answered 18/5, 2016 at 13:27 Comment(1)
For me, Apache is not executing PHP, it shows phpcodeInedible
M
2

This thread helped me get close enough to finish it off, I'm sharing the commands and output that worked for me.

On Amazon Lightsail with Amazon Linux (amzn1.x86_64), the following command list helped me rid the system of Apache 2.2 and PHP 5.3 to get to Apache 2.4 and PHP:

  1. Remove the current version of php and related tools:

sudo yum remove php*

==============================================================================================================================================
Package                           Arch                        Version                                  Repository                       Size
==============================================================================================================================================
Removing:
 php                               x86_64                      5.3.29-1.8.amzn1                         @amzn-main                      7.4 M
 php-cli                           x86_64                      5.3.29-1.8.amzn1                         @amzn-main                      6.4 M
 php-common                        x86_64                      5.3.29-1.8.amzn1                         @amzn-main                      6.3 M
 php-devel                         x86_64                      5.3.29-1.8.amzn1                         @amzn-main                      9.9 M
 php-gd                            x86_64                      5.3.29-1.8.amzn1                         @amzn-main                      669 k
 php-mbstring                      x86_64                      5.3.29-1.8.amzn1                         @amzn-main                      4.1 M
 php-mcrypt                        x86_64                      5.3.29-1.8.amzn1                         @amzn-main                       92 k
 php-mysql                         x86_64                      5.3.29-1.8.amzn1                         @amzn-main                      445 k
 php-pdo                           x86_64                      5.3.29-1.8.amzn1                         @amzn-main                      381 k
 php-xml                           x86_64                      5.3.29-1.8.amzn1                         @amzn-main                      625 k

Transaction Summary
==============================================================================================================================================
Remove  10 Packages
  1. Remove the current version of Apache (note you should backup your conf and conf.d folder before doing this, imho; in my case, it was a new system setup so there was nothing of interest there):

sudo yum remove http*

==============================================================================================================================================
 Package                           Arch                         Version                                Repository                        Size
==============================================================================================================================================
Removing:
 httpd                             x86_64                       2.2.31-1.8.amzn1                       @amzn-main                       3.0 M
 httpd-devel                       x86_64                       2.2.31-1.8.amzn1                       @amzn-main                       534 k
 httpd-tools                       x86_64                       2.2.31-1.8.amzn1                       @amzn-main                       135 k

Transaction Summary
==============================================================================================================================================
Remove  3 Packages
  1. Install Apache 2.4 (and start Apache)

sudo yum install httpd24.x86_64

sudo service httpd start

  1. Install PHP 7

sudo yum install php70

==============================================================================================================================================
 Package                           Arch                       Version                                  Repository                        Size
==============================================================================================================================================
Installing:
 php70                             x86_64                     7.0.13-1.19.amzn1                        amzn-updates                     3.3 M
Installing for dependencies:
 php70-cli                         x86_64                     7.0.13-1.19.amzn1                        amzn-updates                     4.7 M
 php70-common                      x86_64                     7.0.13-1.19.amzn1                        amzn-updates                     1.2 M
 php70-json                        x86_64                     7.0.13-1.19.amzn1                        amzn-updates                      65 k
 php70-process                     x86_64                     7.0.13-1.19.amzn1                        amzn-updates                      79 k
 php70-xml                         x86_64                     7.0.13-1.19.amzn1                        amzn-updates                     309 k

Transaction Summary
==============================================================================================================================================
Install  1 Package (+5 Dependent packages)

Total download size: 9.6 M
Installed size: 31 M
Is this ok [y/d/N]: y
Downloading packages:
(1/6): php70-7.0.13-1.19.amzn1.x86_64.rpm                                                                              | 3.3 MB     00:00
(2/6): php70-cli-7.0.13-1.19.amzn1.x86_64.rpm                                                                          | 4.7 MB     00:00
(3/6): php70-common-7.0.13-1.19.amzn1.x86_64.rpm                                                                       | 1.2 MB     00:00
(4/6): php70-json-7.0.13-1.19.amzn1.x86_64.rpm                                                                         |  65 kB     00:00
(5/6): php70-process-7.0.13-1.19.amzn1.x86_64.rpm                                                                      |  79 kB     00:00
(6/6): php70-xml-7.0.13-1.19.amzn1.x86_64.rpm                                                                          | 309 kB     00:00
----------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                          14 MB/s | 9.6 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : php70-json-7.0.13-1.19.amzn1.x86_64                                                                                        1/6
  Installing : php70-process-7.0.13-1.19.amzn1.x86_64                                                                                     2/6
  Installing : php70-xml-7.0.13-1.19.amzn1.x86_64                                                                                         3/6
  Installing : php70-cli-7.0.13-1.19.amzn1.x86_64                                                                                         4/6
  Installing : php70-common-7.0.13-1.19.amzn1.x86_64                                                                                      5/6
  Installing : php70-7.0.13-1.19.amzn1.x86_64                                                                                             6/6
  Verifying  : php70-7.0.13-1.19.amzn1.x86_64                                                                                             1/6
  Verifying  : php70-common-7.0.13-1.19.amzn1.x86_64                                                                                      2/6
  Verifying  : php70-json-7.0.13-1.19.amzn1.x86_64                                                                                        3/6
  Verifying  : php70-process-7.0.13-1.19.amzn1.x86_64                                                                                     4/6
  Verifying  : php70-xml-7.0.13-1.19.amzn1.x86_64                                                                                         5/6
  Verifying  : php70-cli-7.0.13-1.19.amzn1.x86_64                                                                                         6/6

Installed:
  php70.x86_64 0:7.0.13-1.19.amzn1

Dependency Installed:
  php70-cli.x86_64 0:7.0.13-1.19.amzn1            php70-common.x86_64 0:7.0.13-1.19.amzn1        php70-json.x86_64 0:7.0.13-1.19.amzn1
  php70-process.x86_64 0:7.0.13-1.19.amzn1        php70-xml.x86_64 0:7.0.13-1.19.amzn1

Complete!
Mauk answered 19/1, 2017 at 1:31 Comment(2)
i'd make this because I like run only official repositories.Batiste
it does not let php execute by ApacheInedible
T
1

The php 7 package name is php70w. So what you can do is, install a Webtatic repo on you linux machine and install it from there.

rpm -ivh https://mirror.webtatic.com/yum/el6/latest.rpm
yum clean all
yum install --enablerepo=webtatic php70w
Trella answered 19/1, 2016 at 11:4 Comment(4)
I tried that one. It gives me this... --> Finished Dependency Resolution Error: Package: php70w-7.0.2-1.w7.x86_64 (webtatic) Requires: httpd-mmn = 20120211x8664 Installed: httpd-2.2.31-1.6.amzn1.x86_64 (@amzn-main) httpd-mmn = 20051115 Available: httpd24-2.4.16-1.62.amzn1.x86_64 (amzn-main) httpd-mmn = 20120211x86-64 httpd-mmn = 20120211 Available: httpd24-2.4.16-1.63.amzn1.x86_64 (amzn-updates) httpd-mmn = 20120211x86-64 httpd-mmn = 20120211Populace
Now these are some dependencies error that you have to install manually. Check the package version and configureTrella
@Siddharthsharma I tried this, it worked for apache but on CLI it says php not foundInedible
what is the output of ls -l $(which php)Trella
E
1

By default, just few Yum Repo is enabled on RedHat EC2. To enable all, just type

yum-config-manager --enable rhui-REGION-rhel-*

and do a yum list now, you should be able to see this:

yum list |grep php7

Embree answered 23/10, 2018 at 22:49 Comment(0)
T
0

Several answers should work here; however, when I was installing mine, it would not render pages and would display text instead of rendered PHP.

To fix that, I ran

sudo yum install php70-php-fpm

After that, everything started working.

Thrasher answered 9/12, 2016 at 21:22 Comment(0)
B
0

Here is how I installed PHP 7.1 on Amazon Linux:

wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm
yum-config-manager --enable remi-php71

wget ftp://195.220.108.108/linux/epel/6/x86_64/Packages/s/scl-utils-20120229-1.el6.x86_64.rpm
rpm -Uvh scl-utils-20120229-1.el6.x86_64.rpm 

yum install php71

https://gist.github.com/ihor/581d169886c29e7e17d01b0041167b01

Bachelorism answered 2/3, 2017 at 19:16 Comment(3)
"php71" is the SCL available in "remi-safe", you only need to enable the "remi-php71" repository if you want the base packages. See rpms.remirepo.net/wizardRebane
Right, haven't noticed that. The problem was that for some reason I couldn't install scl-utils from the available repos.Bachelorism
wget ftp://195.220.108.108/linux/epel/6/x86_64/scl-utils-20120229-1.el6.x86_64.rpm should be changed to wget ftp://195.220.108.108/linux/epel/6/x86_64/Packages/s/scl-utils-20120229-1.el6.x86_64.rpmWhitish

© 2022 - 2024 — McMap. All rights reserved.