0

I am trying to deploy a basic php page with html extension at Cloud Foundry, more precisely at Swisscom Application Cloud.

This is my only source file, located at ${APP_ROOT}/www/index.html

<html>
<?php
    phpinfo();
?>
</html>

My configuration files are as follows.

At .bp-config/options.json:

{
  "WEBDIR": "www",
  "PHP_VERSION": "{PHP_56_LATEST}",
  "WEB_SERVER": "httpd"
}

At .bp-config/httpd/httpd.conf:

ServerRoot "${HOME}/httpd"
Listen ${PORT}
ServerAdmin "${HTTPD_SERVER_ADMIN}"
ServerName sample-app.scapp.io
DocumentRoot "${HOME}/#{WEBDIR}"
Include conf/extra/httpd-modules.conf
Include conf/extra/httpd-mime.conf

The server name I am taking from the setup in the Swisscom App Cloud: enter image description here

At .bp-config/httpd/extra/httpd-modules.conf:

LoadModule mpm_event_module modules/mod_mpm_event.so

This seems to be required as per error logs, if not included.

At .bp-config/httpd/extra/httpd-mime.conf:

<IfModule mime_module>
    AddType application/x-httpd-php .php .htm .html
</IfModule>

The source code above can be accessed for convenience at this GitHub repo.

The instance can't be started but I can't find any descriptive error message. These are the logs from the Swisscom Application Cloud:

2017-05-19 12:56:26 [API/1] OUT Created app with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e
2017-05-19 12:56:28 [API/3] OUT Updated app with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e ({"route"=>"025e8337-7fd2-42c8-a325-d535af3db460", :verb=>"add", :relation=>"routes", :related_guid=>"025e8337-7fd2-42c8-a325-d535af3db460"})
2017-05-19 12:56:38 [API/1] OUT Updated app with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e ({"state"=>"STARTED"})
2017-05-19 12:56:38 [STG/0] OUT Downloading dotnet_core_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading nodejs_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading python_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading binary_buildpack...
2017-05-19 12:56:38 [STG/0] OUT Downloading go_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded nodejs_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading php_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded dotnet_core_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading java_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded binary_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading staticfile_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded python_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloading ruby_buildpack...
2017-05-19 12:56:39 [STG/0] OUT Downloaded go_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded java_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded php_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded staticfile_buildpack
2017-05-19 12:56:39 [STG/0] OUT Downloaded ruby_buildpack
2017-05-19 12:56:39 [STG/0] OUT Creating container
2017-05-19 12:56:39 [STG/0] OUT Successfully created container
2017-05-19 12:56:39 [STG/0] OUT Downloading app package...
2017-05-19 12:56:39 [STG/0] OUT Downloaded app package (1.5K)
2017-05-19 12:56:39 [STG/0] OUT Staging...
2017-05-19 12:56:41 [STG/0] OUT -------> Buildpack version 4.3.31
2017-05-19 12:56:41 [STG/0] OUT Installing HTTPD
2017-05-19 12:56:41 [STG/0] OUT HTTPD 2.4.25
2017-05-19 12:56:42 [STG/0] OUT Downloaded [file:///tmp/buildpacks/d16e91f150d8c31f69507a615bf75f08/dependencies/https___buildpacks.cloudfoundry.org_dependencies_httpd_httpd-2.4.25-linux-x64-bf8851c4.tgz] to [/tmp]
2017-05-19 12:56:42 [STG/0] OUT Installing PHP
2017-05-19 12:56:42 [STG/0] OUT PHP 5.6.30
2017-05-19 12:56:42 [STG/0] OUT Downloaded [file:///tmp/buildpacks/d16e91f150d8c31f69507a615bf75f08/dependencies/https___buildpacks.cloudfoundry.org_dependencies_php_php-5.6.30-linux-x64-13625eaa.tgz] to [/tmp]
2017-05-19 12:56:44 [STG/0] OUT Finished: [2017-05-19 10:56:44.679464]
2017-05-19 12:56:53 [STG/0] OUT Exit status 0
2017-05-19 12:56:53 [STG/0] OUT Staging complete
2017-05-19 12:56:53 [STG/0] OUT Uploading droplet, build artifacts cache...
2017-05-19 12:56:53 [STG/0] OUT Uploading droplet...
2017-05-19 12:56:53 [STG/0] OUT Uploading build artifacts cache...
2017-05-19 12:56:53 [STG/0] OUT Uploaded build artifacts cache (198B)
2017-05-19 12:57:01 [STG/0] OUT Uploaded droplet (55.3M)
2017-05-19 12:57:01 [STG/0] OUT Uploading complete
2017-05-19 12:57:01 [STG/0] OUT Destroying container
2017-05-19 12:57:02 [CELL/0] OUT Creating container
2017-05-19 12:57:02 [CELL/0] OUT Successfully created container
2017-05-19 12:57:04 [STG/0] OUT Successfully destroyed container
2017-05-19 12:57:06 [CELL/0] OUT Starting health monitoring of container
2017-05-19 12:57:07 [APP/PROC/WEB/0] OUT 10:57:07 php-fpm | [19-May-2017 10:57:07] NOTICE: fpm is running, pid 40
2017-05-19 12:57:07 [APP/PROC/WEB/0] OUT 10:57:07 php-fpm | [19-May-2017 10:57:07] NOTICE: ready to handle connections
2017-05-19 12:57:07 [APP/PROC/WEB/0] OUT Exit status 1
2017-05-19 12:57:07 [CELL/0] OUT Exit status 0
2017-05-19 12:57:07 [CELL/0] OUT Destroying container
2017-05-19 12:57:07 [API/3] OUT Process has crashed with type: "web"
2017-05-19 12:57:07 [API/3] OUT App instance exited with guid 383e1568-29e9-4ef5-9825-3e1248a85b8e payload: {"instance"=>"", "index"=>0, "reason"=>"CRASHED", "exit_description"=>"2 error(s) occurred:\n\n* 2 error(s) occurred:\n\n* Exited with status 1\n* cancelled\n* cancelled", "crash_count"=>1, "crash_timestamp"=>1495191427514377386, "version"=>"ede7276b-e0a6-467c-a86a-5c60f1c36021"}

I guess there must be other logs with further information about the crash but I don't know where to find them.

What is causing the crash and how can I fix it?

atineoSE
  • 3,597
  • 4
  • 27
  • 31

1 Answers1

2

I'm not sure about why your app is failing. My guess is that HTTPD doesn't like the configuration and it's exiting. There's no output from HTTPD in the log and you should see it starting up, like this.

Ex:

2017-05-20T08:26:18.76-0400 [APP/PROC/WEB/0] OUT 12:26:18 httpd   | [Sat May 20 12:26:18.741822 2017] [mpm_event:notice] [pid 103:tid 140440543442816] AH00489: Apache/2.4.25 (Unix) configured -- resuming normal operations
2017-05-20T08:26:18.77-0400 [APP/PROC/WEB/0] OUT 12:26:18 httpd   | [Sat May 20 12:26:18.741947 2017] [mpm_event:info] [pid 103:tid 140440543442816] AH00490: Server built: Dec 20 2016 22:27:46
2017-05-20T08:26:18.77-0400 [APP/PROC/WEB/0] OUT 12:26:18 httpd   | [Sat May 20 12:26:18.741961 2017] [core:notice] [pid 103:tid 140440543442816] AH00094: Command line: '/app/httpd/bin/httpd -f /home/vcap/app/httpd/conf/httpd.conf -D FOREGROUND'

If you want to have PHP-FPM process your HTML files you need to make a couple changes.

1.) In .bp-config/httpd/extra/httpd-php.conf, you need to either modify or append the <Directory "${HOME}/#{WEBDIR}"> block such that it sends .html files to PHP-FPM. If you don't, HTTPD is just going to serve them up or return a 404.

Ex: which sends both .php & .html

<Directory "${HOME}/#{WEBDIR}">
  <Files *.php>
      <If "-f %{REQUEST_FILENAME}"> # make sure the file exists so that if not, Apache will show its 404 page and not FPM
          SetHandler proxy:fcgi://#{PHP_FPM_LISTEN}
      </If>
  </Files>
  <Files *.html>
      <If "-f %{REQUEST_FILENAME}"> # make sure the file exists so that if not, Apache will show its 404 page and not FPM
          SetHandler proxy:fcgi://#{PHP_FPM_LISTEN}
      </If>
  </Files>
</Directory>

2.) You need to instruct PHP-FPM to process files with a .html extension. It does not by default because it is trying to prevent abuse through misconfiguration (i.e. prevents an attacker from evaluating a file with an unexpected extension).

