Updating Trellis can be a challenge initially and there is no one way to do it. Lots of people wrote about it at Roots Discourse and on Github. Most of them require some major git foo. Did write about updating the Trellis server before, but not on how to maintain Trellis itself. Here is my- manual – take on it.
Trellis Repository Update
I first rename the current Trellis folder to trellis-old and git clone the latest Roots Trellis version:
- mv trellis trellis-old
- git clone –depth=1 git@github.com:roots/trellis.git && rm -rf trellis/.git
That way I can keep the old copy and have the latest so I can copy over changes I need. I also put trellis-old on the .gitignore list with some other directories and files:
.DS_Store database-backups/ trellis-old/ miscelaneous/
Trellis files to be updated
Then I make all the changes to files in the following directories:
- group_vars/all
- group_vars/production
- group_vars/staging
- hosts
I skipped group_vars/development as there hardly ever is a need for me there. Don’t do tweaks in development really as Trellis handles this pretty well out of the box with Vagrant.
Common Variables
The group all with common variables alone has:
- mail.yml,
- main.yml,
- vault.yml,
- users.yml
to updateMail.yml has the mail details so your Trellis server can send out email. Something like:
# Documentation: https://roots.io/trellis/docs/mail/ mail_smtp_server: smtp.sendgrid.net:587 mail_admin: admin@domain.com mail_hostname: domain.com mail_user: user mail_password: "{{ vault_mail_password }}" # Define this variable in group_vars/all/vault.yml
when you are using Sendgrid.
Main has the main vars including some of your own custom ones.I made sure all customizations to PHP settings are added to group_vars/all/main.yml:
php_max_execution_time: 300 php_max_input_vars: 1000 php_memory_limit: 256M php_post_max_size: 128M
In vault.yml the vault mail password is stored. That is needed for sending out email which is mainly set up in mail.yml. Under users.yml you add the server users and the keys used for which we normally use our own Github ones:
https://github.com/jasperf.keys
Though users.yml is not hard to set up and admin for admin_user is correct most of the time you do need to make sure all is well and no changes were made.
Staging and Production
Then staging and development have two files each that need updating:
- vault.yml
- wordpress_sites.yml
These files do not change much in Trellis, but they contain major details on your WordPress setup so do need to be updated with your customizations properly.
NB Did add php_memory_limit: 512M to production and staging, but I guess that could be moved to group_vars/all as well. Still two files each there. So nine files in total.
Hosts
Host files for staging and production need their ips updated so they have the ones you added before. This is pretty easy to do and as these files hardly every change you can overwrite them. Example staging hosting file:
# Add each host to the [staging] group and to a "type" group such as [web] or [db]. # List each machine only once per [group], even if it will host multiple sites. [staging] xxx.xxx.x.xxx [web] xxx.xxx.x.xxx