{"id":27160961,"url":"https://github.com/flownative/docker-beach-php","last_synced_at":"2026-03-03T08:02:39.042Z","repository":{"id":43338761,"uuid":"232306546","full_name":"flownative/docker-beach-php","owner":"flownative","description":"Docker image providing PHP-FPM for Flownative Beach and Local Beach","archived":false,"fork":false,"pushed_at":"2025-12-19T09:38:20.000Z","size":1834,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-12-22T03:26:12.489Z","etag":null,"topics":["beach","docker-image","php"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flownative.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["robertlemke","kdambekalns"]}},"created_at":"2020-01-07T11:03:36.000Z","updated_at":"2025-12-19T09:38:23.000Z","dependencies_parsed_at":"2023-11-23T15:28:31.742Z","dependency_job_id":"0983bd23-9055-4003-998f-b456c295015d","html_url":"https://github.com/flownative/docker-beach-php","commit_stats":null,"previous_names":[],"tags_count":106,"template":false,"template_full_name":null,"purl":"pkg:github/flownative/docker-beach-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flownative%2Fdocker-beach-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flownative%2Fdocker-beach-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flownative%2Fdocker-beach-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flownative%2Fdocker-beach-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flownative","download_url":"https://codeload.github.com/flownative/docker-beach-php/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flownative%2Fdocker-beach-php/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30036997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T06:58:30.252Z","status":"ssl_error","status_checked_at":"2026-03-03T06:58:15.329Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beach","docker-image","php"],"created_at":"2025-04-09T00:08:20.359Z","updated_at":"2026-03-03T08:02:39.012Z","avatar_url":"https://github.com/flownative.png","language":"Shell","funding_links":["https://github.com/sponsors/robertlemke","https://github.com/sponsors/kdambekalns"],"categories":[],"sub_categories":[],"readme":"# Beach PHP\n\n[![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)\n[![Maintenance level: Love](https://img.shields.io/badge/maintenance-%E2%99%A1%E2%99%A1%E2%99%A1-ff69b4.svg)](https://www.flownative.com/en/products/open-source.html)\n![](https://github.com/flownative/docker-beach-php/workflows/Build%20Docker%20Image/badge.svg)\n![](https://github.com/flownative/docker-beach-php/workflows/Daily%20Releases/badge.svg)\n\nA Docker image providing [PHP-FPM](https://www.php.net/) for Flownative\nBeach and Local Beach. Compared to other PHP images, this one is\ntailored to run without root privileges. All processes use an\nunprivileged user and much work has been put into providing proper\nconsole output and meaningful messages.\n\n![Screenshot with example log output](docs/beach-php-log-example.png\n\"Example log output\")\n\n## tl;dr\n\n```bash\n$ docker run flownative/beach-php\n```\n\n## Usage\n\nThis image can be used in two scenarios:\n\n- as a container as part of\n  [Local Beach](https://www.flownative.com/localbeach) or other Docker\n  Compose setup\n- as a container as part of [Beach](https://www.flownative.com/beach) in\n  a Kubernetes setup\n\nYou may be able to tweak this image to fit into other setups. Please\nmake sure you understand the internals of this image before you try to\ndo so.\n\n## Configuration\n\n### Logging\n\nBy default, the PHP logs are written to STDOUT / STDERR. That way, you\ncan follow logs by watching container logs with `docker logs` or using a\nsimilar mechanism in Kubernetes or your actual platform.\n\n## Environment variables\n\n### Flow\n\n| Variable Name                                   | Type    | Default                   | Description                                                                          |\n|:------------------------------------------------|:--------|:--------------------------|:-------------------------------------------------------------------------------------|\n| BEACH_APPLICATION_USER_SERVICE_ENABLE           | boolean | false                     | If user-defined services (beach-service*.sh) should be enabled                       |\n| BEACH_APPLICATION_STARTUP_SCRIPTS_ENABLE        | boolean | true                      | If standard startup scripts (doctrine migrate, resource publish etc.) should be run  |\n| BEACH_APPLICATION_CUSTOM_STARTUP_SCRIPTS_ENABLE | boolean | true                      | If custom startup scripts (beach-startup.sh) should be run                           |\n| BEACH_FLOW_BASE_CONTEXT                         | string  | Production                | Base context, either \"Development\" or \"Production\"                                   |\n| BEACH_FLOW_SUB_CONTEXT                          | string  | Instance                  | Sub context                                                                          |\n| BEACH_FLOW_CONTEXT                              | string  | Production/Beach/Instance | (read-only) The built Flow context; pattern: \"{…BASE_CONTEXT}/Beach/{…SUB_CONTEXT}\"  |\n| FLOW_CONTEXT                                    | string  |                           | The actual Flow context; default is BEACH_FLOW_CONTEXT                               |\n| BEACH_ENVIRONMENT_VARIABLES_ALLOW_LIST          | string  |                           | If set, only these environment variables are promoted to the \"beach\" user's shell    |\n| BEACH_CRON_ENABLE                               | boolean | false                     | If user-defined cron-jobs (beach-cron-hourly.sh) should be enabled                   |\n\n### SSHD\n\n| Variable Name                         | Type    | Default                                                         | Description                                           |\n|:--------------------------------------|:--------|:----------------------------------------------------------------|:------------------------------------------------------|\n| SSHD_ENABLE                           | boolean | false                                                           | If the SSH daemon should be enabled                   |\n| SSHD_BASE_PATH                        | string  | /opt/flownative/sshd                                            | Base path of SSHD (read-only)                         |\n| SSHD_HOST_KEYS_PATH                   | string  | /opt/flownative/sshd/etc                                        | Path where to store SSH host keys                     |\n| SSHD_AUTHORIZED_KEYS_SERVICE_ENDPOINT | string  | http://beach-controlpanel.beach-system.svc.cluster.local/api/v1 | URL of the Beach SSH authorized keys service endpoint |\n\n### PROMETHEUS METRICS\n\n| Variable Name                  | Type    | Default                             | Description                                                        |\n|:-------------------------------|:--------|:------------------------------------|:-------------------------------------------------------------------|\n| METRICS_PHP_FPM_ENABLE         | boolean | false                               | If PHP-FPM metrics should be exported                              |\n| METRICS_PHP_FPM_SCRAPE_URI     | string  | tcp://127.0.0.1:9000/php-fpm-status | FastCGI address pointing to the PHP-FPM status page                |\n| METRICS_PHP_FPM_LISTEN_ADDRESS | string  | 127.0.0.1:9002                      | Host and port the PHP-FPM exporter listens to for scraping metrics |\n| METRICS_PHP_FPM_TELEMETRY_PATH | string  | /metrics                            | Path at which PHP-FPM exporter listens to for scraping metrics     |\n\n### Blackfire\n\n| Variable Name                      | Type    | Default   | Description                                       |\n|:-----------------------------------|:--------|:----------|:--------------------------------------------------|\n| BEACH_ADDON_BLACKFIRE_ENABLE       | boolean | false     | Enables the Blackfire probe extension             |\n| BEACH_ADDON_BLACKFIRE_SERVER_ID    | string  |           | Server id to authenticate with Blackfire          |\n| BEACH_ADDON_BLACKFIRE_SERVER_TOKEN | string  |           | Server token to authenticate with Blackfire       |\n\n### Beach\n\n| Variable Name                    | Type    | Default   | Description                                       |\n|:---------------------------------|:--------|:----------|:--------------------------------------------------|\n| BEACH_INSTANCE_IDENTIFIER        | string  |           | The Beach instance identifier                     |\n| BEACH_INSTANCE_NAME              | string  |           | The Beach instance name                           |\n| BEACH_PROJECT_NAME               | string  |           | The Beach project name                            |\n\n### Sitemap Crawler\n\n| Variable Name                     | Type    | Default                           | Description                                                                      |\n|:----------------------------------|:--------|:----------------------------------|:---------------------------------------------------------------------------------|\n| SITEMAP_CRAWLER_ENABLE            | boolean | false                             | Enables the Sitemap Crawler                                                      |\n| SITEMAP_CRAWLER_SITEMAP_URL       | string  | http://localhost:8080/sitemap.xml | URL to retrieve the sitemap from; can be a comma separated list of multiple URLs |\n| SITEMAP_CRAWLER_INTERNAL_BASE_URL | string  | http://localhost:8080             | Internal base URL for crawling the site                                          |\n\n### Deprecated\n\nThese variables are handled for reasons of backwards-compatibility.\nPlease avoid using them, as they will be removed once Flownative Beach\nhas fully migrated to the new configuration options.\n\n| Variable Name          | Type   | Default | Description            |\n|:-----------------------|:-------|:--------|:-----------------------|\n| BEACH_PHP_TIMEZONE     | string |         | Sets PHP_DATE_TIMEZONE |\n| BEACH_PHP_MEMORY_LIMIT | string |         | Sets PHP_MEMORY_LIMIT  |\n\n## Included tools\n\nThis image provides a few tools to SSH user, so they have an easier time\ndebugging typical issues, such as connection problems or\nmisconfiguration.\n\nThe included tools are:\n\n| Name        | Command  | Description                                                  |\n|:------------|:---------|:-------------------------------------------------------------|\n| cURL        | curl     | Data transfer agent for HTTP(S), FTP and more                |\n| Ghostscript | gs       | Used for thumbnail rendering in Neos                         |\n| htop        | htop     | A text-mode interactive process viewer                       |\n| MariaDB     | mysql    | MySQL client, including tools like mysqldump and mysqlimport |\n| nano        | nano     | Text editor                                                  |\n| Netcat      | nc       | Universal TCP and UDP tool                                   |\n| vim         | vi / vim | Text editor                                                  |\n\n### Image optimization tools\n\nIn order to support image optimization for websites, the following tools\nare available:\n\n| Format | Commands                                                                                     |\n|:-------|:---------------------------------------------------------------------------------------------|\n| GIF    | gifsicle, gifdiff, gifview                                                                   |\n| PNG    | optipng, pngcrush, pngquant                                                                  |\n| JPEG   | jpegoptim, cjpeg, djpeg, exifautotran, jpegexiforient, jpegtran, rdjpgcom, tjbench, wrjpgcom |\n| WebP   | cwebp, dwebp, gif2webp, img2webp, vwebp, webpinfo, webpmux                                   |\n\n## Cron\n\nThis image contains a very simple and naïve implementation for running a\nscript on a regular basis. When the feature is enabled using the\nenvironment variable `BEACH_CRON_ENABLE`, a daemon will check if there's\na script called `/application/beach-cron-hourly.sh` and if it exists,\ncalls the script once every hour.\n\nSince this type of traditional cron-jobs does not fit very well into\ncontainer setups like Kubernetes, this feature is only a temporary\nsolution.\n\n## SSHD\n\nThis image contains SSHD, the [OpenSSH](https://www.openssh.com/) SSH\ndaemon. The configuration of the SSH server is tailored to [Flownative\nBeach](https://www.flownative.com/beach) and won't work with other\nenvironments out of the box.\n\nSSH support is disabled by default and can be enabled by setting the\nenvironment variable `SSHD_ENABLE` to `true`.\n\nIn order to run SSHD with an unprivileged user, the daemon is configured\nto listen on a non-privileged port (2022).\n\nSSHD is configured to use a custom authorized keys script which\nauthenticates connecting users. The script passes the Beach instance\nidentifier to a REST service specified in\n`SSHD_AUTHORIZED_KEYS_SERVICE_ENDPOINT` and receives a list of\nauthorized public keys in return. If the public key of the current\nclient can be found in that list, access is granted.\n\nOnly connections as user \"beach\" using public key authentication are\naccepted. Connections as \"root\" or with authentication via password are\nrejected.\n\n## Security aspects\n\nThis image is designed to run as a non-root container. Using an\nunprivileged user generally improves the security of an image, but may\nhave a few side-effects, especially when you try to debug something by\nlogging in to the container using `docker exec`.\n\nWhen you are running this image with Docker or in a Kubernetes context,\nyou can take advantage of the non-root approach by disallowing privilege\nescalation:\n\n```yaml\n$ docker run flownative/beach-php:8.3 --security-opt=no-new-privileges\n```\n\n## Building this image\n\nBuild this image with `docker build`. You need to specify the desired\nversion of `flownative/php`, which this image is derived from:\n\n```bash\ndocker build \\\n    --build-arg PHP_BASE_IMAGE=flownative/php:8.3.11 \\\n    -t flownative/beach-php:8.3.11 .\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflownative%2Fdocker-beach-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflownative%2Fdocker-beach-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflownative%2Fdocker-beach-php/lists"}