diff --git a/.github/workflows/build-php-images.yml b/.github/workflows/build-php-images.yml index 231ba6d..d3f22ae 100644 --- a/.github/workflows/build-php-images.yml +++ b/.github/workflows/build-php-images.yml @@ -18,6 +18,12 @@ jobs: lando-version: - 3-dev-slim include: + - image: php + tag: 8.3-fpm-4 + context: images/8.3-fpm + - image: php + tag: 8.3-apache-4 + context: images/8.3-apache - image: php tag: 8.2-fpm-4 context: images/8.2-fpm diff --git a/.github/workflows/pr-php8-tests.yml b/.github/workflows/pr-php8-tests.yml index be41fd7..98d6039 100644 --- a/.github/workflows/pr-php8-tests.yml +++ b/.github/workflows/pr-php8-tests.yml @@ -15,6 +15,7 @@ jobs: - '8.0' - '8.1' - '8.2' + - '8.3' lando-version: - 3-dev-slim os: diff --git a/builders/php.js b/builders/php.js index ecde4b8..90975f7 100644 --- a/builders/php.js +++ b/builders/php.js @@ -91,7 +91,7 @@ module.exports = { name: 'php', config: { version: '7.4', - supported: ['8.2', '8.1', '8.0', '7.4', '7.3', '7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3'], + supported: ['8.3', '8.2', '8.1', '8.0', '7.4', '7.3', '7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3'], legacy: ['7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3'], gen2: ['5.5', '5.4', '5.3'], gen3: ['7.2', '7.1', '7.0', '5.6'], @@ -109,7 +109,7 @@ module.exports = { ], confSrc: path.resolve(__dirname, '..', 'config'), command: ['sh -c \'a2enmod rewrite && apache2-foreground\''], - composer_version: '2.2.18', + composer_version: '2.2.22', phpServer: 'apache', defaultFiles: { _php: 'php.ini', diff --git a/docs/.vuepress/public/.!80551!favicon.ico b/docs/.vuepress/public/.!80551!favicon.ico deleted file mode 100644 index e69de29..0000000 diff --git a/docs/extensions.md b/docs/extensions.md index 868c06e..1b26fcc 100644 --- a/docs/extensions.md +++ b/docs/extensions.md @@ -5,65 +5,65 @@ description: Learn what extensions are installed in the Lando PHP plugin # Installed Extensions -| | 5.3 | 5.4 | 5.5 | 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2 | -| -- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| apc | X | X | | | | | | | | | | | -| apcu | | | X | X | X | X | X | X | X | | | | -| bcmath | X | X | X | X | X | X | X | X | X | X | X | X | -| bz2 | X | X | X | X | X | X | X | X | X | X | X | X | -| calendar | X | X | X | X | X | X | X | X | X | X | X | X | -| Core | X | X | X | X | X | X | X | X | X | X | X | X | -| ctype | X | X | X | X | X | X | X | X | X | X | X | X | -| curl | X | X | X | X | X | X | X | X | X | X | X | X | -| date | X | X | X | X | X | X | X | X | X | X | X | X | -| dom | X | X | X | X | X | X | X | X | X | X | X | X | -| exif | X | X | X | X | X | X | X | X | X | X | X | X | -| fileinfo | X | X | X | X | X | X | X | X | X | X | X | X | -| filter | X | X | X | X | X | X | X | X | X | X | X | X | -| ftp | X | X | X | X | X | X | X | X | X | X | X | X | -| gd | X | X | X | X | X | X | X | X | X | X | X | X | -| gettext | X | X | X | X | X | X | X | X | X | X | X | X | -| hash | X | X | X | X | X | X | X | X | X | X | X | X | -| iconv | X | X | X | X | X | X | X | X | X | X | X | X | -| imagick | X | X | X | X | X | X | X | X | X | X | X | X | -| imap | X | X | X | X | X | X | X | X | X | X | X | X | -| intl | X | X | X | X | X | X | X | X | X | X | X | X | -| json | X | X | X | X | X | X | X | X | X | X | X | X | -| ldap | X | X | X | X | X | X | X | X | X | X | X | X | -| libxml | X | X | X | X | X | X | X | X | X | X | X | X | -| mbstring | X | X | X | X | X | X | X | X | X | X | X | X | -| mcrypt | X | X | X | X | X | X | X | X | X | X | X | X | -| memcached | X | X | X | X | X | X | X | X | X | | | | -| mysqli | X | X | X | X | X | X | X | X | X | X | X | X | -| mysqlnd | X | X | X | X | X | X | X | X | X | X | X | X | -| OAuth | X | X | X | X | X | X | X | X | X | | | | -| OPcache | | | X | X | X | X | X | X | X | X | X | X | -| openssl | X | X | X | X | X | X | X | X | X | X | X | X | -| pcntl | X | X | X | X | X | X | X | X | X | X | X | X | -| pcre | X | X | X | X | X | X | X | X | X | X | X | X | -| PDO | X | X | X | X | X | X | X | X | X | X | X | X | -| pdo_mysql | X | X | X | X | X | X | X | X | X | X | X | X | -| pdo_pgsql | X | X | X | X | X | X | X | X | X | X | X | X | -| pdo_sqlite| X | X | X | X | X | X | X | X | X | X | X | X | -| Phar | X | X | X | X | X | X | X | X | X | X | X | X | -| posix | X | X | X | X | X | X | X | X | X | X | X | X | -| readline | X | X | X | X | X | X | X | X | X | X | X | X | -| redis | X | X | X | X | X | X | X | X | X | X | X | X | -| readline | X | X | X | X | X | X | X | X | X | X | X | X | -| Reflection| X | X | X | X | X | X | X | X | X | X | X | X | -| session | X | X | X | X | X | X | X | X | X | X | X | X | -| SimpleXML | X | X | X | X | X | X | X | X | X | X | X | X | -| soap | X | X | X | X | X | X | X | X | X | X | X | X | -| SPL | X | X | X | X | X | X | X | X | X | X | X | X | -| sqlite3 | X | X | X | X | X | X | X | X | X | X | X | X | -| standard | X | X | X | X | X | X | X | X | X | X | X | X | -| tokenizer | X | X | X | X | X | X | X | X | X | X | X | X | -| xdebug | | | | | | | | | | | | | -| xml | X | X | X | X | X | X | X | X | X | X | X | X | -| xmlreader | X | X | X | X | X | X | X | X | X | X | X | X | -| xmlwriter | X | X | X | X | X | X | X | X | X | X | X | X | -| zip | X | X | X | X | X | X | X | X | X | X | X | X | -| zlib | X | X | X | X | X | X | X | X | X | X | X | X | +| | 5.3 | 5.4 | 5.5 | 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2 | 8.3 | +| -- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| apc | X | X | | | | | | | | | | | | +| apcu | | | X | X | X | X | X | X | X | | | | | +| bcmath | X | X | X | X | X | X | X | X | X | X | X | X | X | +| bz2 | X | X | X | X | X | X | X | X | X | X | X | X | X | +| calendar | X | X | X | X | X | X | X | X | X | X | X | X | X | +| Core | X | X | X | X | X | X | X | X | X | X | X | X | X | +| ctype | X | X | X | X | X | X | X | X | X | X | X | X | X | +| curl | X | X | X | X | X | X | X | X | X | X | X | X | X | +| date | X | X | X | X | X | X | X | X | X | X | X | X | X | +| dom | X | X | X | X | X | X | X | X | X | X | X | X | X | +| exif | X | X | X | X | X | X | X | X | X | X | X | X | X | +| fileinfo | X | X | X | X | X | X | X | X | X | X | X | X | X | +| filter | X | X | X | X | X | X | X | X | X | X | X | X | X | +| ftp | X | X | X | X | X | X | X | X | X | X | X | X | X | +| gd | X | X | X | X | X | X | X | X | X | X | X | X | X | +| gettext | X | X | X | X | X | X | X | X | X | X | X | X | X | +| hash | X | X | X | X | X | X | X | X | X | X | X | X | X | +| iconv | X | X | X | X | X | X | X | X | X | X | X | X | X | +| imagick | X | X | X | X | X | X | X | X | X | X | X | X | X | +| imap | X | X | X | X | X | X | X | X | X | X | X | X | X | +| intl | X | X | X | X | X | X | X | X | X | X | X | X | X | +| json | X | X | X | X | X | X | X | X | X | X | X | X | X | +| ldap | X | X | X | X | X | X | X | X | X | X | X | X | X | +| libxml | X | X | X | X | X | X | X | X | X | X | X | X | X | +| mbstring | X | X | X | X | X | X | X | X | X | X | X | X | X | +| mcrypt | X | X | X | X | X | X | X | X | X | X | X | X | X | +| memcached | X | X | X | X | X | X | X | X | X | | | | | +| mysqli | X | X | X | X | X | X | X | X | X | X | X | X | X | +| mysqlnd | X | X | X | X | X | X | X | X | X | X | X | X | X | +| OAuth | X | X | X | X | X | X | X | X | X | | | | | +| OPcache | | | X | X | X | X | X | X | X | X | X | X | X | +| openssl | X | X | X | X | X | X | X | X | X | X | X | X | X | +| pcntl | X | X | X | X | X | X | X | X | X | X | X | X | X | +| pcre | X | X | X | X | X | X | X | X | X | X | X | X | X | +| PDO | X | X | X | X | X | X | X | X | X | X | X | X | X | +| pdo_mysql | X | X | X | X | X | X | X | X | X | X | X | X | X | +| pdo_pgsql | X | X | X | X | X | X | X | X | X | X | X | X | X | +| pdo_sqlite| X | X | X | X | X | X | X | X | X | X | X | X | X | +| Phar | X | X | X | X | X | X | X | X | X | X | X | X | X | +| posix | X | X | X | X | X | X | X | X | X | X | X | X | X | +| readline | X | X | X | X | X | X | X | X | X | X | X | X | X | +| redis | X | X | X | X | X | X | X | X | X | X | X | X | X | +| readline | X | X | X | X | X | X | X | X | X | X | X | X | X | +| Reflection| X | X | X | X | X | X | X | X | X | X | X | X | X | +| session | X | X | X | X | X | X | X | X | X | X | X | X | X | +| SimpleXML | X | X | X | X | X | X | X | X | X | X | X | X | X | +| soap | X | X | X | X | X | X | X | X | X | X | X | X | X | +| SPL | X | X | X | X | X | X | X | X | X | X | X | X | X | +| sqlite3 | X | X | X | X | X | X | X | X | X | X | X | X | X | +| standard | X | X | X | X | X | X | X | X | X | X | X | X | X | +| tokenizer | X | X | X | X | X | X | X | X | X | X | X | X | X | +| xdebug | | | | | | | | | | | | | | +| xml | X | X | X | X | X | X | X | X | X | X | X | X | X | +| xmlreader | X | X | X | X | X | X | X | X | X | X | X | X | X | +| xmlwriter | X | X | X | X | X | X | X | X | X | X | X | X | X | +| zip | X | X | X | X | X | X | X | X | X | X | X | X | X | +| zlib | X | X | X | X | X | X | X | X | X | X | X | X | X | Note that `xdebug` is off by default but you can enable it by setting your `php` services config to `xdebug: true`. Read more about this in "Configuration" above. diff --git a/docs/index.md b/docs/index.md index f25c9fd..4d98c62 100644 --- a/docs/index.md +++ b/docs/index.md @@ -20,6 +20,7 @@ services: ## Supported versions +* [8.3](https://hub.docker.com/r/devwithlando/php) (experimental) * [8.2](https://hub.docker.com/r/devwithlando/php) * [8.1](https://hub.docker.com/r/devwithlando/php) * [8.0](https://hub.docker.com/r/devwithlando/php) diff --git a/examples/8.3/.gitignore b/examples/8.3/.gitignore new file mode 100644 index 0000000..4ef7878 --- /dev/null +++ b/examples/8.3/.gitignore @@ -0,0 +1,3 @@ +vendor +composer.json +test diff --git a/examples/8.3/.lando.yml b/examples/8.3/.lando.yml new file mode 100644 index 0000000..4edc196 --- /dev/null +++ b/examples/8.3/.lando.yml @@ -0,0 +1,58 @@ +name: lando-php83 +events: + post-start: + - defaults: php -i | grep memory_limit | grep -e "-1" +services: + defaults: + type: php:8.3 + composer_version: false + cli: + type: php:8.3 + composer_version: false + via: cli + build_as_root: + - curl -sL https://deb.nodesource.com/setup_14.x | bash - + - apt-get update -y + - apt-get install -y nodejs + cliworker: + type: php:8.3 + composer_version: false + via: cli + command: sleep infinity + custom: + type: php:8.3 + composer_version: "2.5.6" + via: nginx + ssl: true + webroot: web + xdebug: true + config: + php: config/php.ini + overrides: + image: devwithlando/php:8.3-fpm-4 + environment: + DUALBLADE: maxim + OTHER: thing + custom_nginx: + build_as_root: + - mkdir -p /app/test && touch /app/test/managed_build_step + overrides: + environment: + MORE: things + OTHER: stuff +tooling: + php: + service: defaults + node: + service: :host + options: + host: + description: The service to use + default: cli + alias: + - h + +# This is important because it lets lando know to test against the plugin in this repo +# DO NOT REMOVE THIS! +plugins: + "@lando/php": ./../../ diff --git a/examples/8.3/README.md b/examples/8.3/README.md new file mode 100644 index 0000000..00e8a7f --- /dev/null +++ b/examples/8.3/README.md @@ -0,0 +1,131 @@ +PHP 8.3 Example +=============== + +This example exists primarily to test the following documentation: + +* [PHP Service](https://docs.lando.dev/config/php.html) +* [Installing Node in a PHP Service](https://docs.lando.dev/guides/installing-node-in-your-lando-php-service.html) +* [Issue #1990](https://github.com/lando/lando/issues/1990) +* [Issue #2192](https://github.com/lando/lando/issues/2192) + +And probably other stuff + +Start up tests +-------------- + +Run the following commands to get up and running with this example. + +```bash +# Should start up successfully +lando poweroff +lando start +``` + +Verification commands +--------------------- + +Run the following commands to validate things are rolling as they should. + +```bash +# Should use 8.3 as the default php version +lando ssh -s defaults -c "php -v" | grep "PHP 8.3" + +# Should use 10.x as the default postgresql-client version +lando ssh -s defaults -c "psql -V" | grep "10." + +# Should use apache 2.4 as the default webserver version +lando ssh -s defaults -c "apachectl -V" | grep "2.4." + +# Should only serve over http by default +lando ssh -s defaults -c "curl https://localhost" || echo $? | grep 1 + +# Should serve from the app root by default +lando ssh -s defaults -c "curl http://localhost" | grep "ROOTDIR" + +# Should have a 1G php mem limit on appserver +lando ssh -s defaults -c "curl http://localhost" | grep "memory_limit" | grep "1G" + +# Should have COMPOSER_MEMORY_LIMIT set to -1 +lando ssh -s defaults -c "env" | grep "COMPOSER_MEMORY_LIMIT=-1" + +# Should install composer 2.x by default +lando ssh -s defaults -c "composer --version --no-ansi" | grep "Composer version 2." + +# Should have unlimited memory for php for CLI opts +lando php -i | grep memory_limit | grep -e "-1" +lando ssh -s defaults -c "php -i" | grep "memory_limit" | grep -e "-1" + +# Should not enable xdebug by default +lando ssh -s defaults -c "php -m | grep xdebug" || echo $? | grep 1 + +# Should have a PATH_INFO and PATH_TRANSLATED SERVER vars +lando ssh -s custom_nginx -c "curl https://localhost" | grep SERVER | grep PATH_INFO +lando ssh -s custom_nginx -c "curl https://localhost" | grep SERVER | grep PATH_TRANSLATED + +# Should use specified php version if given +lando ssh -s custom -c "php -v" | grep "PHP 8.3" + +# Should install composer 2.5.6 if version number is set +lando ssh -s custom -c "composer --version --no-ansi" | grep "Composer version 2.5.6" + +# Should serve via nginx if specified +lando ssh -s custom_nginx -c "curl http://localhost" | grep "WEBDIR" + +# Should serve via https if specified +lando ssh -s custom_nginx -c "curl https://localhost" | grep "WEBDIR" + +# Should enable xdebug if specified +lando ssh -s custom -c "php -m" | grep "xdebug" + +# Should not serve port 80 for cli +lando ssh -s cli -c "curl http://localhost" || echo $? | grep 1 + +# Should install the composer 2.x using the false flag +lando ssh -s cli -c "composer --version --no-ansi" | grep "Composer version 2." + +# Should use custom php ini if specified +lando ssh -s custom -c "php -i | grep memory_limit | grep 514" +lando ssh -s custom -c "curl http://custom_nginx" | grep html_errors | grep On | grep On + +# Should inherit overrides from its generator +lando ssh -s custom -c "env | grep DUALBLADE | grep maxim" +lando ssh -s custom_nginx -c "env | grep DUALBLADE | grep maxim" + +# Should be able to run build steps on lando managed nginx service +# https://github.com/lando/lando/issues/1990 +lando ssh -s custom_nginx -c "cat /app/test/managed_build_step" + +# Should be able to override lando managed nginx service +# https://github.com/lando/lando/issues/1990 +lando ssh -s custom_nginx -c "env | grep OTHER | grep stuff" +lando ssh -s custom_nginx -c "env | grep MORE | grep things" + +# Should set PATH_INFO and PATH_TRANSLATED if appropriate +# https://github.com/lando/lando/issues/2192 +lando ssh -s custom_nginx -c "curl http://localhost/path_info.php/a/b.php" | grep PATH_INFO | grep "/a/b.php" +lando ssh -s custom_nginx -c "curl http://localhost/path_info.php/a/b.php" | grep PATH_TRANSLATED | grep "/app/web/a/b.php" +lando ssh -s custom_nginx -c "curl http://localhost/path_info.php/a/b.php" | grep SCRIPT_NAME | grep "/path_info.php" +lando ssh -s defaults -c "curl http://localhost/path_info.php/a/b.php" | grep PATH_INFO | grep "/a/b.php" +lando ssh -s defaults -c "curl http://localhost/path_info.php/a/b.php" | grep PATH_TRANSLATED | grep "/app/a/b.php" +lando ssh -s defaults -c "curl http://localhost/path_info.php/a/b.php" | grep SCRIPT_NAME | grep "/path_info.php" + +# Should allow cli services to specify a boot up command +lando info -s cliworker --deep | grep Cmd | grep sleep | grep infinity + +# Should install the latest composer 2.x by default. +lando ssh -s cliworker -c "composer --version --no-ansi" | grep "Composer version 2." + +# Should have node14 installed in cli service +lando node -v | grep v14. +``` + +Destroy tests +------------- + +Run the following commands to trash this app like nothing ever happened. + +```bash +# Should be destroyed with success +lando destroy -y +lando poweroff +``` diff --git a/examples/8.3/config/apache.conf b/examples/8.3/config/apache.conf new file mode 100644 index 0000000..3a82953 --- /dev/null +++ b/examples/8.3/config/apache.conf @@ -0,0 +1,188 @@ + + # WHAT IN THE WORLD HAPPENED TO YOU, SERIOUSLY + # The ServerName directive sets the request scheme, hostname and port that + # the server uses to identify itself. This is used when creating + # redirection URLs. In the context of virtual hosts, the ServerName + # specifies what hostname must appear in the request's Host: header to + # match this virtual host. For the default virtual host (this file) this + # value is not decisive as it is used as a last resort host regardless. + # However, you must set it for any further virtual host explicitly. + ServerName appserver + + ServerAdmin webmaster@localhost + DocumentRoot ${LANDO_WEBROOT} + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + Allow from all + Require all granted + + + # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, + # error, crit, alert, emerg. + # It is also possible to configure the loglevel for particular + # modules, e.g. + #LogLevel info ssl:warn + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + # For most configuration files from conf-available/, which are + # enabled or disabled at a global level, it is possible to + # include a line for only one particular virtual host. For example the + # following line enables the CGI configuration for this host only + # after it has been globally disabled with "a2disconf". + #Include conf-available/serve-cgi-bin.conf + + # Pass some common ENVs, its ok if this fails + SetEnv BACKDROP_SETTINGS ${BACKDROP_SETTINGS} + SetEnvIf x-forwarded-proto https HTTPS=on + + + + + + ServerAdmin webmaster@localhost + ServerName appserver + + DocumentRoot ${LANDO_WEBROOT} + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + Allow from all + Require all granted + + # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, + # error, crit, alert, emerg. + # It is also possible to configure the loglevel for particular + # modules, e.g. + #LogLevel info ssl:warn + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + # For most configuration files from conf-available/, which are + # enabled or disabled at a global level, it is possible to + # include a line for only one particular virtual host. For example the + # following line enables the CGI configuration for this host only + # after it has been globally disabled with "a2disconf". + #Include conf-available/serve-cgi-bin.conf + + # SSL Engine Switch: + # Enable/Disable SSL for this virtual host. + SSLEngine on + + # A self-signed (snakeoil) certificate can be created by installing + # the ssl-cert package. See + # /usr/share/doc/apache2/README.Debian.gz for more info. + # If both key and certificate are stored in the same file, only the + # SSLCertificateFile directive is needed. + SSLCertificateFile "/certs/cert.crt" + SSLCertificateKeyFile "/certs/cert.key" + + # Server Certificate Chain: + # Point SSLCertificateChainFile at a file containing the + # concatenation of PEM encoded CA certificates which form the + # certificate chain for the server certificate. Alternatively + # the referenced file can be the same as SSLCertificateFile + # when the CA certificates are directly appended to the server + # certificate for convenience. + #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt + + # Certificate Authority (CA): + # Set the CA certificate verification path where to find CA + # certificates for client authentication or alternatively one + # huge file containing all of them (file must be PEM encoded) + # Note: Inside SSLCACertificatePath you need hash symlinks + # to point to the certificate files. Use the provided + # Makefile to update the hash symlinks after changes. + #SSLCACertificatePath /etc/ssl/certs/ + #SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt + + # Certificate Revocation Lists (CRL): + # Set the CA revocation path where to find CA CRLs for client + # authentication or alternatively one huge file containing all + # of them (file must be PEM encoded) + # Note: Inside SSLCARevocationPath you need hash symlinks + # to point to the certificate files. Use the provided + # Makefile to update the hash symlinks after changes. + #SSLCARevocationPath /etc/apache2/ssl.crl/ + #SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl + + # Client Authentication (Type): + # Client certificate verification type and depth. Types are + # none, optional, require and optional_no_ca. Depth is a + # number which specifies how deeply to verify the certificate + # issuer chain before deciding the certificate is not valid. + #SSLVerifyClient require + #SSLVerifyDepth 10 + + # SSL Engine Options: + # Set various options for the SSL engine. + # o FakeBasicAuth: + # Translate the client X.509 into a Basic Authorisation. This means that + # the standard Auth/DBMAuth methods can be used for access control. The + # user name is the `one line' version of the client's X.509 certificate. + # Note that no password is obtained from the user. Every entry in the user + # file needs this password: `xxj31ZMTZzkVA'. + # o ExportCertData: + # This exports two additional environment variables: SSL_CLIENT_CERT and + # SSL_SERVER_CERT. These contain the PEM-encoded certificates of the + # server (always existing) and the client (only existing when client + # authentication is used). This can be used to import the certificates + # into CGI scripts. + # o StdEnvVars: + # This exports the standard SSL/TLS related `SSL_*' environment variables. + # Per default this exportation is switched off for performance reasons, + # because the extraction step is an expensive operation and is usually + # useless for serving static content. So one usually enables the + # exportation for CGI and SSI requests only. + # o OptRenegotiate: + # This enables optimized SSL connection renegotiation handling when SSL + # directives are used in per-directory context. + #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire + + SSLOptions +StdEnvVars + + + SSLOptions +StdEnvVars + + + # SSL Protocol Adjustments: + # The safe and default but still SSL/TLS standard compliant shutdown + # approach is that mod_ssl sends the close notify alert but doesn't wait for + # the close notify alert from client. When you need a different shutdown + # approach you can use one of the following variables: + # o ssl-unclean-shutdown: + # This forces an unclean shutdown when the connection is closed, i.e. no + # SSL close notify alert is send or allowed to received. This violates + # the SSL/TLS standard but is needed for some brain-dead browsers. Use + # this when you receive I/O errors because of the standard approach where + # mod_ssl sends the close notify alert. + # o ssl-accurate-shutdown: + # This forces an accurate shutdown when the connection is closed, i.e. a + # SSL close notify alert is send and mod_ssl waits for the close notify + # alert of the client. This is 100% SSL/TLS standard compliant, but in + # practice often causes hanging connections with brain-dead browsers. Use + # this only for browsers where you know that their SSL implementation + # works correctly. + # Notice: Most problems of broken clients are also related to the HTTP + # keep-alive facility, so you usually additionally want to disable + # keep-alive for those clients, too. Use variable "nokeepalive" for this. + # Similarly, one has to force some clients to use HTTP/1.0 to workaround + # their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and + # "force-response-1.0" for this. + BrowserMatch "MSIE [2-6]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + # MSIE 7 and newer should be able to use keepalive + BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown + + # Pass some common ENVs, its ok if this fails + SetEnv BACKDROP_SETTINGS ${BACKDROP_SETTINGS} + SetEnvIf x-forwarded-proto https HTTPS=on + + + diff --git a/examples/8.3/config/nginx.conf b/examples/8.3/config/nginx.conf new file mode 100644 index 0000000..f874450 --- /dev/null +++ b/examples/8.3/config/nginx.conf @@ -0,0 +1,30 @@ +server { + listen 443 ssl; + listen 80; + listen [::]:80 default ipv6only=on; + server_name localhost; + + ssl_certificate /certs/cert.crt; + ssl_certificate_key /certs/cert.key; + + ssl_session_cache shared:SSL:1m; + ssl_session_timeout 5m; + + ssl_ciphers HIGH:!aNULL:!MD5; + ssl_prefer_server_ciphers on; + + root "{{LANDO_WEBROOT}}"; + index index.php index.html index.htm; + + # hello + location ~ \.php$ { + fastcgi_pass fpm:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_buffers 256 128k; + fastcgi_connect_timeout 300s; + fastcgi_send_timeout 300s; + fastcgi_read_timeout 300s; + include fastcgi_params; + } +} diff --git a/examples/8.3/config/php.ini b/examples/8.3/config/php.ini new file mode 100644 index 0000000..1076fd2 --- /dev/null +++ b/examples/8.3/config/php.ini @@ -0,0 +1,4 @@ +[PHP] + +memory_limit = 514M +html_errors = On diff --git a/examples/8.3/index.php b/examples/8.3/index.php new file mode 100644 index 0000000..d64cf6b --- /dev/null +++ b/examples/8.3/index.php @@ -0,0 +1,3 @@ +ROOTDIR + + diff --git a/examples/8.3/path_info.php b/examples/8.3/path_info.php new file mode 100644 index 0000000..ccce0c3 --- /dev/null +++ b/examples/8.3/path_info.php @@ -0,0 +1 @@ + diff --git a/examples/8.3/web/index.php b/examples/8.3/web/index.php new file mode 100644 index 0000000..b9b85a7 --- /dev/null +++ b/examples/8.3/web/index.php @@ -0,0 +1,3 @@ +WEBDIR + + diff --git a/examples/8.3/web/path_info.php b/examples/8.3/web/path_info.php new file mode 100644 index 0000000..ccce0c3 --- /dev/null +++ b/examples/8.3/web/path_info.php @@ -0,0 +1 @@ + diff --git a/examples/images-edge/8.3-apache-4/.lando.yml b/examples/images-edge/8.3-apache-4/.lando.yml new file mode 100644 index 0000000..39287fc --- /dev/null +++ b/examples/images-edge/8.3-apache-4/.lando.yml @@ -0,0 +1,13 @@ +name: lando-php-edge83apache +services: + default: + type: php:8.3 + composer_version: false + ssl: true + overrides: + image: devwithlando/php:8.3-apache-4-edge + +# This is important because it lets lando know to test against the plugin in this repo +# DO NOT REMOVE THIS! +plugins: + "@lando/php": ./../../ diff --git a/examples/images-edge/8.3-apache-4/README.md b/examples/images-edge/8.3-apache-4/README.md new file mode 100644 index 0000000..6c253b1 --- /dev/null +++ b/examples/images-edge/8.3-apache-4/README.md @@ -0,0 +1,50 @@ +PHP 8.3 Apache Image Edge Example +================================= + +This example exists primarily to test the following documentation: + +* [PHP Service](https://docs.lando.dev/config/php.html) +* [Service Overrides](https://docs.lando.dev/config/services.html#advanced) + +And probably other stuff + +Start up tests +-------------- + +Run the following commands to get up and running with this example. + +```bash +# Should start up successfully +lando poweroff +lando start +``` + +Verification commands +--------------------- + +Run the following commands to validate things are rolling as they should. + +```bash +# Should use 8.3 as the default php version +lando ssh -s default -c "php -v" | grep "PHP 8.3" + +# Should use 10.x as the default postgresql-client version +lando ssh -s default -c "psql -V" | grep "10." + +# Should use apache 2.4 as the default webserver version +lando ssh -s default -c "apachectl -V" | grep "2.4." + +# Should install composer 2.x by default +lando ssh -s default -c "composer --version --no-ansi" | grep "Composer version 2." +``` + +Destroy tests +------------- + +Run the following commands to trash this app like nothing ever happened. + +```bash +# Should be destroyed with success +lando destroy -y +lando poweroff +``` diff --git a/examples/images-edge/8.3-apache-4/index.php b/examples/images-edge/8.3-apache-4/index.php new file mode 100644 index 0000000..d64cf6b --- /dev/null +++ b/examples/images-edge/8.3-apache-4/index.php @@ -0,0 +1,3 @@ +ROOTDIR + + diff --git a/examples/images-edge/8.3-fpm-4/.lando.yml b/examples/images-edge/8.3-fpm-4/.lando.yml new file mode 100644 index 0000000..67b51df --- /dev/null +++ b/examples/images-edge/8.3-fpm-4/.lando.yml @@ -0,0 +1,14 @@ +name: lando-php-edge83nginx +services: + default: + type: php:8.3 + composer_version: false + via: nginx + ssl: true + overrides: + image: devwithlando/php:8.3-fpm-4-edge + +# This is important because it lets lando know to test against the plugin in this repo +# DO NOT REMOVE THIS! +plugins: + "@lando/php": ./../../ diff --git a/examples/images-edge/8.3-fpm-4/README.md b/examples/images-edge/8.3-fpm-4/README.md new file mode 100644 index 0000000..aaed10e --- /dev/null +++ b/examples/images-edge/8.3-fpm-4/README.md @@ -0,0 +1,50 @@ +PHP 8.3 Nginx Image Edge Example +================================ + +This example exists primarily to test the following documentation: + +* [PHP Service](https://docs.lando.dev/config/php.html) +* [Service Overrides](https://docs.lando.dev/config/services.html#advanced) + +And probably other stuff + +Start up tests +-------------- + +Run the following commands to get up and running with this example. + +```bash +# Should start up successfully +lando poweroff +lando start +``` + +Verification commands +--------------------- + +Run the following commands to validate things are rolling as they should. + +```bash +# Should use 8.3 as the default php version +lando ssh -s default -c "php -v" | grep "PHP 8.3" + +# Should use 10.x as the default postgresql-client version +lando ssh -s default -c "psql -V" | grep "10." + +# Should use nginx 1. as the default webserver version +lando ssh -s default_nginx -c "nginx -v 2>&1 | grep 1.17" + +# Should install composer 2.x by default +lando ssh -s default -c "composer --version --no-ansi" | grep "Composer version 2." +``` + +Destroy tests +------------- + +Run the following commands to trash this app like nothing ever happened. + +```bash +# Should be destroyed with success +lando destroy -y +lando poweroff +``` diff --git a/examples/images-edge/8.3-fpm-4/index.php b/examples/images-edge/8.3-fpm-4/index.php new file mode 100644 index 0000000..d64cf6b --- /dev/null +++ b/examples/images-edge/8.3-fpm-4/index.php @@ -0,0 +1,3 @@ +ROOTDIR + + diff --git a/examples/images-stable/8.3-apache-4/.lando.yml b/examples/images-stable/8.3-apache-4/.lando.yml new file mode 100644 index 0000000..fdb89a0 --- /dev/null +++ b/examples/images-stable/8.3-apache-4/.lando.yml @@ -0,0 +1,13 @@ +name: lando-php-stable83apache +services: + default: + type: php:8.3 + composer_version: false + ssl: true + overrides: + image: devwithlando/php:8.3-apache-4 + +# This is important because it lets lando know to test against the plugin in this repo +# DO NOT REMOVE THIS! +plugins: + "@lando/php": ./../../ diff --git a/examples/images-stable/8.3-apache-4/README.md b/examples/images-stable/8.3-apache-4/README.md new file mode 100644 index 0000000..595a96c --- /dev/null +++ b/examples/images-stable/8.3-apache-4/README.md @@ -0,0 +1,50 @@ +PHP 8.3 Apache Image Stable Example +=================================== + +This example exists primarily to test the following documentation: + +* [PHP Service](https://docs.lando.dev/config/php.html) +* [Service Overrides](https://docs.lando.dev/config/services.html#advanced) + +And probably other stuff + +Start up tests +-------------- + +Run the following commands to get up and running with this example. + +```bash +# Should start up successfully +lando poweroff +lando start +``` + +Verification commands +--------------------- + +Run the following commands to validate things are rolling as they should. + +```bash +# Should use 8.3 as the default php version +lando ssh -s default -c "php -v" | grep "PHP 8.3" + +# Should use 10.x as the default postgresql-client version +lando ssh -s default -c "psql -V" | grep "10." + +# Should use apache 2.4 as the default webserver version +lando ssh -s default -c "apachectl -V" | grep "2.4." + +# Should install composer 2.x by default +lando ssh -s default -c "composer --version --no-ansi" | grep "Composer version 2." +``` + +Destroy tests +------------- + +Run the following commands to trash this app like nothing ever happened. + +```bash +# Should be destroyed with success +lando destroy -y +lando poweroff +``` diff --git a/examples/images-stable/8.3-apache-4/index.php b/examples/images-stable/8.3-apache-4/index.php new file mode 100644 index 0000000..d64cf6b --- /dev/null +++ b/examples/images-stable/8.3-apache-4/index.php @@ -0,0 +1,3 @@ +ROOTDIR + + diff --git a/examples/images-stable/8.3-fpm-4/.lando.yml b/examples/images-stable/8.3-fpm-4/.lando.yml new file mode 100644 index 0000000..01b76db --- /dev/null +++ b/examples/images-stable/8.3-fpm-4/.lando.yml @@ -0,0 +1,14 @@ +name: lando-php-stable83nginx +services: + default: + type: php:8.3 + composer_version: false + via: nginx + ssl: true + overrides: + image: devwithlando/php:8.3-fpm-4 + +# This is important because it lets lando know to test against the plugin in this repo +# DO NOT REMOVE THIS! +plugins: + "@lando/php": ./../../ diff --git a/examples/images-stable/8.3-fpm-4/README.md b/examples/images-stable/8.3-fpm-4/README.md new file mode 100644 index 0000000..fb606b4 --- /dev/null +++ b/examples/images-stable/8.3-fpm-4/README.md @@ -0,0 +1,50 @@ +PHP 8.3 Nginx Image Stable Example +================================== + +This example exists primarily to test the following documentation: + +* [PHP Service](https://docs.lando.dev/config/php.html) +* [Service Overrides](https://docs.lando.dev/config/services.html#advanced) + +And probably other stuff + +Start up tests +-------------- + +Run the following commands to get up and running with this example. + +```bash +# Should start up successfully +lando poweroff +lando start +``` + +Verification commands +--------------------- + +Run the following commands to validate things are rolling as they should. + +```bash +# Should use 8.3 as the default php version +lando ssh -s default -c "php -v" | grep "PHP 8.3" + +# Should use 10.x as the default postgresql-client version +lando ssh -s default -c "psql -V" | grep "10." + +# Should use nginx 1. as the default webserver version +lando ssh -s default_nginx -c "nginx -v 2>&1 | grep 1.17" + +# Should install composer 2.x by default +lando ssh -s default -c "composer --version --no-ansi" | grep "Composer version 2." +``` + +Destroy tests +------------- + +Run the following commands to trash this app like nothing ever happened. + +```bash +# Should be destroyed with success +lando destroy -y +lando poweroff +``` diff --git a/examples/images-stable/8.3-fpm-4/index.php b/examples/images-stable/8.3-fpm-4/index.php new file mode 100644 index 0000000..d64cf6b --- /dev/null +++ b/examples/images-stable/8.3-fpm-4/index.php @@ -0,0 +1,3 @@ +ROOTDIR + + diff --git a/images/8.3-apache/Dockerfile b/images/8.3-apache/Dockerfile new file mode 100644 index 0000000..96eea53 --- /dev/null +++ b/images/8.3-apache/Dockerfile @@ -0,0 +1,85 @@ +# docker build -t devwithlando/php:8.3-apache-4 . + +FROM php:8.3-apache-bullseye + +# Install dependencies we need +RUN mkdir -p /usr/share/man/man1 /usr/share/man/man7 \ + && apt -y update && apt-get install -y \ + gnupg2 \ + wget \ + && echo 'deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main' >> /etc/apt/sources.list.d/pgdg.list \ + && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \ + && apt-get update && apt-get install -y \ + bzip2 \ + default-mysql-client \ + exiftool \ + git-core \ + imagemagick \ + libbz2-dev \ + libc-client-dev \ + libfreetype6-dev \ + libicu-dev \ + libjpeg62-turbo-dev \ + libkrb5-dev \ + libldap2-dev \ + libmagickwand-dev \ + libmemcached-dev \ + libpng-dev \ + libpq-dev \ + libssl-dev \ + libwebp-dev \ + libxml2-dev \ + libzip-dev \ + libonig-dev \ + openssl \ + postgresql-client-10 \ + pv \ + rsync \ + ssh \ + unzip \ + wget \ + xfonts-75dpi \ + xfonts-base \ + zlib1g-dev \ + && pecl install apcu \ + && pecl install imagick \ + && pecl install memcached \ + && pecl install oauth \ + && pecl install redis-6.0.2 \ + && pecl install xdebug-3.3.0alpha3 \ + && docker-php-ext-configure ldap --with-libdir=lib/$(uname -m)-linux-gnu/ \ + && docker-php-ext-enable apcu \ + && docker-php-ext-enable imagick \ + && docker-php-ext-enable memcached \ + && docker-php-ext-enable oauth \ + && docker-php-ext-enable redis \ + && docker-php-ext-install bcmath \ + && docker-php-ext-install bz2 \ + && docker-php-ext-install calendar \ + && docker-php-ext-install exif \ + && docker-php-ext-install gettext \ + && docker-php-ext-install intl \ + && docker-php-ext-install ldap \ + && docker-php-ext-install mbstring \ + && docker-php-ext-install mysqli \ + && docker-php-ext-install opcache \ + && docker-php-ext-install pcntl \ + && docker-php-ext-install pdo \ + && docker-php-ext-install pdo_mysql \ + && docker-php-ext-install pdo_pgsql \ + && docker-php-ext-install soap \ + && docker-php-ext-install zip \ + && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ + && php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=2.2.22 \ + && php -r "unlink('composer-setup.php');" \ + && chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \ + && apt-get -y clean \ + && apt-get -y autoclean \ + && apt-get -y autoremove \ + && rm -rf /var/lib/apt/lists/* && rm -rf && rm -rf /var/lib/cache/* && rm -rf /var/lib/log/* && rm -rf /tmp/* \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && docker-php-ext-install imap \ + && docker-php-ext-configure gd --enable-gd --with-jpeg --with-webp --with-freetype \ + && docker-php-ext-install gd + +RUN curl https://dl.yarnpkg.com diff --git a/images/8.3-fpm/Dockerfile b/images/8.3-fpm/Dockerfile new file mode 100644 index 0000000..7017b1b --- /dev/null +++ b/images/8.3-fpm/Dockerfile @@ -0,0 +1,86 @@ +# docker build -t devwithlando/php:8.3-fpm-4 . + +FROM php:8.3-fpm-bullseye + +# Install dependencies we need +RUN mkdir -p /usr/share/man/man1 /usr/share/man/man7 \ + && apt -y update && apt-get install -y \ + gnupg2 \ + wget \ + && echo 'deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main' >> /etc/apt/sources.list.d/pgdg.list \ + && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \ + && apt-get update && apt-get install -y \ + bzip2 \ + default-mysql-client \ + exiftool \ + git-core \ + imagemagick \ + libbz2-dev \ + libc-client-dev \ + libfreetype6-dev \ + libicu-dev \ + libjpeg62-turbo-dev \ + libkrb5-dev \ + libldap2-dev \ + libmagickwand-dev \ + libmemcached-dev \ + libpng-dev \ + libpq-dev \ + libssl-dev \ + libwebp-dev \ + libxml2-dev \ + libzip-dev \ + libonig-dev \ + openssl \ + postgresql-client-10 \ + pv \ + rsync \ + ssh \ + unzip \ + wget \ + xfonts-75dpi \ + xfonts-base \ + zlib1g-dev \ + && pecl install apcu \ + && pecl install imagick \ + && pecl install memcached \ + && pecl install oauth \ + && pecl install redis-6.0.2 \ + && pecl install xdebug-3.3.0alpha3 \ + && docker-php-ext-configure ldap --with-libdir=lib/$(uname -m)-linux-gnu/ \ + && docker-php-ext-enable apcu \ + && docker-php-ext-enable imagick \ + && docker-php-ext-enable memcached \ + && docker-php-ext-enable oauth \ + && docker-php-ext-enable redis \ + && docker-php-ext-install bcmath \ + && docker-php-ext-install bz2 \ + && docker-php-ext-install calendar \ + && docker-php-ext-install exif \ + && docker-php-ext-install gettext \ + && docker-php-ext-install intl \ + && docker-php-ext-install ldap \ + && docker-php-ext-install mbstring \ + && docker-php-ext-install mysqli \ + && docker-php-ext-install opcache \ + && docker-php-ext-install pcntl \ + && docker-php-ext-install pdo \ + && docker-php-ext-install pdo_mysql \ + && docker-php-ext-install pdo_pgsql \ + && docker-php-ext-install soap \ + && docker-php-ext-install zip \ + && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ + && php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=2.2.22 \ + && php -r "unlink('composer-setup.php');" \ + && chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \ + && apt-get -y clean \ + && apt-get -y autoclean \ + && apt-get -y autoremove \ + && rm -rf /var/lib/apt/lists/* && rm -rf && rm -rf /var/lib/cache/* && rm -rf /var/lib/log/* && rm -rf /tmp/* \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && docker-php-ext-install imap \ + && docker-php-ext-configure gd --enable-gd --with-jpeg --with-webp --with-freetype \ + && docker-php-ext-install gd + +# Tests +RUN curl https://dl.yarnpkg.com