Best practices - development environment and deployment (Vagrant, Docker, Deployer, CI/CD, etc)

Up until now, we have generally worked on small SilverStripe projects. A single developer on the team would generally work on the project until deployment. It was up to each developer on the team to maintain their own development environment. Deployment was done manually (via FTP) to shared hosting. This worked adequately as the projects were small, shared hosting sufficient and changes were infrequent.

We are hoping to work on more substantial projects now and have multiple developers working on the same project. Our previous development processes simply won’t be adequate anymore. We have Windows, Macs and Linux development machines across the team. Far too much time is spent on ironing out idiosyncrasies of developers’ machines and then again deployment to production servers.

So I’d really like to hear what everyone else is doing for your local development and also deployment.

Development Environment
I read that SilverStripe use Vagrant for development. Is anyone else using Vagrant? Or is Docker now the way to go? What are you personally using as for development?

Deployment
Regarding deployment, we currently use BitBucket as a VCS and would like to look into CI/CD where the setup overhead can be justified for these larger / long term projects. Is anyone else using tools like BitBucket, Gitlab, Github for CI/CD? Really feels like overkill for smaller projects, or has experience proven that it is better to bite the bullet even for smaller projects?

What are your opinions about Deployer? I’m still trying to figure out how in would fit in, and whether it solves any of our problems? For smaller or less frequently updated projects, is it easier just to FTP or is it better to start using something like Deployer?

Would really like to hear what everyone else is doing! Thank you.

So, from my point of view…

I use Docker for all development now… I run local docker containers to try and help keep all the various environments consistent with their production targets. I work on Linux locally, I have a mixture of all kinds of target hosting from Docker-based systems, shared hosting, cloud-based stuff, etc. I also tend to use Bitbucket for the repositories, with a couple of client-owned github projects too.

For deployment, after going round the houses and trying all kinds of different things, I’ve settled on a couple of solutions which cover most of what I do:

  1. I use deployer for projects where we have reasonable access to the hosting. This means proper SSH / SFTP access in general. It works well and saves a lot of headaches.

  2. For anything else, including FTP deployments to shared hosting, etc. I use deployhq.com - On here I can set up build pipelines to pull code releases from the repo, run composer commands, etc. and then push the updated files to the hosting with minimal fuss. It’s a paid service, but it’s saved me so much time and hassle, I’ve found it good value.

Cheers

Hey @Tim - awesome response. Thank you very much for sharing what you use.