Trellis
Ansible playbooks for setting up a LEMP stack for WordPress.
- Local development environment with Vagrant
- High-performance production servers
- Zero-downtime deploys for your Bedrock-based WordPress sites
What's included
Trellis will configure a server with the following and more:
- Ubuntu 18.04 Bionic LTS
- Nginx (with optional FastCGI micro-caching)
- PHP 7.3
- MariaDB (a drop-in MySQL replacement)
- SSL support (scores an A+ on the Qualys SSL Labs Test)
- Let's Encrypt for free SSL certificates
- HTTP/2 support (requires SSL)
- Composer
- WP-CLI
- sSMTP (mail delivery)
- MailHog
- Memcached
- Fail2ban and ferm
Documentation
Full documentation is available at https://roots.io/trellis/docs/.
Requirements
Make sure all dependencies have been installed before moving on:
- Composer
- Virtualbox >= 4.3.10
- Vagrant >= 2.1.0
Windows user? Read the Windows getting started docs for slightly different installation instructions.
Installation
The recommended directory structure for a Trellis project looks like:
example.com/ # → Root folder for the project
├── trellis/ # → Your clone of this repository
└── site/ # → A Bedrock-based WordPress site
└── web/
├── app/ # → WordPress content directory (themes, plugins, etc.)
└── wp/ # → WordPress core (don't touch!)
See a complete working example in the roots-example-project.com repo.
- Create a new project directory:
$ mkdir example.com && cd example.com
- Install Trellis:
$ git clone --depth=1 git@github.com:roots/trellis.git && rm -rf trellis/.git
- Install Bedrock into the
site
directory:
$ composer create-project roots/bedrock site
Local development setup
- Configure your WordPress sites in
group_vars/development/wordpress_sites.yml
and ingroup_vars/development/vault.yml
- Ensure you're in the trellis directory:
cd trellis
- Run
vagrant up
Read the local development docs for more information.
Remote server setup (staging/production)
For remote servers, installing Ansible locally is an additional requirement. See the docs for more information.
A base Ubuntu 18.04 (Bionic) server is required for setting up remote servers. OS X users must have passlib installed.
- Configure your WordPress sites in
group_vars/<environment>/wordpress_sites.yml
and ingroup_vars/<environment>/vault.yml
(see the Vault docs for how to encrypt files containing passwords) - Add your server IP/hostnames to
hosts/<environment>
- Specify public SSH keys for
users
ingroup_vars/all/users.yml
(see the SSH Keys docs) - Run
ansible-playbook server.yml -e env=<environment>
to provision the server
Read the remote server docs for more information.
Deploying to remote servers
- Add the
repo
(Git URL) of your Bedrock WordPress project in the correspondinggroup_vars/<environment>/wordpress_sites.yml
file - Set the
branch
you want to deploy - Run
./bin/deploy.sh <environment> <site name>
- To rollback a deploy, run
ansible-playbook rollback.yml -e "site=<site name> env=<environment>"
Read the deploys docs for more information.
Contributing
Contributions are welcome from everyone. We have contributing guidelines to help you get started.
Trellis sponsors
Help support our open-source development efforts by becoming a patron.
Community
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
- Listen to the Roots Radio podcast