To do this, you need to add the file .bp-config/php/fpm.d/php-process-html.conf (the php-process-html part doesn't matter, but the name needs to end with .conf). Inside it, you need to put the following:

[www]
security.limit_extensions = .php .html

This tells PHP-FPM to process both .php and .html files.

Note: this requires at least v4.3.32 of the PHP build pack, which is pretty new as of me writing this. If you're on an older version of the build pack, it's still possible but you need to provide a full custom php-fpm.conf configuration file instead of just overriding this one property and that file would go in .bp-config/php/php-fpm.conf. Take one of the php-fpm.conf files from here and use it as a base to get started if you are stuck on an older build pack.

Daniel Mikusa
  • 13,716
  • 1
  • 22
  • 28
  • I have copied the [whole default config](https://github.com/cloudfoundry/php-buildpack/tree/master/defaults/config) and that solved the crashing problem but I still can't apply your config successfully: `Got error 'Access to the script '/home/vcap/app/www/index.html' has been denied (see security.limit_extensions)`. Latest changes are [here](https://github.com/atineoSE/sample-php-app-cloudfoundry). – atineoSE May 21 '17 at 21:20
  • For the record, the php build pack version is 4.3.31, so I am using the approach to copy the whole `php-fpm.conf` file – atineoSE May 21 '17 at 21:21
  • You need to set `security.limit_extensions` as in the example above. The default file has it commented out, so uncomment it and set the list to `.php .html`. For what it's worth, don't include config files with your app that you're not overriding. This lets the build pack provide the defaults. I see you've got `php.ini` there as well. You just want the one file that you're overriding. – Daniel Mikusa May 22 '17 at 02:00
  • You might also consider using `cf push -b https://github.com/cloudfoundry/php-buildpack#v4.3.33`. As long as your CF installation has Internet access, it will download and use v4.3.33 which is the latest at the moment. Then you don't need to override the whole file and you can use the instructions above. – Daniel Mikusa May 22 '17 at 02:01
  • It worked! Thank you so much! For the record, this is what I did following your instructions. 1) Keep all the httpd default config, otherwise the container crashes with no meaningful error messages, 2) remove all other default config files, 3) apply the changes you indicated at `.bp-config/httpd/httpd.conf` and `.bp-config/php/fpm.d/php-process-html.conf` and 4) specify in the command line the 4.3.33 version of the php-buildpack as you indicated. The working version is available [here](https://github.com/atineoSE/sample-php-app-cloudfoundry). – atineoSE May 22 '17 at 20:52