Production-ready WordPress deployment stack optimized for Dokploy with Redis caching, Nginx, and management tools.
| Service | Description |
|---|---|
| WordPress | PHP 8.3 FPM with Redis extension, OPcache, and WP-CLI |
| Nginx | Optimized reverse proxy with caching and security headers |
| MySQL 9.4 | Database server with health checks |
| Redis 8 | Object caching for improved performance |
| phpMyAdmin | Database administration interface |
Performance
- Redis object caching with pre-configured WordPress integration
- PHP OPcache enabled for opcode caching
- Gzip compression for text assets
- Static asset caching (30 days)
- Auto CPU detection for Nginx workers
Security
- Security headers (X-Frame-Options, X-Content-Type-Options, X-XSS-Protection)
- Nginx version hidden
- Blocked: PHP uploads, xmlrpc.php, wp-config.php access, hidden files
- Health checks on all containers
Operations
- Dynamic domain detection (no hardcoded URLs)
- All settings configurable via environment variables (no rebuild needed)
- Graceful shutdown handling (SIGTERM)
- Database connectivity checks on startup
- Configuration validation before start
- WP-CLI pre-installed
- Create a new Compose service in Dokploy
- Point to:
https://github.com/Eetezadi/dokploy-wordpress-Alpine - Set Compose Path:
./docker-compose.yml - Go to Environment tab and add:
MYSQL_ROOT_PASSWORD=YourSecureRootPass123! MYSQL_PASSWORD=YourSecureDbPass456! WORDPRESS_DB_PASSWORD=YourSecureDbPass456! - Click Deploy
Go to the Domains tab and add:
| Domain | Service | Port |
|---|---|---|
| yourdomain.com | nginx | 80 |
| pma.yourdomain.com | phpmyadmin | 80 |
Default Credentials:
| Service | Username | Password |
|---|---|---|
| phpMyAdmin | wordpress | (your MYSQL_PASSWORD) |
- Log in to WordPress admin (
yourdomain.com/wp-admin) - Go to Plugins > Installed Plugins
- Activate Redis Object Cache
- Go to Settings > Redis
- Click Enable Object Cache
All environment variables can be changed at any time and take effect on redeploy without requiring a container rebuild.
| Variable | Default | Description |
|---|---|---|
MYSQL_ROOT_PASSWORD |
- | Required. MySQL root password |
MYSQL_DATABASE |
wordpress | Database name |
MYSQL_USER |
wordpress | Database user |
MYSQL_PASSWORD |
- | Required. Database password |
WORDPRESS_DB_HOST |
db | Database host |
WORDPRESS_DB_USER |
wordpress | WordPress database user |
WORDPRESS_DB_PASSWORD |
- | Required. WordPress database password |
WORDPRESS_DB_NAME |
wordpress | WordPress database name |
| Variable | Default | Description |
|---|---|---|
PHP_UPLOAD_MAX_FILESIZE |
256M | Maximum upload file size |
PHP_POST_MAX_SIZE |
256M | Maximum POST data size |
PHP_MEMORY_LIMIT |
512M | PHP memory limit |
PHP_MAX_EXECUTION_TIME |
300 | Script timeout in seconds |
PHP_MAX_INPUT_TIME |
300 | Input parsing timeout |
PHP_MAX_INPUT_VARS |
3000 | Maximum input variables |
PHP_OPCACHE_MEMORY |
128 | OPcache memory in MB |
PHP_OPCACHE_MAX_FILES |
4000 | Maximum cached files |
PHP_OPCACHE_VALIDATE |
0 | Validate timestamps (0=off for production) |
| Variable | Default | Description |
|---|---|---|
NGINX_CLIENT_MAX_BODY_SIZE |
256M | Maximum upload size in Nginx |
| Variable | Default | Description |
|---|---|---|
REDIS_MAXMEMORY |
256mb | Redis maximum memory |
REDIS_MAXMEMORY_POLICY |
allkeys-lru | Eviction policy |
| Variable | Default | Description |
|---|---|---|
NGINX_CPU_LIMIT |
0.5 | Nginx CPU limit |
NGINX_MEMORY_LIMIT |
256M | Nginx memory limit |
WORDPRESS_CPU_LIMIT |
1.0 | WordPress CPU limit |
WORDPRESS_MEMORY_LIMIT |
1G | WordPress memory limit |
DB_CPU_LIMIT |
1.0 | MySQL CPU limit |
DB_MEMORY_LIMIT |
1G | MySQL memory limit |
REDIS_CPU_LIMIT |
0.5 | Redis CPU limit |
REDIS_MEMORY_LIMIT |
512M | Redis memory limit |
PHPMYADMIN_CPU_LIMIT |
0.5 | phpMyAdmin CPU limit |
PHPMYADMIN_MEMORY_LIMIT |
256M | phpMyAdmin memory limit |
| Volume | Purpose |
|---|---|
wordpress_data |
WordPress files (/var/www/html) |
db_data |
MySQL data |
redis_data |
Redis persistence |
- Set strong passwords for all database credentials
- Consider restricting access to phpMyAdmin subdomain
- Enable Dokploy's built-in SSL/TLS
- Keep WordPress and plugins updated
MIT