Code Monkey home page Code Monkey logo

wordpress's Introduction

wordpress

WordPress docker image, powered by s6 supervised nginx unit.

Attempt to fix several of WordPress anti-patterns in ready to deploy container

Deprecation notice

  • 2023-01-20 Deprecation of WordPress versions prior to 5.9
    • Preparation for PHP8.1 upgrade.
    • WordPress versions prior to 5.9 have no PHP8.1 support.
    • PHP8.0 active support has ended since 2022-11-28, therefore skipping this release
    • PHP7.4 reached end-of-life on 2022-11-28 and should not be used.
    • Old images will remain, but will receive no further updates, until their eventual removal. Usage is not recommended.
    • This decision will make build stack significantly lighter, ensuring much faster future builds
  • 2023-01-21 Retirement of PHP7.4. The king is dead, long live the king!
  • 2023-01-22 Replace NGINX + PHP-FPM combo with NGINX Unit
    • Split and rebase image and rework build
    • This is breaking change affecting all images
    • If your setup was vanilla, it should work out of the box
    • If you need nginx, you can set it up as a reverse proxy
    • NGINX Unit is modern application server, replacing old PHP-FPM
    • Independent benchmarks have show that NGINX Unit can handle much higher load and remain stable
  • 2023-01-23 WordPress is no longer installed during runtime and it's bundled into the image
    • This renders WP_LOCALE environment variable useless
    • Instead, you will be offered to select locale during the first setup
  • 2023-04-09 Deprecation of docker.io hosted images. We're moving to ghcr.io.
    • This is due to Docker Hub's sunsetting of free teams. See docker/hub-feedback#2314
    • If you are using nlss/wordpress images, you should switch to ghcr.io/n0rthernl1ghts/wordpress
    • nlss/wordpress images will be removed in May. Further usage is not recommended, although we'll keep them up to date until then.
  • 2023-08-06 Deprecation/removal of linux/armhf architecture
    • 32-bit ARM is officialy dead.
    • It has been deprecated/removed in the base
    • This improves build speed as buidling linux/armhf is slow and was taking the most of the time
    • Simplifies maintenance

Public builds (docker)

See: packages

You can use public build:

ghcr.io/n0rthernl1ghts/wordpress:latest

You can also use specific version of WordPress:

ghcr.io/n0rthernl1ghts/wordpress:6.2.0

Replace version number with desired version, eg. 6.0.2.

Automatic plugin installer

WARNING: This feature is experimental and can fail. Proceed with caution

This container can install plugins during container startup defined in environment variable WORDPRESS_PLUGIN_LIST

If environment variable is left empty, or undefined, installer will skip.
Consider using custom image with plugins pre-installed in order to speed up container startup, and follow the best practices.

Usage example:

# Notice that specific version can be defined
WORDPRESS_PLUGIN_LIST=akismet:4.1.8 two-factor
WP_PLUGINS_INSTALL_CONCURRENCY=10

WP_PLUGINS_INSTALL_CONCURRENCY is optional, and defines how many plugins can be installed in parallel. Default is 5.
If you have a lot of plugins, you can increase this value to speed up installation, but be aware that this can cause issues, such as overloaded network connection, or even server overload.
You should not set this value to value higher than number of CPU threads ( * 1.5 ).

Caveats:

  • If plugin was previously installed, and not defined on the list, it will NOT be removed.
  • Plugins are not activated automatically; This is intentional.
  • If container startup speed is crucial (eg. start-on-demand ), don't use this feature, as it will block container startup until all plugins are installed.

Extending image

You can extend this image and install plugins during build time, using wp-plugin script.

Example:

FROM ghcr.io/n0rthernl1ghts/wordpress:6.2.0 AS wp-plugins-installer

RUN set -eux \
    && export WP_PLUGINS_PATH="/var/www/html/wp-content/plugins" \
    && wp-plugin download akismet 4.1.8 \
    && wp-plugin download two-factor \
    && wp-plugin download wp-mail-smtp

# Final image
FROM ghcr.io/n0rthernl1ghts/wordpress:6.2.0

# Example: 
# - Install ext-redis with pecl
# - Enable ext-redis
# - Remove pear/pecl cache
# - Put production-ready php.ini in use 
RUN set -eux \
    && pecl install redis \
    && docker-php-ext-enable redis \
    && rm -rf /tmp/pear \
    && cp "${PHP_INI_DIR}/php.ini-production" "${PHP_INI_DIR}/php.ini"
    
COPY --from=wp-plugins-installer ["/var/www/html/wp-content/plugins", "/var/www/html/wp-content/plugins"]

TODO

  • Disable core updates
  • Install/update plugins on the fly using wp cli (with versioning)
  • Install/update themes on the fly using wp cli (with versioning)
  • Apply theme and eventual plugin customizations using patch files (Partial)
  • Support automatic install using ENV
  • Create users automatically using ENV

wordpress's People

Contributors

dependabot[bot] avatar xzero707 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

wordpress's Issues

Multi-stage build inconsistency with resulting image

Stage "wordpress-builder" uses "wordpress:php7.4-fpm-alpine" base, yet the final image might get a different version of WordPress.

Impact: Resulting overlay might have incompatibilities with the built version.

database error

This looks like a very promising project, but I can't get it running. Would you mind providing some example instructions?
This is what I see:

$ docker run -d -p 8888:80 ghcr.io/n0rthernl1ghts/wordpress:latest
a01b3c63d8a6763a9a030ddb5d1fb1bed80988f390397079be5269f1baec5370
$ curl -Is http://localhost:8888|grep HTTP
HTTP/1.1 500 Internal Server Error
$ curl -s http://localhost:8888|grep title
			<title>Database Error</title>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.