mirror of
https://github.com/devilbox/docker-php-fpm.git
synced 2025-12-14 04:51:15 +00:00
Add documentation directory
This commit is contained in:
@@ -1,195 +0,0 @@
|
||||
# Extension definition: `build.yml`
|
||||
|
||||
|
||||
## Top level defines
|
||||
|
||||
| Yaml key | Description |
|
||||
|-----------------|-------------|
|
||||
| `already_avail` | Array of PHP versions for which we don't have to install the module as it is already present via its FROM image. |
|
||||
| `all` | Is generic for all PHP versions and will be used whenever no specific version is defined. |
|
||||
| `7.2` | A version specific block for PHP 7.2. Its child keys will overwrite what has been defined in `all`. |
|
||||
|
||||
**Example:** Using `already_avail`
|
||||
```yaml
|
||||
# "{{ php_all_versions }}" Jinja2 variable is available and
|
||||
# translates to an array of all available PHP versions.
|
||||
already_avail: "{{ php_all_versions }}"
|
||||
```
|
||||
|
||||
**Example:** Overwriting `git_ref` for a specific version
|
||||
```yaml
|
||||
already_avail: [5.2]
|
||||
all:
|
||||
type: git
|
||||
git_url: https://github.com/phalcon/cphalcon
|
||||
git_ref: master
|
||||
# PHP 8.1 is using a different git_ref
|
||||
8.1:
|
||||
git_ref: v1.0.0
|
||||
# PHP 8.0 is using a different git_ref dynamically with latest tag found
|
||||
# See the usage of supported shell code
|
||||
8.0:
|
||||
git_ref: $( git tag | sort -V | tail -1 )
|
||||
```
|
||||
|
||||
|
||||
## Second level defines
|
||||
|
||||
The following keys can be added below: `all`, `8.2`, `8.1`, `8.0`, `7.4`, ...
|
||||
|
||||
| Yaml key | Required | Supports<br/>Shell code | Description |
|
||||
|-------------|----------|-------------------------|-------------|
|
||||
| `pre` | No | Yes | Specify a shell command to be run before module installation. |
|
||||
| `post` | No | Yes | Specify a shell command to be run after module installation. |
|
||||
| `build_dep` | No | No | Array Debian packages required to build the module (they won't be present in the final image - only used to built the module) If you don't need any, assign it an empty array: `build_dep: []`. |
|
||||
| `run_dep` | No | No | Array Debian packages required for the module run-time (they won't be present during the build stage - only in the final image). If you don't need any, assign it an empty array: `run_dep: []`. |
|
||||
| `type` | **Yes** | No | On of the following types to build the module: `builtin`, `pecl`, `git`, `custom`. |
|
||||
|
||||
**Example:**
|
||||
```yaml
|
||||
all:
|
||||
type: builtin
|
||||
pre: |
|
||||
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE))" \
|
||||
post: |
|
||||
rm -f /tmp/file.txt \
|
||||
build_dep: [libmcrypt-dev]
|
||||
run_dep: [libmcrypt4]
|
||||
8.1:
|
||||
type: builtin
|
||||
build_dep: []
|
||||
run_dep: []
|
||||
```
|
||||
|
||||
|
||||
## Second level defines for `type: builtin`
|
||||
|
||||
| Yaml key | Required | Supports<br/>Shell code | Description |
|
||||
|-------------|----------|-------------------------|-------------|
|
||||
| `configure` | No | Yes | Add `./configure` arguments. E.g.:<br/> `configure: --with-jpeg --with-png` |
|
||||
|
||||
**Example:**
|
||||
```yaml
|
||||
all:
|
||||
type: builtin
|
||||
8.1:
|
||||
type: builtin
|
||||
configure: --with-jpeg --with-png
|
||||
8.0:
|
||||
type: builtin
|
||||
configure: --with-jpeg
|
||||
```
|
||||
|
||||
|
||||
## Second level defines for `type: pecl`
|
||||
|
||||
| Yaml key | Required | Supports<br/>Shell code | Description |
|
||||
|-------------|----------|-------------------------|-------------|
|
||||
| `version` | No | Yes | Pecl packet version |
|
||||
| `command` | No | Yes | Overwrite pecl command (default: `pecl install <ext>`) |
|
||||
|
||||
**Example:**
|
||||
```yaml
|
||||
all:
|
||||
type: pecl
|
||||
command: echo "/usr" | pecl install amqp
|
||||
build_dep: [librabbitmq-dev]
|
||||
run_dep: [librabbitmq4]
|
||||
5.5:
|
||||
type: pecl
|
||||
version: 1.9.3
|
||||
run_dep: [librabbitmq1]
|
||||
```
|
||||
|
||||
|
||||
## Second level defines for `type: git`
|
||||
|
||||
| Yaml key | Required | Supports<br/>Shell code | Description |
|
||||
|-------------|----------|-------------------------|-------------|
|
||||
| `git_url` | **Yes** | Yes | Git repository URL |
|
||||
| `git_ref` | No | Yes | Tag, branch, commit to check out (shell code supported to dynamically checkout) |
|
||||
| `configure` | No | Yes | Add `./configure` arguments. |
|
||||
| `command` | No | Yes | Overwrite default command (default: `phpize && ./configure && make && make install`) |
|
||||
|
||||
**Example:**
|
||||
```yaml
|
||||
already_avail: [5.2]
|
||||
all:
|
||||
type: git
|
||||
git_url: https://github.com/phalcon/cphalcon
|
||||
git_ref: master
|
||||
# PHP 8.1 is using a different git_ref
|
||||
8.1:
|
||||
git_ref: v1.0.0
|
||||
# PHP 8.0 is using a different git_ref dynamically with latest tag found
|
||||
# See the usage of supported shell code
|
||||
8.0:
|
||||
git_ref: $( git tag | sort -V | tail -1 )
|
||||
```
|
||||
|
||||
|
||||
## Second level defines for `type: custom`
|
||||
|
||||
| Yaml key | Required | Supports<br/>Shell code | Description |
|
||||
|-------------|----------|-------------------------|-------------|
|
||||
| `command` | **Yes** | Yes | Custom command to install and enable a module |
|
||||
|
||||
**Example:**
|
||||
```yaml
|
||||
all:
|
||||
type: custom
|
||||
command: |
|
||||
wget http://url/file.tar.gz \
|
||||
&& tar xvfz file.tar.gz \
|
||||
&& cd file \
|
||||
&& phpize \
|
||||
&& ./configure \
|
||||
&& make \
|
||||
&& make install \
|
||||
```
|
||||
|
||||
|
||||
## Usage of shell code
|
||||
|
||||
### Single-line vs Multi-line
|
||||
|
||||
**Note:** All keys that support shell code can be written as a single line yaml definition or as a multi line yaml definition. Multi-line yaml definitions need a trailing `\` at the end of each line, including the last line.<br/>
|
||||
**Single-line:**
|
||||
```bash
|
||||
all:
|
||||
pre: VERSION="$( curl http://url | grep -Eo '[0-9.]+' )"
|
||||
```
|
||||
**Multi-line:**
|
||||
```bash
|
||||
all:
|
||||
pre: |
|
||||
VERSION="$( \
|
||||
curl http://url \
|
||||
| grep -Eo '[0-9.]+' \
|
||||
)" \
|
||||
```
|
||||
|
||||
### Single-command vs Multi-command
|
||||
|
||||
**Note:** All keys that support shell code also support to write multiple shell commands. If you use multiple shell commands, you need to separate them with `&&`.<br/>
|
||||
**Single-command:**
|
||||
```bash
|
||||
all:
|
||||
pre: |
|
||||
VERSION="$( \
|
||||
curl http://url \
|
||||
| grep -Eo '[0-9.]+' \
|
||||
)" \
|
||||
```
|
||||
**Multi-command:**
|
||||
```bash
|
||||
all:
|
||||
pre: |
|
||||
URL="http://url" \
|
||||
&& VERSION="$( \
|
||||
curl "${URL} \
|
||||
| grep -Eo '[0-9.]+' \
|
||||
)" \
|
||||
&& echo "${VERSION}" \
|
||||
|
||||
```
|
||||
@@ -1,6 +0,0 @@
|
||||
# Extension definition: `options.yml`
|
||||
|
||||
To be done
|
||||
|
||||
|
||||
For now have a look at the existing modules into the respective `options.yml` files as they are mostly the same.
|
||||
@@ -1,3 +0,0 @@
|
||||
# Extension definition: `test.yml`
|
||||
|
||||
This is not yet implemented and thus no documentation exists.
|
||||
@@ -1,8 +1,8 @@
|
||||
# PHP Module definitions
|
||||
|
||||
This documentation describes how to create new or alter existing PHP module definitions.
|
||||
This document describes how to create new or alter existing PHP module definitions.
|
||||
|
||||
All PHP modules/extensions (for all PHP versions and both for `amd64` and `arm64` platforms) are defined in here in their dedicated directory. These definitions are then transformed to Ansible group_vars and afterwards Ansible will generate the corresponding Dockerfiles (Stage: `mods`).
|
||||
All PHP modules/extensions (for all PHP versions and both for `amd64` and `arm64` platforms) are defined in the `php_modules/` directory in their corresponding sub directory. These definitions are then transformed to Ansible group_vars and afterwards Ansible will generate the corresponding Dockerfiles (Stage: `mods`).
|
||||
|
||||
|
||||
## How to add PHP modules?
|
||||
@@ -11,32 +11,34 @@ All PHP modules/extensions (for all PHP versions and both for `amd64` and `arm64
|
||||
1. Create a new directory with the name of the PHP module in `php_modules/`
|
||||
2. Add `build.yml`, `options.yml` and `test.yml` into your newly created directory
|
||||
3. Alter `build.yml`, `options.yml` and `test.yml` according to documentation below
|
||||
4. Run `python3 modules-validate.py` to validate the created PHP module definitions
|
||||
5. Run `python3 modules-generate.py` to create Ansible group_vars
|
||||
|
||||
2. **Inside the root of this git repository:**
|
||||
1. Run `make gen-dockerfiles` to generate Dockerfiles via Ansible
|
||||
2. Run `make build STAGE=mods VERSION=8.1 ARCH=linux/amd64` to build the `mods` Docker image with version `8.1` for platform `linux/amd64`
|
||||
1. Run `make gen-modules` to create Ansible group_vars
|
||||
2. Run `make gen-dockerfiles` to generate Dockerfiles via Ansible
|
||||
3. Run `make build STAGE=mods VERSION=8.1 ARCH=linux/amd64` to build the `mods` Docker image with version `8.1` for platform `linux/amd64`
|
||||
|
||||
**Note:** If you want to test if your new module builds correctly, you can generate Dockerfiles which only contain your module and all others removed. This allows for much faster Docker builds and you don't have to wait for all other modules to be built. To do so you generate group_vars for your module only via:
|
||||
|
||||
```bash
|
||||
# Commands shown here are executed from root of this repository
|
||||
|
||||
# Only generate group_vars for curl
|
||||
# Note: if curl has other modules as requiredments to be built beforehand, those will also be added
|
||||
python3 module-generate.py curl
|
||||
# Note: if curl has other modules as requirements to be built beforehand, those will also be added
|
||||
python3 ./bin/module-generate.py curl
|
||||
make gen-dockerfiles
|
||||
```
|
||||
|
||||
|
||||
## Extension definition: `build.yml`
|
||||
|
||||
See **[README-build.yml.md](README-build.yml.md)** how to alter the `build.yml` file.
|
||||
See **[PHP-EXT-build.yml.md](../doc/PHP-EXT-build.yml.md)** how to alter the `build.yml` file.
|
||||
|
||||
|
||||
## Extension definition: `options.yml`
|
||||
|
||||
See **[README-options.yml.md](README-options.yml.md)** how to alter the `options.yml` file.
|
||||
See **[PHP-EXT-options.yml.md](../doc/PHP-EXT-options.yml.md)** how to alter the `options.yml` file.
|
||||
|
||||
|
||||
## Extension definition: `test.yml`
|
||||
|
||||
See **[README-test.yml.md](README-test.yml.md)** how to alter the `test.yml` file.
|
||||
See **[PHP-EXT-test.yml.md](../doc/PHP-EXT-test.yml.md)** how to alter the `test.yml` file.
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
../bin/modules-generate.py
|
||||
@@ -1 +0,0 @@
|
||||
../bin/modules-validate.py
|
||||
Reference in New Issue
Block a user