Bedrock is a modern WordPress stack that helps you get started with the best development tools and project structure.
Much of the philosophy behind Bedrock is inspired by the Twelve-Factor App methodology including the WordPress specific version.
- Better folder structure
- Dependency management with Composer
- Easy WordPress configuration with environment specific files
- Environment variables with Dotenv
- Autoloader for mu-plugins (use regular plugins as mu-plugins)
- Enhanced security (separated web root and secure passwords with wp-password-bcrypt)
- Multi site support
Use Trellis for additional features:
- Easy development environments with Vagrant
- Easy server provisioning with Ansible (Ubuntu 14.04, PHP 5.6 or HHVM, MariaDB)
- One-command deploys
See a complete working example in the roots-example-project.com repo.
- PHP >= 5.5
- Composer - Install
- Clone the git repo -
git clone https://github.com/roots/bedrock.git - Run
composer install - Copy
.env.exampleto.envand update environment variables:
DB_NAME- Database nameDB_USER- Database userDB_PASSWORD- Database passwordDB_HOST- Database hostWP_ENV- Set to environment (development,staging,production)WP_HOME- Full URL to WordPress home (http://example.com)WP_SITEURL- Full URL to WordPress including subdirectory (http://example.com/wp)AUTH_KEY,SECURE_AUTH_KEY,LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,NONCE_SALT- Generate with wp-cli-dotenv-command or from the WordPress Salt GeneratorWP_ALLOW_MULTISITE- true if want to start using multi site (should be false unless explicitly needed)WP_MULTISITE_MAIN_DOMAIN- Master domain name for multi site (do not set before enabling network from WP admin)
- Add theme(s) in
web/app/themesas you would for a normal WordPress site. - Set your site vhost document root to
/path/to/site/web/(/path/to/site/current/web/if using deploys) - Access WP admin at
http://example.com/wp/wp-admin
Note! If you plan to run your multisite on multiple domains, you need to change DOMAIN_CURRENT_SITE-setting in config/application.php, instructions can be found there. WordPress can't handle login cookies with different domains otherwise.
There are two methods to deploy Bedrock sites out of the box:
Any other deployment method can be used as well with one requirement:
composer install must be run as part of the deploy process.
You can use heroku local to start local development. By default the web server is started on localhost:5000. Please note that the heroku local needs an nginx configured with realip -module, which can be easily installed with the following commands (also doing some cleanup, as the local configuration is not needed anymore):
# Unload nginx running the default configuration
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
# Uninstall existing nginx
$ brew uninstall --force nginx
Uninstalling nginx... (23 files, 2,7M)
# Cleanup (backup legacy nginx configurations if you need those in future)
$ sudo rm -rf /usr/local/etc/nginx /usr/local/Library/Formula/nginx.rb \
/usr/local/var/log/nginx* /usr/local/var/run/nginx*
# Install nginx with realip module
$ brew tap homebrew/nginx
$ brew install nginx-full --with-realip
Note! If you want to install heroku local to existing Bedrock installations, you may just add the following to your composer.json -file:
"require-dev": {
"heroku/heroku-buildpack-php": "dev-master"
},If using multi site, you need also to install a reverse proxy (any other reverse proxy will also suffice):
$ npm install -g reverse-proxy-jsYou can then start the proxy by giving command (sudo is needed for restricted ports):
$ sudo reverse-proxy --port 80 --target 5000Bedrock documentation is available at https://roots.io/bedrock/docs/.
Contributions are welcome from everyone. We have contributing guidelines to help you get started.
Keep track of development and community news.
- Participate on the Roots Discourse
- Follow @rootswp on Twitter
- Read and subscribe to the Roots Blog
- Subscribe to the Roots Newsletter