This is an image to help on plugins and themes development, but it can be used to host a WordPress site as well. There are some tools and nice librarys included, like OPCache, X-Debug and WP-Cli.
You can override wp-config.php values by using environment variables. Actually, the variables present on wp-config.php and values when variable is not defined are below.
| Variable Name | Default Value |
|---|---|
| HTTPS | |
| WORDPRESS_AUTH_KEY | <random string> |
| WORDPRESS_AUTH_SALT | <random string> |
| WORDPRESS_LOGGED_IN_KEY | <random string> |
| WORDPRESS_LOGGED_IN_SALT | <random string> |
| WORDPRESS_NONCE_SALT | <random string> |
| WORDPRESS_SECURE_AUTH_KEY | <random string> |
| WORDPRESS_SECURE_AUTH_SALT | <random string> |
| WORDPRESS_NONCE_KEY | <random string> |
| WORDPRESS_DB_CHARSET | utf8 |
| WORDPRESS_DB_COLLATE | |
| WORDPRESS_DB_HOST | mysql |
| WORDPRESS_DB_NAME | wordpress |
| WORDPRESS_DB_PASSWORD | wordpress |
| WORDPRESS_DB_USER | wordpress |
| WORDPRESS_DEBUG | false |
| WORDPRESS_DEBUG_DISPLAY | false |
| WORDPRESS_DEBUG_LOG | false |
| WORDPRESS_FS_METHOD | direct |
| WORDPRESS_TABLE_PREFIX | wp_ |
| WORDPRESS_HOME | <?= $_SERVER['SERVER_NAME']; ?> |
| WORDPRESS_SITEURL | <?= $_SERVER['SERVER_NAME']; ?> |
If you have variables not present on table above, you can mount a folder with your configuration at /var/www/html/wp-config.d. All php files on that directory will be included on wp-config.php. You can also override variables present on default wp-config.php.
If you are running behind a reverse proxy and inside a Virtual Host, you may be safe about WORDPRESS_HOME and WORDPRESS_SITEURL default values.
But if you container receive requests with unexpected SERVER_NAME, you must provide values for those variables.
In any case, it is a good idea to provide values for those variables.
There are a WordPress installed at /var/www/html. So if you want to develop a plugin, you can mount your content mapping your plugin folder in /var/www/html/wp-content/plugins.
Let's suppose you want to test your plugin called Awesome, your docker-compose.yml should be like this below.
version: '2' services: web: image: hacklab/wordpress environment: - WORDPRESS_DEBUG=true - WORDPRESS_DB_USER=the_db_user - WORDPRESS_DB_PASSWORD=the_db_pass - WORDPRESS_DB_NAME=the_db_name ports: - "80:80" mysql: image: mariadb environment: - MYSQL_USER=the_db_user - MYSQL_PASSWORD=the_db_pass - MYSQL_DATABASE=the_db_name - MYSQL_ROOT_PASSWORD=the_root_pass - TERM=xterm When you set WORDPRESS_DEBUG=true in container environment, the X-Debug configuration will be created automatically, and the container will receive connections from any host. If you want suppress X-Debug, set an enviroment variable with false value, like XDEBUG=false.
Tell your Atom about folder mapping by editing config.cson. You have to configure the section called "php-debug". It should look like this:
"php-debug": PathMaps: [ "remotepath;localpath" "/var/www/html/;/local/path/to/wordpress/" ] PhpException: CatchableFatalError: false Deprecated: false FatalError: false Notice: false ParseError: false StrictStandards: false UnknownError: false Warning: false Xdebug: false ServerPort: 9000 The modules below are used on most of hacklab WordPress projects and probably may be useful for wide range of projects. While modules can take a lot of memory for each Apache process, the modules below enable users to take advantage of a lot of WordPress Cache plugins, like W3 Total Cache.
- apcu
- calendar
- Core
- ctype
- curl
- date
- dom
- fileinfo
- filter
- ftp
- gd
- hash
- iconv
- json
- libxml
- mbstring
- mcrypt
- memcached
- mysqli
- mysqlnd
- openssl
- pcre
- PDO
- pdo_mysql
- pdo_sqlite
- Phar
- posix
- readline
- redis
- Reflection
- session
- SimpleXML
- sockets
- SPL
- sqlite3
- standard
- tokenizer
- xml
- xmlreader
- xmlwriter
- zip
- zlib