From b51dd16a936d71161f55f66071315f19488e1539 Mon Sep 17 00:00:00 2001 From: Stuart Clark Date: Fri, 22 Oct 2021 14:00:03 +1100 Subject: [PATCH] chore(#343): update gitpod setup (#346) * chore(#343): update gitpod config * chore(#343): update gitpod ddev setup * chore(#343): add welcome message * chore(#343): update gitpod/drupal setup --- .gitpod.yml | 93 +-- .gitpod/{.gitpod.Dockerfile => Dockerfile} | 9 +- .gitpod/WELCOME.md | 18 + .../ddev-download.sh} | 5 +- .gitpod/scripts/ddev-setup.sh | 38 + .../drupal-setup.sh} | 5 +- .gitpod/setup-ddev.sh | 75 -- examples/drupal/drupal-9/.ddev/config.yaml | 197 +++++ .../drupal-9/web/sites/default/settings.php | 780 ++++++++++++++++++ 9 files changed, 1073 insertions(+), 147 deletions(-) rename .gitpod/{.gitpod.Dockerfile => Dockerfile} (57%) create mode 100644 .gitpod/WELCOME.md rename .gitpod/{download-ddev-images.sh => scripts/ddev-download.sh} (64%) create mode 100755 .gitpod/scripts/ddev-setup.sh rename .gitpod/{setup-drupal.sh => scripts/drupal-setup.sh} (81%) delete mode 100755 .gitpod/setup-ddev.sh create mode 100644 examples/drupal/drupal-9/.ddev/config.yaml create mode 100755 examples/drupal/drupal-9/web/sites/default/settings.php diff --git a/.gitpod.yml b/.gitpod.yml index b9176c5d0..12597892c 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,36 +1,23 @@ image: - file: .gitpod/.gitpod.Dockerfile + file: .gitpod/Dockerfile -# ddev and composer are running as part of the prebuild -# when starting a workspace all docker images are ready tasks: - - name: ddev/drupal + - before: git pull -f origin main:main init: | - # drupal installation - .gitpod/download-ddev-images.sh - .gitpod/setup-drupal.sh - command: | - .gitpod/setup-ddev.sh - cd $GITPOD_REPO_ROOT/examples/drupal/drupal-9 && ddev start - gp sync-done ddev - - - name: druxt/docs - init: | - # druxt/docs installation - gp sync-await build - cd $GITPOD_REPO_ROOT/docs && yarn - command: | - gp sync-await ddev - cd $GITPOD_REPO_ROOT/docs && BASE_URL=$(gp url 8080) yarn dev + # DDev prebuild tasks + .gitpod/scripts/ddev-download.sh + .gitpod/scripts/drupal-setup.sh - - name: druxt.js - before: git pull -f origin main:main - init: | - # druxt installation + # druxt.js build install and build yarn install yarn build - yarn build:docs - gp sync-done build + + # druxtjs.org install + cd $GITPOD_REPO_ROOT/docs && yarn + cd $GITPOD_REPO_ROOT && yarn build:docs + command: | + .gitpod/scripts/ddev-setup.sh && clear + cat .gitpod/WELCOME.md # VScode xdebug extension vscode: @@ -45,48 +32,38 @@ ports: # Nuxt/Druxt - port: 3000 visibility: public -# Drupal + # Drupal - port: 8080 visibility: public -# Currently un-notified and unsupported mailhog http port - - port: 8025 - onOpen: ignore -# Currently un-notified and unsupported mailhog https port - - port: 8026 - onOpen: ignore -# Currently un-notified and unsupported phpmyadmin http port - - port: 8036 - onOpen: ignore -# Currently un-notified and unsupported phpmyadmin https port - - port: 8037 - onOpen: ignore -# router http port that we're ignoring. - - port: 8888 - onOpen: ignore -# router https port that we're ignoring. - - port: 8889 - onOpen: ignore -# xdebug port - - port: 9000 - onOpen: ignore -# projector port - - port: 9999 + # Currently un-notified and unsupported mailhog http port + # - port: 8025 + # onOpen: ignore + # # Currently un-notified and unsupported mailhog https port + # - port: 8026 + # onOpen: ignore + # # Currently un-notified and unsupported phpmyadmin http port + # - port: 8036 + # onOpen: ignore + # # Currently un-notified and unsupported phpmyadmin https port + # - port: 8037 + # onOpen: ignore + # # router http port that we're ignoring. + # - port: 8888 + # onOpen: ignore + # # router https port that we're ignoring. + # - port: 8889 + # onOpen: ignore + # # xdebug port + # - port: 9000 + # onOpen: ignore github: prebuilds: - # enable for the master/default branch (defaults to true) master: true -# enable for all branches in this repo (defaults to false) branches: true -# enable for pull requests coming from this repo (defaults to true) pullRequests: true -# enable for pull requests coming from forks (defaults to false) pullRequestsFromForks: true -# add a check to pull requests (defaults to true) addCheck: true -# add a "Review in Gitpod" button as a comment to pull requests (defaults to false) addComment: false -# add a "Review in Gitpod" button to the pull request's description (defaults to false) addBadge: true -# add a label once the prebuild is ready to pull requests (defaults to false) addLabel: true diff --git a/.gitpod/.gitpod.Dockerfile b/.gitpod/Dockerfile similarity index 57% rename from .gitpod/.gitpod.Dockerfile rename to .gitpod/Dockerfile index 463294be5..374de91d8 100644 --- a/.gitpod/.gitpod.Dockerfile +++ b/.gitpod/Dockerfile @@ -6,15 +6,8 @@ RUN sudo apt-get -qq update # Install ddev RUN brew update && brew install drud/ddev/ddev -# Install GitUI (terminal-ui for git) -RUN brew install gitui - # Install latest composer RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" -RUN php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" +RUN php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" RUN sudo php composer-setup.php --install-dir /usr/bin --filename composer RUN php -r "unlink('composer-setup.php');" - -### -### Initiate a rebuild of Gitpod's image by updating this comment #1 -### diff --git a/.gitpod/WELCOME.md b/.gitpod/WELCOME.md new file mode 100644 index 000000000..ad2008538 --- /dev/null +++ b/.gitpod/WELCOME.md @@ -0,0 +1,18 @@ + +██████╗ ██████╗ ██╗ ██╗██╗ ██╗████████╗ ██╗███████╗ +██╔══██╗██╔══██╗██║ ██║╚██╗██╔╝╚══██╔══╝ ██║██╔════╝ +██║ ██║██████╔╝██║ ██║ ╚███╔╝ ██║ ██║███████╗ +██║ ██║██╔══██╗██║ ██║ ██╔██╗ ██║ ██ ██║╚════██║ +██████╔╝██║ ██║╚██████╔╝██╔╝ ██╗ ██║██╗╚█████╔╝███████║ +╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚════╝ ╚══════╝ + +# Welcome to the DruxtJS Gitpod development environment + +To get started you can do one of the following tasks: +- Run the Druxt build tools: `yarn build --watch` +- Run the Druxt test suite: `yarn test --watch` +- Generate Druxt documetation: `yarn build:docs` +- Start the DruxtJS.org website: `cd docs && yarn dev` + +Happy contributing. + diff --git a/.gitpod/download-ddev-images.sh b/.gitpod/scripts/ddev-download.sh similarity index 64% rename from .gitpod/download-ddev-images.sh rename to .gitpod/scripts/ddev-download.sh index fbc569a7f..52f005b03 100755 --- a/.gitpod/download-ddev-images.sh +++ b/.gitpod/scripts/ddev-download.sh @@ -1,10 +1,7 @@ #!/usr/bin/env bash -if [ -n "$DEBUG_DRUPALPOD" ]; then - set -x -fi ddev version | awk '/(drud|phpmyadmin)/ {print $2;}' >/tmp/images.txt while IFS= read -r item do docker pull "$item" -done < <(cat /tmp/images.txt) \ No newline at end of file +done < <(cat /tmp/images.txt) diff --git a/.gitpod/scripts/ddev-setup.sh b/.gitpod/scripts/ddev-setup.sh new file mode 100755 index 000000000..b8458773e --- /dev/null +++ b/.gitpod/scripts/ddev-setup.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +if [ -n "$DEBUG_DRUXTJS" ]; then + set -x +fi + +# Set up ddev for use on gitpod + +set -eu -o pipefail + +DDEV_DIR="${GITPOD_REPO_ROOT}/examples/drupal/drupal-9/.ddev" +shortgpurl="${GITPOD_WORKSPACE_URL#'https://'}" + +# Generate a config.gitpod.yaml that adds the gitpod +# proxied ports so they're known to ddev. + +cat < "${DDEV_DIR}"/config.gitpod.yaml +#ddev-gitpod-generated +bind_all_interfaces: true +host_webserver_port: 8080 +CONFIGEND + +# We need host.docker.internal inside the container, +# So add it via docker-compose.host-docker-internal.yaml +hostip=$(awk "\$2 == \"$HOSTNAME\" { print \$1; }" /etc/hosts) + +cat <"${DDEV_DIR}"/docker-compose.host-docker-internal.yaml +#ddev-gitpod-generated +version: "3.6" +services: + web: + environment: + - DRUSH_OPTIONS_URI=$(gp url 8080) + extra_hosts: + - "host.docker.internal:${hostip}" +COMPOSEEND + +# Misc housekeeping before start +ddev config global --instrumentation-opt-in=true --omit-containers=ddev-router diff --git a/.gitpod/setup-drupal.sh b/.gitpod/scripts/drupal-setup.sh similarity index 81% rename from .gitpod/setup-drupal.sh rename to .gitpod/scripts/drupal-setup.sh index 0d16ef6c2..a902a23d7 100755 --- a/.gitpod/setup-drupal.sh +++ b/.gitpod/scripts/drupal-setup.sh @@ -10,12 +10,13 @@ set -eu -o pipefail DRUPAL_DIR="${GITPOD_REPO_ROOT}/examples/drupal/drupal-9" # Set up DDEV -cd "$GITPOD_REPO_ROOT" && .gitpod/setup-ddev.sh +cd "$GITPOD_REPO_ROOT" && .gitpod/scripts/ddev-setup.sh # Set up Drupal website +cd "$DRUPAL_DIR" && ddev start cd "$DRUPAL_DIR" && ddev composer install cd "$DRUPAL_DIR" && ddev drush si -y --account-pass=admin demo_umami cd "$DRUPAL_DIR" && ddev drush -y en druxt cd "$DRUPAL_DIR" && ddev drush "rap anonymous 'access druxt resources'" cd "$DRUPAL_DIR" && ddev drush -y config:set jsonapi.settings read_only 0 - +cd "$DRUPAL_DIR" && ddev stop diff --git a/.gitpod/setup-ddev.sh b/.gitpod/setup-ddev.sh deleted file mode 100755 index e1462a8cc..000000000 --- a/.gitpod/setup-ddev.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env bash -if [ -n "$DEBUG_DRUXTJS" ]; then - set -x -fi - -# Set up ddev for use on gitpod - -set -eu -o pipefail - -DDEV_DIR="${GITPOD_REPO_ROOT}/examples/drupal/drupal-9/.ddev" -mkdir -p "$DDEV_DIR" - -cat < "${DDEV_DIR}"/config.yaml -#gitpod-generated -name: druxtjs -type: drupal9 -docroot: web -php_version: "7.4" -webserver_type: nginx-fpm -router_http_port: "80" -router_https_port: "443" -xdebug_enabled: false -additional_hostnames: [] -additional_fqdns: [] -mariadb_version: "10.3" -mysql_version: "" -use_dns_when_possible: true -composer_version: "" -web_environment: [] -CONFIGEND - -# Generate a config.gitpod.yaml that adds the gitpod -# proxied ports so they're known to ddev. -shortgpurl="${GITPOD_WORKSPACE_URL#'https://'}" - -cat < "${DDEV_DIR}"/config.gitpod.yaml -#ddev-gitpod-generated -use_dns_when_possible: false -# Throwaway ports, otherwise Gitpod throw an error 'port needs to be > 1024' -router_http_port: "8888" -router_https_port: "8889" -additional_fqdns: -- 8888-${shortgpurl} -- 8025-${shortgpurl} -- 8036-${shortgpurl} -CONFIGEND - -# We need host.docker.internal inside the container, -# So add it via docker-compose.host-docker-internal.yaml -hostip=$(awk "\$2 == \"$HOSTNAME\" { print \$1; }" /etc/hosts) - -cat <"${DDEV_DIR}"/docker-compose.host-docker-internal.yaml -#ddev-gitpod-generated -version: "3.6" -services: - web: - environment: - - DRUSH_OPTIONS_URI=$(gp url 8080) - extra_hosts: - - "host.docker.internal:${hostip}" - # This adds 8080 on the host (bound on all interfaces) - # It goes directly to the web container without - # ddev-nginx - ports: - - 8080:80 -COMPOSEEND - -# Misc housekeeping before start -ddev config global --instrumentation-opt-in=true --router-bind-all-interfaces=true - -cd "$DDEV_DIR" && ddev start - -# Ignore dynamically generated ddev files -echo 'config.yaml' >> "$DDEV_DIR"/.gitignore -echo 'docker-compose.host-docker-internal.yaml' >> "$DDEV_DIR"/.gitignore diff --git a/examples/drupal/drupal-9/.ddev/config.yaml b/examples/drupal/drupal-9/.ddev/config.yaml new file mode 100644 index 000000000..31af3470b --- /dev/null +++ b/examples/drupal/drupal-9/.ddev/config.yaml @@ -0,0 +1,197 @@ +name: drupal-9 +type: drupal9 +docroot: web +php_version: "7.4" +webserver_type: nginx-fpm +router_http_port: "80" +router_https_port: "443" +xdebug_enabled: false +additional_hostnames: [] +additional_fqdns: [] +mariadb_version: "10.3" +mysql_version: "" +nfs_mount_enabled: false +mutagen_enabled: false +use_dns_when_possible: true +composer_version: "" +web_environment: [] + +# Key features of ddev's config.yaml: + +# name: # Name of the project, automatically provides +# http://projectname.ddev.site and https://projectname.ddev.site + +# type: # drupal6/7/8, backdrop, typo3, wordpress, php + +# docroot: # Relative path to the directory containing index.php. + +# php_version: "7.4" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4" "8.0" + +# You can explicitly specify the webimage, dbimage, dbaimage lines but this +# is not recommended, as the images are often closely tied to ddev's' behavior, +# so this can break upgrades. + +# webimage: # nginx/php docker image. +# dbimage: # mariadb docker image. +# dbaimage: + +# mariadb_version and mysql_version +# ddev can use many versions of mariadb and mysql +# However these directives are mutually exclusive +# mariadb_version: 10.2 +# mysql_version: 8.0 + +# router_http_port: # Port to be used for http (defaults to port 80) +# router_https_port: # Port for https (defaults to 443) + +# xdebug_enabled: false # Set to true to enable xdebug and "ddev start" or "ddev restart" +# Note that for most people the commands +# "ddev xdebug" to enable xdebug and "ddev xdebug off" to disable it work better, +# as leaving xdebug enabled all the time is a big performance hit. + +# xhprof_enabled: false # Set to true to enable xhprof and "ddev start" or "ddev restart" +# Note that for most people the commands +# "ddev xhprof" to enable xhprof and "ddev xhprof off" to disable it work better, +# as leaving xhprof enabled all the time is a big performance hit. + +# webserver_type: nginx-fpm # or apache-fpm + +# timezone: Europe/Berlin +# This is the timezone used in the containers and by PHP; +# it can be set to any valid timezone, +# see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# For example Europe/Dublin or MST7MDT + +# composer_version: "" +# if composer_version:"" it will use the current ddev default composer release. +# It can also be set to "1", to get most recent composer v1 +# or "2" for most recent composer v2. +# It can be set to any existing specific composer version. +# After first project 'ddev start' this will not be updated until it changes + +# additional_hostnames: +# - somename +# - someothername +# would provide http and https URLs for "somename.ddev.site" +# and "someothername.ddev.site". + +# additional_fqdns: +# - example.com +# - sub1.example.com +# would provide http and https URLs for "example.com" and "sub1.example.com" +# Please take care with this because it can cause great confusion. + +# upload_dir: custom/upload/dir +# would set the destination path for ddev import-files to custom/upload/dir. + +# working_dir: +# web: /var/www/html +# db: /home +# would set the default working directory for the web and db services. +# These values specify the destination directory for ddev ssh and the +# directory in which commands passed into ddev exec are run. + +# omit_containers: [db, dba, ddev-ssh-agent] +# Currently only these containers are supported. Some containers can also be +# omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit +# the "db" container, several standard features of ddev that access the +# database container will be unusable. In the global configuration it is also +# possible to omit ddev-router, but not here. + +# nfs_mount_enabled: false +# Great performance improvement but requires host configuration first. +# See https://ddev.readthedocs.io/en/stable/users/performance/#using-nfs-to-mount-the-project-into-the-container + +# mutagen_enabled: false +# Experimental performance improvement using mutagen asynchronous updates. +# See https://ddev.readthedocs.io/en/latest/users/performance/#using-mutagen + +# fail_on_hook_fail: False +# Decide whether 'ddev start' should be interrupted by a failing hook + +# host_https_port: "59002" +# The host port binding for https can be explicitly specified. It is +# dynamic unless otherwise specified. +# This is not used by most people, most people use the *router* instead +# of the localhost port. + +# host_webserver_port: "59001" +# The host port binding for the ddev-webserver can be explicitly specified. It is +# dynamic unless otherwise specified. +# This is not used by most people, most people use the *router* instead +# of the localhost port. + +# host_db_port: "59002" +# The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic +# unless explicitly specified. + +# phpmyadmin_port: "8036" +# phpmyadmin_https_port: "8037" +# The PHPMyAdmin ports can be changed from the default 8036 and 8037 + +# host_phpmyadmin_port: "8036" +# The phpmyadmin (dba) port is not normally bound on the host at all, instead being routed +# through ddev-router, but it can be specified and bound. + +# mailhog_port: "8025" +# mailhog_https_port: "8026" +# The MailHog ports can be changed from the default 8025 and 8026 + +# host_mailhog_port: "8025" +# The mailhog port is not normally bound on the host at all, instead being routed +# through ddev-router, but it can be bound directly to localhost if specified here. + +# webimage_extra_packages: [php7.4-tidy, php-bcmath] +# Extra Debian packages that are needed in the webimage can be added here + +# dbimage_extra_packages: [telnet,netcat] +# Extra Debian packages that are needed in the dbimage can be added here + +# use_dns_when_possible: true +# If the host has internet access and the domain configured can +# successfully be looked up, DNS will be used for hostname resolution +# instead of editing /etc/hosts +# Defaults to true + +# project_tld: ddev.site +# The top-level domain used for project URLs +# The default "ddev.site" allows DNS lookup via a wildcard +# If you prefer you can change this to "ddev.local" to preserve +# pre-v1.9 behavior. + +# ngrok_args: --subdomain mysite --auth username:pass +# Provide extra flags to the "ngrok http" command, see +# https://ngrok.com/docs#http or run "ngrok http -h" + +# disable_settings_management: false +# If true, ddev will not create CMS-specific settings files like +# Drupal's settings.php/settings.ddev.php or TYPO3's AdditionalConfiguration.php +# In this case the user must provide all such settings. + +# You can inject environment variables into the web container with: +# web_environment: +# - SOMEENV=somevalue +# - SOMEOTHERENV=someothervalue + +# no_project_mount: false +# (Experimental) If true, ddev will not mount the project into the web container; +# the user is responsible for mounting it manually or via a script. +# This is to enable experimentation with alternate file mounting strategies. +# For advanced users only! + +# bind_all_interfaces: false +# If true, host ports will be bound on all network interfaces, +# not just the localhost interface. This means that ports +# will be available on the local network if the host firewall +# allows it. + +# Many ddev commands can be extended to run tasks before or after the +# ddev command is executed, for example "post-start", "post-import-db", +# "pre-composer", "post-composer" +# See https://ddev.readthedocs.io/en/stable/users/extending-commands/ for more +# information on the commands that can be extended and the tasks you can define +# for them. Example: +#hooks: +# post-import-db: +# - exec: drush cr +# - exec: drush updb diff --git a/examples/drupal/drupal-9/web/sites/default/settings.php b/examples/drupal/drupal-9/web/sites/default/settings.php new file mode 100755 index 000000000..73415f436 --- /dev/null +++ b/examples/drupal/drupal-9/web/sites/default/settings.php @@ -0,0 +1,780 @@ + 'databasename', + * 'username' => 'sqlusername', + * 'password' => 'sqlpassword', + * 'host' => 'localhost', + * 'port' => '3306', + * 'driver' => 'mysql', + * 'prefix' => '', + * 'collation' => 'utf8mb4_general_ci', + * ]; + * @endcode + */ +$databases = []; + +/** + * Customizing database settings. + * + * Many of the values of the $databases array can be customized for your + * particular database system. Refer to the sample in the section above as a + * starting point. + * + * The "driver" property indicates what Drupal database driver the + * connection should use. This is usually the same as the name of the + * database type, such as mysql or sqlite, but not always. The other + * properties will vary depending on the driver. For SQLite, you must + * specify a database file name in a directory that is writable by the + * webserver. For most other drivers, you must specify a + * username, password, host, and database name. + * + * Drupal core implements drivers for mysql, pgsql, and sqlite. Other drivers + * can be provided by contributed or custom modules. To use a contributed or + * custom driver, the "namespace" property must be set to the namespace of the + * driver. The code in this namespace must be autoloadable prior to connecting + * to the database, and therefore, prior to when module root namespaces are + * added to the autoloader. To add the driver's namespace to the autoloader, + * set the "autoload" property to the PSR-4 base directory of the driver's + * namespace. This is optional for projects managed with Composer if the + * driver's namespace is in Composer's autoloader. + * + * Transaction support is enabled by default for all drivers that support it, + * including MySQL. To explicitly disable it, set the 'transactions' key to + * FALSE. + * Note that some configurations of MySQL, such as the MyISAM engine, don't + * support it and will proceed silently even if enabled. If you experience + * transaction related crashes with such configuration, set the 'transactions' + * key to FALSE. + * + * For each database, you may optionally specify multiple "target" databases. + * A target database allows Drupal to try to send certain queries to a + * different database if it can but fall back to the default connection if not. + * That is useful for primary/replica replication, as Drupal may try to connect + * to a replica server when appropriate and if one is not available will simply + * fall back to the single primary server (The terms primary/replica are + * traditionally referred to as master/slave in database server documentation). + * + * The general format for the $databases array is as follows: + * @code + * $databases['default']['default'] = $info_array; + * $databases['default']['replica'][] = $info_array; + * $databases['default']['replica'][] = $info_array; + * $databases['extra']['default'] = $info_array; + * @endcode + * + * In the above example, $info_array is an array of settings described above. + * The first line sets a "default" database that has one primary database + * (the second level default). The second and third lines create an array + * of potential replica databases. Drupal will select one at random for a given + * request as needed. The fourth line creates a new database with a name of + * "extra". + * + * You can optionally set prefixes for some or all database table names + * by using the 'prefix' setting. If a prefix is specified, the table + * name will be prepended with its value. Be sure to use valid database + * characters only, usually alphanumeric and underscore. If no prefixes + * are desired, leave it as an empty string ''. + * + * To have all database names prefixed, set 'prefix' as a string: + * @code + * 'prefix' => 'main_', + * @endcode + * + * Per-table prefixes are deprecated as of Drupal 8.2, and will be removed in + * Drupal 9.0. After that, only a single prefix for all tables will be + * supported. + * + * To provide prefixes for specific tables, set 'prefix' as an array. + * The array's keys are the table names and the values are the prefixes. + * The 'default' element is mandatory and holds the prefix for any tables + * not specified elsewhere in the array. Example: + * @code + * 'prefix' => [ + * 'default' => 'main_', + * 'users' => 'shared_', + * 'sessions' => 'shared_', + * 'role' => 'shared_', + * 'authmap' => 'shared_', + * ], + * @endcode + * You can also use a reference to a schema/database as a prefix. This may be + * useful if your Drupal installation exists in a schema that is not the default + * or you want to access several databases from the same code base at the same + * time. + * Example: + * @code + * 'prefix' => [ + * 'default' => 'main.', + * 'users' => 'shared.', + * 'sessions' => 'shared.', + * 'role' => 'shared.', + * 'authmap' => 'shared.', + * ]; + * @endcode + * NOTE: MySQL and SQLite's definition of a schema is a database. + * + * Advanced users can add or override initial commands to execute when + * connecting to the database server, as well as PDO connection settings. For + * example, to enable MySQL SELECT queries to exceed the max_join_size system + * variable, and to reduce the database connection timeout to 5 seconds: + * @code + * $databases['default']['default'] = [ + * 'init_commands' => [ + * 'big_selects' => 'SET SQL_BIG_SELECTS=1', + * ], + * 'pdo' => [ + * PDO::ATTR_TIMEOUT => 5, + * ], + * ]; + * @endcode + * + * WARNING: The above defaults are designed for database portability. Changing + * them may cause unexpected behavior, including potential data loss. See + * https://www.drupal.org/developing/api/database/configuration for more + * information on these defaults and the potential issues. + * + * More details can be found in the constructor methods for each driver: + * - \Drupal\Core\Database\Driver\mysql\Connection::__construct() + * - \Drupal\Core\Database\Driver\pgsql\Connection::__construct() + * - \Drupal\Core\Database\Driver\sqlite\Connection::__construct() + * + * Sample Database configuration format for PostgreSQL (pgsql): + * @code + * $databases['default']['default'] = [ + * 'driver' => 'pgsql', + * 'database' => 'databasename', + * 'username' => 'sqlusername', + * 'password' => 'sqlpassword', + * 'host' => 'localhost', + * 'prefix' => '', + * ]; + * @endcode + * + * Sample Database configuration format for SQLite (sqlite): + * @code + * $databases['default']['default'] = [ + * 'driver' => 'sqlite', + * 'database' => '/path/to/databasefilename', + * ]; + * @endcode + * + * Sample Database configuration format for a driver in a contributed module: + * @code + * $databases['default']['default'] = [ + * 'driver' => 'mydriver', + * 'namespace' => 'Drupal\mymodule\Driver\Database\mydriver', + * 'autoload' => 'modules/mymodule/src/Driver/Database/mydriver/', + * 'database' => 'databasename', + * 'username' => 'sqlusername', + * 'password' => 'sqlpassword', + * 'host' => 'localhost', + * 'prefix' => '', + * ]; + * @endcode + */ + +/** + * Location of the site configuration files. + * + * The $settings['config_sync_directory'] specifies the location of file system + * directory used for syncing configuration data. On install, the directory is + * created. This is used for configuration imports. + * + * The default location for this directory is inside a randomly-named + * directory in the public files path. The setting below allows you to set + * its location. + */ +# $settings['config_sync_directory'] = '/directory/outside/webroot'; + +/** + * Settings: + * + * $settings contains environment-specific configuration, such as the files + * directory and reverse proxy address, and temporary configuration, such as + * security overrides. + * + * @see \Drupal\Core\Site\Settings::get() + */ + +/** + * Salt for one-time login links, cancel links, form tokens, etc. + * + * This variable will be set to a random value by the installer. All one-time + * login links will be invalidated if the value is changed. Note that if your + * site is deployed on a cluster of web servers, you must ensure that this + * variable has the same value on each server. + * + * For enhanced security, you may set this variable to the contents of a file + * outside your document root; you should also ensure that this file is not + * stored with backups of your database. + * + * Example: + * @code + * $settings['hash_salt'] = file_get_contents('/home/example/salt.txt'); + * @endcode + */ +$settings['hash_salt'] = ''; + +/** + * Deployment identifier. + * + * Drupal's dependency injection container will be automatically invalidated and + * rebuilt when the Drupal core version changes. When updating contributed or + * custom code that changes the container, changing this identifier will also + * allow the container to be invalidated as soon as code is deployed. + */ +# $settings['deployment_identifier'] = \Drupal::VERSION; + +/** + * Access control for update.php script. + * + * If you are updating your Drupal installation using the update.php script but + * are not logged in using either an account with the "Administer software + * updates" permission or the site maintenance account (the account that was + * created during installation), you will need to modify the access check + * statement below. Change the FALSE to a TRUE to disable the access check. + * After finishing the upgrade, be sure to open this file again and change the + * TRUE back to a FALSE! + */ +$settings['update_free_access'] = FALSE; + +/** + * External access proxy settings: + * + * If your site must access the Internet via a web proxy then you can enter the + * proxy settings here. Set the full URL of the proxy, including the port, in + * variables: + * - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP + * requests. + * - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS + * requests. + * You can pass in the user name and password for basic authentication in the + * URLs in these settings. + * + * You can also define an array of host names that can be accessed directly, + * bypassing the proxy, in $settings['http_client_config']['proxy']['no']. + */ +# $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080'; +# $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080'; +# $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost']; + +/** + * Reverse Proxy Configuration: + * + * Reverse proxy servers are often used to enhance the performance + * of heavily visited sites and may also provide other site caching, + * security, or encryption benefits. In an environment where Drupal + * is behind a reverse proxy, the real IP address of the client should + * be determined such that the correct client IP address is available + * to Drupal's logging, statistics, and access management systems. In + * the most simple scenario, the proxy server will add an + * X-Forwarded-For header to the request that contains the client IP + * address. However, HTTP headers are vulnerable to spoofing, where a + * malicious client could bypass restrictions by setting the + * X-Forwarded-For header directly. Therefore, Drupal's proxy + * configuration requires the IP addresses of all remote proxies to be + * specified in $settings['reverse_proxy_addresses'] to work correctly. + * + * Enable this setting to get Drupal to determine the client IP from the + * X-Forwarded-For header. If you are unsure about this setting, do not have a + * reverse proxy, or Drupal operates in a shared hosting environment, this + * setting should remain commented out. + * + * In order for this setting to be used you must specify every possible + * reverse proxy IP address in $settings['reverse_proxy_addresses']. + * If a complete list of reverse proxies is not available in your + * environment (for example, if you use a CDN) you may set the + * $_SERVER['REMOTE_ADDR'] variable directly in settings.php. + * Be aware, however, that it is likely that this would allow IP + * address spoofing unless more advanced precautions are taken. + */ +# $settings['reverse_proxy'] = TRUE; + +/** + * Specify every reverse proxy IP address in your environment. + * This setting is required if $settings['reverse_proxy'] is TRUE. + */ +# $settings['reverse_proxy_addresses'] = ['a.b.c.d', ...]; + +/** + * Reverse proxy trusted headers. + * + * Sets which headers to trust from your reverse proxy. + * + * Common values are: + * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL + * - \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED + * + * Note the default value of + * @code + * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED + * @endcode + * is not secure by default. The value should be set to only the specific + * headers the reverse proxy uses. For example: + * @code + * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL + * @endcode + * This would trust the following headers: + * - X_FORWARDED_FOR + * - X_FORWARDED_HOST + * - X_FORWARDED_PROTO + * - X_FORWARDED_PORT + * + * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL + * @see \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED + * @see \Symfony\Component\HttpFoundation\Request::setTrustedProxies + */ +# $settings['reverse_proxy_trusted_headers'] = \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED; + + +/** + * Page caching: + * + * By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page + * views. This tells a HTTP proxy that it may return a page from its local + * cache without contacting the web server, if the user sends the same Cookie + * header as the user who originally requested the cached page. Without "Vary: + * Cookie", authenticated users would also be served the anonymous page from + * the cache. If the site has mostly anonymous users except a few known + * editors/administrators, the Vary header can be omitted. This allows for + * better caching in HTTP proxies (including reverse proxies), i.e. even if + * clients send different cookies, they still get content served from the cache. + * However, authenticated users should access the site directly (i.e. not use an + * HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid + * getting cached pages from the proxy. + */ +# $settings['omit_vary_cookie'] = TRUE; + + +/** + * Cache TTL for client error (4xx) responses. + * + * Items cached per-URL tend to result in a large number of cache items, and + * this can be problematic on 404 pages which by their nature are unbounded. A + * fixed TTL can be set for these items, defaulting to one hour, so that cache + * backends which do not support LRU can purge older entries. To disable caching + * of client error responses set the value to 0. Currently applies only to + * page_cache module. + */ +# $settings['cache_ttl_4xx'] = 3600; + +/** + * Expiration of cached forms. + * + * Drupal's Form API stores details of forms in a cache and these entries are + * kept for at least 6 hours by default. Expired entries are cleared by cron. + * + * @see \Drupal\Core\Form\FormCache::setCache() + */ +# $settings['form_cache_expiration'] = 21600; + +/** + * Class Loader. + * + * If the APCu extension is detected, the classloader will be optimized to use + * it. Set to FALSE to disable this. + * + * @see https://getcomposer.org/doc/articles/autoloader-optimization.md + */ +# $settings['class_loader_auto_detect'] = FALSE; + +/** + * Authorized file system operations: + * + * The Update Manager module included with Drupal provides a mechanism for + * site administrators to securely install missing updates for the site + * directly through the web user interface. On securely-configured servers, + * the Update manager will require the administrator to provide SSH or FTP + * credentials before allowing the installation to proceed; this allows the + * site to update the new files as the user who owns all the Drupal files, + * instead of as the user the webserver is running as. On servers where the + * webserver user is itself the owner of the Drupal files, the administrator + * will not be prompted for SSH or FTP credentials (note that these server + * setups are common on shared hosting, but are inherently insecure). + * + * Some sites might wish to disable the above functionality, and only update + * the code directly via SSH or FTP themselves. This setting completely + * disables all functionality related to these authorized file operations. + * + * @see https://www.drupal.org/node/244924 + * + * Remove the leading hash signs to disable. + */ +# $settings['allow_authorize_operations'] = FALSE; + +/** + * Default mode for directories and files written by Drupal. + * + * Value should be in PHP Octal Notation, with leading zero. + */ +# $settings['file_chmod_directory'] = 0775; +# $settings['file_chmod_file'] = 0664; + +/** + * Public file base URL: + * + * An alternative base URL to be used for serving public files. This must + * include any leading directory path. + * + * A different value from the domain used by Drupal to be used for accessing + * public files. This can be used for a simple CDN integration, or to improve + * security by serving user-uploaded files from a different domain or subdomain + * pointing to the same server. Do not include a trailing slash. + */ +# $settings['file_public_base_url'] = 'http://downloads.example.com/files'; + +/** + * Public file path: + * + * A local file system path where public files will be stored. This directory + * must exist and be writable by Drupal. This directory must be relative to + * the Drupal installation directory and be accessible over the web. + */ +# $settings['file_public_path'] = 'sites/default/files'; + +/** + * Private file path: + * + * A local file system path where private files will be stored. This directory + * must be absolute, outside of the Drupal installation directory and not + * accessible over the web. + * + * Note: Caches need to be cleared when this value is changed to make the + * private:// stream wrapper available to the system. + * + * See https://www.drupal.org/documentation/modules/file for more information + * about securing private files. + */ +# $settings['file_private_path'] = ''; + +/** + * Temporary file path: + * + * A local file system path where temporary files will be stored. This directory + * must be absolute, outside of the Drupal installation directory and not + * accessible over the web. + * + * If this is not set, the default for the operating system will be used. + * + * @see \Drupal\Component\FileSystem\FileSystem::getOsTemporaryDirectory() + */ +# $settings['file_temp_path'] = '/tmp'; + +/** + * Session write interval: + * + * Set the minimum interval between each session write to database. + * For performance reasons it defaults to 180. + */ +# $settings['session_write_interval'] = 180; + +/** + * String overrides: + * + * To override specific strings on your site with or without enabling the Locale + * module, add an entry to this list. This functionality allows you to change + * a small number of your site's default English language interface strings. + * + * Remove the leading hash signs to enable. + * + * The "en" part of the variable name, is dynamic and can be any langcode of + * any added language. (eg locale_custom_strings_de for german). + */ +# $settings['locale_custom_strings_en'][''] = [ +# 'forum' => 'Discussion board', +# '@count min' => '@count minutes', +# ]; + +/** + * A custom theme for the offline page: + * + * This applies when the site is explicitly set to maintenance mode through the + * administration page or when the database is inactive due to an error. + * The template file should also be copied into the theme. It is located inside + * 'core/modules/system/templates/maintenance-page.html.twig'. + * + * Note: This setting does not apply to installation and update pages. + */ +# $settings['maintenance_theme'] = 'bartik'; + +/** + * PHP settings: + * + * To see what PHP settings are possible, including whether they can be set at + * runtime (by using ini_set()), read the PHP documentation: + * http://php.net/manual/ini.list.php + * See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime + * settings and the .htaccess file for non-runtime settings. + * Settings defined there should not be duplicated here so as to avoid conflict + * issues. + */ + +/** + * If you encounter a situation where users post a large amount of text, and + * the result is stripped out upon viewing but can still be edited, Drupal's + * output filter may not have sufficient memory to process it. If you + * experience this issue, you may wish to uncomment the following two lines + * and increase the limits of these variables. For more information, see + * http://php.net/manual/pcre.configuration.php. + */ +# ini_set('pcre.backtrack_limit', 200000); +# ini_set('pcre.recursion_limit', 200000); + +/** + * Configuration overrides. + * + * To globally override specific configuration values for this site, + * set them here. You usually don't need to use this feature. This is + * useful in a configuration file for a vhost or directory, rather than + * the default settings.php. + * + * Note that any values you provide in these variable overrides will not be + * viewable from the Drupal administration interface. The administration + * interface displays the values stored in configuration so that you can stage + * changes to other environments that don't have the overrides. + * + * There are particular configuration values that are risky to override. For + * example, overriding the list of installed modules in 'core.extension' is not + * supported as module install or uninstall has not occurred. Other examples + * include field storage configuration, because it has effects on database + * structure, and 'core.menu.static_menu_link_overrides' since this is cached in + * a way that is not config override aware. Also, note that changing + * configuration values in settings.php will not fire any of the configuration + * change events. + */ +# $config['system.site']['name'] = 'My Drupal site'; +# $config['user.settings']['anonymous'] = 'Visitor'; + +/** + * Fast 404 pages: + * + * Drupal can generate fully themed 404 pages. However, some of these responses + * are for images or other resource files that are not displayed to the user. + * This can waste bandwidth, and also generate server load. + * + * The options below return a simple, fast 404 page for URLs matching a + * specific pattern: + * - $config['system.performance']['fast_404']['exclude_paths']: A regular + * expression to match paths to exclude, such as images generated by image + * styles, or dynamically-resized images. The default pattern provided below + * also excludes the private file system. If you need to add more paths, you + * can add '|path' to the expression. + * - $config['system.performance']['fast_404']['paths']: A regular expression to + * match paths that should return a simple 404 page, rather than the fully + * themed 404 page. If you don't have any aliases ending in htm or html you + * can add '|s?html?' to the expression. + * - $config['system.performance']['fast_404']['html']: The html to return for + * simple 404 pages. + * + * Remove the leading hash signs if you would like to alter this functionality. + */ +# $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)|(?:system\/files)\//'; +# $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i'; +# $config['system.performance']['fast_404']['html'] = '404 Not Found

Not Found

The requested URL "@path" was not found on this server.

'; + +/** + * Load services definition file. + */ +$settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml'; + +/** + * Override the default service container class. + * + * This is useful for example to trace the service container for performance + * tracking purposes, for testing a service container with an error condition or + * to test a service container that throws an exception. + */ +# $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container'; + +/** + * Override the default yaml parser class. + * + * Provide a fully qualified class name here if you would like to provide an + * alternate implementation YAML parser. The class must implement the + * \Drupal\Component\Serialization\SerializationInterface interface. + */ +# $settings['yaml_parser_class'] = NULL; + +/** + * Trusted host configuration. + * + * Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host + * header spoofing. + * + * To enable the trusted host mechanism, you enable your allowable hosts + * in $settings['trusted_host_patterns']. This should be an array of regular + * expression patterns, without delimiters, representing the hosts you would + * like to allow. + * + * For example: + * @code + * $settings['trusted_host_patterns'] = [ + * '^www\.example\.com$', + * ]; + * @endcode + * will allow the site to only run from www.example.com. + * + * If you are running multisite, or if you are running your site from + * different domain names (eg, you don't redirect http://www.example.com to + * http://example.com), you should specify all of the host patterns that are + * allowed by your site. + * + * For example: + * @code + * $settings['trusted_host_patterns'] = [ + * '^example\.com$', + * '^.+\.example\.com$', + * '^example\.org$', + * '^.+\.example\.org$', + * ]; + * @endcode + * will allow the site to run off of all variants of example.com and + * example.org, with all subdomains included. + */ + +/** + * The default list of directories that will be ignored by Drupal's file API. + * + * By default ignore node_modules and bower_components folders to avoid issues + * with common frontend tools and recursive scanning of directories looking for + * extensions. + * + * @see \Drupal\Core\File\FileSystemInterface::scanDirectory() + * @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory() + */ +$settings['file_scan_ignore_directories'] = [ + 'node_modules', + 'bower_components', +]; + +/** + * The default number of entities to update in a batch process. + * + * This is used by update and post-update functions that need to go through and + * change all the entities on a site, so it is useful to increase this number + * if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a + * larger number of entities to be processed in a single batch run. + */ +$settings['entity_update_batch_size'] = 50; + +/** + * Entity update backup. + * + * This is used to inform the entity storage handler that the backup tables as + * well as the original entity type and field storage definitions should be + * retained after a successful entity update process. + */ +$settings['entity_update_backup'] = TRUE; + +/** + * Node migration type. + * + * This is used to force the migration system to use the classic node migrations + * instead of the default complete node migrations. The migration system will + * use the classic node migration only if there are existing migrate_map tables + * for the classic node migrations and they contain data. These tables may not + * exist if you are developing custom migrations and do not want to use the + * complete node migrations. Set this to TRUE to force the use of the classic + * node migrations. + */ +$settings['migrate_node_migrate_type_classic'] = FALSE; + +// Automatically generated include for settings managed by ddev. +if (file_exists(__DIR__ . '/settings.ddev.php') && getenv('IS_DDEV_PROJECT') == 'true') { + include __DIR__ . '/settings.ddev.php'; +} + +/** + * Load local development override configuration, if available. + * + * Create a settings.local.php file to override variables on secondary (staging, + * development, etc.) installations of this site. + * + * Typical uses of settings.local.php include: + * - Disabling caching. + * - Disabling JavaScript/CSS compression. + * - Rerouting outgoing emails. + * + * Keep this code block at the end of this file to take full effect. + */ +# +# if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) { +# include $app_root . '/' . $site_path . '/settings.local.php'; +# }