Sign inSign up

firehed/nginx-php-frontcontroller

By firehed

Updated about 8 years ago

Docker image for the Nginx half of a PHP web stack

Image
0

442

firehed/nginx-php-frontcontroller repository overview

Nginx PHP Front-Controller

This is a very basic image for a typical PHP "front controller" application.

Requirements

This image is meant to be put behind an SSL terminator of some kind. That can be done with some Ingress controllers, a LoadBalancer service pointing to some sort of webserver, or any number of other things. Be creative!

Your "public" code must live in a directory named public/. In a typical modern PHP application using the following directory structure, you may already be doing this:

root
 |- public/
 |   |- index.php
 |- src/
 |- vendor/

This forced structure is (more or less) a limitation of PHP-FPM, since it depends on the SCRIPT_FILENAME FastCGI parameter, which contains the full path to the file. You can probably work around this with some unpleasant symlinking magic, but it's not recommended or supported.

Usage

Use this as a base image, and copy your application's public assets across:

FROM firehed/nginx-php-frontcontroller
COPY public .

If you don't have any static assets, you may be able to just run this image directly; it will place an empty index.php file in the public directory by default. Nginx does not actually execute the contents of this file; it just detects the request and sends it to PHP-FPM.

Alongside this, build a "full" PHP-FPM image:

FROM php:7.1-fpm-alpine
COPY . .

Deployment

Kubernetes

Run both of the images created in the steps above in the same Pod:

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: www
spec:
  template:
    metadata:
      labels:
        app: www
    spec:
      containers:
        - image: your-www-image
          name: www
          ports:
            - containerPort: 80
              name: www
        - image: your-fpm-image
          name: fpm
          ports:
            - containerPort: 9000
              name: php-fpm

(env vars, secrets, etc. should only need to be loaded in the FPM image)

Other Environments

This should also work just fine with docker-compose, but as I'm not using it I don't have an example. Feel free to contribute one!

Notes

This image mirrors the Official PHP-FPM image's directory structure, serving out of /var/www/html.

Tag summary

Content type

Image

Digest

Size

8.4 MB

Last updated

about 8 years ago

docker pull firehed/nginx-php-frontcontroller