The provided Docker image allows you to deploy your WordPress website in production with a powerful configuration, an integrated SMTP relay, and support for PHP Redis.
Key features:
- All images are based on inrage/docker-php
- Docker Hub
- Includes an SMTP server for outgoing emails
- Supports PHP Redis
- Advanced configuration for optimal performance
- Easy deployment and scalability with Docker
Supported tags:
- latest:
8.3
(Dockerfile),8.3-redis
(Dockerfile)8.2
(Dockerfile),8.2-redis
(Dockerfile)8.1
(Dockerfile),8.1-redis
(Dockerfile)8.0
(Dockerfile),8.0-redis
(Dockerfile)7.4
(Dockerfile),7.4-redis
(Dockerfile)
- legacy:
7.2
(Dockerfile)7.0
(Dockerfile)5.6
(Dockerfile)
To install, you need to either mount a directory into /var/www/html
or customize the destination directory according to your needs. Here's how to proceed:
FROM inrage/docker-wordpress:8.3
COPY --chown=inr . .
We are using a Docker Swarm configuration with Traefik as a reverse proxy. Here's an example of a docker-compose.yml
file:
version: "3.8"
services:
redis:
hostname: mywebsite.redis
image: redis:7.2.0
healthcheck:
test: ["CMD-SHELL", "redis-cli --raw incr ping"]
networks:
- internal-network
command: redis-server --maxmemory 1024mb --maxmemory-policy allkeys-lru --appendonly yes
environment:
TZ: "Europe/Paris"
volumes:
- /etc/localtime:/etc/localtime:ro
- redis_data:/data
web:
image: inrage/mycustomimage
networks:
database:
traefik-public:
internal-network:
environment:
WORDPRESS_DB_HOST: db-master.db
WORDPRESS_DB_USER: mywebsite
WORDPRESS_DB_PASSWORD: "mywebsitepassword"
WORDPRESS_DB_NAME: mywebsite
WORDPRESS_TABLE_PREFIX: gr_
WORDPRESS_CONFIG_EXTRA: |
define( 'DISALLOW_FILE_MODS', true );
define( 'WP_MEMORY_LIMIT', '512M' );
define( 'WP_REDIS_HOST', 'mywebsite.redis');
TZ: "Europe/Paris"
volumes:
- /host/website/mywebsite/uploads:/var/www/html/wp-content/uploads
deploy:
replicas: 1
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.constraint-label=traefik-public
- traefik.http.routers.mywebsite-http.rule=Host(`www.inrage.fr`, `inrage.fr`)
- traefik.http.routers.mywebsite-http.entrypoints=http
- traefik.http.routers.mywebsite-http.middlewares=https-redirect
- traefik.http.routers.mywebsite-https.rule=Host(`www.inrage.fr`, `inrage.fr`)
- traefik.http.routers.mywebsite-https.entrypoints=https
- traefik.http.routers.mywebsite-https.tls=true
- traefik.http.routers.mywebsite-https.tls.certresolver=le
- traefik.http.services.mywebsite.loadbalancer.server.port=80
volumes:
redis_data:
networks:
internal-network:
database:
external: true
traefik-public:
external: true
Variable | Description | Default |
---|---|---|
WORDPRESS_NO_CREATE_CONFIG |
Do not create a config file | false |
WORDPRESS_DB_HOST |
Database host | mysql |
WORDPRESS_DB_USER |
Database user | example username |
WORDPRESS_DB_PASSWORD |
Database password | example password |
WORDPRESS_DB_NAME |
Database name | wordpress |
WORDPRESS_TABLE_PREFIX |
Database table prefix | wp_ |
WORDPRESS_DEBUG |
Enable debug mode | false |
WORDPRESS_CONFIG_EXTRA |
Additional configuration | empty |
WORDPRESS_DB_CHARSET |
Database charset | utf8 |
WORDPRESS_DB_COLLATE |
Database collate | empty |
WORDPRESS_AUTH_KEY |
Authentication key | empty |
WORDPRESS_SECURE_AUTH_KEY |
Secure authentication key | empty |
WORDPRESS_LOGGED_IN_KEY |
Logged in key | empty |
WORDPRESS_NONCE_KEY |
Nonce key | empty |
WORDPRESS_AUTH_SALT |
Authentication | |
WORDPRESS_SECURE_AUTH_SALT |
Secure authentication salt | empty |
WORDPRESS_LOGGED_IN_SALT |
Logged in salt | empty |
WORDPRESS_NONCE_SALT |
Nonce salt | empty |
For WORDPRESS_NO_CREATE_CONFIG
: Do not create a new configuration file (default: false)
By default, the image will use a new configuration file which is generated at runtime and after you can use WordPress environnement.
If you want to use your own configuration file, set this variable to true
.
For WORDPRESS_CONFIG_EXTRA
, you can use the following variables:
WORDPRESS_CONFIG_EXTRA: |
define( 'DISALLOW_FILE_MODS', true );
define( 'WP_MEMORY_LIMIT', '511M' );
define( 'WP_REDIS_HOST', 'mysite.redis');
Refer to the inrage/docker-php documentation for more information.
INRAGE_USER_ID
: UID of the user to run the application as (default: 1000)INRAGE_GROUP_ID
: GID of the user to run the application as (default: 1000)
wp
: WordPress CLIsr
: allow you to replace in the database (wp search-replace $1 $2 --precise --all-tables --skip-columns=guid
)