Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix wp-env docker-compose config with explicit users and passwords #29770

Closed
wants to merge 2 commits into from

Conversation

youknowriad
Copy link
Contributor

@youknowriad youknowriad commented Mar 11, 2021

closes #29752

There has been some update to the WordPress default docker image with these two updates:

  • It doesn't create a database by default now.
  • It doesn't use the default username/password for the database.

This PR fixes that by assigning explicit values for these, the issue though is that all pre-existing wp-env usage is broken including third-party and old branches.

@youknowriad youknowriad requested a review from noahtallen as a code owner March 11, 2021 12:18
@youknowriad youknowriad self-assigned this Mar 11, 2021
@youknowriad youknowriad added [Tool] Env /packages/env [Type] Bug An existing feature does not function as intended labels Mar 11, 2021
@github-actions
Copy link

github-actions bot commented Mar 11, 2021

Size Change: 0 B

Total Size: 1.4 MB

ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.78 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 664 B 0 B
build/block-directory/index.js 8.63 kB 0 B
build/block-directory/style-rtl.css 1 kB 0 B
build/block-directory/style.css 1.01 kB 0 B
build/block-editor/index.js 125 kB 0 B
build/block-editor/style-rtl.css 12.1 kB 0 B
build/block-editor/style.css 12.1 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 112 B 0 B
build/block-library/blocks/audio/style.css 112 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 479 B 0 B
build/block-library/blocks/button/style.css 479 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 364 B 0 B
build/block-library/blocks/buttons/style.css 363 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 421 B 0 B
build/block-library/blocks/columns/style.css 421 B 0 B
build/block-library/blocks/cover/editor-rtl.css 390 B 0 B
build/block-library/blocks/cover/editor.css 389 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.24 kB 0 B
build/block-library/blocks/cover/style.css 1.24 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/file/editor-rtl.css 199 B 0 B
build/block-library/blocks/file/editor.css 198 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 689 B 0 B
build/block-library/blocks/gallery/editor.css 690 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.08 kB 0 B
build/block-library/blocks/gallery/style.css 1.07 kB 0 B
build/block-library/blocks/group/editor-rtl.css 318 B 0 B
build/block-library/blocks/group/editor.css 317 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 476 B 0 B
build/block-library/blocks/image/style.css 478 B 0 B
build/block-library/blocks/latest-comments/editor-rtl.css 159 B 0 B
build/block-library/blocks/latest-comments/editor.css 158 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 269 B 0 B
build/block-library/blocks/latest-comments/style.css 269 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/list/editor-rtl.css 65 B 0 B
build/block-library/blocks/list/editor.css 65 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 584 B 0 B
build/block-library/blocks/navigation-link/editor.css 586 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 694 B 0 B
build/block-library/blocks/navigation-link/style.css 691 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.08 kB 0 B
build/block-library/blocks/navigation/editor.css 1.08 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 227 B 0 B
build/block-library/blocks/navigation/style.css 228 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 215 B 0 B
build/block-library/blocks/page-list/editor.css 215 B 0 B
build/block-library/blocks/page-list/style-rtl.css 527 B 0 B
build/block-library/blocks/page-list/style.css 526 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 288 B 0 B
build/block-library/blocks/paragraph/style.css 289 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 250 B 0 B
build/block-library/blocks/post-comments-form/style.css 250 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 63 B 0 B
build/block-library/blocks/preformatted/style.css 63 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 90 B 0 B
build/block-library/blocks/query-loop/editor.css 89 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query/editor-rtl.css 814 B 0 B
build/block-library/blocks/query/editor.css 812 B 0 B
build/block-library/blocks/quote/editor-rtl.css 61 B 0 B
build/block-library/blocks/quote/editor.css 61 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 165 B 0 B
build/block-library/blocks/search/editor.css 165 B 0 B
build/block-library/blocks/search/style-rtl.css 342 B 0 B
build/block-library/blocks/search/style.css 344 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 236 B 0 B
build/block-library/blocks/separator/style.css 236 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 504 B 0 B
build/block-library/blocks/shortcode/editor.css 504 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 201 B 0 B
build/block-library/blocks/site-logo/editor.css 201 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 115 B 0 B
build/block-library/blocks/site-logo/style.css 115 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 696 B 0 B
build/block-library/blocks/social-links/editor.css 696 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.32 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 317 B 0 B
build/block-library/blocks/spacer/editor.css 317 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 402 B 0 B
build/block-library/blocks/table/style.css 402 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 557 B 0 B
build/block-library/blocks/template-part/editor.css 556 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/editor-rtl.css 62 B 0 B
build/block-library/blocks/verse/editor.css 62 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 504 B 0 B
build/block-library/blocks/video/editor.css 503 B 0 B
build/block-library/blocks/video/style-rtl.css 187 B 0 B
build/block-library/blocks/video/style.css 187 B 0 B
build/block-library/common-rtl.css 1.1 kB 0 B
build/block-library/common.css 1.1 kB 0 B
build/block-library/editor-rtl.css 9.38 kB 0 B
build/block-library/editor.css 9.38 kB 0 B
build/block-library/index.js 146 kB 0 B
build/block-library/style-rtl.css 8.84 kB 0 B
build/block-library/style.css 8.85 kB 0 B
build/block-library/theme-rtl.css 700 B 0 B
build/block-library/theme.css 701 B 0 B
build/block-serialization-default-parser/index.js 1.87 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 48.3 kB 0 B
build/components/index.js 283 kB 0 B
build/components/style-rtl.css 15.6 kB 0 B
build/components/style.css 15.6 kB 0 B
build/compose/index.js 11.1 kB 0 B
build/core-data/index.js 16.7 kB 0 B
build/customize-widgets/index.js 3.96 kB 0 B
build/customize-widgets/style-rtl.css 168 B 0 B
build/customize-widgets/style.css 168 B 0 B
build/data-controls/index.js 829 B 0 B
build/data/index.js 8.87 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 769 B 0 B
build/dom-ready/index.js 576 B 0 B
build/dom/index.js 4.93 kB 0 B
build/edit-navigation/index.js 11.9 kB 0 B
build/edit-navigation/style-rtl.css 1.31 kB 0 B
build/edit-navigation/style.css 1.31 kB 0 B
build/edit-post/index.js 306 kB 0 B
build/edit-post/style-rtl.css 6.81 kB 0 B
build/edit-post/style.css 6.8 kB 0 B
build/edit-site/index.js 27.3 kB 0 B
build/edit-site/style-rtl.css 4.5 kB 0 B
build/edit-site/style.css 4.49 kB 0 B
build/edit-widgets/index.js 20.1 kB 0 B
build/edit-widgets/style-rtl.css 3.2 kB 0 B
build/edit-widgets/style.css 3.2 kB 0 B
build/editor/editor-styles-rtl.css 347 B 0 B
build/editor/editor-styles.css 347 B 0 B
build/editor/index.js 41.8 kB 0 B
build/editor/style-rtl.css 3.9 kB 0 B
build/editor/style.css 3.9 kB 0 B
build/element/index.js 4.61 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 6.75 kB 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 2.28 kB 0 B
build/html-entities/index.js 623 B 0 B
build/i18n/index.js 4.01 kB 0 B
build/is-shallow-equal/index.js 698 B 0 B
build/keyboard-shortcuts/index.js 2.53 kB 0 B
build/keycodes/index.js 1.95 kB 0 B
build/list-reusable-blocks/index.js 3.15 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.js 5.34 kB 0 B
build/notices/index.js 1.85 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/plugins/index.js 2.9 kB 0 B
build/primitives/index.js 1.42 kB 0 B
build/priority-queue/index.js 791 B 0 B
build/react-i18n/index.js 1.46 kB 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/reusable-blocks/index.js 3.78 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/rich-text/index.js 13.4 kB 0 B
build/server-side-render/index.js 2.82 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 3.02 kB 0 B
build/viewport/index.js 1.86 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

},
volumes: [ 'mysql:/var/lib/mysql' ],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The volume for the mysql container should be retained. Removing this means any restart of the environment loses any existing data.

