I have a docker stack consisting of caddy
and wordpress
currently in development at https://localhost
; the website is accessible but I am getting two critical errors:
I am not sure what could be causing this; could this be a caddy config issue ? How can I make sure wordpress can correctly loopback to itself with caddy ?
I have tried different solutions including adding “additional host on docker” like below but nothing seems to be working; I also made sure my hosts
file has the correct loopback.
extra_hosts:
- localhost:127.0.0.1
here is my error message
The REST API encountered an error
Performance
The REST API is one way that WordPress and other applications communicate with the server. For example, the block editor screen relies on the REST API to display and save your posts and pages.
When testing the REST API, an error was encountered:
REST API Endpoint: https://localhost/wp-json/wp/v2/types/post?context=edit
REST API Response: (http_request_failed) cURL error 7: Failed to connect to localhost port 443 after 0 ms: Couldn't connect to server
and
Your site could not complete a loopback request
Performance
Loopback requests are used to run scheduled events, and are also used by the built-in editors for themes and plugins to verify code stability.
The loopback request to your site failed, this means features relying on them are not currently working as expected.
Error: cURL error 7: Failed to connect to localhost port 443 after 0 ms: Couldn't connect to server (http_request_failed)
I am not sure if this will solve by itself in prod
here is my compose file; DOMAIN_URL=https://localhost
:
services:
# Database
db:
image: mysql:8.0
container_name: db
platform: linux/arm64/v8
volumes:
- ${DATABASE_HOST}:/var/lib/mysql
- "/etc/localtime:/etc/localtime:ro"
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
- meoc
# WordPress
wordpress:
depends_on:
- db
container_name: wordpress
build:
context: .
dockerfile: Dockerfile.wordpress
platform: linux/arm64/v8
expose:
- "80"
restart: always
volumes:
- "/etc/localtime:/etc/localtime:ro"
- ./settings/php/custom.ini:/usr/local/etc/php/conf.d/custom.ini
- ./wp-content:/var/www/html/wp-content
environment:
WORDPRESS_DB_HOST: ${MYSQL_HOST}
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
WORDPRESS_CONFIG_EXTRA: |
define('WP_HOME', '${DOMAIN_URL}');
define('WP_SITEURL', '${DOMAIN_URL}');
define('FORCE_SSL_ADMIN', true);
define('WP_CONTENT_URL', '${DOMAIN_URL}/wp-content');
define('WORDPRESS_SKIP_PLUGINS', true);
define('WORDPRESS_SKIP_THEMES', true);
networks:
- meoc
# Caddy
caddy:
image: caddy:2-alpine
container_name: caddy
platform: linux/arm64/v8
ports:
- "80:80"
- "443:443"
volumes:
- ${CADDY_FILE}:/etc/caddy/Caddyfile:ro
- ${CADDY_DATA}:/data
- ${CADDY_CONFIG}:/config
- ${CADDY_LOG}:/var/log/caddy
environment:
- DOMAIN_URL=${DOMAIN_URL}
- ACME_AGREE=true
restart: always
networks:
- meoc
networks:
eoc:
name: meoc
and my caddyfile
# Global options
{
admin off
servers {
protocols h1 h2
}
}
localhost {
tls internal
log {
output file /var/log/caddy/access.log {
roll_size 1gb
roll_keep 5
roll_keep_for 720h
}
format filter {
request>headers>Cookie cookie {
replace session REDACTED
delete secret
}
}
format json
}
reverse_proxy wordpress:80 {
header_up Host {host}
header_up X-Real-IP {remote}
}
# Security headers
header {
# Enable HSTS
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Prevent MIME type sniffing
X-Content-Type-Options "nosniff"
# Prevent clickjacking
X-Frame-Options "SAMEORIGIN"
# Enable XSS protection
X-XSS-Protection "1; mode=block"
# Remove server header
-Server
# Disable caching
Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"
Pragma "no-cache"
Expires "0"
}
}