# WordPress Docker Image 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*. ## Overriding configurations 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']; ?>` | ## Overriding variables not defined on wp-config.php 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`. ### Parental advisory 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. ## Development environment 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 ``` ### X-Debug 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`. #### Atom users 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 ``` ## Modules enabled by default 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