├── .ddev ├── config.yaml ├── docker-compose.network-mtu.yaml └── run-phpstorm.sh ├── .editorconfig ├── .gitattributes ├── .github └── FUNDING.yml ├── .gitignore ├── .gitpod.yml ├── .theia └── launch.json ├── .vscode └── launch.json ├── LICENSE ├── README.md ├── composer.json ├── composer.lock └── web ├── .csslintrc ├── .eslintignore ├── .eslintrc.json ├── .ht.router.php ├── .htaccess ├── INSTALL.txt ├── autoload.php ├── example.gitignore ├── index.php ├── robots.txt ├── sites ├── default │ ├── default.services.yml │ ├── default.settings.php │ └── settings.php ├── development.services.yml ├── example.settings.local.php └── example.sites.php ├── update.php └── web.config /.ddev/config.yaml: -------------------------------------------------------------------------------- 1 | name: ddev-gitpod 2 | type: drupal10 3 | docroot: web 4 | php_version: "8.1" 5 | webserver_type: nginx-fpm 6 | router_http_port: "80" 7 | router_https_port: "443" 8 | xdebug_enabled: false 9 | additional_hostnames: [] 10 | additional_fqdns: [] 11 | database: 12 | type: mariadb 13 | version: "10.4" 14 | nfs_mount_enabled: false 15 | mutagen_enabled: false 16 | use_dns_when_possible: true 17 | composer_version: "2" 18 | web_environment: [] 19 | nodejs_version: "16" 20 | 21 | # Key features of ddev's config.yaml: 22 | 23 | # name: # Name of the project, automatically provides 24 | # http://projectname.ddev.site and https://projectname.ddev.site 25 | 26 | # type: # drupal6/7/8, backdrop, typo3, wordpress, php 27 | 28 | # docroot: # Relative path to the directory containing index.php. 29 | 30 | # php_version: "7.4" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2" 31 | 32 | # You can explicitly specify the webimage but this 33 | # is not recommended, as the images are often closely tied to ddev's' behavior, 34 | # so this can break upgrades. 35 | 36 | # webimage: # nginx/php docker image. 37 | 38 | # database: 39 | # type: # mysql, mariadb 40 | # version: # database version, like "10.3" or "8.0" 41 | # Note that mariadb_version or mysql_version from v1.18 and earlier 42 | # will automatically be converted to this notation with just a "ddev config --auto" 43 | 44 | # router_http_port: # Port to be used for http (defaults to port 80) 45 | # router_https_port: # Port for https (defaults to 443) 46 | 47 | # xdebug_enabled: false # Set to true to enable xdebug and "ddev start" or "ddev restart" 48 | # Note that for most people the commands 49 | # "ddev xdebug" to enable xdebug and "ddev xdebug off" to disable it work better, 50 | # as leaving xdebug enabled all the time is a big performance hit. 51 | 52 | # xhprof_enabled: false # Set to true to enable xhprof and "ddev start" or "ddev restart" 53 | # Note that for most people the commands 54 | # "ddev xhprof" to enable xhprof and "ddev xhprof off" to disable it work better, 55 | # as leaving xhprof enabled all the time is a big performance hit. 56 | 57 | # webserver_type: nginx-fpm # or apache-fpm 58 | 59 | # timezone: Europe/Berlin 60 | # This is the timezone used in the containers and by PHP; 61 | # it can be set to any valid timezone, 62 | # see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 63 | # For example Europe/Dublin or MST7MDT 64 | 65 | # composer_root: 66 | # Relative path to the composer root directory from the project root. This is 67 | # the directory which contains the composer.json and where all Composer related 68 | # commands are executed. 69 | 70 | # composer_version: "2" 71 | # You can set it to "" or "2" (default) for Composer v2 or "1" for Composer v1 72 | # to use the latest major version available at the time your container is built. 73 | # It is also possible to use each other Composer version channel. This includes: 74 | # - 2.2 (latest Composer LTS version) 75 | # - stable 76 | # - preview 77 | # - snapshot 78 | # Alternatively, an explicit Composer version may be specified, for example "2.2.18". 79 | # To reinstall Composer after the image was built, run "ddev debug refresh". 80 | 81 | # nodejs_version: "16" 82 | # change from the default system Node.js version to another supported version, like 12, 14, 17, 18. 83 | # Note that you can use 'ddev nvm' or nvm inside the web container to provide nearly any 84 | # Node.js version, including v6, etc. 85 | 86 | # additional_hostnames: 87 | # - somename 88 | # - someothername 89 | # would provide http and https URLs for "somename.ddev.site" 90 | # and "someothername.ddev.site". 91 | 92 | # additional_fqdns: 93 | # - example.com 94 | # - sub1.example.com 95 | # would provide http and https URLs for "example.com" and "sub1.example.com" 96 | # Please take care with this because it can cause great confusion. 97 | 98 | # upload_dir: custom/upload/dir 99 | # would set the destination path for ddev import-files to /custom/upload/dir 100 | # When mutagen is enabled this path is bind-mounted so that all the files 101 | # in the upload_dir don't have to be synced into mutagen 102 | 103 | # working_dir: 104 | # web: /var/www/html 105 | # db: /home 106 | # would set the default working directory for the web and db services. 107 | # These values specify the destination directory for ddev ssh and the 108 | # directory in which commands passed into ddev exec are run. 109 | 110 | # omit_containers: [db, dba, ddev-ssh-agent] 111 | # Currently only these containers are supported. Some containers can also be 112 | # omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit 113 | # the "db" container, several standard features of ddev that access the 114 | # database container will be unusable. In the global configuration it is also 115 | # possible to omit ddev-router, but not here. 116 | 117 | # nfs_mount_enabled: false 118 | # Great performance improvement but requires host configuration first. 119 | # See https://ddev.readthedocs.io/en/latest/users/install/performance/#nfs 120 | 121 | # mutagen_enabled: false 122 | # Performance improvement using mutagen asynchronous updates. 123 | # See https://ddev.readthedocs.io/en/latest/users/install/performance/#mutagen 124 | 125 | # fail_on_hook_fail: False 126 | # Decide whether 'ddev start' should be interrupted by a failing hook 127 | 128 | # host_https_port: "59002" 129 | # The host port binding for https can be explicitly specified. It is 130 | # dynamic unless otherwise specified. 131 | # This is not used by most people, most people use the *router* instead 132 | # of the localhost port. 133 | 134 | # host_webserver_port: "59001" 135 | # The host port binding for the ddev-webserver can be explicitly specified. It is 136 | # dynamic unless otherwise specified. 137 | # This is not used by most people, most people use the *router* instead 138 | # of the localhost port. 139 | 140 | # host_db_port: "59002" 141 | # The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic 142 | # unless explicitly specified. 143 | 144 | # phpmyadmin_port: "8036" 145 | # phpmyadmin_https_port: "8037" 146 | # The PHPMyAdmin ports can be changed from the default 8036 and 8037 147 | 148 | # host_phpmyadmin_port: "8036" 149 | # The phpmyadmin (dba) port is not normally bound on the host at all, instead being routed 150 | # through ddev-router, but it can be specified and bound. 151 | 152 | # mailhog_port: "8025" 153 | # mailhog_https_port: "8026" 154 | # The MailHog ports can be changed from the default 8025 and 8026 155 | 156 | # host_mailhog_port: "8025" 157 | # The mailhog port is not normally bound on the host at all, instead being routed 158 | # through ddev-router, but it can be bound directly to localhost if specified here. 159 | 160 | # webimage_extra_packages: [php7.4-tidy, php-bcmath] 161 | # Extra Debian packages that are needed in the webimage can be added here 162 | 163 | # dbimage_extra_packages: [telnet,netcat] 164 | # Extra Debian packages that are needed in the dbimage can be added here 165 | 166 | # use_dns_when_possible: true 167 | # If the host has internet access and the domain configured can 168 | # successfully be looked up, DNS will be used for hostname resolution 169 | # instead of editing /etc/hosts 170 | # Defaults to true 171 | 172 | # project_tld: ddev.site 173 | # The top-level domain used for project URLs 174 | # The default "ddev.site" allows DNS lookup via a wildcard 175 | # If you prefer you can change this to "ddev.local" to preserve 176 | # pre-v1.9 behavior. 177 | 178 | # ngrok_args: --basic-auth username:pass1234 179 | # Provide extra flags to the "ngrok http" command, see 180 | # https://ngrok.com/docs#http or run "ngrok http -h" 181 | 182 | # disable_settings_management: false 183 | # If true, ddev will not create CMS-specific settings files like 184 | # Drupal's settings.php/settings.ddev.php or TYPO3's AdditionalConfiguration.php 185 | # In this case the user must provide all such settings. 186 | 187 | # You can inject environment variables into the web container with: 188 | # web_environment: 189 | # - SOMEENV=somevalue 190 | # - SOMEOTHERENV=someothervalue 191 | 192 | # no_project_mount: false 193 | # (Experimental) If true, ddev will not mount the project into the web container; 194 | # the user is responsible for mounting it manually or via a script. 195 | # This is to enable experimentation with alternate file mounting strategies. 196 | # For advanced users only! 197 | 198 | # bind_all_interfaces: false 199 | # If true, host ports will be bound on all network interfaces, 200 | # not just the localhost interface. This means that ports 201 | # will be available on the local network if the host firewall 202 | # allows it. 203 | 204 | # default_container_timeout: 120 205 | # The default time that ddev waits for all containers to become ready can be increased from 206 | # the default 120. This helps in importing huge databases, for example. 207 | 208 | #web_extra_exposed_ports: 209 | #- name: nodejs 210 | # container_port: 3000 211 | # http_port: 2999 212 | # https_port: 3000 213 | #- name: something 214 | # container_port: 4000 215 | # https_port: 4000 216 | # http_port: 3999 217 | # Allows a set of extra ports to be exposed via ddev-router 218 | # The port behavior on the ddev-webserver must be arranged separately, for example 219 | # using web_extra_daemons. 220 | # For example, with a web app on port 3000 inside the container, this config would 221 | # expose that web app on https://.ddev.site:9999 and http://.ddev.site:9998 222 | # web_extra_exposed_ports: 223 | # - container_port: 3000 224 | # http_port: 9998 225 | # https_port: 9999 226 | 227 | #web_extra_daemons: 228 | #- name: "http-1" 229 | # command: "/var/www/html/node_modules/.bin/http-server -p 3000" 230 | # directory: /var/www/html 231 | #- name: "http-2" 232 | # command: "/var/www/html/node_modules/.bin/http-server /var/www/html/sub -p 3000" 233 | # directory: /var/www/html 234 | 235 | # override_config: false 236 | # By default, config.*.yaml files are *merged* into the configuration 237 | # But this means that some things can't be overridden 238 | # For example, if you have 'nfs_mount_enabled: true'' you can't override it with a merge 239 | # and you can't erase existing hooks or all environment variables. 240 | # However, with "override_config: true" in a particular config.*.yaml file, 241 | # 'nfs_mount_enabled: false' can override the existing values, and 242 | # hooks: 243 | # post-start: [] 244 | # or 245 | # web_environment: [] 246 | # or 247 | # additional_hostnames: [] 248 | # can have their intended affect. 'override_config' affects only behavior of the 249 | # config.*.yaml file it exists in. 250 | 251 | # Many ddev commands can be extended to run tasks before or after the 252 | # ddev command is executed, for example "post-start", "post-import-db", 253 | # "pre-composer", "post-composer" 254 | # See https://ddev.readthedocs.io/en/stable/users/extend/custom-commands/ for more 255 | # information on the commands that can be extended and the tasks you can define 256 | # for them. Example: 257 | #hooks: 258 | # post-import-db: 259 | # - exec: drush cr 260 | # - exec: drush updb 261 | -------------------------------------------------------------------------------- /.ddev/docker-compose.network-mtu.yaml: -------------------------------------------------------------------------------- 1 | # Temporary fix for network issues when running composer inside ddev container (in Gitpod) 2 | # 3 | # Since Gitpod removed slirp4netns as part of performance improvements, 4 | # MTU value should be aligned to the one in gitpod.io 5 | # 6 | # Gitpod fixed it for docker - https://github.com/gitpod-io/gitpod/pull/9356 7 | # and for docker-compose - https://github.com/gitpod-io/template-docker-compose/pull/4 8 | # 9 | # ddev doesn't use Gitpod's custom docker-compose binary. Instead, ddev uses 10 | # its own docker-compose binary at /home/gitpod/.ddev/bin/docker-compose 11 | # ddev issue [WIP] - https://github.com/drud/ddev/issues/3766 12 | # 13 | # Align the MTU value to the one that is set in Gitpod (1440) 14 | 15 | networks: 16 | default: 17 | driver_opts: 18 | com.docker.network.driver.mtu: 1440 19 | -------------------------------------------------------------------------------- /.ddev/run-phpstorm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ ! -x ~/.projector/configs/PhpStorm/run.sh ]; then 4 | echo "PhpStorm runner not found" && exit 1 5 | fi 6 | ~/.projector/configs/PhpStorm/run.sh $GITPOD_REPO_ROOT 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Drupal editor configuration normalization 2 | # @see http://editorconfig.org/ 3 | 4 | # This is the top-most .editorconfig file; do not search in parent directories. 5 | root = true 6 | 7 | # All files. 8 | [*] 9 | end_of_line = LF 10 | indent_style = space 11 | indent_size = 2 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [composer.{json,lock}] 17 | indent_size = 4 18 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Drupal git normalization 2 | # @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html 3 | # @see https://www.drupal.org/node/1542048 4 | 5 | # Normally these settings would be done with macro attributes for improved 6 | # readability and easier maintenance. However macros can only be defined at the 7 | # repository root directory. Drupal avoids making any assumptions about where it 8 | # is installed. 9 | 10 | # Define text file attributes. 11 | # - Treat them as text. 12 | # - Ensure no CRLF line-endings, neither on checkout nor on checkin. 13 | # - Detect whitespace errors. 14 | # - Exposed by default in `git diff --color` on the CLI. 15 | # - Validate with `git diff --check`. 16 | # - Deny applying with `git apply --whitespace=error-all`. 17 | # - Fix automatically with `git apply --whitespace=fix`. 18 | 19 | *.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 20 | *.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 21 | *.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 22 | *.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php 23 | *.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html 24 | *.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php 25 | *.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php 26 | *.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 27 | *.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 28 | *.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 29 | *.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 30 | *.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 31 | *.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php 32 | *.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php 33 | *.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 34 | *.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php 35 | *.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 36 | *.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php 37 | *.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 38 | *.svg text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 39 | *.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php 40 | *.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 41 | *.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 42 | *.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 43 | *.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 44 | 45 | # Define binary file attributes. 46 | # - Do not treat them as text. 47 | # - Include binary diff in patches instead of "binary files differ." 48 | *.eot -text diff 49 | *.exe -text diff 50 | *.gif -text diff 51 | *.gz -text diff 52 | *.ico -text diff 53 | *.jpeg -text diff 54 | *.jpg -text diff 55 | *.otf -text diff 56 | *.phar -text diff 57 | *.png -text diff 58 | *.svgz -text diff 59 | *.ttf -text diff 60 | *.woff -text diff 61 | *.woff2 -text diff 62 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: shaal 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### 2 | ### GitHub repository .gitignore section 3 | ### 4 | 5 | # Ignore directories generated by Composer 6 | /console/ 7 | /drush/Commands/contrib/ 8 | /vendor/ 9 | /web/core/ 10 | /web/modules/contrib/ 11 | /web/themes/contrib/ 12 | /web/profiles/contrib/ 13 | /web/libraries/ 14 | /web/private/scripts/quicksilver 15 | /web/private/examples 16 | 17 | # Ignore transpiled js 18 | /web/modules/custom/**/js/*.js 19 | /web/modules/custom/**/js/**/*.js 20 | /web/modules/custom/**/vue_templates/*.js 21 | !/web/modules/custom/**/vue_templates/*.es6.js 22 | /web/modules/custom/**/vue_templates/**/*.js 23 | !/web/modules/custom/**/vue_templates/**/*.es6.js 24 | !/web/modules/custom/**/js/*.es6.js 25 | !/web/modules/custom/**/js/*.legacy.js 26 | /web/themes/custom/tableau_www/js/**/*.js 27 | !/web/themes/custom/tableau_www/js/**/*.es6.js 28 | !/web/themes/custom/tableau_www/js/**/*.legacy.js 29 | /web/themes/custom/**/js/**/*.js 30 | !/web/themes/custom/**/js/**/*.es6.js 31 | !/web/themes/custom/**/js/**/*.legacy.js 32 | *.js.map 33 | 34 | # Ignore Node files 35 | /node_modules/ 36 | package-lock.json 37 | 38 | # Add directories containing build assets below. 39 | # Keep all additions above the "cut" line. 40 | 41 | # This distinction is only important when using this 42 | # repository as a custom upstream. The .gitignore file 43 | # is not modified in the GitHub PR workflow. 44 | 45 | 46 | # :::::::::::::::::::::: cut :::::::::::::::::::::: 47 | 48 | ### 49 | ### Pantheon site .gitignore section 50 | ### 51 | ### Items below the "cut" line are still ignored on 52 | ### the Pantheon site. Items above the "cut" line 53 | ### are ignored in the GitHub repository, but committed 54 | ### to the Pantheon repository. 55 | ### @see RoboFile.php prepareArtifacts 56 | ### 57 | 58 | # Ignore Lando settings 59 | .lando.yml 60 | 61 | # Ignore local bash files 62 | .bashrc-local 63 | 64 | # Ignore local settings 65 | /web/sites/settings.local.php 66 | /app 67 | /tests/behat/behat.local.yml 68 | /tests/phpunit.local.xml 69 | 70 | # Lint cache 71 | .phplint-cache 72 | 73 | # Ignore Drupal's file directory 74 | web/sites/default/files 75 | 76 | # Pantheon commits a settings.php for environment-specific settings. 77 | # Place local settings in settings.local.php 78 | web/sites/*/settings.local.php 79 | 80 | # Ignore SimpleTest multi-site environment. 81 | web/sites/simpletest 82 | 83 | # Ignore .gitlab settings globally. 84 | /**/.gitlab/ 85 | 86 | # Ignore package manager files from dependencies. 87 | /vendor/**/yarn.lock 88 | /vendor/**/composer.json 89 | /vendor/**/composer.lock 90 | /web/**/composer.json 91 | /web/**/composer.lock 92 | # Allow locking specific versions of npm packages, in order to avoid potential issues of breaking changes. 93 | # /web/**/yarn.lock 94 | 95 | # Ignore test files within Drupal and vendors. 96 | /vendor/**/tests/ 97 | /web/core/**/tests/ 98 | /web/libraries/**/tests/ 99 | /web/modules/contrib/**/tests/ 100 | 101 | # Ignore common text files within Drupal and vendors. 102 | /vendor/**/README.* 103 | /vendor/**/LICENSE.* 104 | /vendor/**/PATCHES.* 105 | /web/**/README.* 106 | /web/**/LICENSE.* 107 | /web/**/PATCHES.* 108 | 109 | # Ignore select source filetypes that are compiled to other files. 110 | /vendor/**/*.scss 111 | /web/libraries/**/*.scss 112 | /web/libraries/**/*.ts 113 | /web/modules/contrib/**/*.scss 114 | /web/core/**/*.es6.js 115 | /web/modules/contrib/**/*.es6.js 116 | 117 | # Ignore files generated by PhpStorm 118 | .idea 119 | 120 | # Ignore sensitive files 121 | .env 122 | 123 | # Ignore CI config that is not our's. 124 | /web/**/.travis.yml 125 | /web/**/.circleci/ 126 | 127 | # Odd patterns from select dependencies. 128 | # For some reason datalayer-helper bundles the entire closure js compiler. 129 | /**/third_party/closure-compiler/ 130 | /**/third_party/closure-library/ 131 | /**/third_party/closure-linter/ 132 | # Coveo's js search-ui framework includes a lot of tests and docs. 133 | /web/libraries/coveo/coverage/ 134 | /web/libraries/coveo/docgen/ 135 | # No need for the umami Drupal 8 demo profile. 136 | /web/core/profiles/demo_umami/ 137 | 138 | # Packages # 139 | ############ 140 | *.7z 141 | *.dmg 142 | *.gz 143 | *.bz2 144 | *.iso 145 | *.jar 146 | *.rar 147 | *.tar 148 | *.zip 149 | *.tgz 150 | 151 | # Logs and databases # 152 | ###################### 153 | /logs/ 154 | /database/ 155 | *.log 156 | 157 | # Test files # 158 | tests/cypress/build/ 159 | 160 | # OS generated files # 161 | ###################### 162 | .DS_Store* 163 | ehthumbs.db 164 | Icon 165 | !/web/core/lib/Drupal/Core/Layout/Icon 166 | 167 | Thumbs.db 168 | ._* 169 | 170 | # Vim generated files # 171 | ###################### 172 | *.un~ 173 | 174 | # SASS # 175 | ########## 176 | .sass-cache 177 | 178 | # Things in the core directory that Drupal 8 commits in the repository. 179 | !web/core/**/*.gz 180 | 181 | # CircleCI directories# 182 | ####################### 183 | circleci/database/* 184 | # But keep the folders 185 | !circleci/database/.keep 186 | 187 | 188 | # The Build # 189 | # Include Drupal settings files 190 | !/web/sites/*/settings.php 191 | !/web/sites/*/services.yml 192 | 193 | # Ignore local and generated settings files 194 | /web/sites/*/settings.local.php 195 | /web/sites/*/settings.build.php 196 | /web/sites/*/services.build.yml 197 | 198 | # Ignore artifacts 199 | /artifacts 200 | 201 | # DDev 202 | /web/sites/default/drushrc.php 203 | 204 | # Gitpod 205 | .ddev/docker-compose.host-docker-internal.yaml 206 | .ddev/docker-compose.xdebug-ip.yaml 207 | .ddev/config.fqdns.yaml 208 | .ddev/config.gitpod-overrides.yaml 209 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | image: drupalpod/drupalpod-gitpod-base:20231222 2 | 3 | # ddev and composer are running as part of the prebuild 4 | # when starting a workspace all docker images are ready 5 | tasks: 6 | - init: | 7 | ddev start -y 8 | ddev composer install 9 | ddev drush si -y --account-pass=admin --site-name='ddev_gitpod' demo_umami 10 | ddev drush en -y admin_toolbar 11 | command: | 12 | ddev start -y 13 | gp ports await 8080 && gp preview $(gp url 8080) 14 | 15 | # VScode xdebug extension 16 | vscode: 17 | extensions: 18 | # PHP extensions. 19 | - felixfbecker.php-debug 20 | - wongjn.php-sniffer 21 | - neilbrayfield.php-docblocker 22 | - bmewburn.vscode-intelephense-client 23 | - andrewdavidblum.drupal-smart-snippets 24 | 25 | # Twig extensions. 26 | - mblode.twig-language-2 27 | 28 | # Bash extensions. 29 | - timonwong.shellcheck 30 | - rogalmic.bash-debug 31 | 32 | ports: 33 | # Used by ddev - local db clients 34 | - port: 3306 35 | onOpen: ignore 36 | # Used by projector 37 | - port: 6942 38 | onOpen: ignore 39 | # Used by MailHog 40 | - port: 8027 41 | onOpen: ignore 42 | # Used by phpMyAdmin 43 | - port: 8036 44 | onOpen: ignore 45 | # Direct-connect ddev-webserver port that is the main port 46 | - port: 8080 47 | onOpen: ignore 48 | # Ignore host https port 49 | - port: 8443 50 | onOpen: ignore 51 | # xdebug port 52 | - port: 9003 53 | onOpen: ignore 54 | # projector port 55 | - port: 9999 56 | onOpen: open-browser 57 | -------------------------------------------------------------------------------- /.theia/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Listen for XDebug", 9 | "type": "php", 10 | "request": "launch", 11 | "hostname": "0.0.0.0", 12 | "port": 9000, 13 | "pathMappings": { 14 | "/var/www/html": "${workspaceRoot}" 15 | } 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Listen for XDebug", 9 | "type": "php", 10 | "request": "launch", 11 | "hostname": "0.0.0.0", 12 | "port": 9003, 13 | "pathMappings": { 14 | "/var/www/html": "${workspaceRoot}" 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Ofer Shaal 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/shaal/ddev-gitpod) 2 | 3 | # ddev + Gitpod 4 | ## Set up a full Drupal dev environment in a browser 5 | 6 | This project demonstrates a complete Drupal 9 development environment, utilizing ddev and Gitpod, through your browser. 7 | 8 | ## Video Demo 9 | 10 | Watch a 5 minutes walkthrough video: 11 | 12 | Setup a full Drupal dev environment in a browser 13 | 14 | ## Prerequisites: 15 | 1. [Sign up for gitpod.io](https://gitpod.io/login) 16 | 17 | ## Try it out: 18 | 1. Click on the following link 19 | https://gitpod.io/#https://github.com/shaal/ddev-gitpod 20 | 1. Your environment is being prepared, wait about 40 seconds (A splash screen will appear) 21 | 1. VScode IDE will be displayed, a few seconds later you will see Umami demo. 22 | 1. Run in terminal `ddev xdebug on` 23 | 1. Open VScode's debugger, place a new breakpoint in `web/index.php` 24 | 1. Open your website's URL in a browser. 25 | 1. :tada: 26 | 27 | ## Do you like PhpStorm instead of Theia or VScode? 28 | 1. Open a bash window at the bottom 29 | 2. `.ddev/run-phpstorm.sh` 30 | 31 | ## How does it work? 32 | 1. Gitpod - development environment based on Docker 33 | 1. [.gitpod.yml](https://github.com/shaal/ddev-gitpod/blob/main/.gitpod.yml) 34 | 1. Defines the main docker image this environment is built on - `.gitpod.Dockerfile` 35 | 1. Run prebuild commands: 36 | 1. Start ddev 37 | 1. Run `composer install` 38 | 1. Install Umami demo website 39 | 1. [.gitpod.Dockerfile](https://github.com/shaal/ddev-gitpod/blob/main/.gitpod.Dockerfile) 40 | 1. Set base image to Gitpod's `workspace-full` ([link](https://github.com/gitpod-io/workspace-images/tree/master/full)) 41 | 1. Install ddev using brew 42 | 1. ddev - ridiculously simple setup for complex development environments, allows developers working locally or working with Gitpod in the cloud. 43 | 1. [.ddev/config.yaml](https://github.com/shaal/ddev-gitpod/blob/main/.ddev/config.yaml) - main ddev (default) configuration, can be generated by running `ddev config` 44 | 45 | ## Thank you 46 | [@rfay](https://github.com/rfay) for your endless patience and relentless support that made this project possible. 47 | 48 | ### Persistent Storage: 49 | * Gitpod backs up the state of the `/workspace/` folder between workspace starts, so that you can revisit them later. Attention: Files in other locations will not be saved! 50 | * [Additional Storage Solutions](https://www.gitpod.io/docs/self-hosted/latest/install/storage) 51 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "drupal/recommended-project", 3 | "description": "Project template for Drupal projects with a relocated document root", 4 | "type": "project", 5 | "license": "GPL-2.0-or-later", 6 | "homepage": "https://www.drupal.org/project/drupal", 7 | "support": { 8 | "docs": "https://www.drupal.org/docs/user_guide/en/index.html", 9 | "chat": "https://www.drupal.org/node/314178" 10 | }, 11 | "repositories": [ 12 | { 13 | "type": "composer", 14 | "url": "https://packages.drupal.org/8" 15 | } 16 | ], 17 | "require": { 18 | "composer/installers": "^2.0", 19 | "drupal/admin_toolbar": "^3.4", 20 | "drupal/core-composer-scaffold": "^10.1", 21 | "drupal/core-project-message": "^10.1", 22 | "drupal/core-recommended": "^10.1", 23 | "drush/drush": "^12.3" 24 | }, 25 | "conflict": { 26 | "drupal/drupal": "*" 27 | }, 28 | "minimum-stability": "dev", 29 | "prefer-stable": true, 30 | "config": { 31 | "allow-plugins": { 32 | "composer/installers": true, 33 | "drupal/core-composer-scaffold": true, 34 | "drupal/core-project-message": true, 35 | "phpstan/extension-installer": true, 36 | "dealerdirect/phpcodesniffer-composer-installer": true 37 | }, 38 | "sort-packages": true 39 | }, 40 | "extra": { 41 | "drupal-scaffold": { 42 | "locations": { 43 | "web-root": "web/" 44 | } 45 | }, 46 | "installer-paths": { 47 | "web/core": [ 48 | "type:drupal-core" 49 | ], 50 | "web/libraries/{$name}": [ 51 | "type:drupal-library" 52 | ], 53 | "web/modules/contrib/{$name}": [ 54 | "type:drupal-module" 55 | ], 56 | "web/profiles/contrib/{$name}": [ 57 | "type:drupal-profile" 58 | ], 59 | "web/themes/contrib/{$name}": [ 60 | "type:drupal-theme" 61 | ], 62 | "drush/Commands/contrib/{$name}": [ 63 | "type:drupal-drush" 64 | ], 65 | "web/modules/custom/{$name}": [ 66 | "type:drupal-custom-module" 67 | ], 68 | "web/profiles/custom/{$name}": [ 69 | "type:drupal-custom-profile" 70 | ], 71 | "web/themes/custom/{$name}": [ 72 | "type:drupal-custom-theme" 73 | ] 74 | }, 75 | "drupal-core-project-message": { 76 | "include-keys": [ 77 | "homepage", 78 | "support" 79 | ], 80 | "post-create-project-cmd-message": [ 81 | " ", 82 | " Congratulations, you’ve installed the Drupal codebase ", 83 | " from the drupal/recommended-project template! ", 84 | " ", 85 | "", 86 | "Next steps:", 87 | " * Install the site: https://www.drupal.org/docs/installing-drupal", 88 | " * Read the user guide: https://www.drupal.org/docs/user_guide/en/index.html", 89 | " * Get support: https://www.drupal.org/support", 90 | " * Get involved with the Drupal community:", 91 | " https://www.drupal.org/getting-involved", 92 | " * Remove the plugin that prints this message:", 93 | " composer remove drupal/core-project-message" 94 | ] 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /web/.csslintrc: -------------------------------------------------------------------------------- 1 | --errors=box-model, 2 | display-property-grouping, 3 | duplicate-background-images, 4 | duplicate-properties, 5 | empty-rules, 6 | ids, 7 | import, 8 | important, 9 | known-properties, 10 | outline-none, 11 | overqualified-elements, 12 | qualified-headings, 13 | shorthand, 14 | star-property-hack, 15 | text-indent, 16 | underscore-property-hack, 17 | unique-headings, 18 | unqualified-attributes, 19 | vendor-prefix, 20 | zero-units 21 | --ignore=adjoining-classes, 22 | box-sizing, 23 | bulletproof-font-face, 24 | compatible-vendor-prefixes, 25 | errors, 26 | fallback-colors, 27 | floats, 28 | font-faces, 29 | font-sizes, 30 | gradients, 31 | import-ie-limit, 32 | order-alphabetical, 33 | regex-selectors, 34 | rules-count, 35 | selector-max, 36 | selector-max-approaching, 37 | selector-newline, 38 | universal-selector 39 | --exclude-list=core/assets, 40 | vendor 41 | -------------------------------------------------------------------------------- /web/.eslintignore: -------------------------------------------------------------------------------- 1 | core/**/* 2 | vendor/**/* 3 | sites/**/files/**/* 4 | libraries/**/* 5 | sites/**/libraries/**/* 6 | profiles/**/libraries/**/* 7 | **/js_test_files/**/* 8 | **/node_modules/**/* 9 | -------------------------------------------------------------------------------- /web/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./core/.eslintrc.json" 3 | } 4 | -------------------------------------------------------------------------------- /web/.ht.router.php: -------------------------------------------------------------------------------- 1 | 7 | 8 | Require all denied 9 | 10 | 11 | Order allow,deny 12 | 13 | 14 | 15 | # Don't show directory listings for URLs which map to a directory. 16 | Options -Indexes 17 | 18 | # Set the default handler. 19 | DirectoryIndex index.php index.html index.htm 20 | 21 | # Add correct encoding for SVGZ. 22 | AddType image/svg+xml svg svgz 23 | AddEncoding gzip svgz 24 | 25 | # Most of the following PHP settings cannot be changed at runtime. See 26 | # sites/default/default.settings.php and 27 | # Drupal\Core\DrupalKernel::bootEnvironment() for settings that can be 28 | # changed at runtime. 29 | 30 | php_value assert.active 0 31 | 32 | 33 | # Requires mod_expires to be enabled. 34 | 35 | # Enable expirations. 36 | ExpiresActive On 37 | 38 | # Cache all files for 1 year after access. 39 | ExpiresDefault "access plus 1 year" 40 | 41 | 42 | # Do not allow PHP scripts to be cached unless they explicitly send cache 43 | # headers themselves. Otherwise all scripts would have to overwrite the 44 | # headers set by mod_expires if they want another caching behavior. This may 45 | # fail if an error occurs early in the bootstrap process, and it may cause 46 | # problems if a non-Drupal PHP file is installed in a subdirectory. 47 | ExpiresActive Off 48 | 49 | 50 | 51 | # Set a fallback resource if mod_rewrite is not enabled. This allows Drupal to 52 | # work without clean URLs. This requires Apache version >= 2.2.16. If Drupal is 53 | # not accessed by the top level URL (i.e.: http://example.com/drupal/ instead of 54 | # http://example.com/), the path to index.php will need to be adjusted. 55 | 56 | FallbackResource /index.php 57 | 58 | 59 | # Various rewrite rules. 60 | 61 | RewriteEngine on 62 | 63 | # Set "protossl" to "s" if we were accessed via https://. This is used later 64 | # if you enable "www." stripping or enforcement, in order to ensure that 65 | # you don't bounce between http and https. 66 | RewriteRule ^ - [E=protossl] 67 | RewriteCond %{HTTPS} on 68 | RewriteRule ^ - [E=protossl:s] 69 | 70 | # Make sure Authorization HTTP header is available to PHP 71 | # even when running as CGI or FastCGI. 72 | RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 73 | 74 | # Block access to "hidden" directories whose names begin with a period. This 75 | # includes directories used by version control systems such as Subversion or 76 | # Git to store control files. Files whose names begin with a period, as well 77 | # as the control files used by CVS, are protected by the FilesMatch directive 78 | # above. 79 | # 80 | # NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is 81 | # not possible to block access to entire directories from .htaccess because 82 | # is not allowed here. 83 | # 84 | # If you do not have mod_rewrite installed, you should remove these 85 | # directories from your webroot or otherwise protect them from being 86 | # downloaded. 87 | RewriteRule "/\.|^\.(?!well-known/)" - [F] 88 | 89 | # If your site can be accessed both with and without the 'www.' prefix, you 90 | # can use one of the following settings to redirect users to your preferred 91 | # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option: 92 | # 93 | # To redirect all users to access the site WITH the 'www.' prefix, 94 | # (http://example.com/foo will be redirected to http://www.example.com/foo) 95 | # uncomment the following: 96 | # RewriteCond %{HTTP_HOST} . 97 | # RewriteCond %{HTTP_HOST} !^www\. [NC] 98 | # RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 99 | # 100 | # To redirect all users to access the site WITHOUT the 'www.' prefix, 101 | # (http://www.example.com/foo will be redirected to http://example.com/foo) 102 | # uncomment the following: 103 | # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 104 | # RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301] 105 | 106 | # Modify the RewriteBase if you are using Drupal in a subdirectory or in a 107 | # VirtualDocumentRoot and the rewrite rules are not working properly. 108 | # For example if your site is at http://example.com/drupal uncomment and 109 | # modify the following line: 110 | # RewriteBase /drupal 111 | # 112 | # If your site is running in a VirtualDocumentRoot at http://example.com/, 113 | # uncomment the following line: 114 | # RewriteBase / 115 | 116 | # Redirect common PHP files to their new locations. 117 | RewriteCond %{REQUEST_URI} ^(.*)?/(install\.php) [OR] 118 | RewriteCond %{REQUEST_URI} ^(.*)?/(rebuild\.php) 119 | RewriteCond %{REQUEST_URI} !core 120 | RewriteRule ^ %1/core/%2 [L,QSA,R=301] 121 | 122 | # Rewrite install.php during installation to see if mod_rewrite is working 123 | RewriteRule ^core/install\.php core/install.php?rewrite=ok [QSA,L] 124 | 125 | # Pass all requests not referring directly to files in the filesystem to 126 | # index.php. 127 | RewriteCond %{REQUEST_FILENAME} !-f 128 | RewriteCond %{REQUEST_FILENAME} !-d 129 | RewriteCond %{REQUEST_URI} !=/favicon.ico 130 | RewriteRule ^ index.php [L] 131 | 132 | # For security reasons, deny access to other PHP files on public sites. 133 | # Note: The following URI conditions are not anchored at the start (^), 134 | # because Drupal may be located in a subdirectory. To further improve 135 | # security, you can replace '!/' with '!^/'. 136 | # Allow access to PHP files in /core (like authorize.php or install.php): 137 | RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$ 138 | # Allow access to test-specific PHP files: 139 | RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?\.php 140 | # Allow access to Statistics module's custom front controller. 141 | # Copy and adapt this rule to directly execute PHP files in contributed or 142 | # custom modules or to run another PHP application in the same directory. 143 | RewriteCond %{REQUEST_URI} !/core/modules/statistics/statistics\.php$ 144 | # Deny access to any other PHP files that do not match the rules above. 145 | # Specifically, disallow autoload.php from being served directly. 146 | RewriteRule "^(.+/.*|autoload)\.php($|/)" - [F] 147 | 148 | # Rules to correctly serve gzip compressed CSS and JS files. 149 | # Requires both mod_rewrite and mod_headers to be enabled. 150 | 151 | # Serve gzip compressed CSS files if they exist and the client accepts gzip. 152 | RewriteCond %{HTTP:Accept-encoding} gzip 153 | RewriteCond %{REQUEST_FILENAME}\.gz -s 154 | RewriteRule ^(.*css_[a-zA-Z0-9-_]+)\.css$ $1\.css\.gz [QSA] 155 | 156 | # Serve gzip compressed JS files if they exist and the client accepts gzip. 157 | RewriteCond %{HTTP:Accept-encoding} gzip 158 | RewriteCond %{REQUEST_FILENAME}\.gz -s 159 | RewriteRule ^(.*js_[a-zA-Z0-9-_]+)\.js$ $1\.js\.gz [QSA] 160 | 161 | # Serve correct content types, and prevent double compression. 162 | RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=no-brotli:1] 163 | RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=no-brotli:1] 164 | 165 | 166 | # Serve correct encoding type. 167 | Header set Content-Encoding gzip 168 | # Force proxies to cache gzipped & non-gzipped css/js files separately. 169 | Header append Vary Accept-Encoding 170 | 171 | 172 | 173 | 174 | # Various header fixes. 175 | 176 | # Disable content sniffing for all responses, since it's an attack vector. 177 | # This header is also set in FinishResponseSubscriber, which depending on 178 | # Apache configuration might get placed in the 'onsuccess' table. To prevent 179 | # header duplication, unset that one prior to setting in the 'always' table. 180 | # See "To circumvent this limitation..." in 181 | # https://httpd.apache.org/docs/current/mod/mod_headers.html. 182 | Header onsuccess unset X-Content-Type-Options 183 | Header always set X-Content-Type-Options nosniff 184 | # Disable Proxy header, since it's an attack vector. 185 | RequestHeader unset Proxy 186 | 187 | -------------------------------------------------------------------------------- /web/INSTALL.txt: -------------------------------------------------------------------------------- 1 | 2 | Read core/INSTALL.txt for detailed installation instructions for your Drupal 3 | website. 4 | -------------------------------------------------------------------------------- /web/autoload.php: -------------------------------------------------------------------------------- 1 | handle($request); 20 | $response->send(); 21 | 22 | $kernel->terminate($request, $response); 23 | -------------------------------------------------------------------------------- /web/robots.txt: -------------------------------------------------------------------------------- 1 | # 2 | # robots.txt 3 | # 4 | # This file is to prevent the crawling and indexing of certain parts 5 | # of your site by web crawlers and spiders run by sites like Yahoo! 6 | # and Google. By telling these "robots" where not to go on your site, 7 | # you save bandwidth and server resources. 8 | # 9 | # This file will be ignored unless it is at the root of your host: 10 | # Used: http://example.com/robots.txt 11 | # Ignored: http://example.com/site/robots.txt 12 | # 13 | # For more information about the robots.txt standard, see: 14 | # http://www.robotstxt.org/robotstxt.html 15 | 16 | User-agent: * 17 | # CSS, JS, Images 18 | Allow: /core/*.css$ 19 | Allow: /core/*.css? 20 | Allow: /core/*.js$ 21 | Allow: /core/*.js? 22 | Allow: /core/*.gif 23 | Allow: /core/*.jpg 24 | Allow: /core/*.jpeg 25 | Allow: /core/*.png 26 | Allow: /core/*.svg 27 | Allow: /profiles/*.css$ 28 | Allow: /profiles/*.css? 29 | Allow: /profiles/*.js$ 30 | Allow: /profiles/*.js? 31 | Allow: /profiles/*.gif 32 | Allow: /profiles/*.jpg 33 | Allow: /profiles/*.jpeg 34 | Allow: /profiles/*.png 35 | Allow: /profiles/*.svg 36 | # Directories 37 | Disallow: /core/ 38 | Disallow: /profiles/ 39 | # Files 40 | Disallow: /README.md 41 | Disallow: /composer/Metapackage/README.txt 42 | Disallow: /composer/Plugin/ProjectMessage/README.md 43 | Disallow: /composer/Plugin/Scaffold/README.md 44 | Disallow: /composer/Plugin/VendorHardening/README.txt 45 | Disallow: /composer/Template/README.txt 46 | Disallow: /modules/README.txt 47 | Disallow: /sites/README.txt 48 | Disallow: /themes/README.txt 49 | Disallow: /web.config 50 | # Paths (clean URLs) 51 | Disallow: /admin/ 52 | Disallow: /comment/reply/ 53 | Disallow: /filter/tips 54 | Disallow: /node/add/ 55 | Disallow: /search/ 56 | Disallow: /user/register 57 | Disallow: /user/password 58 | Disallow: /user/login 59 | Disallow: /user/logout 60 | Disallow: /media/oembed 61 | Disallow: /*/media/oembed 62 | # Paths (no clean URLs) 63 | Disallow: /index.php/admin/ 64 | Disallow: /index.php/comment/reply/ 65 | Disallow: /index.php/filter/tips 66 | Disallow: /index.php/node/add/ 67 | Disallow: /index.php/search/ 68 | Disallow: /index.php/user/password 69 | Disallow: /index.php/user/register 70 | Disallow: /index.php/user/login 71 | Disallow: /index.php/user/logout 72 | Disallow: /index.php/media/oembed 73 | Disallow: /index.php/*/media/oembed 74 | -------------------------------------------------------------------------------- /web/sites/default/default.services.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | session.storage.options: 3 | # Default ini options for sessions. 4 | # 5 | # Some distributions of Linux (most notably Debian) ship their PHP 6 | # installations with garbage collection (gc) disabled. Since Drupal depends 7 | # on PHP's garbage collection for clearing sessions, ensure that garbage 8 | # collection occurs by using the most common settings. 9 | # @default 1 10 | gc_probability: 1 11 | # @default 100 12 | gc_divisor: 100 13 | # 14 | # Set session lifetime (in seconds), i.e. the grace period for session 15 | # data. Sessions are deleted by the session garbage collector after one 16 | # session lifetime has elapsed since the user's last visit. When a session 17 | # is deleted, authenticated users are logged out, and the contents of the 18 | # user's session is discarded. 19 | # @default 200000 20 | gc_maxlifetime: 200000 21 | # 22 | # Set session cookie lifetime (in seconds), i.e. the time from the session 23 | # is created to the cookie expires, i.e. when the browser is expected to 24 | # discard the cookie. The value 0 means "until the browser is closed". 25 | # @default 2000000 26 | cookie_lifetime: 2000000 27 | # 28 | # Drupal automatically generates a unique session cookie name based on the 29 | # full domain name used to access the site. This mechanism is sufficient 30 | # for most use-cases, including multi-site deployments. However, if it is 31 | # desired that a session can be reused across different subdomains, the 32 | # cookie domain needs to be set to the shared base domain. Doing so assures 33 | # that users remain logged in as they cross between various subdomains. 34 | # To maximize compatibility and normalize the behavior across user agents, 35 | # the cookie domain should start with a dot. 36 | # 37 | # @default none 38 | # cookie_domain: '.example.com' 39 | # 40 | # Set the SameSite cookie attribute: 'None', 'Lax', or 'Strict'. If set, 41 | # this value will override the server value. See 42 | # https://www.php.net/manual/en/session.security.ini.php for more 43 | # information. 44 | # @default no value 45 | cookie_samesite: Lax 46 | # 47 | # Set the session ID string length. The length can be between 22 to 256. The 48 | # PHP recommended value is 48. See 49 | # https://www.php.net/manual/session.security.ini.php for more information. 50 | # This value should be kept in sync with 51 | # \Drupal\Core\Session\SessionConfiguration::__construct() 52 | # @default 48 53 | sid_length: 48 54 | # 55 | # Set the number of bits in encoded session ID character. The possible 56 | # values are '4' (0-9, a-f), '5' (0-9, a-v), and '6' (0-9, a-z, A-Z, "-", 57 | # ","). The PHP recommended value is 6. See 58 | # https://www.php.net/manual/session.security.ini.php for more information. 59 | # This value should be kept in sync with 60 | # \Drupal\Core\Session\SessionConfiguration::__construct() 61 | # @default 6 62 | sid_bits_per_character: 6 63 | twig.config: 64 | # Twig debugging: 65 | # 66 | # When debugging is enabled: 67 | # - The markup of each Twig template is surrounded by HTML comments that 68 | # contain theming information, such as template file name suggestions. 69 | # - Note that this debugging markup will cause automated tests that directly 70 | # check rendered HTML to fail. When running automated tests, 'debug' 71 | # should be set to FALSE. 72 | # - The dump() function can be used in Twig templates to output information 73 | # about template variables. 74 | # - Twig templates are automatically recompiled whenever the source code 75 | # changes (see auto_reload below). 76 | # 77 | # For more information about debugging Twig templates, see 78 | # https://www.drupal.org/node/1906392. 79 | # 80 | # Enabling Twig debugging is not recommended in production environments. 81 | # @default false 82 | debug: false 83 | # Twig auto-reload: 84 | # 85 | # Automatically recompile Twig templates whenever the source code changes. 86 | # If you don't provide a value for auto_reload, it will be determined 87 | # based on the value of debug. 88 | # 89 | # Enabling auto-reload is not recommended in production environments. 90 | # @default null 91 | auto_reload: null 92 | # Twig cache: 93 | # 94 | # By default, Twig templates will be compiled and stored in the filesystem 95 | # to increase performance. Disabling the Twig cache will recompile the 96 | # templates from source each time they are used. In most cases the 97 | # auto_reload setting above should be enabled rather than disabling the 98 | # Twig cache. 99 | # 100 | # Disabling the Twig cache is not recommended in production environments. 101 | # @default true 102 | cache: true 103 | # File extensions: 104 | # 105 | # List of file extensions the Twig system is allowed to load via the 106 | # twig.loader.filesystem service. Files with other extensions will not be 107 | # loaded unless they are added here. For example, to allow a file named 108 | # 'example.partial' to be loaded, add 'partial' to this list. To load files 109 | # with no extension, add an empty string '' to the list. 110 | # 111 | # @default ['css', 'html', 'js', 'svg', 'twig'] 112 | allowed_file_extensions: 113 | - css 114 | - html 115 | - js 116 | - svg 117 | - twig 118 | renderer.config: 119 | # Renderer required cache contexts: 120 | # 121 | # The Renderer will automatically associate these cache contexts with every 122 | # render array, hence varying every render array by these cache contexts. 123 | # 124 | # @default ['languages:language_interface', 'theme', 'user.permissions'] 125 | required_cache_contexts: ['languages:language_interface', 'theme', 'user.permissions'] 126 | # Renderer automatic placeholdering conditions: 127 | # 128 | # Drupal allows portions of the page to be automatically deferred when 129 | # rendering to improve cache performance. That is especially helpful for 130 | # cache contexts that vary widely, such as the active user. On some sites 131 | # those may be different, however, such as sites with only a handful of 132 | # users. If you know what the high-cardinality cache contexts are for your 133 | # site, specify those here. If you're not sure, the defaults are fairly safe 134 | # in general. 135 | # 136 | # For more information about rendering optimizations see 137 | # https://www.drupal.org/developing/api/8/render/arrays/cacheability#optimizing 138 | auto_placeholder_conditions: 139 | # Max-age at or below which caching is not considered worthwhile. 140 | # 141 | # Disable by setting to -1. 142 | # 143 | # @default 0 144 | max-age: 0 145 | # Cache contexts with a high cardinality. 146 | # 147 | # Disable by setting to []. 148 | # 149 | # @default ['session', 'user'] 150 | contexts: ['session', 'user'] 151 | # Tags with a high invalidation frequency. 152 | # 153 | # Disable by setting to []. 154 | # 155 | # @default [] 156 | tags: [] 157 | # Renderer cache debug: 158 | # 159 | # Allows cache debugging output for each rendered element. 160 | # 161 | # Enabling render cache debugging is not recommended in production 162 | # environments. 163 | # @default false 164 | debug: false 165 | # Cacheability debugging: 166 | # 167 | # Responses with cacheability metadata (CacheableResponseInterface instances) 168 | # get X-Drupal-Cache-Tags, X-Drupal-Cache-Contexts and X-Drupal-Cache-Max-Age 169 | # headers. 170 | # 171 | # For more information about debugging cacheable responses, see 172 | # https://www.drupal.org/developing/api/8/response/cacheable-response-interface 173 | # 174 | # Enabling cacheability debugging is not recommended in production 175 | # environments. 176 | # @default false 177 | http.response.debug_cacheability_headers: false 178 | factory.keyvalue: {} 179 | # Default key/value storage service to use. 180 | # @default keyvalue.database 181 | # default: keyvalue.database 182 | # Collection-specific overrides. 183 | # state: keyvalue.database 184 | factory.keyvalue.expirable: {} 185 | # Default key/value expirable storage service to use. 186 | # @default keyvalue.database.expirable 187 | # default: keyvalue.database.expirable 188 | # Allowed protocols for URL generation. 189 | filter_protocols: 190 | - http 191 | - https 192 | - ftp 193 | - news 194 | - nntp 195 | - tel 196 | - telnet 197 | - mailto 198 | - irc 199 | - ssh 200 | - sftp 201 | - webcal 202 | - rtsp 203 | 204 | # Configure Cross-Site HTTP requests (CORS). 205 | # Read https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 206 | # for more information about the topic in general. 207 | # Note: By default the configuration is disabled. 208 | cors.config: 209 | enabled: false 210 | # Specify allowed headers, like 'x-allowed-header'. 211 | allowedHeaders: [] 212 | # Specify allowed request methods, specify ['*'] to allow all possible ones. 213 | allowedMethods: [] 214 | # Configure requests allowed from specific origins. Do not include trailing 215 | # slashes with URLs. 216 | allowedOrigins: ['*'] 217 | # Configure requests allowed from origins, matching against regex patterns. 218 | allowedOriginsPatterns: [] 219 | # Sets the Access-Control-Expose-Headers header. 220 | exposedHeaders: false 221 | # Sets the Access-Control-Max-Age header. 222 | maxAge: false 223 | # Sets the Access-Control-Allow-Credentials header. 224 | supportsCredentials: false 225 | 226 | queue.config: 227 | # The maximum number of seconds to wait if a queue is temporarily suspended. 228 | # This is not applicable when a queue is suspended but does not specify 229 | # how long to wait before attempting to resume. 230 | suspendMaximumWait: 30 231 | -------------------------------------------------------------------------------- /web/sites/default/default.settings.php: -------------------------------------------------------------------------------- 1 | 'databasename', 81 | * 'username' => 'sql_username', 82 | * 'password' => 'sql_password', 83 | * 'host' => 'localhost', 84 | * 'port' => '3306', 85 | * 'driver' => 'mysql', 86 | * 'prefix' => '', 87 | * 'collation' => 'utf8mb4_general_ci', 88 | * ]; 89 | * @endcode 90 | */ 91 | $databases = []; 92 | 93 | /** 94 | * Customizing database settings. 95 | * 96 | * Many of the values of the $databases array can be customized for your 97 | * particular database system. Refer to the sample in the section above as a 98 | * starting point. 99 | * 100 | * The "driver" property indicates what Drupal database driver the 101 | * connection should use. This is usually the same as the name of the 102 | * database type, such as mysql or sqlite, but not always. The other 103 | * properties will vary depending on the driver. For SQLite, you must 104 | * specify a database file name in a directory that is writable by the 105 | * webserver. For most other drivers, you must specify a 106 | * username, password, host, and database name. 107 | * 108 | * Drupal core implements drivers for mysql, pgsql, and sqlite. Other drivers 109 | * can be provided by contributed or custom modules. To use a contributed or 110 | * custom driver, the "namespace" property must be set to the namespace of the 111 | * driver. The code in this namespace must be autoloadable prior to connecting 112 | * to the database, and therefore, prior to when module root namespaces are 113 | * added to the autoloader. To add the driver's namespace to the autoloader, 114 | * set the "autoload" property to the PSR-4 base directory of the driver's 115 | * namespace. This is optional for projects managed with Composer if the 116 | * driver's namespace is in Composer's autoloader. 117 | * 118 | * For each database, you may optionally specify multiple "target" databases. 119 | * A target database allows Drupal to try to send certain queries to a 120 | * different database if it can but fall back to the default connection if not. 121 | * That is useful for primary/replica replication, as Drupal may try to connect 122 | * to a replica server when appropriate and if one is not available will simply 123 | * fall back to the single primary server (The terms primary/replica are 124 | * traditionally referred to as master/slave in database server documentation). 125 | * 126 | * The general format for the $databases array is as follows: 127 | * @code 128 | * $databases['default']['default'] = $info_array; 129 | * $databases['default']['replica'][] = $info_array; 130 | * $databases['default']['replica'][] = $info_array; 131 | * $databases['extra']['default'] = $info_array; 132 | * @endcode 133 | * 134 | * In the above example, $info_array is an array of settings described above. 135 | * The first line sets a "default" database that has one primary database 136 | * (the second level default). The second and third lines create an array 137 | * of potential replica databases. Drupal will select one at random for a given 138 | * request as needed. The fourth line creates a new database with a name of 139 | * "extra". 140 | * 141 | * For MySQL, MariaDB or equivalent databases the 'isolation_level' option can 142 | * be set. The recommended transaction isolation level for Drupal sites is 143 | * 'READ COMMITTED'. The 'REPEATABLE READ' option is supported but can result 144 | * in deadlocks, the other two options are 'READ UNCOMMITTED' and 'SERIALIZABLE'. 145 | * They are available but not supported; use them at your own risk. For more 146 | * info: 147 | * https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html 148 | * 149 | * On your settings.php, change the isolation level: 150 | * @code 151 | * $databases['default']['default']['init_commands'] = [ 152 | * 'isolation_level' => 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 153 | * ]; 154 | * @endcode 155 | * 156 | * You can optionally set a prefix for all database table names by using the 157 | * 'prefix' setting. If a prefix is specified, the table name will be prepended 158 | * with its value. Be sure to use valid database characters only, usually 159 | * alphanumeric and underscore. If no prefix is desired, do not set the 'prefix' 160 | * key or set its value to an empty string ''. 161 | * 162 | * For example, to have all database table prefixed with 'main_', set: 163 | * @code 164 | * 'prefix' => 'main_', 165 | * @endcode 166 | * 167 | * Advanced users can add or override initial commands to execute when 168 | * connecting to the database server, as well as PDO connection settings. For 169 | * example, to enable MySQL SELECT queries to exceed the max_join_size system 170 | * variable, and to reduce the database connection timeout to 5 seconds: 171 | * @code 172 | * $databases['default']['default'] = [ 173 | * 'init_commands' => [ 174 | * 'big_selects' => 'SET SQL_BIG_SELECTS=1', 175 | * ], 176 | * 'pdo' => [ 177 | * PDO::ATTR_TIMEOUT => 5, 178 | * ], 179 | * ]; 180 | * @endcode 181 | * 182 | * WARNING: The above defaults are designed for database portability. Changing 183 | * them may cause unexpected behavior, including potential data loss. See 184 | * https://www.drupal.org/developing/api/database/configuration for more 185 | * information on these defaults and the potential issues. 186 | * 187 | * More details can be found in the constructor methods for each driver: 188 | * - \Drupal\mysql\Driver\Database\mysql\Connection::__construct() 189 | * - \Drupal\pgsql\Driver\Database\pgsql\Connection::__construct() 190 | * - \Drupal\sqlite\Driver\Database\sqlite\Connection::__construct() 191 | * 192 | * Sample Database configuration format for PostgreSQL (pgsql): 193 | * @code 194 | * $databases['default']['default'] = [ 195 | * 'driver' => 'pgsql', 196 | * 'database' => 'databasename', 197 | * 'username' => 'sql_username', 198 | * 'password' => 'sql_password', 199 | * 'host' => 'localhost', 200 | * 'prefix' => '', 201 | * ]; 202 | * @endcode 203 | * 204 | * Sample Database configuration format for SQLite (sqlite): 205 | * @code 206 | * $databases['default']['default'] = [ 207 | * 'driver' => 'sqlite', 208 | * 'database' => '/path/to/database_filename', 209 | * ]; 210 | * @endcode 211 | * 212 | * Sample Database configuration format for a driver in a contributed module: 213 | * @code 214 | * $databases['default']['default'] = [ 215 | * 'driver' => 'my_driver', 216 | * 'namespace' => 'Drupal\my_module\Driver\Database\my_driver', 217 | * 'autoload' => 'modules/my_module/src/Driver/Database/my_driver/', 218 | * 'database' => 'databasename', 219 | * 'username' => 'sql_username', 220 | * 'password' => 'sql_password', 221 | * 'host' => 'localhost', 222 | * 'prefix' => '', 223 | * ]; 224 | * @endcode 225 | * 226 | * Sample Database configuration format for a driver that is extending another 227 | * database driver. 228 | * @code 229 | * $databases['default']['default'] = [ 230 | * 'driver' => 'my_driver', 231 | * 'namespace' => 'Drupal\my_module\Driver\Database\my_driver', 232 | * 'autoload' => 'modules/my_module/src/Driver/Database/my_driver/', 233 | * 'database' => 'databasename', 234 | * 'username' => 'sql_username', 235 | * 'password' => 'sql_password', 236 | * 'host' => 'localhost', 237 | * 'prefix' => '', 238 | * 'dependencies' => [ 239 | * 'parent_module' => [ 240 | * 'namespace' => 'Drupal\parent_module', 241 | * 'autoload' => 'core/modules/parent_module/src/', 242 | * ], 243 | * ], 244 | * ]; 245 | * @endcode 246 | */ 247 | 248 | /** 249 | * Location of the site configuration files. 250 | * 251 | * The $settings['config_sync_directory'] specifies the location of file system 252 | * directory used for syncing configuration data. On install, the directory is 253 | * created. This is used for configuration imports. 254 | * 255 | * The default location for this directory is inside a randomly-named 256 | * directory in the public files path. The setting below allows you to set 257 | * its location. 258 | */ 259 | # $settings['config_sync_directory'] = '/directory/outside/webroot'; 260 | 261 | /** 262 | * Settings: 263 | * 264 | * $settings contains environment-specific configuration, such as the files 265 | * directory and reverse proxy address, and temporary configuration, such as 266 | * security overrides. 267 | * 268 | * @see \Drupal\Core\Site\Settings::get() 269 | */ 270 | 271 | /** 272 | * Salt for one-time login links, cancel links, form tokens, etc. 273 | * 274 | * This variable will be set to a random value by the installer. All one-time 275 | * login links will be invalidated if the value is changed. Note that if your 276 | * site is deployed on a cluster of web servers, you must ensure that this 277 | * variable has the same value on each server. 278 | * 279 | * For enhanced security, you may set this variable to the contents of a file 280 | * outside your document root, and vary the value across environments (like 281 | * production and development); you should also ensure that this file is not 282 | * stored with backups of your database. 283 | * 284 | * Example: 285 | * @code 286 | * $settings['hash_salt'] = file_get_contents('/home/example/salt.txt'); 287 | * @endcode 288 | */ 289 | $settings['hash_salt'] = ''; 290 | 291 | /** 292 | * Deployment identifier. 293 | * 294 | * Drupal's dependency injection container will be automatically invalidated and 295 | * rebuilt when the Drupal core version changes. When updating contributed or 296 | * custom code that changes the container, changing this identifier will also 297 | * allow the container to be invalidated as soon as code is deployed. 298 | */ 299 | # $settings['deployment_identifier'] = \Drupal::VERSION; 300 | 301 | /** 302 | * Access control for update.php script. 303 | * 304 | * If you are updating your Drupal installation using the update.php script but 305 | * are not logged in using either an account with the "Administer software 306 | * updates" permission or the site maintenance account (the account that was 307 | * created during installation), you will need to modify the access check 308 | * statement below. Change the FALSE to a TRUE to disable the access check. 309 | * After finishing the upgrade, be sure to open this file again and change the 310 | * TRUE back to a FALSE! 311 | */ 312 | $settings['update_free_access'] = FALSE; 313 | 314 | /** 315 | * Fallback to HTTP for Update Manager and for fetching security advisories. 316 | * 317 | * If your site fails to connect to updates.drupal.org over HTTPS (either when 318 | * fetching data on available updates, or when fetching the feed of critical 319 | * security announcements), you may uncomment this setting and set it to TRUE to 320 | * allow an insecure fallback to HTTP. Note that doing so will open your site up 321 | * to a potential man-in-the-middle attack. You should instead attempt to 322 | * resolve the issues before enabling this option. 323 | * @see https://www.drupal.org/docs/system-requirements/php-requirements#openssl 324 | * @see https://en.wikipedia.org/wiki/Man-in-the-middle_attack 325 | * @see \Drupal\update\UpdateFetcher 326 | * @see \Drupal\system\SecurityAdvisories\SecurityAdvisoriesFetcher 327 | */ 328 | # $settings['update_fetch_with_http_fallback'] = TRUE; 329 | 330 | /** 331 | * External access proxy settings: 332 | * 333 | * If your site must access the Internet via a web proxy then you can enter the 334 | * proxy settings here. Set the full URL of the proxy, including the port, in 335 | * variables: 336 | * - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP 337 | * requests. 338 | * - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS 339 | * requests. 340 | * You can pass in the user name and password for basic authentication in the 341 | * URLs in these settings. 342 | * 343 | * You can also define an array of host names that can be accessed directly, 344 | * bypassing the proxy, in $settings['http_client_config']['proxy']['no']. 345 | */ 346 | # $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080'; 347 | # $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080'; 348 | # $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost']; 349 | 350 | /** 351 | * Reverse Proxy Configuration: 352 | * 353 | * Reverse proxy servers are often used to enhance the performance 354 | * of heavily visited sites and may also provide other site caching, 355 | * security, or encryption benefits. In an environment where Drupal 356 | * is behind a reverse proxy, the real IP address of the client should 357 | * be determined such that the correct client IP address is available 358 | * to Drupal's logging, statistics, and access management systems. In 359 | * the most simple scenario, the proxy server will add an 360 | * X-Forwarded-For header to the request that contains the client IP 361 | * address. However, HTTP headers are vulnerable to spoofing, where a 362 | * malicious client could bypass restrictions by setting the 363 | * X-Forwarded-For header directly. Therefore, Drupal's proxy 364 | * configuration requires the IP addresses of all remote proxies to be 365 | * specified in $settings['reverse_proxy_addresses'] to work correctly. 366 | * 367 | * Enable this setting to get Drupal to determine the client IP from the 368 | * X-Forwarded-For header. If you are unsure about this setting, do not have a 369 | * reverse proxy, or Drupal operates in a shared hosting environment, this 370 | * setting should remain commented out. 371 | * 372 | * In order for this setting to be used you must specify every possible 373 | * reverse proxy IP address in $settings['reverse_proxy_addresses']. 374 | * If a complete list of reverse proxies is not available in your 375 | * environment (for example, if you use a CDN) you may set the 376 | * $_SERVER['REMOTE_ADDR'] variable directly in settings.php. 377 | * Be aware, however, that it is likely that this would allow IP 378 | * address spoofing unless more advanced precautions are taken. 379 | */ 380 | # $settings['reverse_proxy'] = TRUE; 381 | 382 | /** 383 | * Reverse proxy addresses. 384 | * 385 | * Specify every reverse proxy IP address in your environment, as an array of 386 | * IPv4/IPv6 addresses or subnets in CIDR notation. This setting is required if 387 | * $settings['reverse_proxy'] is TRUE. 388 | */ 389 | # $settings['reverse_proxy_addresses'] = ['a.b.c.d', 'e.f.g.h/24', ...]; 390 | 391 | /** 392 | * Reverse proxy trusted headers. 393 | * 394 | * Sets which headers to trust from your reverse proxy. 395 | * 396 | * Common values are: 397 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR 398 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST 399 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT 400 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 401 | * - \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 402 | * 403 | * Note the default value of 404 | * @code 405 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 406 | * @endcode 407 | * is not secure by default. The value should be set to only the specific 408 | * headers the reverse proxy uses. For example: 409 | * @code 410 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 411 | * @endcode 412 | * This would trust the following headers: 413 | * - X_FORWARDED_FOR 414 | * - X_FORWARDED_HOST 415 | * - X_FORWARDED_PROTO 416 | * - X_FORWARDED_PORT 417 | * 418 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR 419 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST 420 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT 421 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 422 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 423 | * @see \Symfony\Component\HttpFoundation\Request::setTrustedProxies 424 | */ 425 | # $settings['reverse_proxy_trusted_headers'] = \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED; 426 | 427 | 428 | /** 429 | * Page caching: 430 | * 431 | * By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page 432 | * views. This tells a HTTP proxy that it may return a page from its local 433 | * cache without contacting the web server, if the user sends the same Cookie 434 | * header as the user who originally requested the cached page. Without "Vary: 435 | * Cookie", authenticated users would also be served the anonymous page from 436 | * the cache. If the site has mostly anonymous users except a few known 437 | * editors/administrators, the Vary header can be omitted. This allows for 438 | * better caching in HTTP proxies (including reverse proxies), i.e. even if 439 | * clients send different cookies, they still get content served from the cache. 440 | * However, authenticated users should access the site directly (i.e. not use an 441 | * HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid 442 | * getting cached pages from the proxy. 443 | */ 444 | # $settings['omit_vary_cookie'] = TRUE; 445 | 446 | 447 | /** 448 | * Cache TTL for client error (4xx) responses. 449 | * 450 | * Items cached per-URL tend to result in a large number of cache items, and 451 | * this can be problematic on 404 pages which by their nature are unbounded. A 452 | * fixed TTL can be set for these items, defaulting to one hour, so that cache 453 | * backends which do not support LRU can purge older entries. To disable caching 454 | * of client error responses set the value to 0. Currently applies only to 455 | * page_cache module. 456 | */ 457 | # $settings['cache_ttl_4xx'] = 3600; 458 | 459 | /** 460 | * Expiration of cached forms. 461 | * 462 | * Drupal's Form API stores details of forms in a cache and these entries are 463 | * kept for at least 6 hours by default. Expired entries are cleared by cron. 464 | * 465 | * @see \Drupal\Core\Form\FormCache::setCache() 466 | */ 467 | # $settings['form_cache_expiration'] = 21600; 468 | 469 | /** 470 | * Class Loader. 471 | * 472 | * If the APCu extension is detected, the classloader will be optimized to use 473 | * it. Set to FALSE to disable this. 474 | * 475 | * @see https://getcomposer.org/doc/articles/autoloader-optimization.md 476 | */ 477 | # $settings['class_loader_auto_detect'] = FALSE; 478 | 479 | /** 480 | * Authorized file system operations: 481 | * 482 | * The Update Manager module included with Drupal provides a mechanism for 483 | * site administrators to securely install missing updates for the site 484 | * directly through the web user interface. On securely-configured servers, 485 | * the Update manager will require the administrator to provide SSH or FTP 486 | * credentials before allowing the installation to proceed; this allows the 487 | * site to update the new files as the user who owns all the Drupal files, 488 | * instead of as the user the webserver is running as. On servers where the 489 | * webserver user is itself the owner of the Drupal files, the administrator 490 | * will not be prompted for SSH or FTP credentials (note that these server 491 | * setups are common on shared hosting, but are inherently insecure). 492 | * 493 | * Some sites might wish to disable the above functionality, and only update 494 | * the code directly via SSH or FTP themselves. This setting completely 495 | * disables all functionality related to these authorized file operations. 496 | * 497 | * @see https://www.drupal.org/node/244924 498 | * 499 | * Remove the leading hash signs to disable. 500 | */ 501 | # $settings['allow_authorize_operations'] = FALSE; 502 | 503 | /** 504 | * Default mode for directories and files written by Drupal. 505 | * 506 | * Value should be in PHP Octal Notation, with leading zero. 507 | */ 508 | # $settings['file_chmod_directory'] = 0775; 509 | # $settings['file_chmod_file'] = 0664; 510 | 511 | /** 512 | * Optimized assets path: 513 | * 514 | * A local file system path where optimized assets will be stored. This directory 515 | * must exist and be writable by Drupal. This directory must be relative to 516 | * the Drupal installation directory and be accessible over the web. 517 | */ 518 | # $settings['file_assets_path'] = 'sites/default/files'; 519 | 520 | /** 521 | * Public file base URL: 522 | * 523 | * An alternative base URL to be used for serving public files. This must 524 | * include any leading directory path. 525 | * 526 | * A different value from the domain used by Drupal to be used for accessing 527 | * public files. This can be used for a simple CDN integration, or to improve 528 | * security by serving user-uploaded files from a different domain or subdomain 529 | * pointing to the same server. Do not include a trailing slash. 530 | */ 531 | # $settings['file_public_base_url'] = 'http://downloads.example.com/files'; 532 | 533 | /** 534 | * Public file path: 535 | * 536 | * A local file system path where public files will be stored. This directory 537 | * must exist and be writable by Drupal. This directory must be relative to 538 | * the Drupal installation directory and be accessible over the web. 539 | */ 540 | # $settings['file_public_path'] = 'sites/default/files'; 541 | 542 | /** 543 | * Additional public file schemes: 544 | * 545 | * Public schemes are URI schemes that allow download access to all users for 546 | * all files within that scheme. 547 | * 548 | * The "public" scheme is always public, and the "private" scheme is always 549 | * private, but other schemes, such as "https", "s3", "example", or others, 550 | * can be either public or private depending on the site. By default, they're 551 | * private, and access to individual files is controlled via 552 | * hook_file_download(). 553 | * 554 | * Typically, if a scheme should be public, a module makes it public by 555 | * implementing hook_file_download(), and granting access to all users for all 556 | * files. This could be either the same module that provides the stream wrapper 557 | * for the scheme, or a different module that decides to make the scheme 558 | * public. However, in cases where a site needs to make a scheme public, but 559 | * is unable to add code in a module to do so, the scheme may be added to this 560 | * variable, the result of which is that system_file_download() grants public 561 | * access to all files within that scheme. 562 | */ 563 | # $settings['file_additional_public_schemes'] = ['example']; 564 | 565 | /** 566 | * File schemes whose paths should not be normalized: 567 | * 568 | * Normally, Drupal normalizes '/./' and '/../' segments in file URIs in order 569 | * to prevent unintended file access. For example, 'private://css/../image.png' 570 | * is normalized to 'private://image.png' before checking access to the file. 571 | * 572 | * On Windows, Drupal also replaces '\' with '/' in URIs for the local 573 | * filesystem. 574 | * 575 | * If file URIs with one or more scheme should not be normalized like this, then 576 | * list the schemes here. For example, if 'porcelain://china/./plate.png' should 577 | * not be normalized to 'porcelain://china/plate.png', then add 'porcelain' to 578 | * this array. In this case, make sure that the module providing the 'porcelain' 579 | * scheme does not allow unintended file access when using '/../' to move up the 580 | * directory tree. 581 | */ 582 | # $settings['file_sa_core_2023_005_schemes'] = ['porcelain']; 583 | 584 | /** 585 | * Configuration for phpinfo() admin status report. 586 | * 587 | * Drupal's admin UI includes a report at admin/reports/status/php which shows 588 | * the output of phpinfo(). The full output can contain sensitive information 589 | * so by default Drupal removes some sections. 590 | * 591 | * This behavior can be configured by setting this variable to a different 592 | * value corresponding to the flags parameter of phpinfo(). 593 | * 594 | * If you need to expose more information in the report - for example to debug a 595 | * problem - consider doing so temporarily. 596 | * 597 | * @see https://www.php.net/manual/function.phpinfo.php 598 | */ 599 | # $settings['sa_core_2023_004_phpinfo_flags'] = ~ (INFO_VARIABLES | INFO_ENVIRONMENT); 600 | 601 | /** 602 | * Private file path: 603 | * 604 | * A local file system path where private files will be stored. This directory 605 | * must be absolute, outside of the Drupal installation directory and not 606 | * accessible over the web. 607 | * 608 | * Note: Caches need to be cleared when this value is changed to make the 609 | * private:// stream wrapper available to the system. 610 | * 611 | * See https://www.drupal.org/documentation/modules/file for more information 612 | * about securing private files. 613 | */ 614 | # $settings['file_private_path'] = ''; 615 | 616 | /** 617 | * Temporary file path: 618 | * 619 | * A local file system path where temporary files will be stored. This directory 620 | * must be absolute, outside of the Drupal installation directory and not 621 | * accessible over the web. 622 | * 623 | * If this is not set, the default for the operating system will be used. 624 | * 625 | * @see \Drupal\Component\FileSystem\FileSystem::getOsTemporaryDirectory() 626 | */ 627 | # $settings['file_temp_path'] = '/tmp'; 628 | 629 | /** 630 | * Session write interval: 631 | * 632 | * Set the minimum interval between each session write to database. 633 | * For performance reasons it defaults to 180. 634 | */ 635 | # $settings['session_write_interval'] = 180; 636 | 637 | /** 638 | * String overrides: 639 | * 640 | * To override specific strings on your site with or without enabling the Locale 641 | * module, add an entry to this list. This functionality allows you to change 642 | * a small number of your site's default English language interface strings. 643 | * 644 | * Remove the leading hash signs to enable. 645 | * 646 | * The "en" part of the variable name, is dynamic and can be any langcode of 647 | * any added language. (eg locale_custom_strings_de for german). 648 | */ 649 | # $settings['locale_custom_strings_en'][''] = [ 650 | # 'Home' => 'Front page', 651 | # '@count min' => '@count minutes', 652 | # ]; 653 | 654 | /** 655 | * A custom theme for the offline page: 656 | * 657 | * This applies when the site is explicitly set to maintenance mode through the 658 | * administration page or when the database is inactive due to an error. 659 | * The template file should also be copied into the theme. It is located inside 660 | * 'core/modules/system/templates/maintenance-page.html.twig'. 661 | * 662 | * Note: This setting does not apply to installation and update pages. 663 | */ 664 | # $settings['maintenance_theme'] = 'claro'; 665 | 666 | /** 667 | * PHP settings: 668 | * 669 | * To see what PHP settings are possible, including whether they can be set at 670 | * runtime (by using ini_set()), read the PHP documentation: 671 | * http://php.net/manual/ini.list.php 672 | * See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime 673 | * settings and the .htaccess file for non-runtime settings. 674 | * Settings defined there should not be duplicated here so as to avoid conflict 675 | * issues. 676 | */ 677 | 678 | /** 679 | * If you encounter a situation where users post a large amount of text, and 680 | * the result is stripped out upon viewing but can still be edited, Drupal's 681 | * output filter may not have sufficient memory to process it. If you 682 | * experience this issue, you may wish to uncomment the following two lines 683 | * and increase the limits of these variables. For more information, see 684 | * http://php.net/manual/pcre.configuration.php. 685 | */ 686 | # ini_set('pcre.backtrack_limit', 200000); 687 | # ini_set('pcre.recursion_limit', 200000); 688 | 689 | /** 690 | * Configuration overrides. 691 | * 692 | * To globally override specific configuration values for this site, 693 | * set them here. You usually don't need to use this feature. This is 694 | * useful in a configuration file for a vhost or directory, rather than 695 | * the default settings.php. 696 | * 697 | * Note that any values you provide in these variable overrides will not be 698 | * viewable from the Drupal administration interface. The administration 699 | * interface displays the values stored in configuration so that you can stage 700 | * changes to other environments that don't have the overrides. 701 | * 702 | * There are particular configuration values that are risky to override. For 703 | * example, overriding the list of installed modules in 'core.extension' is not 704 | * supported as module install or uninstall has not occurred. Other examples 705 | * include field storage configuration, because it has effects on database 706 | * structure, and 'core.menu.static_menu_link_overrides' since this is cached in 707 | * a way that is not config override aware. Also, note that changing 708 | * configuration values in settings.php will not fire any of the configuration 709 | * change events. 710 | */ 711 | # $config['system.site']['name'] = 'My Drupal site'; 712 | # $config['user.settings']['anonymous'] = 'Visitor'; 713 | 714 | /** 715 | * Load services definition file. 716 | */ 717 | $settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml'; 718 | 719 | /** 720 | * Override the default service container class. 721 | * 722 | * This is useful for example to trace the service container for performance 723 | * tracking purposes, for testing a service container with an error condition or 724 | * to test a service container that throws an exception. 725 | */ 726 | # $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container'; 727 | 728 | /** 729 | * Override the default yaml parser class. 730 | * 731 | * Provide a fully qualified class name here if you would like to provide an 732 | * alternate implementation YAML parser. The class must implement the 733 | * \Drupal\Component\Serialization\SerializationInterface interface. 734 | */ 735 | # $settings['yaml_parser_class'] = NULL; 736 | 737 | /** 738 | * Trusted host configuration. 739 | * 740 | * Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host 741 | * header spoofing. 742 | * 743 | * To enable the trusted host mechanism, you enable your allowable hosts 744 | * in $settings['trusted_host_patterns']. This should be an array of regular 745 | * expression patterns, without delimiters, representing the hosts you would 746 | * like to allow. 747 | * 748 | * For example: 749 | * @code 750 | * $settings['trusted_host_patterns'] = [ 751 | * '^www\.example\.com$', 752 | * ]; 753 | * @endcode 754 | * will allow the site to only run from www.example.com. 755 | * 756 | * If you are running multisite, or if you are running your site from 757 | * different domain names (eg, you don't redirect http://www.example.com to 758 | * http://example.com), you should specify all of the host patterns that are 759 | * allowed by your site. 760 | * 761 | * For example: 762 | * @code 763 | * $settings['trusted_host_patterns'] = [ 764 | * '^example\.com$', 765 | * '^.+\.example\.com$', 766 | * '^example\.org$', 767 | * '^.+\.example\.org$', 768 | * ]; 769 | * @endcode 770 | * will allow the site to run off of all variants of example.com and 771 | * example.org, with all subdomains included. 772 | * 773 | * @see https://www.drupal.org/docs/installing-drupal/trusted-host-settings 774 | */ 775 | # $settings['trusted_host_patterns'] = []; 776 | 777 | /** 778 | * The default list of directories that will be ignored by Drupal's file API. 779 | * 780 | * By default ignore node_modules and bower_components folders to avoid issues 781 | * with common frontend tools and recursive scanning of directories looking for 782 | * extensions. 783 | * 784 | * @see \Drupal\Core\File\FileSystemInterface::scanDirectory() 785 | * @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory() 786 | */ 787 | $settings['file_scan_ignore_directories'] = [ 788 | 'node_modules', 789 | 'bower_components', 790 | ]; 791 | 792 | /** 793 | * The default number of entities to update in a batch process. 794 | * 795 | * This is used by update and post-update functions that need to go through and 796 | * change all the entities on a site, so it is useful to increase this number 797 | * if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a 798 | * larger number of entities to be processed in a single batch run. 799 | */ 800 | $settings['entity_update_batch_size'] = 50; 801 | 802 | /** 803 | * Entity update backup. 804 | * 805 | * This is used to inform the entity storage handler that the backup tables as 806 | * well as the original entity type and field storage definitions should be 807 | * retained after a successful entity update process. 808 | */ 809 | $settings['entity_update_backup'] = TRUE; 810 | 811 | /** 812 | * Node migration type. 813 | * 814 | * This is used to force the migration system to use the classic node migrations 815 | * instead of the default complete node migrations. The migration system will 816 | * use the classic node migration only if there are existing migrate_map tables 817 | * for the classic node migrations and they contain data. These tables may not 818 | * exist if you are developing custom migrations and do not want to use the 819 | * complete node migrations. Set this to TRUE to force the use of the classic 820 | * node migrations. 821 | */ 822 | $settings['migrate_node_migrate_type_classic'] = FALSE; 823 | 824 | /** 825 | * The default settings for migration sources. 826 | * 827 | * These settings are used as the default settings on the Credential form at 828 | * /upgrade/credentials. 829 | * 830 | * - migrate_source_version - The version of the source database. This can be 831 | * '6' or '7'. Defaults to '7'. 832 | * - migrate_source_connection - The key in the $databases array for the source 833 | * site. 834 | * - migrate_file_public_path - The location of the source Drupal 6 or Drupal 7 835 | * public files. This can be a local file directory containing the source 836 | * Drupal 6 or Drupal 7 site (e.g /var/www/docroot), or the site address 837 | * (e.g http://example.com). 838 | * - migrate_file_private_path - The location of the source Drupal 7 private 839 | * files. This can be a local file directory containing the source Drupal 7 840 | * site (e.g /var/www/docroot), or empty to use the same value as Public 841 | * files directory. 842 | * 843 | * Sample configuration for a drupal 6 source site with the source files in a 844 | * local directory. 845 | * 846 | * @code 847 | * $settings['migrate_source_version'] = '6'; 848 | * $settings['migrate_source_connection'] = 'migrate'; 849 | * $settings['migrate_file_public_path'] = '/var/www/drupal6'; 850 | * @endcode 851 | * 852 | * Sample configuration for a drupal 7 source site with public source files on 853 | * the source site and the private files in a local directory. 854 | * 855 | * @code 856 | * $settings['migrate_source_version'] = '7'; 857 | * $settings['migrate_source_connection'] = 'migrate'; 858 | * $settings['migrate_file_public_path'] = 'https://drupal7.com'; 859 | * $settings['migrate_file_private_path'] = '/var/www/drupal7'; 860 | * @endcode 861 | */ 862 | # $settings['migrate_source_connection'] = ''; 863 | # $settings['migrate_source_version'] = ''; 864 | # $settings['migrate_file_public_path'] = ''; 865 | # $settings['migrate_file_private_path'] = ''; 866 | 867 | /** 868 | * Load local development override configuration, if available. 869 | * 870 | * Create a settings.local.php file to override variables on secondary (staging, 871 | * development, etc.) installations of this site. 872 | * 873 | * Typical uses of settings.local.php include: 874 | * - Disabling caching. 875 | * - Disabling JavaScript/CSS compression. 876 | * - Rerouting outgoing emails. 877 | * 878 | * Keep this code block at the end of this file to take full effect. 879 | */ 880 | # 881 | # if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) { 882 | # include $app_root . '/' . $site_path . '/settings.local.php'; 883 | # } 884 | -------------------------------------------------------------------------------- /web/sites/default/settings.php: -------------------------------------------------------------------------------- 1 | 'databasename', 81 | * 'username' => 'sqlusername', 82 | * 'password' => 'sqlpassword', 83 | * 'host' => 'localhost', 84 | * 'port' => '3306', 85 | * 'driver' => 'mysql', 86 | * 'prefix' => '', 87 | * 'collation' => 'utf8mb4_general_ci', 88 | * ]; 89 | * @endcode 90 | */ 91 | $databases = []; 92 | 93 | /** 94 | * Customizing database settings. 95 | * 96 | * Many of the values of the $databases array can be customized for your 97 | * particular database system. Refer to the sample in the section above as a 98 | * starting point. 99 | * 100 | * The "driver" property indicates what Drupal database driver the 101 | * connection should use. This is usually the same as the name of the 102 | * database type, such as mysql or sqlite, but not always. The other 103 | * properties will vary depending on the driver. For SQLite, you must 104 | * specify a database file name in a directory that is writable by the 105 | * webserver. For most other drivers, you must specify a 106 | * username, password, host, and database name. 107 | * 108 | * Drupal core implements drivers for mysql, pgsql, and sqlite. Other drivers 109 | * can be provided by contributed or custom modules. To use a contributed or 110 | * custom driver, the "namespace" property must be set to the namespace of the 111 | * driver. The code in this namespace must be autoloadable prior to connecting 112 | * to the database, and therefore, prior to when module root namespaces are 113 | * added to the autoloader. To add the driver's namespace to the autoloader, 114 | * set the "autoload" property to the PSR-4 base directory of the driver's 115 | * namespace. This is optional for projects managed with Composer if the 116 | * driver's namespace is in Composer's autoloader. 117 | * 118 | * Transaction support is enabled by default for all drivers that support it, 119 | * including MySQL. To explicitly disable it, set the 'transactions' key to 120 | * FALSE. 121 | * Note that some configurations of MySQL, such as the MyISAM engine, don't 122 | * support it and will proceed silently even if enabled. If you experience 123 | * transaction related crashes with such configuration, set the 'transactions' 124 | * key to FALSE. 125 | * 126 | * For each database, you may optionally specify multiple "target" databases. 127 | * A target database allows Drupal to try to send certain queries to a 128 | * different database if it can but fall back to the default connection if not. 129 | * That is useful for primary/replica replication, as Drupal may try to connect 130 | * to a replica server when appropriate and if one is not available will simply 131 | * fall back to the single primary server (The terms primary/replica are 132 | * traditionally referred to as master/slave in database server documentation). 133 | * 134 | * The general format for the $databases array is as follows: 135 | * @code 136 | * $databases['default']['default'] = $info_array; 137 | * $databases['default']['replica'][] = $info_array; 138 | * $databases['default']['replica'][] = $info_array; 139 | * $databases['extra']['default'] = $info_array; 140 | * @endcode 141 | * 142 | * In the above example, $info_array is an array of settings described above. 143 | * The first line sets a "default" database that has one primary database 144 | * (the second level default). The second and third lines create an array 145 | * of potential replica databases. Drupal will select one at random for a given 146 | * request as needed. The fourth line creates a new database with a name of 147 | * "extra". 148 | * 149 | * You can optionally set prefixes for some or all database table names 150 | * by using the 'prefix' setting. If a prefix is specified, the table 151 | * name will be prepended with its value. Be sure to use valid database 152 | * characters only, usually alphanumeric and underscore. If no prefixes 153 | * are desired, leave it as an empty string ''. 154 | * 155 | * To have all database names prefixed, set 'prefix' as a string: 156 | * @code 157 | * 'prefix' => 'main_', 158 | * @endcode 159 | * 160 | * Per-table prefixes are deprecated as of Drupal 8.2, and will be removed in 161 | * Drupal 9.0. After that, only a single prefix for all tables will be 162 | * supported. 163 | * 164 | * To provide prefixes for specific tables, set 'prefix' as an array. 165 | * The array's keys are the table names and the values are the prefixes. 166 | * The 'default' element is mandatory and holds the prefix for any tables 167 | * not specified elsewhere in the array. Example: 168 | * @code 169 | * 'prefix' => [ 170 | * 'default' => 'main_', 171 | * 'users' => 'shared_', 172 | * 'sessions' => 'shared_', 173 | * 'role' => 'shared_', 174 | * 'authmap' => 'shared_', 175 | * ], 176 | * @endcode 177 | * You can also use a reference to a schema/database as a prefix. This may be 178 | * useful if your Drupal installation exists in a schema that is not the default 179 | * or you want to access several databases from the same code base at the same 180 | * time. 181 | * Example: 182 | * @code 183 | * 'prefix' => [ 184 | * 'default' => 'main.', 185 | * 'users' => 'shared.', 186 | * 'sessions' => 'shared.', 187 | * 'role' => 'shared.', 188 | * 'authmap' => 'shared.', 189 | * ]; 190 | * @endcode 191 | * NOTE: MySQL and SQLite's definition of a schema is a database. 192 | * 193 | * Advanced users can add or override initial commands to execute when 194 | * connecting to the database server, as well as PDO connection settings. For 195 | * example, to enable MySQL SELECT queries to exceed the max_join_size system 196 | * variable, and to reduce the database connection timeout to 5 seconds: 197 | * @code 198 | * $databases['default']['default'] = [ 199 | * 'init_commands' => [ 200 | * 'big_selects' => 'SET SQL_BIG_SELECTS=1', 201 | * ], 202 | * 'pdo' => [ 203 | * PDO::ATTR_TIMEOUT => 5, 204 | * ], 205 | * ]; 206 | * @endcode 207 | * 208 | * WARNING: The above defaults are designed for database portability. Changing 209 | * them may cause unexpected behavior, including potential data loss. See 210 | * https://www.drupal.org/developing/api/database/configuration for more 211 | * information on these defaults and the potential issues. 212 | * 213 | * More details can be found in the constructor methods for each driver: 214 | * - \Drupal\Core\Database\Driver\mysql\Connection::__construct() 215 | * - \Drupal\Core\Database\Driver\pgsql\Connection::__construct() 216 | * - \Drupal\Core\Database\Driver\sqlite\Connection::__construct() 217 | * 218 | * Sample Database configuration format for PostgreSQL (pgsql): 219 | * @code 220 | * $databases['default']['default'] = [ 221 | * 'driver' => 'pgsql', 222 | * 'database' => 'databasename', 223 | * 'username' => 'sqlusername', 224 | * 'password' => 'sqlpassword', 225 | * 'host' => 'localhost', 226 | * 'prefix' => '', 227 | * ]; 228 | * @endcode 229 | * 230 | * Sample Database configuration format for SQLite (sqlite): 231 | * @code 232 | * $databases['default']['default'] = [ 233 | * 'driver' => 'sqlite', 234 | * 'database' => '/path/to/databasefilename', 235 | * ]; 236 | * @endcode 237 | * 238 | * Sample Database configuration format for a driver in a contributed module: 239 | * @code 240 | * $databases['default']['default'] = [ 241 | * 'driver' => 'mydriver', 242 | * 'namespace' => 'Drupal\mymodule\Driver\Database\mydriver', 243 | * 'autoload' => 'modules/mymodule/src/Driver/Database/mydriver/', 244 | * 'database' => 'databasename', 245 | * 'username' => 'sqlusername', 246 | * 'password' => 'sqlpassword', 247 | * 'host' => 'localhost', 248 | * 'prefix' => '', 249 | * ]; 250 | * @endcode 251 | */ 252 | 253 | /** 254 | * Location of the site configuration files. 255 | * 256 | * The $settings['config_sync_directory'] specifies the location of file system 257 | * directory used for syncing configuration data. On install, the directory is 258 | * created. This is used for configuration imports. 259 | * 260 | * The default location for this directory is inside a randomly-named 261 | * directory in the public files path. The setting below allows you to set 262 | * its location. 263 | */ 264 | # $settings['config_sync_directory'] = '/directory/outside/webroot'; 265 | 266 | /** 267 | * Settings: 268 | * 269 | * $settings contains environment-specific configuration, such as the files 270 | * directory and reverse proxy address, and temporary configuration, such as 271 | * security overrides. 272 | * 273 | * @see \Drupal\Core\Site\Settings::get() 274 | */ 275 | 276 | /** 277 | * Salt for one-time login links, cancel links, form tokens, etc. 278 | * 279 | * This variable will be set to a random value by the installer. All one-time 280 | * login links will be invalidated if the value is changed. Note that if your 281 | * site is deployed on a cluster of web servers, you must ensure that this 282 | * variable has the same value on each server. 283 | * 284 | * For enhanced security, you may set this variable to the contents of a file 285 | * outside your document root; you should also ensure that this file is not 286 | * stored with backups of your database. 287 | * 288 | * Example: 289 | * @code 290 | * $settings['hash_salt'] = file_get_contents('/home/example/salt.txt'); 291 | * @endcode 292 | */ 293 | $settings['hash_salt'] = ''; 294 | 295 | /** 296 | * Deployment identifier. 297 | * 298 | * Drupal's dependency injection container will be automatically invalidated and 299 | * rebuilt when the Drupal core version changes. When updating contributed or 300 | * custom code that changes the container, changing this identifier will also 301 | * allow the container to be invalidated as soon as code is deployed. 302 | */ 303 | # $settings['deployment_identifier'] = \Drupal::VERSION; 304 | 305 | /** 306 | * Access control for update.php script. 307 | * 308 | * If you are updating your Drupal installation using the update.php script but 309 | * are not logged in using either an account with the "Administer software 310 | * updates" permission or the site maintenance account (the account that was 311 | * created during installation), you will need to modify the access check 312 | * statement below. Change the FALSE to a TRUE to disable the access check. 313 | * After finishing the upgrade, be sure to open this file again and change the 314 | * TRUE back to a FALSE! 315 | */ 316 | $settings['update_free_access'] = FALSE; 317 | 318 | /** 319 | * External access proxy settings: 320 | * 321 | * If your site must access the Internet via a web proxy then you can enter the 322 | * proxy settings here. Set the full URL of the proxy, including the port, in 323 | * variables: 324 | * - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP 325 | * requests. 326 | * - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS 327 | * requests. 328 | * You can pass in the user name and password for basic authentication in the 329 | * URLs in these settings. 330 | * 331 | * You can also define an array of host names that can be accessed directly, 332 | * bypassing the proxy, in $settings['http_client_config']['proxy']['no']. 333 | */ 334 | # $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080'; 335 | # $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080'; 336 | # $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost']; 337 | 338 | /** 339 | * Reverse Proxy Configuration: 340 | * 341 | * Reverse proxy servers are often used to enhance the performance 342 | * of heavily visited sites and may also provide other site caching, 343 | * security, or encryption benefits. In an environment where Drupal 344 | * is behind a reverse proxy, the real IP address of the client should 345 | * be determined such that the correct client IP address is available 346 | * to Drupal's logging, statistics, and access management systems. In 347 | * the most simple scenario, the proxy server will add an 348 | * X-Forwarded-For header to the request that contains the client IP 349 | * address. However, HTTP headers are vulnerable to spoofing, where a 350 | * malicious client could bypass restrictions by setting the 351 | * X-Forwarded-For header directly. Therefore, Drupal's proxy 352 | * configuration requires the IP addresses of all remote proxies to be 353 | * specified in $settings['reverse_proxy_addresses'] to work correctly. 354 | * 355 | * Enable this setting to get Drupal to determine the client IP from the 356 | * X-Forwarded-For header. If you are unsure about this setting, do not have a 357 | * reverse proxy, or Drupal operates in a shared hosting environment, this 358 | * setting should remain commented out. 359 | * 360 | * In order for this setting to be used you must specify every possible 361 | * reverse proxy IP address in $settings['reverse_proxy_addresses']. 362 | * If a complete list of reverse proxies is not available in your 363 | * environment (for example, if you use a CDN) you may set the 364 | * $_SERVER['REMOTE_ADDR'] variable directly in settings.php. 365 | * Be aware, however, that it is likely that this would allow IP 366 | * address spoofing unless more advanced precautions are taken. 367 | */ 368 | # $settings['reverse_proxy'] = TRUE; 369 | 370 | /** 371 | * Specify every reverse proxy IP address in your environment. 372 | * This setting is required if $settings['reverse_proxy'] is TRUE. 373 | */ 374 | # $settings['reverse_proxy_addresses'] = ['a.b.c.d', ...]; 375 | 376 | /** 377 | * Reverse proxy trusted headers. 378 | * 379 | * Sets which headers to trust from your reverse proxy. 380 | * 381 | * Common values are: 382 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL 383 | * - \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 384 | * 385 | * Note the default value of 386 | * @code 387 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 388 | * @endcode 389 | * is not secure by default. The value should be set to only the specific 390 | * headers the reverse proxy uses. For example: 391 | * @code 392 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL 393 | * @endcode 394 | * This would trust the following headers: 395 | * - X_FORWARDED_FOR 396 | * - X_FORWARDED_HOST 397 | * - X_FORWARDED_PROTO 398 | * - X_FORWARDED_PORT 399 | * 400 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL 401 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 402 | * @see \Symfony\Component\HttpFoundation\Request::setTrustedProxies 403 | */ 404 | # $settings['reverse_proxy_trusted_headers'] = \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_ALL | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED; 405 | 406 | 407 | /** 408 | * Page caching: 409 | * 410 | * By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page 411 | * views. This tells a HTTP proxy that it may return a page from its local 412 | * cache without contacting the web server, if the user sends the same Cookie 413 | * header as the user who originally requested the cached page. Without "Vary: 414 | * Cookie", authenticated users would also be served the anonymous page from 415 | * the cache. If the site has mostly anonymous users except a few known 416 | * editors/administrators, the Vary header can be omitted. This allows for 417 | * better caching in HTTP proxies (including reverse proxies), i.e. even if 418 | * clients send different cookies, they still get content served from the cache. 419 | * However, authenticated users should access the site directly (i.e. not use an 420 | * HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid 421 | * getting cached pages from the proxy. 422 | */ 423 | # $settings['omit_vary_cookie'] = TRUE; 424 | 425 | 426 | /** 427 | * Cache TTL for client error (4xx) responses. 428 | * 429 | * Items cached per-URL tend to result in a large number of cache items, and 430 | * this can be problematic on 404 pages which by their nature are unbounded. A 431 | * fixed TTL can be set for these items, defaulting to one hour, so that cache 432 | * backends which do not support LRU can purge older entries. To disable caching 433 | * of client error responses set the value to 0. Currently applies only to 434 | * page_cache module. 435 | */ 436 | # $settings['cache_ttl_4xx'] = 3600; 437 | 438 | /** 439 | * Expiration of cached forms. 440 | * 441 | * Drupal's Form API stores details of forms in a cache and these entries are 442 | * kept for at least 6 hours by default. Expired entries are cleared by cron. 443 | * 444 | * @see \Drupal\Core\Form\FormCache::setCache() 445 | */ 446 | # $settings['form_cache_expiration'] = 21600; 447 | 448 | /** 449 | * Class Loader. 450 | * 451 | * If the APCu extension is detected, the classloader will be optimized to use 452 | * it. Set to FALSE to disable this. 453 | * 454 | * @see https://getcomposer.org/doc/articles/autoloader-optimization.md 455 | */ 456 | # $settings['class_loader_auto_detect'] = FALSE; 457 | 458 | /** 459 | * Authorized file system operations: 460 | * 461 | * The Update Manager module included with Drupal provides a mechanism for 462 | * site administrators to securely install missing updates for the site 463 | * directly through the web user interface. On securely-configured servers, 464 | * the Update manager will require the administrator to provide SSH or FTP 465 | * credentials before allowing the installation to proceed; this allows the 466 | * site to update the new files as the user who owns all the Drupal files, 467 | * instead of as the user the webserver is running as. On servers where the 468 | * webserver user is itself the owner of the Drupal files, the administrator 469 | * will not be prompted for SSH or FTP credentials (note that these server 470 | * setups are common on shared hosting, but are inherently insecure). 471 | * 472 | * Some sites might wish to disable the above functionality, and only update 473 | * the code directly via SSH or FTP themselves. This setting completely 474 | * disables all functionality related to these authorized file operations. 475 | * 476 | * @see https://www.drupal.org/node/244924 477 | * 478 | * Remove the leading hash signs to disable. 479 | */ 480 | # $settings['allow_authorize_operations'] = FALSE; 481 | 482 | /** 483 | * Default mode for directories and files written by Drupal. 484 | * 485 | * Value should be in PHP Octal Notation, with leading zero. 486 | */ 487 | # $settings['file_chmod_directory'] = 0775; 488 | # $settings['file_chmod_file'] = 0664; 489 | 490 | /** 491 | * Public file base URL: 492 | * 493 | * An alternative base URL to be used for serving public files. This must 494 | * include any leading directory path. 495 | * 496 | * A different value from the domain used by Drupal to be used for accessing 497 | * public files. This can be used for a simple CDN integration, or to improve 498 | * security by serving user-uploaded files from a different domain or subdomain 499 | * pointing to the same server. Do not include a trailing slash. 500 | */ 501 | # $settings['file_public_base_url'] = 'http://downloads.example.com/files'; 502 | 503 | /** 504 | * Public file path: 505 | * 506 | * A local file system path where public files will be stored. This directory 507 | * must exist and be writable by Drupal. This directory must be relative to 508 | * the Drupal installation directory and be accessible over the web. 509 | */ 510 | # $settings['file_public_path'] = 'sites/default/files'; 511 | 512 | /** 513 | * Private file path: 514 | * 515 | * A local file system path where private files will be stored. This directory 516 | * must be absolute, outside of the Drupal installation directory and not 517 | * accessible over the web. 518 | * 519 | * Note: Caches need to be cleared when this value is changed to make the 520 | * private:// stream wrapper available to the system. 521 | * 522 | * See https://www.drupal.org/documentation/modules/file for more information 523 | * about securing private files. 524 | */ 525 | # $settings['file_private_path'] = ''; 526 | 527 | /** 528 | * Temporary file path: 529 | * 530 | * A local file system path where temporary files will be stored. This directory 531 | * must be absolute, outside of the Drupal installation directory and not 532 | * accessible over the web. 533 | * 534 | * If this is not set, the default for the operating system will be used. 535 | * 536 | * @see \Drupal\Component\FileSystem\FileSystem::getOsTemporaryDirectory() 537 | */ 538 | # $settings['file_temp_path'] = '/tmp'; 539 | 540 | /** 541 | * Session write interval: 542 | * 543 | * Set the minimum interval between each session write to database. 544 | * For performance reasons it defaults to 180. 545 | */ 546 | # $settings['session_write_interval'] = 180; 547 | 548 | /** 549 | * String overrides: 550 | * 551 | * To override specific strings on your site with or without enabling the Locale 552 | * module, add an entry to this list. This functionality allows you to change 553 | * a small number of your site's default English language interface strings. 554 | * 555 | * Remove the leading hash signs to enable. 556 | * 557 | * The "en" part of the variable name, is dynamic and can be any langcode of 558 | * any added language. (eg locale_custom_strings_de for german). 559 | */ 560 | # $settings['locale_custom_strings_en'][''] = [ 561 | # 'forum' => 'Discussion board', 562 | # '@count min' => '@count minutes', 563 | # ]; 564 | 565 | /** 566 | * A custom theme for the offline page: 567 | * 568 | * This applies when the site is explicitly set to maintenance mode through the 569 | * administration page or when the database is inactive due to an error. 570 | * The template file should also be copied into the theme. It is located inside 571 | * 'core/modules/system/templates/maintenance-page.html.twig'. 572 | * 573 | * Note: This setting does not apply to installation and update pages. 574 | */ 575 | # $settings['maintenance_theme'] = 'bartik'; 576 | 577 | /** 578 | * PHP settings: 579 | * 580 | * To see what PHP settings are possible, including whether they can be set at 581 | * runtime (by using ini_set()), read the PHP documentation: 582 | * http://php.net/manual/ini.list.php 583 | * See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime 584 | * settings and the .htaccess file for non-runtime settings. 585 | * Settings defined there should not be duplicated here so as to avoid conflict 586 | * issues. 587 | */ 588 | 589 | /** 590 | * If you encounter a situation where users post a large amount of text, and 591 | * the result is stripped out upon viewing but can still be edited, Drupal's 592 | * output filter may not have sufficient memory to process it. If you 593 | * experience this issue, you may wish to uncomment the following two lines 594 | * and increase the limits of these variables. For more information, see 595 | * http://php.net/manual/pcre.configuration.php. 596 | */ 597 | # ini_set('pcre.backtrack_limit', 200000); 598 | # ini_set('pcre.recursion_limit', 200000); 599 | 600 | /** 601 | * Configuration overrides. 602 | * 603 | * To globally override specific configuration values for this site, 604 | * set them here. You usually don't need to use this feature. This is 605 | * useful in a configuration file for a vhost or directory, rather than 606 | * the default settings.php. 607 | * 608 | * Note that any values you provide in these variable overrides will not be 609 | * viewable from the Drupal administration interface. The administration 610 | * interface displays the values stored in configuration so that you can stage 611 | * changes to other environments that don't have the overrides. 612 | * 613 | * There are particular configuration values that are risky to override. For 614 | * example, overriding the list of installed modules in 'core.extension' is not 615 | * supported as module install or uninstall has not occurred. Other examples 616 | * include field storage configuration, because it has effects on database 617 | * structure, and 'core.menu.static_menu_link_overrides' since this is cached in 618 | * a way that is not config override aware. Also, note that changing 619 | * configuration values in settings.php will not fire any of the configuration 620 | * change events. 621 | */ 622 | # $config['system.site']['name'] = 'My Drupal site'; 623 | # $config['user.settings']['anonymous'] = 'Visitor'; 624 | 625 | /** 626 | * Fast 404 pages: 627 | * 628 | * Drupal can generate fully themed 404 pages. However, some of these responses 629 | * are for images or other resource files that are not displayed to the user. 630 | * This can waste bandwidth, and also generate server load. 631 | * 632 | * The options below return a simple, fast 404 page for URLs matching a 633 | * specific pattern: 634 | * - $config['system.performance']['fast_404']['exclude_paths']: A regular 635 | * expression to match paths to exclude, such as images generated by image 636 | * styles, or dynamically-resized images. The default pattern provided below 637 | * also excludes the private file system. If you need to add more paths, you 638 | * can add '|path' to the expression. 639 | * - $config['system.performance']['fast_404']['paths']: A regular expression to 640 | * match paths that should return a simple 404 page, rather than the fully 641 | * themed 404 page. If you don't have any aliases ending in htm or html you 642 | * can add '|s?html?' to the expression. 643 | * - $config['system.performance']['fast_404']['html']: The html to return for 644 | * simple 404 pages. 645 | * 646 | * Remove the leading hash signs if you would like to alter this functionality. 647 | */ 648 | # $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)|(?:system\/files)\//'; 649 | # $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i'; 650 | # $config['system.performance']['fast_404']['html'] = '404 Not Found

