├── web ├── app │ ├── themes │ │ └── .gitkeep │ ├── plugins │ │ └── .gitkeep │ ├── uploads │ │ └── .gitkeep │ └── mu-plugins │ │ ├── register-theme-directory.php │ │ ├── disallow-indexing.php │ │ └── bedrock-autoloader.php ├── index.php └── wp-config.php ├── wp-cli.yml ├── bin ├── push.sh ├── build.sh ├── list-apps.sh ├── undeploy.sh ├── update.sh ├── deploy.sh ├── query-nodes.sh └── query-services.sh ├── docker ├── web │ ├── entrypoint.sh │ ├── .dockerignore │ ├── vts.conf │ ├── Dockerfile │ └── site.template └── wordpress │ ├── .dockerignore │ ├── www.template │ ├── entrypoint.sh │ └── Dockerfile ├── .gitignore ├── config ├── environments │ ├── staging.php │ └── development.php └── application.php ├── .env.example ├── micado ├── _settings └── tosca.yml ├── docker-compose.yml ├── LICENSE.md ├── composer.json ├── README.md ├── CHANGELOG.md └── composer.lock /web/app/themes/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/app/plugins/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/app/uploads/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /wp-cli.yml: -------------------------------------------------------------------------------- 1 | path: web/wp 2 | server: 3 | docroot: web 4 | -------------------------------------------------------------------------------- /bin/push.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker push outlandish/bedrock 4 | docker push outlandish/bedrock-web -------------------------------------------------------------------------------- /web/index.php: -------------------------------------------------------------------------------- 1 | /etc/nginx/conf.d/default.conf 4 | exec nginx -g 'daemon off;' -------------------------------------------------------------------------------- /docker/web/.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .gitignore 3 | .idea 4 | .dockerignore 5 | Dockerfile 6 | 7 | *.md 8 | !README.md 9 | 10 | .env 11 | .env.example 12 | 13 | vendor 14 | 15 | web/ 16 | !web/**/*.css 17 | !web/**/*.js 18 | !web/**/*.png 19 | !web/**/*.jpg 20 | !web/**/*.jpeg 21 | 22 | -------------------------------------------------------------------------------- /docker/web/vts.conf: -------------------------------------------------------------------------------- 1 | vhost_traffic_status_zone; 2 | server { 3 | 4 | listen 9432; 5 | server_name __; 6 | 7 | location /metrics { 8 | vhost_traffic_status_bypass_stats on; 9 | vhost_traffic_status_display; 10 | vhost_traffic_status_display_format prometheus; 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /docker/web/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM outlandish/nginx-vts 2 | 3 | COPY docker/web/site.template /etc/nginx/conf.d/site.template 4 | COPY docker/web/vts.conf /etc/nginx/conf.d/vts.conf 5 | 6 | COPY . /var/www/html 7 | COPY docker/web/entrypoint.sh /usr/local/bin/entrypoint 8 | RUN chmod +x /usr/local/bin/entrypoint 9 | 10 | ENTRYPOINT entrypoint -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Application 2 | web/app/plugins/* 3 | !web/app/plugins/.gitkeep 4 | web/app/mu-plugins/*/ 5 | web/app/upgrade 6 | web/app/uploads/* 7 | !web/app/uploads/.gitkeep 8 | 9 | # WordPress 10 | web/wp 11 | web/.htaccess 12 | 13 | # Dotenv 14 | .env 15 | .env.* 16 | !.env.example 17 | 18 | # Composer 19 | /vendor 20 | 21 | # WP-CLI 22 | wp-cli.local.yml 23 | -------------------------------------------------------------------------------- /docker/wordpress/.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .gitignore 3 | .idea 4 | .dockerignore 5 | Dockerfile 6 | 7 | *.md 8 | !README.md 9 | 10 | .env 11 | .env.example 12 | 13 | vendor 14 | web/app/plugins 15 | web/app/mu-plugins 16 | !web/app/mu-plugins/bedrock-autoloader.php 17 | !web/app/mu-plugins/disallow-indexing.php 18 | !web/app/mu-plugins/register-theme-directory.php 19 | -------------------------------------------------------------------------------- /docker/wordpress/www.template: -------------------------------------------------------------------------------- 1 | [global] 2 | 3 | [www] 4 | 5 | user = www-data 6 | group = www-data 7 | 8 | listen = 127.0.0.1:9000 9 | 10 | pm = dynamic 11 | pm.max_children = ${FPM_PM_MAX_CHILDREN} 12 | pm.start_servers = ${FPM_PM_START_SERVERS} 13 | pm.min_spare_servers = ${FPM_PM_MIN_SPARE_SERVERS} 14 | pm.max_spare_servers = ${FPM_PM_MAX_SPARE_SERVERS} 15 | pm.max_requests = ${FPM_PM_MAX_REQUESTS} 16 | pm.status_path = /status -------------------------------------------------------------------------------- /web/app/mu-plugins/register-theme-directory.php: -------------------------------------------------------------------------------- 1 | /usr/local/etc/php-fpm.d/www.conf 10 | 11 | php-fpm_exporter server & 12 | 13 | php-fpm -------------------------------------------------------------------------------- /bin/list-apps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | settings_file="./micado/_settings" 4 | 5 | . $settings_file 6 | 7 | if [ -z "$MICADO_MASTER" ]; then 8 | echo "Please, set MICADO_MASTER in file named \"$settings_file\"!" 9 | exit 10 | fi 11 | 12 | if [ -z "$SSL_USER" ]; then 13 | echo " Please, set SSL_USER in file named \"$settings_file\"!" 14 | exit 15 | fi 16 | 17 | if [ -z "$SSL_PASS" ]; then 18 | echo " Please, set SSL_PASS in file named \"$settings_file\"!" 19 | exit 20 | fi 21 | 22 | echo "Retrieving list of running apps from MiCADO at $MICADO_MASTER..." 23 | curl --insecure -s -X GET -u "$SSL_USER":"$SSL_PASS" https://$MICADO_MASTER:$MICADO_PORT/toscasubmitter/v1.0/list_app/ | jq 24 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | DB_NAME=database_name 2 | DB_USER=database_user 3 | DB_PASSWORD=database_password 4 | 5 | # Optionally, you can use a data source name (DSN) 6 | # When using a DSN, you can remove the DB_NAME, DB_USER, DB_PASSWORD, and DB_HOST variables 7 | # DATABASE_URL=mysql://database_user:database_password@database_host:database_port/database_name 8 | 9 | # Optional variables 10 | # DB_HOST=localhost 11 | # DB_PREFIX=wp_ 12 | 13 | WP_ENV=development 14 | WP_HOME=http://example.com 15 | WP_SITEURL=${WP_HOME}/wp 16 | 17 | # Generate your keys here: https://roots.io/salts.html 18 | AUTH_KEY='generateme' 19 | SECURE_AUTH_KEY='generateme' 20 | LOGGED_IN_KEY='generateme' 21 | NONCE_KEY='generateme' 22 | AUTH_SALT='generateme' 23 | SECURE_AUTH_SALT='generateme' 24 | LOGGED_IN_SALT='generateme' 25 | NONCE_SALT='generateme' 26 | -------------------------------------------------------------------------------- /bin/undeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | settings_file="./micado/_settings" 4 | 5 | . $settings_file 6 | 7 | if [ -z "$MICADO_MASTER" ]; then 8 | echo "Please, set MICADO_MASTER in file named \"$settings_file\"!" 9 | exit 10 | fi 11 | 12 | if [ -z "$APP_ID" ]; then 13 | echo "Please, set APP_ID in file named \"$settings_file\"!" 14 | exit 15 | fi 16 | 17 | if [ -z "$SSL_USER" ]; then 18 | echo " Please, set SSL_USER in file named \"$settings_file\"!" 19 | exit 20 | fi 21 | 22 | if [ -z "$SSL_PASS" ]; then 23 | echo " Please, set SSL_PASS in file named \"$settings_file\"!" 24 | exit 25 | fi 26 | 27 | echo "Deleting app with id \"$APP_ID\" from MiCADO at $MICADO_MASTER..." 28 | curl --insecure -s -X DELETE -u "$SSL_USER":"$SSL_PASS" https://$MICADO_MASTER:$MICADO_PORT/toscasubmitter/v1.0/app/undeploy/$APP_ID | jq 29 | -------------------------------------------------------------------------------- /bin/update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | settings_file="./micado/_settings" 4 | 5 | . $settings_file 6 | 7 | if [ -z "$MICADO_MASTER" ]; then 8 | echo "Please, set MICADO_MASTER in file named \"$settings_file\"!" 9 | exit 10 | fi 11 | 12 | if [ -z "$SSL_USER" ]; then 13 | echo " Please, set SSL_USER in file named \"$settings_file\"!" 14 | exit 15 | fi 16 | 17 | if [ -z "$SSL_PASS" ]; then 18 | echo " Please, set SSL_PASS in file named \"$settings_file\"!" 19 | exit 20 | fi 21 | 22 | if [ -z "$APP_ID" ]; then 23 | echo "Please, set APP_ID in file named \"$settings_file\"!" 24 | exit 25 | fi 26 | 27 | echo "Updating \"$APP_ID\" on MiCADO at $MICADO_MASTER..." 28 | curl --insecure -s -F file=@"./micado/tosca.yml" -X PUT -u "$SSL_USER":"$SSL_PASS" https://$MICADO_MASTER:$MICADO_PORT/toscasubmitter/v1.0/app/update/$APP_ID | jq 29 | -------------------------------------------------------------------------------- /bin/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | settings_file="./micado/_settings" 4 | 5 | . $settings_file 6 | 7 | if [ -z "$MICADO_MASTER" ]; then 8 | echo "Please, set MICADO_MASTER in file named \"$settings_file\"!" 9 | exit 10 | fi 11 | 12 | if [ -z "$APP_ID" ]; then 13 | echo "Please, set APP_ID in file named \"$settings_file\"!" 14 | exit 15 | fi 16 | 17 | if [ -z "$SSL_USER" ]; then 18 | echo " Please, set SSL_USER in file named \"$settings_file\"!" 19 | exit 20 | fi 21 | 22 | if [ -z "$SSL_PASS" ]; then 23 | echo " Please, set SSL_PASS in file named \"$settings_file\"!" 24 | exit 25 | fi 26 | 27 | echo "Submitting app.yaml to MiCADO at $MICADO_MASTER with appid \"$APP_ID\"..." 28 | curl --insecure -s -F file=@"./micado/tosca.yml" -F id=$APP_ID -X POST -u "$SSL_USER":"$SSL_PASS" https://$MICADO_MASTER:$MICADO_PORT/toscasubmitter/v1.0/app/launch/ | jq 29 | -------------------------------------------------------------------------------- /micado/_settings: -------------------------------------------------------------------------------- 1 | MICADO_MASTER="micado.out.re" 2 | MICADO_PORT="443" 3 | APP_ID="hello-nodejs" 4 | SSL_USER="admin" 5 | SSL_PASS="admin" 6 | ########################################################################### 7 | ############ CONFIGURE SETTINGS ABOVE FOR YOUR MiCADO INSTANCE ############ 8 | ######### AND RENAME stressng_.yaml TO stressng.yaml ########## 9 | ########################################################################### 10 | echo "Settings used:" 11 | echo " MICADO_MASTER: $MICADO_MASTER" 12 | 13 | if [ -z $MICADO_PORT ]; then 14 | MICADO_PORT="443" 15 | PORT_MESSAGE="(none specified, using default)" 16 | fi 17 | 18 | echo " MICADO_PORT: $MICADO_PORT $PORT_MESSAGE" 19 | echo " APP_ID: $APP_ID" 20 | 21 | if [ $SSL_USER ]; then 22 | echo " SSL_USER: $SSL_USER" 23 | fi 24 | 25 | if [ $SSL_PASS ]; then 26 | echo " SSL_PASS: (hidden)" 27 | fi 28 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | version: "3.2" 4 | 5 | services: 6 | 7 | db: 8 | image: mysql:5.7 9 | environment: 10 | MYSQL_ROOT_PASSWORD: wordpress 11 | MYSQL_USER: wordpress 12 | MYSQL_PASSWORD: wordpress 13 | MYSQL_DATABASE: wordpress 14 | restart: always 15 | 16 | wordpress: 17 | image: outlandish/bedrock 18 | environment: 19 | DB_HOST: db 20 | DB_USER: wordpress 21 | DB_PASSWORD: wordpress 22 | DB_NAME: wordpress 23 | WP_HOME: "http://localhost:8080" 24 | WP_ENV: development 25 | restart: always 26 | ports: 27 | - 9253:9253 28 | 29 | web: 30 | image: outlandish/bedrock-web 31 | ports: 32 | - 8080:80 33 | - 9432:9432 34 | environment: 35 | NGINX_PORT: 80 36 | NGINX_HOST: localhost:8080 37 | FPM_HOST: wordpress 38 | FPM_PORT: 9000 39 | restart: always -------------------------------------------------------------------------------- /docker/wordpress/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM outlandish/wordpress AS build 2 | 3 | COPY --from=composer /usr/bin/composer /usr/bin/composer 4 | 5 | RUN chown www-data:www-data /var/www/html 6 | 7 | COPY --chown=www-data:www-data composer.json /var/www/html 8 | COPY --chown=www-data:www-data composer.lock /var/www/html 9 | 10 | USER www-data 11 | 12 | RUN composer install 13 | 14 | FROM outlandish/wordpress 15 | 16 | COPY --from=hipages/php-fpm_exporter /php-fpm_exporter /usr/bin/php-fpm_exporter 17 | EXPOSE 9253 18 | 19 | RUN apk add --no-cache gettext 20 | 21 | COPY ./docker/wordpress/www.template /usr/local/etc/php-fpm.d/www.template 22 | COPY ./docker/wordpress/entrypoint.sh /usr/bin/entrypoint.sh 23 | RUN chmod +x /usr/bin/entrypoint.sh 24 | 25 | ENTRYPOINT ["entrypoint.sh"] 26 | 27 | COPY --from=build --chown=www-data:www-data /var/www/html /var/www/html 28 | 29 | COPY --chown=www-data:www-data ./ /var/www/html 30 | -------------------------------------------------------------------------------- /bin/query-nodes.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | settings_file="../micado/_settings" 4 | 5 | . $settings_file 6 | 7 | if [ -z "$MICADO_MASTER" ]; then 8 | echo "Please, set MICADO_MASTER in file named \"$settings_file\"!" 9 | exit 10 | fi 11 | 12 | if [ -z "$MICADO_PORT" ]; then 13 | echo "Please, set MICADO_PORT in file named \"$settings_file\"!" 14 | exit 15 | fi 16 | 17 | if [ -z "$APP_ID" ]; then 18 | echo "Please, set APP_ID in file named \"$settings_file\"!" 19 | exit 20 | fi 21 | 22 | if [ -z "$SSL_USER" ]; then 23 | echo " Please, set SSL_USER in file named \"$settings_file\"!" 24 | fi 25 | 26 | if [ -z "$SSL_PASS" ]; then 27 | echo " Please, set SSL_PASS in file named \"$settings_file\"!" 28 | fi 29 | 30 | echo "Fetching nodes info for appid $APP_ID from MiCADO at $MICADO_MASTER..." 31 | curl --insecure -s -X GET -u "$SSL_USER":"$SSL_PASS" https://$MICADO_MASTER:$MICADO_PORT/toscasubmitter/v1.0/app/$APP_ID/nodes | jq 32 | -------------------------------------------------------------------------------- /bin/query-services.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | settings_file="../micado/_settings" 4 | 5 | . $settings_file 6 | 7 | if [ -z "$MICADO_MASTER" ]; then 8 | echo "Please, set MICADO_MASTER in file named \"$settings_file\"!" 9 | exit 10 | fi 11 | 12 | if [ -z "$MICADO_PORT" ]; then 13 | echo "Please, set MICADO_PORT in file named \"$settings_file\"!" 14 | exit 15 | fi 16 | 17 | if [ -z "$APP_ID" ]; then 18 | echo "Please, set APP_ID in file named \"$settings_file\"!" 19 | exit 20 | fi 21 | 22 | if [ -z "$SSL_USER" ]; then 23 | echo " Please, set SSL_USER in file named \"$settings_file\"!" 24 | fi 25 | 26 | if [ -z "$SSL_PASS" ]; then 27 | echo " Please, set SSL_PASS in file named \"$settings_file\"!" 28 | fi 29 | 30 | echo "Fetching services info for appid $APP_ID from MiCADO at $MICADO_MASTER..." 31 | curl --insecure -s -X GET -u "$SSL_USER":"$SSL_PASS" https://$MICADO_MASTER:$MICADO_PORT/toscasubmitter/v1.0/app/$APP_ID/services | jq 32 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) Roots 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "roots/bedrock", 3 | "type": "project", 4 | "license": "MIT", 5 | "description": "WordPress boilerplate with modern development tools, easier configuration, and an improved folder structure", 6 | "homepage": "https://roots.io/bedrock/", 7 | "authors": [ 8 | { 9 | "name": "Scott Walkinshaw", 10 | "email": "scott.walkinshaw@gmail.com", 11 | "homepage": "https://github.com/swalkinshaw" 12 | }, 13 | { 14 | "name": "Ben Word", 15 | "email": "ben@benword.com", 16 | "homepage": "https://github.com/retlehs" 17 | } 18 | ], 19 | "keywords": [ 20 | "bedrock", "composer", "roots", "wordpress", "wp", "wp-config" 21 | ], 22 | "support": { 23 | "issues": "https://github.com/roots/bedrock/issues", 24 | "forum": "https://discourse.roots.io/category/bedrock" 25 | }, 26 | "config": { 27 | "preferred-install": "dist" 28 | }, 29 | "repositories": [ 30 | { 31 | "type": "composer", 32 | "url": "https://wpackagist.org" 33 | } 34 | ], 35 | "require": { 36 | "php": ">=7.1", 37 | "composer/installers": "^1.4", 38 | "vlucas/phpdotenv": "^3.0.0", 39 | "oscarotero/env": "^1.1.0", 40 | "roots/wordpress": "5.2.1", 41 | "roots/wp-config": "1.0.0", 42 | "roots/wp-password-bcrypt": "1.0.0" 43 | }, 44 | "require-dev": { 45 | "squizlabs/php_codesniffer": "^3.0.2", 46 | "roave/security-advisories": "dev-master" 47 | }, 48 | "extra": { 49 | "installer-paths": { 50 | "web/app/mu-plugins/{$name}/": ["type:wordpress-muplugin"], 51 | "web/app/plugins/{$name}/": ["type:wordpress-plugin"], 52 | "web/app/themes/{$name}/": ["type:wordpress-theme"] 53 | }, 54 | "wordpress-install-dir": "web/wp" 55 | }, 56 | "scripts": { 57 | "post-root-package-install": [ 58 | "php -r \"copy('.env.example', '.env');\"" 59 | ], 60 | "test": [ 61 | "phpcs" 62 | ] 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bedrock / WordPress / Docker 2 | 3 | This project contains the files required to produce an out of the box version of the Bedrock boilerplate 4 | for WordPress in a Docker image. This could then be used as the starting point to produce docker images 5 | for customised Bedrock projects by cloning this project and changing what plugins and themes are installed, and 6 | updating the `config/application.php` to support additional environment variables for additional configuration 7 | options. 8 | 9 | ## Building a Docker Image 10 | 11 | To build a docker image using the the Bedrock boilerplate as is simply run 12 | 13 | docker build -t . 14 | 15 | This will create a docker image using a multi-stage build. Firstly it will copy in the composer.json and 16 | composer.lock file and run composer.install. If the composer.json and composer.lock files have not changed 17 | then a cached version of a previous build will be used reducing build time where vendor libraries have 18 | not changed. The contents of the vendor folder are then copied to a new Docker image without Composer 19 | installed to reduce image size, and then the rest of the project files are copied as well. 20 | 21 | ## Environment 22 | 23 | When using the built docker image in a docker setup, you will also need a web server for the PHP FPM 24 | to sit behind and a database, which can be run in Docker or on another service. 25 | 26 | To run the Docker Image you will need to set some Environment variables in order for it to respond to 27 | web requests and connect to the database. For full information about the Environment variables, read the 28 | `roots/bedrock` documentation, but you can use the `.env.example` as a starting point, but you will need 29 | to set 30 | 31 | DB_NAME 32 | DB_USER 33 | DB_PASSWORD 34 | DB_HOST 35 | WP_HOME 36 | 37 | The `DB_` prefixed environment variables should be self-explanatory, but the `WP_HOME` should be set 38 | as the URL that the site should be available at, e.g. `https://example.com`. 39 | 40 | ## Adding new plugins/themes 41 | 42 | ### Wpackagist 43 | 44 | The Bedrock boilerplate comes set up to be able to install plugins and themes from Wpackagist. WPackagist is 45 | a listing of all WordPress plugins and themes that mirrors the listings found on the official WordPress.org 46 | website. To install a plugin run the following command 47 | 48 | composer require wpackagist-plugin/some-plugin 49 | 50 | or 51 | 52 | composer require wpackagist-theme/some-theme 53 | 54 | > If you don't have Composer or PHP installed on your laptop, you can run the `composer` command in a 55 | docker container using the following command 56 | 57 | docker run --rm --interactive --tty \ 58 | --volume $PWD:/app \ 59 | composer require wpackagist-plugin/some-plugin --ignore-platform-reqs --no-scripts 60 | 61 | ## MICADO 62 | 63 | Launching on micado is as simple as running `bin/deploy.sh`, however you will need to update the settings 64 | in `micado/_settings` in order to set the right MICADO_HOST and MICADO_PORT. If not running on AWS you will 65 | also need to update the TOSCA description in order to set the right credentials for running on a different cloud. 66 | If changing the MICADO_HOST, you will also have to change the WP_HOME and NGINX_HOST and NGINX_PORT env vars 67 | in the TOSCA description file. 68 | 69 | After launching the app, you will find that the app is available at MICADO_HOST:32349 and the NGINX VTS plugin 70 | output is available at MICADO_HOST:32348/status. The output here will be used for scaling based on the performance 71 | of the NGINX virtualhost under strain -------------------------------------------------------------------------------- /config/application.php: -------------------------------------------------------------------------------- 1 | load(); 30 | $dotenv->required(['WP_HOME', 'WP_SITEURL']); 31 | if (!env('DATABASE_URL')) { 32 | $dotenv->required(['DB_NAME', 'DB_USER', 'DB_PASSWORD']); 33 | } 34 | } 35 | 36 | /** 37 | * Set up our global environment constant and load its config first 38 | * Default: production 39 | */ 40 | define('WP_ENV', env('WP_ENV') ?: 'production'); 41 | 42 | /** 43 | * URLs 44 | */ 45 | Config::define('WP_HOME', env('WP_HOME')); 46 | Config::define('WP_SITEURL', env('WP_SITEURL')); 47 | 48 | /** 49 | * Custom Content Directory 50 | */ 51 | Config::define('CONTENT_DIR', '/app'); 52 | Config::define('WP_CONTENT_DIR', $webroot_dir . Config::get('CONTENT_DIR')); 53 | Config::define('WP_CONTENT_URL', Config::get('WP_HOME') . Config::get('CONTENT_DIR')); 54 | 55 | /** 56 | * DB settings 57 | */ 58 | Config::define('DB_NAME', env('DB_NAME')); 59 | Config::define('DB_USER', env('DB_USER')); 60 | Config::define('DB_PASSWORD', env('DB_PASSWORD')); 61 | Config::define('DB_HOST', env('DB_HOST') ?: 'localhost'); 62 | Config::define('DB_CHARSET', 'utf8mb4'); 63 | Config::define('DB_COLLATE', ''); 64 | $table_prefix = env('DB_PREFIX') ?: 'wp_'; 65 | 66 | if (env('DATABASE_URL')) { 67 | $dsn = (object) parse_url(env('DATABASE_URL')); 68 | 69 | Config::define('DB_NAME', substr($dsn->path, 1)); 70 | Config::define('DB_USER', $dsn->user); 71 | Config::define('DB_PASSWORD', isset($dsn->pass) ? $dsn->pass : null); 72 | Config::define('DB_HOST', isset($dsn->port) ? "{$dsn->host}:{$dsn->port}" : $dsn->host); 73 | } 74 | 75 | /** 76 | * Authentication Unique Keys and Salts 77 | */ 78 | Config::define('AUTH_KEY', env('AUTH_KEY')); 79 | Config::define('SECURE_AUTH_KEY', env('SECURE_AUTH_KEY')); 80 | Config::define('LOGGED_IN_KEY', env('LOGGED_IN_KEY')); 81 | Config::define('NONCE_KEY', env('NONCE_KEY')); 82 | Config::define('AUTH_SALT', env('AUTH_SALT')); 83 | Config::define('SECURE_AUTH_SALT', env('SECURE_AUTH_SALT')); 84 | Config::define('LOGGED_IN_SALT', env('LOGGED_IN_SALT')); 85 | Config::define('NONCE_SALT', env('NONCE_SALT')); 86 | 87 | /** 88 | * Custom Settings 89 | */ 90 | Config::define('AUTOMATIC_UPDATER_DISABLED', true); 91 | Config::define('DISABLE_WP_CRON', env('DISABLE_WP_CRON') ?: false); 92 | // Disable the plugin and theme file editor in the admin 93 | Config::define('DISALLOW_FILE_EDIT', true); 94 | // Disable plugin and theme updates and installation from the admin 95 | Config::define('DISALLOW_FILE_MODS', true); 96 | 97 | /** 98 | * Debugging Settings 99 | */ 100 | Config::define('WP_DEBUG_DISPLAY', false); 101 | Config::define('SCRIPT_DEBUG', false); 102 | ini_set('display_errors', 0); 103 | 104 | /** 105 | * Allow WordPress to detect HTTPS when used behind a reverse proxy or a load balancer 106 | * See https://codex.wordpress.org/Function_Reference/is_ssl#Notes 107 | */ 108 | if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { 109 | $_SERVER['HTTPS'] = 'on'; 110 | } 111 | 112 | $env_config = __DIR__ . '/environments/' . WP_ENV . '.php'; 113 | 114 | if (file_exists($env_config)) { 115 | require_once $env_config; 116 | } 117 | 118 | Config::apply(); 119 | 120 | /** 121 | * Bootstrap WordPress 122 | */ 123 | if (!defined('ABSPATH')) { 124 | define('ABSPATH', $webroot_dir . '/wp/'); 125 | } 126 | -------------------------------------------------------------------------------- /web/app/mu-plugins/bedrock-autoloader.php: -------------------------------------------------------------------------------- 1 | loadPlugins(); 64 | } 65 | 66 | /** 67 | * Run some checks then autoload our plugins. 68 | */ 69 | public function loadPlugins() 70 | { 71 | $this->checkCache(); 72 | $this->validatePlugins(); 73 | $this->countPlugins(); 74 | 75 | array_map(static function () { 76 | include_once WPMU_PLUGIN_DIR . '/' . func_get_args()[0]; 77 | }, array_keys(self::$cache['plugins'])); 78 | 79 | $this->pluginHooks(); 80 | } 81 | 82 | /** 83 | * Filter show_advanced_plugins to display the autoloaded plugins. 84 | * @param $show bool Whether to show the advanced plugins for the specified plugin type. 85 | * @param $type string The plugin type, i.e., `mustuse` or `dropins` 86 | * @return bool We return `false` to prevent WordPress from overriding our work 87 | * {@internal We add the plugin details ourselves, so we return false to disable the filter.} 88 | */ 89 | public function showInAdmin($show, $type) 90 | { 91 | $screen = get_current_screen(); 92 | $current = is_multisite() ? 'plugins-network' : 'plugins'; 93 | 94 | if ($screen->base !== $current || $type !== 'mustuse' || !current_user_can('activate_plugins')) { 95 | return $show; 96 | } 97 | 98 | $this->updateCache(); 99 | 100 | self::$auto_plugins = array_map(function ($auto_plugin) { 101 | $auto_plugin['Name'] .= ' *'; 102 | return $auto_plugin; 103 | }, self::$auto_plugins); 104 | 105 | $GLOBALS['plugins']['mustuse'] = array_unique(array_merge(self::$auto_plugins, self::$mu_plugins), SORT_REGULAR); 106 | 107 | return false; 108 | } 109 | 110 | /** 111 | * This sets the cache or calls for an update 112 | */ 113 | private function checkCache() 114 | { 115 | $cache = get_site_option('bedrock_autoloader'); 116 | 117 | if ($cache === false || (isset($cache['plugins'], $cache['count']) && count($cache['plugins']) !== $cache['count'])) { 118 | $this->updateCache(); 119 | return; 120 | } 121 | 122 | self::$cache = $cache; 123 | } 124 | 125 | /** 126 | * Get the plugins and mu-plugins from the mu-plugin path and remove duplicates. 127 | * Check cache against current plugins for newly activated plugins. 128 | * After that, we can update the cache. 129 | */ 130 | private function updateCache() 131 | { 132 | require_once ABSPATH . 'wp-admin/includes/plugin.php'; 133 | 134 | self::$auto_plugins = get_plugins(self::$relative_path); 135 | self::$mu_plugins = get_mu_plugins(); 136 | $plugins = array_diff_key(self::$auto_plugins, self::$mu_plugins); 137 | $rebuild = !is_array(self::$cache['plugins']); 138 | self::$activated = $rebuild ? $plugins : array_diff_key($plugins, self::$cache['plugins']); 139 | self::$cache = ['plugins' => $plugins, 'count' => $this->countPlugins()]; 140 | 141 | update_site_option('bedrock_autoloader', self::$cache); 142 | } 143 | 144 | /** 145 | * This accounts for the plugin hooks that would run if the plugins were 146 | * loaded as usual. Plugins are removed by deletion, so there's no way 147 | * to deactivate or uninstall. 148 | */ 149 | private function pluginHooks() 150 | { 151 | if (!is_array(self::$activated)) { 152 | return; 153 | } 154 | 155 | foreach (self::$activated as $plugin_file => $plugin_info) { 156 | do_action('activate_' . $plugin_file); 157 | } 158 | } 159 | 160 | /** 161 | * Check that the plugin file exists, if it doesn't update the cache. 162 | */ 163 | private function validatePlugins() 164 | { 165 | foreach (self::$cache['plugins'] as $plugin_file => $plugin_info) { 166 | if (!file_exists(WPMU_PLUGIN_DIR . '/' . $plugin_file)) { 167 | $this->updateCache(); 168 | break; 169 | } 170 | } 171 | } 172 | 173 | /** 174 | * Count the number of autoloaded plugins. 175 | * 176 | * Count our plugins (but only once) by counting the top level folders in the 177 | * mu-plugins dir. If it's more or less than last time, update the cache. 178 | * 179 | * @return int Number of autoloaded plugins. 180 | */ 181 | private function countPlugins() 182 | { 183 | if (isset(self::$count)) { 184 | return self::$count; 185 | } 186 | 187 | $count = count(glob(WPMU_PLUGIN_DIR . '/*/', GLOB_ONLYDIR | GLOB_NOSORT)); 188 | 189 | if (!isset(self::$cache['count']) || $count !== self::$cache['count']) { 190 | self::$count = $count; 191 | $this->updateCache(); 192 | } 193 | 194 | return self::$count; 195 | } 196 | } 197 | 198 | new Autoloader(); 199 | -------------------------------------------------------------------------------- /micado/tosca.yml: -------------------------------------------------------------------------------- 1 | tosca_definitions_version: tosca_simple_yaml_1_0 2 | 3 | imports: 4 | - https://raw.githubusercontent.com/micado-scale/tosca/v0.x.2/micado_types.yaml 5 | 6 | repositories: 7 | docker_hub: https://hub.docker.com/ 8 | 9 | topology_template: 10 | node_templates: 11 | nginxapp: 12 | type: tosca.nodes.MiCADO.Container.Application.Docker 13 | properties: 14 | resources: 15 | requests: 16 | cpu: "250m" 17 | limits: 18 | cpu: "500m" 19 | env: 20 | - name: NGINX_HOST 21 | value: "micado.out.re" 22 | - name: NGINX_PORT 23 | value: "8080" 24 | - name: FPM_HOST 25 | value: "wordpress" 26 | - name: FPM_PORT 27 | value: "9000" 28 | ports: 29 | - target: 8080 30 | type: NodePort 31 | nodePort: 32349 32 | - target: 9432 33 | artifacts: 34 | image: 35 | type: tosca.artifacts.Deployment.Image.Container.Docker 36 | file: outlandish/bedrock-web 37 | repository: docker_hub 38 | interfaces: 39 | Kubernetes: 40 | create: 41 | implementation: image 42 | 43 | wordpress: 44 | type: tosca.nodes.MiCADO.Container.Application.Docker 45 | properties: 46 | resources: 47 | requests: 48 | cpu: "250m" 49 | env: 50 | - name: DB_HOST 51 | value: "db" 52 | - name: DB_NAME 53 | value: "wordpress" 54 | - name: DB_USER 55 | value: "wordpress" 56 | - name: DB_PASSWORD 57 | value: "wordpress" 58 | - name: WP_HOME 59 | value: "http://micado.out.re:32349" 60 | - name: FPM_PM_MAX_CHILDREN 61 | value: "40" 62 | - name: FPM_PM_MIN_SPARE_SERVERS 63 | value: "10" 64 | - name: FPM_PM_MAX_SPARE_SERVERS 65 | value: "5" 66 | ports: 67 | - target: 9000 68 | - target: 9253 69 | artifacts: 70 | image: 71 | type: tosca.artifacts.Deployment.Image.Container.Docker 72 | file: outlandish/bedrock 73 | repository: docker_hub 74 | interfaces: 75 | Kubernetes: 76 | create: 77 | implementation: image 78 | 79 | db: 80 | type: tosca.nodes.MiCADO.Container.Application.Docker 81 | properties: 82 | resources: 83 | requests: 84 | cpu: "250m" 85 | memory: "128Mi" 86 | limits: 87 | cpu: "500m" 88 | memory: "512Mi" 89 | env: 90 | - name: MYSQL_ROOT_PASSWORD 91 | value: "wordpress" 92 | - name: MYSQL_USER 93 | value: "wordpress" 94 | - name: MYSQL_PASSWORD 95 | value: "wordpress" 96 | - name: MYSQL_DATABASE 97 | value: "wordpress" 98 | ports: 99 | - target: 3306 100 | artifacts: 101 | image: 102 | type: tosca.artifacts.Deployment.Image.Container.Docker 103 | file: mysql:5.7 104 | repository: docker_hub 105 | interfaces: 106 | Kubernetes: 107 | create: 108 | implementation: image 109 | 110 | worker_node: 111 | type: tosca.nodes.MiCADO.EC2.Compute 112 | properties: 113 | region_name: eu-west-2 114 | image_id: ami-0d7b406d323c92daa 115 | instance_type: t3.small 116 | security_group_ids: 117 | - "sg-0c60c5f0582d49c2f" 118 | interfaces: 119 | Occopus: 120 | create: 121 | inputs: 122 | interface_cloud: ec2 123 | endpoint_cloud: https://ec2.eu-west-2.amazonaws.com 124 | capabilities: 125 | host: 126 | properties: 127 | num_cpus: 2 128 | mem_size: 2 GB 129 | 130 | outputs: 131 | ports: 132 | value: { get_attribute: [ nginxapp, port ]} 133 | 134 | policies: 135 | - scalability: 136 | type: tosca.policies.Scaling.MiCADO.VirtualMachine.CPU.node 137 | targets: [ worker_node ] 138 | properties: 139 | constants: 140 | NODE_TH_MAX: '50' 141 | NODE_TH_MIN: '15' 142 | min_instances: 1 143 | max_instances: 10 144 | 145 | - scalability: 146 | type: tosca.policies.Scaling.MiCADO.Container.connections.nginx 147 | targets: [ nginxapp ] 148 | properties: 149 | min_instances: 1 150 | max_instances: 10 151 | 152 | - scalability: 153 | type: tosca.policies.Scaling.MiCADO.Container.CPU.wordpress 154 | targets: [ wordpress ] 155 | properties: 156 | constants: 157 | SERVICE_NAME: 'wordpress' 158 | SERVICE_FULL_NAME: 'wordpress' 159 | SERVICE_TH_MAX: '15' 160 | SERVICE_TH_MIN: '10' 161 | min_instances: 1 162 | max_instances: 10 163 | 164 | policy_types: 165 | 166 | tosca.policies.Scaling.MiCADO.Container.CPU.wordpress: 167 | derived_from: tosca.policies.Scaling.MiCADO 168 | description: base MiCADO policy defining data sources, constants, queries, alerts, limits and rules 169 | properties: 170 | alerts: 171 | type: list 172 | description: pre-define alerts for container CPU 173 | default: 174 | - alert: wordpress_overloaded 175 | expr: 'avg(rate(container_cpu_usage_seconds_total{container_label_io_kubernetes_container_name="{{SERVICE_FULL_NAME}}"}[30s]))*100 > {{SERVICE_TH_MAX}}' 176 | for: 5s 177 | - alert: wordpress_underloaded 178 | expr: 'avg(rate(container_cpu_usage_seconds_total{container_label_io_kubernetes_container_name="{{SERVICE_FULL_NAME}}"}[30s]))*100 < {{SERVICE_TH_MIN}}' 179 | for: 30s 180 | required: true 181 | scaling_rule: 182 | type: string 183 | description: pre-define scaling rule for container CPU for WordPress/PHP service 184 | default: | 185 | if len(m_nodes) == m_node_count: 186 | if wordpress_overloaded and m_node_count > m_container_count: 187 | m_container_count+=2 188 | if wordpress_underloaded: 189 | m_container_count-=1 190 | else: 191 | print('Transient phase, skipping update of containers...') 192 | required: true 193 | 194 | tosca.policies.Scaling.MiCADO.Container.connections.nginx: 195 | derived_from: tosca.policies.Scaling.MiCADO 196 | description: base MiCADO policy defining data sources, constants, queries, alerts, limits and rules 197 | properties: 198 | alerts: 199 | type: list 200 | description: pre-define alerts for container writing vs waiting connections 201 | default: 202 | - alert: nginx_overloaded 203 | expr: '(avg(rate(nginx_vts_main_connections{status=~"writing"}[2m])) - avg(rate(nginx_vts_main_connections{status=~"waiting"}[2m]))) < 0' 204 | for: 30s 205 | - alert: nginx_underloaded 206 | expr: '(avg(rate(nginx_vts_main_connections{status=~"writing"}[2m])) - avg(rate(nginx_vts_main_connections{status=~"waiting"}[2m]))) > 0' 207 | for: 2m 208 | required: true 209 | scaling_rule: 210 | type: string 211 | description: pre-define scaling rule for connections to NGINX 212 | default: | 213 | if len(m_nodes) == m_node_count: 214 | if nginx_overloaded and m_node_count > m_container_count: 215 | m_container_count+=1 216 | if nginx_underloaded: 217 | m_container_count-=1 218 | else: 219 | print('Transient phase, skipping update of containers...') 220 | required: true 221 | 222 | tosca.policies.Scaling.MiCADO.VirtualMachine.CPU.node: 223 | derived_from: tosca.policies.Scaling.MiCADO 224 | description: base MiCADO policy defining data sources, constants, queries, alerts, limits and rules 225 | properties: 226 | alerts: 227 | type: list 228 | description: pre-define alerts for VM CPU 229 | default: 230 | - alert: node_overloaded 231 | expr: '(100-(avg(rate(node_cpu{group="worker_cluster",mode="idle"}[60s]))*100)) > {{NODE_TH_MAX}}' 232 | for: 10s 233 | - alert: node_underloaded 234 | expr: '(100-(avg(rate(node_cpu{group="worker_cluster",mode="idle"}[60s]))*100)) < {{NODE_TH_MIN}}' 235 | for: 30s 236 | required: true 237 | scaling_rule: 238 | type: string 239 | description: pre-define scaling rule for VM CPU 240 | default: | 241 | if len(m_nodes) <= m_node_count and m_time_since_node_count_changed > 60: 242 | if node_overloaded: 243 | m_node_count+=1 244 | if node_underloaded: 245 | m_node_count-=1 246 | else: 247 | print('Transient phase, skipping update of nodes...') 248 | required: true 249 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 1.12.6: 2019-05-21 2 | 3 | * Update to WordPress 5.2.1 ([#436](https://github.com/roots/bedrock/pull/436)) 4 | 5 | ### 1.12.5: 2019-05-14 6 | 7 | * Disable WordPress' built-in fatal error handler on development ([#432](https://github.com/roots/bedrock/pull/434)) 8 | 9 | ### 1.12.4: 2019-05-07 10 | 11 | * Update to WordPress 5.2 ([#432](https://github.com/roots/bedrock/pull/432)) 12 | * Configure WP-CLI `wp server` webroot ([#427](https://github.com/roots/bedrock/pull/427)) 13 | * Fix issue with `bedrock_autoloader` option ([#386](https://github.com/roots/bedrock/pull/386)) 14 | 15 | ### 1.12.3: 2019-03-13 16 | 17 | * Update to WordPress 5.1.1 ([#426](https://github.com/roots/bedrock/pull/426)) 18 | 19 | ### 1.12.2: 2019-02-21 20 | 21 | * Update to WordPress 5.1 ([#420](https://github.com/roots/bedrock/pull/420)) 22 | 23 | ### 1.12.1: 2019-02-14 24 | 25 | * Update `vlucas/phpdotenv` ([#417](https://github.com/roots/bedrock/pull/417)) 26 | * Make DSN implementation more uniform ([#415](https://github.com/roots/bedrock/pull/415)) 27 | 28 | ### 1.12.0: 2019-02-07 29 | 30 | * Support database DSN ([#414](https://github.com/roots/bedrock/pull/414)) 31 | * Detect HTTPS if WordPress is behind a reverse proxy ([#413](https://github.com/roots/bedrock/pull/413)) 32 | * Update `vlucas/phpdotenv` to `^3` ([#412](https://github.com/roots/bedrock/pull/412)) 33 | 34 | ### 1.11.1: 2019-01-09 35 | 36 | * Update to WordPress 5.0.3 ([#408](https://github.com/roots/bedrock/pull/408)) 37 | 38 | ### 1.11.0: 2018-12-19 39 | 40 | * Bump PHP requirement to >= 7.1 ([#405](https://github.com/roots/bedrock/pull/405)) 41 | 42 | ### 1.10.2: 2018-12-19 43 | 44 | * Update to WordPress 5.0.2 ([#406](https://github.com/roots/bedrock/pull/406)) 45 | 46 | ### 1.10.1: 2018-12-12 47 | 48 | * Update to WordPress 5.0.1 ([#403](https://github.com/roots/bedrock/pull/403)) 49 | 50 | ### 1.10.0: 2018-12-09 51 | 52 | * Update to WordPress 5.0, switch from `johnpbloch/wordpress` to `roots/wordpress` package ([#395](https://github.com/roots/bedrock/pull/395)) 53 | 54 | ### 1.9.0: 2018-09-17 55 | 56 | * Fix error display in development environments ([c457082](https://github.com/roots/bedrock/commit/c457082cf4b153400d3e34f4f68a30eea4cc7c38)) 57 | * --prefer-dist on roave/security-advisories ([#381](https://github.com/roots/bedrock/pull/381)) 58 | * New Bedrock Configuration Model ([#380](https://github.com/roots/bedrock/pull/380)) 59 | * Remove vendor/.gitkeep ([#379](https://github.com/roots/bedrock/pull/379)) 60 | * Composer 1.7.0 lockfile ([#378](https://github.com/roots/bedrock/pull/378)) 61 | * Adds roave/security-advisories to composer dev deps ([#376](https://github.com/roots/bedrock/pull/376)) 62 | 63 | ### 1.8.12: 2018-08-03 64 | 65 | * Update to WordPress 4.9.8 66 | 67 | ### 1.8.11: 2018-07-09 68 | 69 | * Update to WordPress 4.9.7 70 | 71 | ### 1.8.10: 2018-05-18 72 | 73 | * Update to WordPress 4.9.6 74 | 75 | ### 1.8.9: 2018-04-04 76 | 77 | * Update to WordPress 4.9.5 78 | 79 | ### 1.8.8: 2018-02-06 80 | 81 | * Update to WordPress 4.9.4 82 | 83 | ### 1.8.7: 2018-02-05 84 | 85 | * Update to WordPress 4.9.3 86 | 87 | ### 1.8.6: 2018-01-16 88 | 89 | * Update to WordPress 4.9.2 90 | 91 | ### 1.8.5: 2017-11-29 92 | 93 | * Update to WordPress 4.9.1 94 | 95 | ### 1.8.4: 2017-11-16 96 | 97 | * Update to WordPress 4.9.0 98 | 99 | ### 1.8.3: 2017-10-31 100 | 101 | * Update to WordPress 4.8.3 102 | 103 | ### 1.8.2: 2017-09-19 104 | 105 | * Update to WordPress 4.8.2 106 | 107 | ### 1.8.1: 2017-08-02 108 | 109 | * Update to WordPress 4.8.1 110 | 111 | ### 1.8.0: 2017-06-08 112 | 113 | * Update to WordPress 4.8.0 114 | 115 | ### 1.7.9: 2017-05-16 116 | 117 | * Update to WordPress 4.7.5 118 | 119 | ### 1.7.8: 2017-05-03 120 | 121 | * Update `johnpbloch/wordpress` to 4.7.4.1 (see https://github.com/johnpbloch/wordpress/issues/32) 122 | 123 | ### 1.7.7: 2017-04-20 124 | 125 | * Update to WordPress 4.7.4 126 | 127 | ### 1.7.6: 2017-03-06 128 | 129 | * Update to WordPress 4.7.3 130 | 131 | ### 1.7.5: 2017-01-26 132 | 133 | * Update to WordPress 4.7.2 134 | 135 | ### 1.7.4: 2017-01-11 136 | 137 | * Update to WordPress 4.7.1 138 | * Add Optional variables to `.env.example` 139 | * Remove unnecessary gitignore rules ([#286](https://github.com/roots/bedrock/pull/286)) 140 | 141 | ### 1.7.3: 2016-12-06 142 | 143 | * Update to WordPress 4.7 144 | * Default `WP_ENV` to `production` instead of `development` ([#277](https://github.com/roots/bedrock/pull/277)) 145 | 146 | ### 1.7.2: 2016-09-07 147 | 148 | * Update to WordPress 4.6.1 149 | 150 | ### 1.7.1: 2016-08-16 151 | 152 | * Update to WordPress 4.6 153 | 154 | ### 1.7.0: 2016-07-10 155 | 156 | * Bump PHP requirement to >= 5.6 (5.5 is no longer supported) 157 | 158 | ### 1.6.4: 2016-06-21 159 | 160 | * Update to WordPress 4.5.3 161 | 162 | ### 1.6.3: 2016-05-06 163 | 164 | * Update to WordPress 4.5.2 165 | 166 | ### 1.6.2: 2016-04-26 167 | 168 | * Update to WordPress 4.5.1 169 | 170 | ### 1.6.1: 2016-04-12 171 | 172 | * Update to WordPress 4.5 173 | * Update coding standards (PSR-2) ([#244](https://github.com/roots/bedrock/pull/244)) 174 | 175 | ### 1.6.0: 2016-03-03 176 | 177 | * Add wp-password-bcrypt for more secure passwords ([#243](https://github.com/roots/bedrock/pull/243)) 178 | 179 | ### 1.5.4: 2016-02-29 180 | 181 | * Use HTTPS for wpackagist.org 182 | 183 | ### 1.5.3: 2016-02-03 184 | 185 | * Update to WordPress 4.4.2 186 | 187 | ### 1.5.2: 2016-02-01 188 | 189 | * Bump `composer/installers` dependency to 1.0.23 to fix deprecation notice 190 | 191 | ### 1.5.1: 2016-01-27 192 | 193 | * Use [oscarotero/env](https://github.com/oscarotero/env) instead of `getenv` ([#229](https://github.com/roots/bedrock/pull/233)) 194 | 195 | ### 1.5.0: 2016-01-17 196 | 197 | * Fix `DISABLE_WP_CRON` setting via ENV variable ([#229](https://github.com/roots/bedrock/pull/229)) 198 | * Set default `DB_CHARSET` to `utf8mb4` 199 | 200 | ### 1.4.7: 2016-01-07 201 | 202 | * Update to WordPress 4.4.1 203 | 204 | ### 1.4.6: 2015-12-09 205 | 206 | * Update to WordPress 4.4 207 | 208 | ### 1.4.5: 2015-09-16 209 | 210 | * Update to WordPress 4.3.1 211 | * Bump minimum required PHP version to 5.5 ([#201](https://github.com/roots/bedrock/pull/201)) 212 | 213 | ### 1.4.4: 2015-08-18 214 | 215 | * Update to WordPress 4.3 216 | 217 | ### 1.4.3: 2015-08-04 218 | 219 | * Update to WordPress 4.2.4 220 | 221 | ### 1.4.2: 2015-07-24 222 | 223 | * Update to WordPress 4.2.3 224 | 225 | ### 1.4.1: 2015-06-30 226 | 227 | * Dotenv 2.0.1 update 228 | 229 | ### 1.4.0: 2015-06-07 230 | 231 | * Removed .env generation script 232 | 233 | ### 1.3.7: 2015-05-07 234 | 235 | * Update to WordPress 4.2.2 236 | 237 | ### 1.3.6: 2015-04-27 238 | 239 | * Update to WordPress 4.2.1 240 | 241 | ### 1.3.5: 2015-04-23 242 | 243 | * Update to WordPress 4.2 244 | * Update to WordPress 4.1.2 245 | * Don't register theme directory if `WP_DEFAULT_THEME` is defined 246 | * Move Capistrano configs to https://github.com/roots/bedrock-capistrano 247 | 248 | ### 1.3.4: 2015-02-18 249 | 250 | * WordPress 4.1.1 fix 251 | 252 | ### 1.3.3: 2015-02-18 253 | 254 | * Update to WordPress 4.1.1 255 | * mu-plugins autoloader Multisite fix 256 | * Coding standards update + TravisCI integration 257 | 258 | ### 1.3.2: 2014-12-18 259 | 260 | * Update to WordPress 4.1 261 | * Remove WPLANG constant 262 | 263 | ### 1.3.1: 2014-11-28 264 | 265 | * Add Capistrano task to fix/update WP theme paths after deploys 266 | 267 | ### 1.3.0: 2014-11-20 268 | 269 | * Update to WordPress 4.0.1 270 | * Use johnpbloch/wordpress package instead of custom repository 271 | * Update default deploy.rb 272 | * Require PHP >= 5.4 in composer.json 273 | * Better PSR-1 adherence 274 | * Update phpdotenv dependency to 1.0.9 275 | * Fix Composer installer path plugin order 276 | * Add bedrock-autoloader mu-plugin 277 | 278 | ### 1.2.7: 2014-09-04 279 | 280 | * Update to WordPress 4.0 281 | 282 | ### 1.2.6: 2014-08-06 283 | 284 | * Update to WordPress 3.9.2 285 | * Minor deploy fix 286 | * Doc updates 287 | 288 | ### 1.2.5: 2014-07-16 289 | 290 | * Update to WordPress 3.9.1 291 | * Doc updates 292 | * Add `DB_PREFIX` constant 293 | * Update Gem versions 294 | * Disallow indexing in non-production environments 295 | 296 | ### 1.2.4: 2014-04-17 297 | 298 | * Fixes issue with 3.9 update (`composer.lock` wasn't updated) 299 | 300 | ### 1.2.3: 2014-04-16 301 | 302 | * Update to WordPress 3.9 303 | 304 | ### 1.2.2: 2014-04-14 305 | 306 | * Update to WordPress 3.8.3 307 | * Only run `Dotenv::load` if `.env` file exists 308 | 309 | ### 1.2.1: 2014-04-08 310 | 311 | * Update to WordPress 3.8.2 312 | 313 | ### 1.2.0: 2014-04-07 314 | 315 | * WP package now has `wordpress` vendor name: `wordpress/wordpress` 316 | * Remove wp-cli and add `wp-cli.yml` config 317 | 318 | ### 1.1.1: 2014-03-11 319 | 320 | * Update phpdotenv to 1.0.6 321 | * Update wp-cli to v0.14.1 322 | * Update README to refence new WordPress Packagist namespaces 323 | * Fix uploads path in `linked_dirs` for Capistrano deploys 324 | 325 | ### 1.1.0: 2014-03-01 326 | 327 | * Update to Capistrano 3.1.0: `deploy:restart` is no longer run by default 328 | * Better webroot structure: introduces the `/web` directory as the document/web root for web server vhosts 329 | 330 | ### 1.0.0: 2013-12-18 331 | 332 | * Initial release 333 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "133ee4a8b79e9b0f36e935860bcfa857", 8 | "packages": [ 9 | { 10 | "name": "composer/installers", 11 | "version": "v1.6.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/composer/installers.git", 15 | "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b", 20 | "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "composer-plugin-api": "^1.0" 25 | }, 26 | "replace": { 27 | "roundcube/plugin-installer": "*", 28 | "shama/baton": "*" 29 | }, 30 | "require-dev": { 31 | "composer/composer": "1.0.*@dev", 32 | "phpunit/phpunit": "^4.8.36" 33 | }, 34 | "type": "composer-plugin", 35 | "extra": { 36 | "class": "Composer\\Installers\\Plugin", 37 | "branch-alias": { 38 | "dev-master": "1.0-dev" 39 | } 40 | }, 41 | "autoload": { 42 | "psr-4": { 43 | "Composer\\Installers\\": "src/Composer/Installers" 44 | } 45 | }, 46 | "notification-url": "https://packagist.org/downloads/", 47 | "license": [ 48 | "MIT" 49 | ], 50 | "authors": [ 51 | { 52 | "name": "Kyle Robinson Young", 53 | "email": "kyle@dontkry.com", 54 | "homepage": "https://github.com/shama" 55 | } 56 | ], 57 | "description": "A multi-framework Composer library installer", 58 | "homepage": "https://composer.github.io/installers/", 59 | "keywords": [ 60 | "Craft", 61 | "Dolibarr", 62 | "Eliasis", 63 | "Hurad", 64 | "ImageCMS", 65 | "Kanboard", 66 | "Lan Management System", 67 | "MODX Evo", 68 | "Mautic", 69 | "Maya", 70 | "OXID", 71 | "Plentymarkets", 72 | "Porto", 73 | "RadPHP", 74 | "SMF", 75 | "Thelia", 76 | "WolfCMS", 77 | "agl", 78 | "aimeos", 79 | "annotatecms", 80 | "attogram", 81 | "bitrix", 82 | "cakephp", 83 | "chef", 84 | "cockpit", 85 | "codeigniter", 86 | "concrete5", 87 | "croogo", 88 | "dokuwiki", 89 | "drupal", 90 | "eZ Platform", 91 | "elgg", 92 | "expressionengine", 93 | "fuelphp", 94 | "grav", 95 | "installer", 96 | "itop", 97 | "joomla", 98 | "kohana", 99 | "laravel", 100 | "lavalite", 101 | "lithium", 102 | "magento", 103 | "majima", 104 | "mako", 105 | "mediawiki", 106 | "modulework", 107 | "modx", 108 | "moodle", 109 | "osclass", 110 | "phpbb", 111 | "piwik", 112 | "ppi", 113 | "puppet", 114 | "pxcms", 115 | "reindex", 116 | "roundcube", 117 | "shopware", 118 | "silverstripe", 119 | "sydes", 120 | "symfony", 121 | "typo3", 122 | "wordpress", 123 | "yawik", 124 | "zend", 125 | "zikula" 126 | ], 127 | "time": "2018-08-27T06:10:37+00:00" 128 | }, 129 | { 130 | "name": "oscarotero/env", 131 | "version": "v1.1.0", 132 | "source": { 133 | "type": "git", 134 | "url": "https://github.com/oscarotero/env.git", 135 | "reference": "0f676e41d758fa984806c32e27f0cf7afa63d8db" 136 | }, 137 | "dist": { 138 | "type": "zip", 139 | "url": "https://api.github.com/repos/oscarotero/env/zipball/0f676e41d758fa984806c32e27f0cf7afa63d8db", 140 | "reference": "0f676e41d758fa984806c32e27f0cf7afa63d8db", 141 | "shasum": "" 142 | }, 143 | "require": { 144 | "php": ">=5.2" 145 | }, 146 | "type": "library", 147 | "autoload": { 148 | "psr-0": { 149 | "Env": "src/" 150 | } 151 | }, 152 | "notification-url": "https://packagist.org/downloads/", 153 | "license": [ 154 | "MIT" 155 | ], 156 | "authors": [ 157 | { 158 | "name": "Oscar Otero", 159 | "email": "oom@oscarotero.com", 160 | "homepage": "http://oscarotero.com", 161 | "role": "Developer" 162 | } 163 | ], 164 | "description": "Simple library to consume environment variables", 165 | "homepage": "https://github.com/oscarotero/env", 166 | "keywords": [ 167 | "env" 168 | ], 169 | "time": "2017-07-17T20:41:59+00:00" 170 | }, 171 | { 172 | "name": "phpoption/phpoption", 173 | "version": "1.5.0", 174 | "source": { 175 | "type": "git", 176 | "url": "https://github.com/schmittjoh/php-option.git", 177 | "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" 178 | }, 179 | "dist": { 180 | "type": "zip", 181 | "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", 182 | "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", 183 | "shasum": "" 184 | }, 185 | "require": { 186 | "php": ">=5.3.0" 187 | }, 188 | "require-dev": { 189 | "phpunit/phpunit": "4.7.*" 190 | }, 191 | "type": "library", 192 | "extra": { 193 | "branch-alias": { 194 | "dev-master": "1.3-dev" 195 | } 196 | }, 197 | "autoload": { 198 | "psr-0": { 199 | "PhpOption\\": "src/" 200 | } 201 | }, 202 | "notification-url": "https://packagist.org/downloads/", 203 | "license": [ 204 | "Apache2" 205 | ], 206 | "authors": [ 207 | { 208 | "name": "Johannes M. Schmitt", 209 | "email": "schmittjoh@gmail.com" 210 | } 211 | ], 212 | "description": "Option Type for PHP", 213 | "keywords": [ 214 | "language", 215 | "option", 216 | "php", 217 | "type" 218 | ], 219 | "time": "2015-07-25T16:39:46+00:00" 220 | }, 221 | { 222 | "name": "roots/wordpress", 223 | "version": "5.2.1", 224 | "source": { 225 | "type": "git", 226 | "url": "https://github.com/WordPress/WordPress.git", 227 | "reference": "5.2.1" 228 | }, 229 | "dist": { 230 | "type": "zip", 231 | "url": "https://api.github.com/repos/WordPress/WordPress/zipball/5.2.1", 232 | "reference": "5.2.1" 233 | }, 234 | "require": { 235 | "php": ">=5.3.2", 236 | "roots/wordpress-core-installer": ">=1.0.0" 237 | }, 238 | "type": "wordpress-core", 239 | "notification-url": "https://packagist.org/downloads/", 240 | "license": [ 241 | "GPL-2.0-or-later" 242 | ], 243 | "authors": [ 244 | { 245 | "name": "WordPress Community", 246 | "homepage": "https://wordpress.org/about/" 247 | } 248 | ], 249 | "description": "WordPress is web software you can use to create a beautiful website or blog.", 250 | "homepage": "https://wordpress.org/", 251 | "keywords": [ 252 | "blog", 253 | "cms", 254 | "wordpress" 255 | ], 256 | "time": "2019-05-21T19:53:10+00:00" 257 | }, 258 | { 259 | "name": "roots/wordpress-core-installer", 260 | "version": "1.1.0", 261 | "source": { 262 | "type": "git", 263 | "url": "https://github.com/roots/wordpress-core-installer.git", 264 | "reference": "83744b1ba5bbdb5bb225f47e24da61a6cf6c5b80" 265 | }, 266 | "dist": { 267 | "type": "zip", 268 | "url": "https://api.github.com/repos/roots/wordpress-core-installer/zipball/83744b1ba5bbdb5bb225f47e24da61a6cf6c5b80", 269 | "reference": "83744b1ba5bbdb5bb225f47e24da61a6cf6c5b80", 270 | "shasum": "" 271 | }, 272 | "require": { 273 | "composer-plugin-api": "^1.0" 274 | }, 275 | "conflict": { 276 | "composer/installers": "<1.0.6" 277 | }, 278 | "replace": { 279 | "johnpbloch/wordpress-core-installer": "*" 280 | }, 281 | "require-dev": { 282 | "composer/composer": "^1.0", 283 | "phpunit/phpunit": ">=4.8.35" 284 | }, 285 | "type": "composer-plugin", 286 | "extra": { 287 | "class": "Roots\\Composer\\WordPressCorePlugin" 288 | }, 289 | "autoload": { 290 | "psr-4": { 291 | "Roots\\Composer\\": "src/" 292 | } 293 | }, 294 | "notification-url": "https://packagist.org/downloads/", 295 | "license": [ 296 | "GPL-2.0-or-later" 297 | ], 298 | "authors": [ 299 | { 300 | "name": "John P. Bloch", 301 | "email": "me@johnpbloch.com" 302 | }, 303 | { 304 | "name": "Roots", 305 | "email": "team@roots.io" 306 | } 307 | ], 308 | "description": "A custom installer to handle deploying WordPress with composer", 309 | "keywords": [ 310 | "wordpress" 311 | ], 312 | "time": "2018-12-10T00:22:15+00:00" 313 | }, 314 | { 315 | "name": "roots/wp-config", 316 | "version": "1.0.0", 317 | "source": { 318 | "type": "git", 319 | "url": "https://github.com/roots/wp-config.git", 320 | "reference": "37c38230796119fb487fa03346ab0706ce6d4962" 321 | }, 322 | "dist": { 323 | "type": "zip", 324 | "url": "https://api.github.com/repos/roots/wp-config/zipball/37c38230796119fb487fa03346ab0706ce6d4962", 325 | "reference": "37c38230796119fb487fa03346ab0706ce6d4962", 326 | "shasum": "" 327 | }, 328 | "require": { 329 | "php": ">=5.6" 330 | }, 331 | "require-dev": { 332 | "php-coveralls/php-coveralls": "^2.1", 333 | "phpunit/phpunit": "^5.7", 334 | "roave/security-advisories": "dev-master", 335 | "squizlabs/php_codesniffer": "^3.3" 336 | }, 337 | "type": "library", 338 | "autoload": { 339 | "psr-4": { 340 | "Roots\\WPConfig\\": "src" 341 | } 342 | }, 343 | "notification-url": "https://packagist.org/downloads/", 344 | "license": [ 345 | "MIT" 346 | ], 347 | "authors": [ 348 | { 349 | "name": "Austin Pray", 350 | "email": "austin@austinpray.com" 351 | } 352 | ], 353 | "description": "Collect configuration values and safely define() them", 354 | "time": "2018-08-10T14:18:38+00:00" 355 | }, 356 | { 357 | "name": "roots/wp-password-bcrypt", 358 | "version": "1.0.0", 359 | "source": { 360 | "type": "git", 361 | "url": "https://github.com/roots/wp-password-bcrypt.git", 362 | "reference": "5cecd2e98ccc3193443cc5c5db9b3bc7abed5ffa" 363 | }, 364 | "dist": { 365 | "type": "zip", 366 | "url": "https://api.github.com/repos/roots/wp-password-bcrypt/zipball/5cecd2e98ccc3193443cc5c5db9b3bc7abed5ffa", 367 | "reference": "5cecd2e98ccc3193443cc5c5db9b3bc7abed5ffa", 368 | "shasum": "" 369 | }, 370 | "require": { 371 | "composer/installers": "~1.0", 372 | "php": ">=5.5.0" 373 | }, 374 | "require-dev": { 375 | "brain/monkey": "^1.3.1", 376 | "mockery/mockery": "^0.9.4", 377 | "phpunit/phpunit": "^4.8.23|^5.2.9", 378 | "squizlabs/php_codesniffer": "^2.5.1" 379 | }, 380 | "type": "library", 381 | "autoload": { 382 | "files": [ 383 | "wp-password-bcrypt.php" 384 | ] 385 | }, 386 | "notification-url": "https://packagist.org/downloads/", 387 | "license": [ 388 | "MIT" 389 | ], 390 | "authors": [ 391 | { 392 | "name": "Scott Walkinshaw", 393 | "email": "scott.walkinshaw@gmail.com", 394 | "homepage": "https://github.com/swalkinshaw" 395 | }, 396 | { 397 | "name": "qwp6t", 398 | "homepage": "https://github.com/qwp6t" 399 | }, 400 | { 401 | "name": "Jan Pingel", 402 | "email": "jpingel@bitpiston.com", 403 | "homepage": "http://janpingel.com" 404 | } 405 | ], 406 | "description": "WordPress plugin which replaces wp_hash_password and wp_check_password's phpass hasher with PHP 5.5's password_hash and password_verify using bcrypt.", 407 | "homepage": "https://roots.io/plugins/wp-password-bcrypt", 408 | "keywords": [ 409 | "wordpress wp bcrypt password" 410 | ], 411 | "time": "2016-03-01T16:27:06+00:00" 412 | }, 413 | { 414 | "name": "symfony/polyfill-ctype", 415 | "version": "v1.10.0", 416 | "source": { 417 | "type": "git", 418 | "url": "https://github.com/symfony/polyfill-ctype.git", 419 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" 420 | }, 421 | "dist": { 422 | "type": "zip", 423 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", 424 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", 425 | "shasum": "" 426 | }, 427 | "require": { 428 | "php": ">=5.3.3" 429 | }, 430 | "suggest": { 431 | "ext-ctype": "For best performance" 432 | }, 433 | "type": "library", 434 | "extra": { 435 | "branch-alias": { 436 | "dev-master": "1.9-dev" 437 | } 438 | }, 439 | "autoload": { 440 | "psr-4": { 441 | "Symfony\\Polyfill\\Ctype\\": "" 442 | }, 443 | "files": [ 444 | "bootstrap.php" 445 | ] 446 | }, 447 | "notification-url": "https://packagist.org/downloads/", 448 | "license": [ 449 | "MIT" 450 | ], 451 | "authors": [ 452 | { 453 | "name": "Symfony Community", 454 | "homepage": "https://symfony.com/contributors" 455 | }, 456 | { 457 | "name": "Gert de Pagter", 458 | "email": "BackEndTea@gmail.com" 459 | } 460 | ], 461 | "description": "Symfony polyfill for ctype functions", 462 | "homepage": "https://symfony.com", 463 | "keywords": [ 464 | "compatibility", 465 | "ctype", 466 | "polyfill", 467 | "portable" 468 | ], 469 | "time": "2018-08-06T14:22:27+00:00" 470 | }, 471 | { 472 | "name": "vlucas/phpdotenv", 473 | "version": "v3.3.2", 474 | "source": { 475 | "type": "git", 476 | "url": "https://github.com/vlucas/phpdotenv.git", 477 | "reference": "1ee9369cfbf26cfcf1f2515d98f15fab54e9647a" 478 | }, 479 | "dist": { 480 | "type": "zip", 481 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1ee9369cfbf26cfcf1f2515d98f15fab54e9647a", 482 | "reference": "1ee9369cfbf26cfcf1f2515d98f15fab54e9647a", 483 | "shasum": "" 484 | }, 485 | "require": { 486 | "php": "^5.4 || ^7.0", 487 | "phpoption/phpoption": "^1.5", 488 | "symfony/polyfill-ctype": "^1.9" 489 | }, 490 | "require-dev": { 491 | "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0" 492 | }, 493 | "type": "library", 494 | "extra": { 495 | "branch-alias": { 496 | "dev-master": "3.3-dev" 497 | } 498 | }, 499 | "autoload": { 500 | "psr-4": { 501 | "Dotenv\\": "src/" 502 | } 503 | }, 504 | "notification-url": "https://packagist.org/downloads/", 505 | "license": [ 506 | "BSD-3-Clause" 507 | ], 508 | "authors": [ 509 | { 510 | "name": "Vance Lucas", 511 | "email": "vance@vancelucas.com", 512 | "homepage": "http://www.vancelucas.com" 513 | } 514 | ], 515 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", 516 | "keywords": [ 517 | "dotenv", 518 | "env", 519 | "environment" 520 | ], 521 | "time": "2019-01-30T10:43:17+00:00" 522 | } 523 | ], 524 | "packages-dev": [ 525 | { 526 | "name": "roave/security-advisories", 527 | "version": "dev-master", 528 | "source": { 529 | "type": "git", 530 | "url": "https://github.com/Roave/SecurityAdvisories.git", 531 | "reference": "54ee79a17e8cdc4ff8a1570198d5bc669a5803b8" 532 | }, 533 | "dist": { 534 | "type": "zip", 535 | "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/54ee79a17e8cdc4ff8a1570198d5bc669a5803b8", 536 | "reference": "54ee79a17e8cdc4ff8a1570198d5bc669a5803b8", 537 | "shasum": "" 538 | }, 539 | "conflict": { 540 | "3f/pygmentize": "<1.2", 541 | "adodb/adodb-php": "<5.20.12", 542 | "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", 543 | "amphp/artax": "<1.0.6|>=2,<2.0.6", 544 | "amphp/http": "<1.0.1", 545 | "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", 546 | "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", 547 | "aws/aws-sdk-php": ">=3,<3.2.1", 548 | "brightlocal/phpwhois": "<=4.2.5", 549 | "bugsnag/bugsnag-laravel": ">=2,<2.0.2", 550 | "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.0.15|>=3.1,<3.1.4|>=3.4,<3.4.14|>=3.5,<3.5.17|>=3.6,<3.6.4", 551 | "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", 552 | "cartalyst/sentry": "<=2.1.6", 553 | "codeigniter/framework": "<=3.0.6", 554 | "composer/composer": "<=1.0.0-alpha11", 555 | "contao-components/mediaelement": ">=2.14.2,<2.21.1", 556 | "contao/core": ">=2,<3.5.35", 557 | "contao/core-bundle": ">=4,<4.4.18|>=4.5,<4.5.8", 558 | "contao/listing-bundle": ">=4,<4.4.8", 559 | "contao/newsletter-bundle": ">=4,<4.1", 560 | "david-garcia/phpwhois": "<=4.3.1", 561 | "doctrine/annotations": ">=1,<1.2.7", 562 | "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", 563 | "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", 564 | "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2", 565 | "doctrine/doctrine-bundle": "<1.5.2", 566 | "doctrine/doctrine-module": "<=0.7.1", 567 | "doctrine/mongodb-odm": ">=1,<1.0.2", 568 | "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", 569 | "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", 570 | "dompdf/dompdf": ">=0.6,<0.6.2", 571 | "drupal/core": ">=7,<7.62|>=8,<8.5.9|>=8.6,<8.6.6", 572 | "drupal/drupal": ">=7,<7.62|>=8,<8.5.9|>=8.6,<8.6.6", 573 | "erusev/parsedown": "<1.7", 574 | "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.13.1|>=6,<6.7.9.1|>=6.8,<6.13.5.1|>=7,<7.2.4.1|>=7.3,<7.3.2.1", 575 | "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.12.3|>=2011,<2017.12.4.3|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3", 576 | "ezsystems/repository-forms": ">=2.3,<2.3.2.1", 577 | "ezyang/htmlpurifier": "<4.1.1", 578 | "firebase/php-jwt": "<2", 579 | "fooman/tcpdf": "<6.2.22", 580 | "fossar/tcpdf-parser": "<6.2.22", 581 | "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", 582 | "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", 583 | "fuel/core": "<1.8.1", 584 | "gree/jose": "<=2.2", 585 | "gregwar/rst": "<1.0.3", 586 | "guzzlehttp/guzzle": ">=6,<6.2.1|>=4.0.0-rc2,<4.2.4|>=5,<5.3.1", 587 | "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", 588 | "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", 589 | "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29", 590 | "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", 591 | "ivankristianto/phpwhois": "<=4.3", 592 | "james-heinrich/getid3": "<1.9.9", 593 | "joomla/session": "<1.3.1", 594 | "jsmitty12/phpwhois": "<5.1", 595 | "kazist/phpwhois": "<=4.2.6", 596 | "kreait/firebase-php": ">=3.2,<3.8.1", 597 | "la-haute-societe/tcpdf": "<6.2.22", 598 | "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", 599 | "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", 600 | "league/commonmark": ">=0.15.6,<0.18.1", 601 | "magento/magento1ce": "<1.9.4", 602 | "magento/magento1ee": ">=1.9,<1.14.4", 603 | "magento/product-community-edition": ">=2,<2.2.7", 604 | "monolog/monolog": ">=1.8,<1.12", 605 | "namshi/jose": "<2.2", 606 | "onelogin/php-saml": "<2.10.4", 607 | "openid/php-openid": "<2.3", 608 | "oro/crm": ">=1.7,<1.7.4", 609 | "oro/platform": ">=1.7,<1.7.4", 610 | "padraic/humbug_get_contents": "<1.1.2", 611 | "pagarme/pagarme-php": ">=0,<3", 612 | "paragonie/random_compat": "<2", 613 | "paypal/merchant-sdk-php": "<3.12", 614 | "pear/archive_tar": "<1.4.4", 615 | "phpmailer/phpmailer": ">=5,<5.2.27|>=6,<6.0.6", 616 | "phpoffice/phpexcel": "<=1.8.1", 617 | "phpoffice/phpspreadsheet": "<=1.5", 618 | "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", 619 | "phpwhois/phpwhois": "<=4.2.5", 620 | "phpxmlrpc/extras": "<0.6.1", 621 | "propel/propel": ">=2.0.0-alpha1,<=2.0.0-alpha7", 622 | "propel/propel1": ">=1,<=1.7.1", 623 | "pusher/pusher-php-server": "<2.2.1", 624 | "robrichards/xmlseclibs": ">=1,<3.0.2", 625 | "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", 626 | "sensiolabs/connect": "<4.2.3", 627 | "serluck/phpwhois": "<=4.2.6", 628 | "shopware/shopware": "<5.3.7", 629 | "silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11", 630 | "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", 631 | "silverstripe/framework": ">=3,<3.3", 632 | "silverstripe/userforms": "<3", 633 | "simple-updates/phpwhois": "<=1", 634 | "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", 635 | "simplesamlphp/simplesamlphp": "<1.16.3", 636 | "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", 637 | "slim/slim": "<2.6", 638 | "smarty/smarty": "<3.1.33", 639 | "socalnick/scn-social-auth": "<1.15.2", 640 | "spoonity/tcpdf": "<6.2.22", 641 | "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", 642 | "stormpath/sdk": ">=0,<9.9.99", 643 | "swiftmailer/swiftmailer": ">=4,<5.4.5", 644 | "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", 645 | "sylius/sylius": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", 646 | "symfony/dependency-injection": ">=2,<2.0.17", 647 | "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", 648 | "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2", 649 | "symfony/http-foundation": ">=2,<2.7.49|>=2.8,<2.8.44|>=3,<3.3.18|>=3.4,<3.4.14|>=4,<4.0.14|>=4.1,<4.1.3", 650 | "symfony/http-kernel": ">=2,<2.3.29|>=2.4,<2.5.12|>=2.6,<2.6.8", 651 | "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", 652 | "symfony/polyfill": ">=1,<1.10", 653 | "symfony/polyfill-php55": ">=1,<1.10", 654 | "symfony/routing": ">=2,<2.0.19", 655 | "symfony/security": ">=2,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.19|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", 656 | "symfony/security-bundle": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", 657 | "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.37|>=3,<3.3.17|>=3.4,<3.4.7|>=4,<4.0.7", 658 | "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", 659 | "symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", 660 | "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", 661 | "symfony/serializer": ">=2,<2.0.11", 662 | "symfony/symfony": ">=2,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", 663 | "symfony/translation": ">=2,<2.0.17", 664 | "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", 665 | "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", 666 | "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", 667 | "tecnickcom/tcpdf": "<6.2.22", 668 | "thelia/backoffice-default-template": ">=2.1,<2.1.2", 669 | "thelia/thelia": ">=2.1.0-beta1,<2.1.3|>=2.1,<2.1.2", 670 | "theonedemon/phpwhois": "<=4.2.5", 671 | "titon/framework": ">=0,<9.9.99", 672 | "truckersmp/phpwhois": "<=4.3.1", 673 | "twig/twig": "<1.20", 674 | "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.23|>=9,<9.5.4", 675 | "typo3/cms-core": ">=8,<8.7.23|>=9,<9.5.4", 676 | "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", 677 | "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", 678 | "ua-parser/uap-php": "<3.8", 679 | "wallabag/tcpdf": "<6.2.22", 680 | "willdurand/js-translation-bundle": "<2.1.1", 681 | "yiisoft/yii": ">=1.1.14,<1.1.15", 682 | "yiisoft/yii2": "<2.0.15", 683 | "yiisoft/yii2-bootstrap": "<2.0.4", 684 | "yiisoft/yii2-dev": "<2.0.15", 685 | "yiisoft/yii2-elasticsearch": "<2.0.5", 686 | "yiisoft/yii2-gii": "<2.0.4", 687 | "yiisoft/yii2-jui": "<2.0.4", 688 | "yiisoft/yii2-redis": "<2.0.8", 689 | "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", 690 | "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", 691 | "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", 692 | "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", 693 | "zendframework/zend-diactoros": ">=1,<1.8.4", 694 | "zendframework/zend-feed": ">=1,<2.10.3", 695 | "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", 696 | "zendframework/zend-http": ">=1,<2.8.1", 697 | "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", 698 | "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", 699 | "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", 700 | "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", 701 | "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", 702 | "zendframework/zend-validator": ">=2.3,<2.3.6", 703 | "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", 704 | "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", 705 | "zendframework/zendframework": "<2.5.1", 706 | "zendframework/zendframework1": "<1.12.20", 707 | "zendframework/zendopenid": ">=2,<2.0.2", 708 | "zendframework/zendxml": ">=1,<1.0.1", 709 | "zetacomponents/mail": "<1.8.2", 710 | "zf-commons/zfc-user": "<1.2.2", 711 | "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", 712 | "zfr/zfr-oauth2-server-module": "<0.1.2" 713 | }, 714 | "type": "metapackage", 715 | "notification-url": "https://packagist.org/downloads/", 716 | "license": [ 717 | "MIT" 718 | ], 719 | "authors": [ 720 | { 721 | "name": "Marco Pivetta", 722 | "email": "ocramius@gmail.com", 723 | "role": "maintainer" 724 | } 725 | ], 726 | "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", 727 | "time": "2019-02-14T08:06:11+00:00" 728 | }, 729 | { 730 | "name": "squizlabs/php_codesniffer", 731 | "version": "3.4.0", 732 | "source": { 733 | "type": "git", 734 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 735 | "reference": "379deb987e26c7cd103a7b387aea178baec96e48" 736 | }, 737 | "dist": { 738 | "type": "zip", 739 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/379deb987e26c7cd103a7b387aea178baec96e48", 740 | "reference": "379deb987e26c7cd103a7b387aea178baec96e48", 741 | "shasum": "" 742 | }, 743 | "require": { 744 | "ext-simplexml": "*", 745 | "ext-tokenizer": "*", 746 | "ext-xmlwriter": "*", 747 | "php": ">=5.4.0" 748 | }, 749 | "require-dev": { 750 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 751 | }, 752 | "bin": [ 753 | "bin/phpcs", 754 | "bin/phpcbf" 755 | ], 756 | "type": "library", 757 | "extra": { 758 | "branch-alias": { 759 | "dev-master": "3.x-dev" 760 | } 761 | }, 762 | "notification-url": "https://packagist.org/downloads/", 763 | "license": [ 764 | "BSD-3-Clause" 765 | ], 766 | "authors": [ 767 | { 768 | "name": "Greg Sherwood", 769 | "role": "lead" 770 | } 771 | ], 772 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 773 | "homepage": "http://www.squizlabs.com/php-codesniffer", 774 | "keywords": [ 775 | "phpcs", 776 | "standards" 777 | ], 778 | "time": "2018-12-19T23:57:18+00:00" 779 | } 780 | ], 781 | "aliases": [], 782 | "minimum-stability": "stable", 783 | "stability-flags": { 784 | "roave/security-advisories": 20 785 | }, 786 | "prefer-stable": false, 787 | "prefer-lowest": false, 788 | "platform": { 789 | "php": ">=7.1" 790 | }, 791 | "platform-dev": [] 792 | } 793 | --------------------------------------------------------------------------------