The clean command exists to wipe databases on the dev environment when needed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think restarting the environment doesn't mean losing data, destroying the environment means that and for a dev environment, I think that's totally acceptable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regardless, I restored volumes to see if it solves the permission issues

@@ -176,26 +176,41 @@ module.exports = function buildDockerComposeConfig( config ) {
image: 'mariadb',
ports: [ '3306' ],
environment: {
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes',
MYSQL_ROOT_PASSWORD: 'password',
MYSQL_DATABASE: 'wordpress',
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Setting the database here, makes sure the container creates it (which was done previously in the wordpress image)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is also why we need a separate container for the database of the tests env.

@gwwar
Copy link
Contributor

gwwar commented Mar 11, 2021

Have folks tested pointing at the previous docker images to pinpoint where things changed?

@youknowriad
Copy link
Contributor Author

I think it changed in "latest" so probably not tagged yet. I think ideally, wp-env shouldn't be relying on a "wordpress" image since itself downloads wordpress based on some config, it could be just based on a simpler/lighter php image but that's a discussion for another time. (I didn'try but yea we could potentially fix the version to wordpress:5.7 image.

I'm going to end my day soon (and be AFK tomorrow) so I'm passing on the batton on this one.

@ribaricplusplus
Copy link
Member

Don't know if this is useful information, just wanted to let you know that I tried the fix as it is now and it doesn't work for me. This is what I get now:

bruno@brunopc:[tetenv]> npx wp-env start
⚠ Warning: could not find a .wp-env.json configuration file and could not determine if '/home/bruno/Everything/tetenv' is a WordPress installation, a plugin, or a theme.
✖ Error while running docker-compose command.
Creating 6702d4ebf74b8790de999cf3da46ad4b_cli_run ... done
mysqlcheck: Got error: 1045: Access denied for user 'root'@'172.24.0.6' (using password: YES) when trying to connect
npm ERR! code 2
npm ERR! path /home/bruno/Everything/tetenv
npm ERR! command failed
npm ERR! command sh -c wp-env "start"

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/bruno/.npm/_logs/2021-03-11T16_36_02_579Z-debug.log

I'm using just a plain directory with @wordpress/env (this PR version) installed.

Some system info:

OS: Linux
Node v15.8.0
Docker 20.10.5
Docker-Compose v1.27.4

@pbking
Copy link
Contributor

pbking commented Mar 11, 2021

I tested this locally with a .wp-env.json file and that did seem to address the error. I'm not sure of the most appropriate way to install this from a particular branch but the mechanism I used was just npm install -g . from the /packages/wp-env location.

Is there a better way?

@ribaricplusplus
Copy link
Member

ribaricplusplus commented Mar 11, 2021

@pbking By 'address the error' do you mean that it worked when you used a particular .wp-env.json file? If so could you share that file?

Also, if it helps, I just run npm pack in /packages/wp-env and install that tarball, I made a script that does it automatically. Don't know if there's a better way.

@pbking
Copy link
Contributor

pbking commented Mar 11, 2021

Sure thing. I also realized that npm link . is probably what have installed that correctly so I can't promise that my test was legit. I'm retesting now to make sure it actually did what I said. :P

@pbking
Copy link
Contributor

pbking commented Mar 11, 2021

{
  "core": "WordPress/WordPress#5.6-branch",
  "plugins": [
    "https://github.com/WordPress/gutenberg/releases/download/v10.1.1/gutenberg.zip"
  ],
  "env": {
    "development": {
      "port": 3333
    },
    "tests": {
      "port": 3334
    }
  }
}

This was my .wp-env.json file I ran from this location.

With the above patch linked via npm link . as described above this seems to work as expected.
I seem to be having less success if I don't specify a version of core though. A seemingly different but troublesome likewise blocking error.

mayland-blocks % wp-env start
✖ Error while running docker-compose command.
WordPress is already installed.
Creating dfb9bedeedd125352c56538089ac1e08_tests-cli_run ... done
Error: Could not process the 'wp-config.php' transformation.
Reason: wp-config.php is not writable.

This is after wp-env destroy and the removal of all docker images (via the Docker Dashboard)

It was likely specifying the version of CORE to use that got it to work in the first place.

@ribaricplusplus
Copy link
Member

ribaricplusplus commented Mar 11, 2021

Interesting, I still get the same old error. Though tests seem to be getting the error that you mention.

EDIT: Apparently MariaDB will not create a database if a volume already exists... Access denied happens because there is no database. After running wp-env destroy I get past the access denied error because the database gets created, but run into wp-config.php is not writable error instead.

So now I'm getting the same thing as @pbking, without .wp-env.json

bruno@brunopc:[tetenv]> npx wp-env start
⚠ Warning: could not find a .wp-env.json configuration file and could not determine if '/home/bruno/Everything/tetenv' is a WordPress installation, a plugin, or a theme.
✖ Error while running docker-compose command.
WordPress is already installed.
Creating 6702d4ebf74b8790de999cf3da46ad4b_cli_run ... done
Error: Could not process the 'wp-config.php' transformation.
Reason: wp-config.php is not writable.

@ockham
Copy link
Contributor

ockham commented Mar 11, 2021

Have folks tested pointing at the previous docker images to pinpoint where things changed?

Experimenting here: #29798

@ockham
Copy link
Contributor

ockham commented Mar 11, 2021

Have folks tested pointing at the previous docker images to pinpoint where things changed?

Found what I believe is the relevant PR: docker-library/official-images#9772
So I guess the issue is present in the 5.7 image? 🤔

@ribaricplusplus
Copy link
Member

ribaricplusplus commented Mar 11, 2021

#29800 might be a full fix, I'm working on a cleaner implementation before converting from draft.

Running wp-env start from #29800 version of @wordpress/env works for me.

@ockham
Copy link
Contributor

ockham commented Mar 11, 2021

Looking at the wp-config.php is not writable errors that we're seeing, this comment seems relevant:

For users who are changing WORDPRESS_* variables and expecting our docker-entrypoint.sh to update them, the "migration" path is to remove your wp-config.php file and let the new entrypoint copy in the updated version, and everything will "just work" from then on.

Not quite sure what that means for us, but I guess it's mostly relevant for these bits:

// When both tests and development reference the same WP source, we need to
// ensure that tests pulls from a copy of the files so that it maintains
// a separate DB and config. Additionally, if the source type is local we
// need to ensure:
//
// 1. That changes the user makes within the "core" directory are
// served in both the development and tests environments.
// 2. That the development and tests environment use separate
// databases and `wp-content/uploads`.
//
// To do this we copy the local "core" files ($wordpress) to a tests
// directory ($tests-wordpress) and instruct the tests environment
// to source its files like so:
//
// - wp-config.php <- $tests-wordpress/wp-config.php
// - wp-config-sample.php <- $tests-wordpress/wp-config.php
// - wp-content <- $tests-wordpress/wp-content
// - * <- $wordpress/*
//
// https://github.com/WordPress/gutenberg/issues/21164
if (
config.env.development.coreSource &&
hasSameCoreSource( [ config.env.development, config.env.tests ] )
) {
const wpSource = config.env.development.coreSource;
testsMounts.shift(); // Remove normal core mount.
testsMounts.unshift(
...[
`${ wpSource.testsPath }:/var/www/html`,
...( wpSource.type === 'local'
? fs
.readdirSync( wpSource.path )
.filter(
( filename ) =>
filename !== 'wp-config.php' &&
filename !== 'wp-config-sample.php' &&
filename !== 'wp-content'
)

@ockham
Copy link
Contributor

ockham commented Mar 11, 2021

Looking at the wp-config.php is not writable errors that we're seeing, this comment seems relevant:

For users who are changing WORDPRESS_* variables and expecting our docker-entrypoint.sh to update them, the "migration" path is to remove your wp-config.php file and let the new entrypoint copy in the updated version, and everything will "just work" from then on.

Not quite sure what that means for us, but I guess it's mostly relevant for these bits:

// When both tests and development reference the same WP source, we need to
// ensure that tests pulls from a copy of the files so that it maintains
// a separate DB and config. Additionally, if the source type is local we
// need to ensure:
//
// 1. That changes the user makes within the "core" directory are
// served in both the development and tests environments.
// 2. That the development and tests environment use separate
// databases and `wp-content/uploads`.
//
// To do this we copy the local "core" files ($wordpress) to a tests
// directory ($tests-wordpress) and instruct the tests environment
// to source its files like so:
//
// - wp-config.php <- $tests-wordpress/wp-config.php
// - wp-config-sample.php <- $tests-wordpress/wp-config.php
// - wp-content <- $tests-wordpress/wp-content
// - * <- $wordpress/*
//
// https://github.com/WordPress/gutenberg/issues/21164
if (
config.env.development.coreSource &&
hasSameCoreSource( [ config.env.development, config.env.tests ] )
) {
const wpSource = config.env.development.coreSource;
testsMounts.shift(); // Remove normal core mount.
testsMounts.unshift(
...[
`${ wpSource.testsPath }:/var/www/html`,
...( wpSource.type === 'local'
? fs
.readdirSync( wpSource.path )
.filter(
( filename ) =>
filename !== 'wp-config.php' &&
filename !== 'wp-config-sample.php' &&
filename !== 'wp-content'
)

Ah, I might be mistaken. The Error: Could not process the 'wp-config.php' transformation error seems to come from WP CLI, so this line might be a more likely candidate:

`wp config set ${ key } ${ value } --anchor="define( 'WP_DEBUG',"${
typeof value !== 'string' ? ' --raw' : ''
}`

@ockham
Copy link
Contributor

ockham commented Mar 11, 2021

Ah, I might be mistaken. The Error: Could not process the 'wp-config.php' transformation error seems to come from WP CLI, so this line might be a more likely candidate:

`wp config set ${ key } ${ value } --anchor="define( 'WP_DEBUG',"${
typeof value !== 'string' ? ' --raw' : ''
}`

So it seems like these lines:

// Set wp-config.php values.
for ( let [ key, value ] of Object.entries(
config.env[ environment ].config
) ) {
// Add quotes around string values to work with multi-word strings better.
value = typeof value === 'string' ? `"${ value }"` : value;
setupCommands.push(
`wp config set ${ key } ${ value } --anchor="define( 'WP_DEBUG',"${
typeof value !== 'string' ? ' --raw' : ''
}`
);
}

are used to add config settings like these to the respective wp-config.phps:

config: {
WP_DEBUG: true,
SCRIPT_DEBUG: true,
WP_PHP_BINARY: 'php',
WP_TESTS_EMAIL: '[email protected]',
WP_TESTS_TITLE: 'Test Blog',
WP_TESTS_DOMAIN: 'http://localhost',
WP_SITEURL: 'http://localhost',
WP_HOME: 'http://localhost',
},

It seems like the more 'idiomatic' way that the WP Docker image provides to pass extra config settings is the WORDPRESS_CONFIG_EXTRA var (see e.g. https://hub.docker.com/_/wordpress or https://www.mrjamiebowman.com/software-development/wordpress/docker-compose-wordpress_config_extra/).

Maybe we can use that, and drop the logic that attempts to set these via WP CLI.

@ribaricplusplus
Copy link
Member

ribaricplusplus commented Mar 11, 2021

#29800 Seems to fix the issue.

The PR seems to fix the problem but doesn't use docker-compose environment variable for setting up configuration as @ockham suggested.

@noisysocks
Copy link
Member

I think ideally, wp-env shouldn't be relying on a "wordpress" image since itself downloads wordpress based on some config, it could be just based on a simpler/lighter php image but that's a discussion for another time.

Could definitely look into this. We'd have to drop support for setting "core": null in .wp-env.json but that's no big deal. IIRC the wordpress image properly installs all of the PHP extensions that WordPress needs which is why it's convenient to use. I'm sure we can make php work though.

It seems like the more 'idiomatic' way that the WP Docker image provides to pass extra config settings is the WORDPRESS_CONFIG_EXTRA var (see e.g. https://hub.docker.com/_/wordpress or https://www.mrjamiebowman.com/software-development/wordpress/docker-compose-wordpress_config_extra/).

IIRC WORDPRESS_CONFIG_EXTRA only sets the config when wp-config.php is first created. This isn't good enough for wp-env which supports users providing their own wp-config.php and users modifying the config in their .wp-env.json and then restarting.

@noahtallen
Copy link
Member

We'd have to drop support for setting "core": null in .wp-env.json but that's no big deal. IIRC the wordpress image properly installs all of the PHP extensions that WordPress needs which is why it's convenient to use. I'm sure we can make php work though.

I've wondered if it would make sense to rely on a single Docker image, instead of different ones for every environment. For example, we have separate phpunit and CLI instances -- it seems like we could bundle CLI/phpunit into the other services if we used a single Docker image.

@noisysocks
Copy link
Member

I've wondered if it would make sense to rely on a single Docker image, instead of different ones for every environment. For example, we have separate phpunit and CLI instances -- it seems like we could bundle CLI/phpunit into the other services if we used a single Docker image.

Yes absolutely! The wordpress image is optimised for deploying production versions of WordPress and so doesn't include developer tools. Ideally we would have a wordpress-develop image based on PHP which contains WordPress, WP CLI, phpunit, xdebug, etc.

@ribaricplusplus
Copy link
Member

Might be worth considering that Docker is meant to be used 1 process per container. If it is desired to have a particular PHP environment shared between images, that can be accomplished by creating a base image which is then extended for every process. Might not be the best idea to bundle everything into a single image.

An article that talks a bit about this: https://developers.redhat.com/blog/2016/02/24/10-things-to-avoid-in-docker-containers/

@noahtallen
Copy link
Member

Closing in favor of #29800.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Tool] Env /packages/env [Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Env: Access denied for user 'username_here'@'X.X.X.X' error running wp-env start.
8 participants