Not Found

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

'; 651 | 652 | /** 653 | * Load services definition file. 654 | */ 655 | $settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml'; 656 | 657 | /** 658 | * Override the default service container class. 659 | * 660 | * This is useful for example to trace the service container for performance 661 | * tracking purposes, for testing a service container with an error condition or 662 | * to test a service container that throws an exception. 663 | */ 664 | # $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container'; 665 | 666 | /** 667 | * Override the default yaml parser class. 668 | * 669 | * Provide a fully qualified class name here if you would like to provide an 670 | * alternate implementation YAML parser. The class must implement the 671 | * \Drupal\Component\Serialization\SerializationInterface interface. 672 | */ 673 | # $settings['yaml_parser_class'] = NULL; 674 | 675 | /** 676 | * Trusted host configuration. 677 | * 678 | * Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host 679 | * header spoofing. 680 | * 681 | * To enable the trusted host mechanism, you enable your allowable hosts 682 | * in $settings['trusted_host_patterns']. This should be an array of regular 683 | * expression patterns, without delimiters, representing the hosts you would 684 | * like to allow. 685 | * 686 | * For example: 687 | * @code 688 | * $settings['trusted_host_patterns'] = [ 689 | * '^www\.example\.com$', 690 | * ]; 691 | * @endcode 692 | * will allow the site to only run from www.example.com. 693 | * 694 | * If you are running multisite, or if you are running your site from 695 | * different domain names (eg, you don't redirect http://www.example.com to 696 | * http://example.com), you should specify all of the host patterns that are 697 | * allowed by your site. 698 | * 699 | * For example: 700 | * @code 701 | * $settings['trusted_host_patterns'] = [ 702 | * '^example\.com$', 703 | * '^.+\.example\.com$', 704 | * '^example\.org$', 705 | * '^.+\.example\.org$', 706 | * ]; 707 | * @endcode 708 | * will allow the site to run off of all variants of example.com and 709 | * example.org, with all subdomains included. 710 | */ 711 | 712 | /** 713 | * The default list of directories that will be ignored by Drupal's file API. 714 | * 715 | * By default ignore node_modules and bower_components folders to avoid issues 716 | * with common frontend tools and recursive scanning of directories looking for 717 | * extensions. 718 | * 719 | * @see \Drupal\Core\File\FileSystemInterface::scanDirectory() 720 | * @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory() 721 | */ 722 | $settings['file_scan_ignore_directories'] = [ 723 | 'node_modules', 724 | 'bower_components', 725 | ]; 726 | 727 | /** 728 | * The default number of entities to update in a batch process. 729 | * 730 | * This is used by update and post-update functions that need to go through and 731 | * change all the entities on a site, so it is useful to increase this number 732 | * if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a 733 | * larger number of entities to be processed in a single batch run. 734 | */ 735 | $settings['entity_update_batch_size'] = 50; 736 | 737 | /** 738 | * Entity update backup. 739 | * 740 | * This is used to inform the entity storage handler that the backup tables as 741 | * well as the original entity type and field storage definitions should be 742 | * retained after a successful entity update process. 743 | */ 744 | $settings['entity_update_backup'] = TRUE; 745 | 746 | /** 747 | * Node migration type. 748 | * 749 | * This is used to force the migration system to use the classic node migrations 750 | * instead of the default complete node migrations. The migration system will 751 | * use the classic node migration only if there are existing migrate_map tables 752 | * for the classic node migrations and they contain data. These tables may not 753 | * exist if you are developing custom migrations and do not want to use the 754 | * complete node migrations. Set this to TRUE to force the use of the classic 755 | * node migrations. 756 | */ 757 | $settings['migrate_node_migrate_type_classic'] = FALSE; 758 | 759 | // Automatically generated include for settings managed by ddev. 760 | if (file_exists(__DIR__ . '/settings.ddev.php') && getenv('IS_DDEV_PROJECT') == 'true') { 761 | include __DIR__ . '/settings.ddev.php'; 762 | } 763 | 764 | /** 765 | * Load local development override configuration, if available. 766 | * 767 | * Create a settings.local.php file to override variables on secondary (staging, 768 | * development, etc.) installations of this site. 769 | * 770 | * Typical uses of settings.local.php include: 771 | * - Disabling caching. 772 | * - Disabling JavaScript/CSS compression. 773 | * - Rerouting outgoing emails. 774 | * 775 | * Keep this code block at the end of this file to take full effect. 776 | */ 777 | # 778 | # if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) { 779 | # include $app_root . '/' . $site_path . '/settings.local.php'; 780 | # } 781 | -------------------------------------------------------------------------------- /web/sites/development.services.yml: -------------------------------------------------------------------------------- 1 | # Local development services. 2 | # 3 | # To activate this feature, follow the instructions at the top of the 4 | # 'example.settings.local.php' file, which sits next to this file. 5 | parameters: 6 | http.response.debug_cacheability_headers: true 7 | services: 8 | cache.backend.null: 9 | class: Drupal\Core\Cache\NullBackendFactory 10 | -------------------------------------------------------------------------------- /web/sites/example.settings.local.php: -------------------------------------------------------------------------------- 1 | ..' => 'directory'. As an 26 | * example, to map https://www.drupal.org:8080/my-site/test to the configuration 27 | * directory sites/example.com, the array should be defined as: 28 | * @code 29 | * $sites = [ 30 | * '8080.www.drupal.org.my-site.test' => 'example.com', 31 | * ]; 32 | * @endcode 33 | * The URL, https://www.drupal.org:8080/my-site/test/, could be a symbolic link 34 | * or an Apache Alias directive that points to the Drupal root containing 35 | * index.php. An alias could also be created for a subdomain. See the 36 | * @link https://www.drupal.org/documentation/install online Drupal installation guide @endlink 37 | * for more information on setting up domains, subdomains, and subdirectories. 38 | * 39 | * The following examples look for a site configuration in sites/example.com: 40 | * @code 41 | * URL: http://dev.drupal.org 42 | * $sites['dev.drupal.org'] = 'example.com'; 43 | * 44 | * URL: http://localhost/example 45 | * $sites['localhost.example'] = 'example.com'; 46 | * 47 | * URL: http://localhost:8080/example 48 | * $sites['8080.localhost.example'] = 'example.com'; 49 | * 50 | * URL: https://www.drupal.org:8080/my-site/test/ 51 | * $sites['8080.www.drupal.org.my-site.test'] = 'example.com'; 52 | * @endcode 53 | * 54 | * @see default.settings.php 55 | * @see \Drupal\Core\DrupalKernel::getSitePath() 56 | * @see https://www.drupal.org/documentation/install/multi-site 57 | */ 58 | -------------------------------------------------------------------------------- /web/update.php: -------------------------------------------------------------------------------- 1 | handle($request); 28 | $response->send(); 29 | 30 | $kernel->terminate($request, $response); 31 | -------------------------------------------------------------------------------- /web/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 39 | 48 | 49 | 52 | 61 | 62 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | --------------------------------------------------------------------------------