eZ Platform Cloud and eZ Launchpad: don’t host, don’t deploy, don’t install: just code
After more than 14 years working on web projects using PHP at Novactive, I can say that I have seen a lot of projects and a lot of ways to organize them. Among other technologies, we are expert on eZ Platform (and its predecessor eZ Publish). eZ Platform, as you might know, is a Content Management System (CMS) fully based on Symfony (i.e: it does not just use few Symfony components, it is a full Symfony application using the framework). It’s a professional CMS and a development platform that comes with many features to make it robust, powerful, scalable and reliable.
When you instantiate a web project you might end up with those services:
- A web server: Nginx or Apache
- A database: MySQL or MariaDB
- An application cache: Memcached or Redis
- A session storage: Memcached or Redis
- A search engine: Solr or ElasticSearch
- A reverse proxy / HTTP Cache: Varnish
- And PHP-FPM (as we are doing PHP)
Those are the basics for me and not related to any CMS or framework. It could be different for you, of course you can install your CMS or eZ Platform with just Apache and MySQL on the same server, no reverse-proxy, no search-engine, the file system for application cache and session. As we focus on professional use cases, we usually prefer to rely on all those services (and not the just the basics). It is pretty common that you will also add:
Having a lot of services is great, the more you decouple, the more and the easier you can scale. However it also means the installation and configuration is more complex.
Add to that that your projects probably requires:
- multiple developers, project managers and stakeholders working at the same time.
- developing, testing and delivering multiple features at the same time.
You have to be organized to manage the different features and their releases by multiple team members. Thankfully, we have Git and Github, Bitbucket even Gitlab to manage the source code of those features. That’s great, but what about everything else?
What about the development architecture? What about the hosting? How do you work comfortably/professionally with that many services?
I can hear you whispering: Docker! Yes Docker is the solution. At least a totally valid solution.
Recreating a complete architecture of services just with a “docker-compose.yml” file is just mind blowing. Thanks to Docker we can bootstrap the production-like architecture in 10min. In my opinion, that is perfect for developments.
More than that, with that approach you can run your(s) project(s) locally in the 2 main modes:
- development mode: with all logs activated, symfony debugging tools on, and caches disabled
- production mode: with all the optimizations and caches enabled
All of that on top of the same code base! No excuse to do not test your developments through Varnish or without cache enabled! (I am sure you know what I mean)
Creating the architecture is the easy part. As a lead developer, once it works you need to share it with your co-workers for them to bootstrap the project even faster than you did. That is not an easy task, it needs automations, logics, and processes. It can be challenging and time-consuming if you have not done it many times.
When it comes to Developer eXperience, the most important factor is the time to first success. The success happens when you get your development environment working with all the services.
Then we can differentiate 2 main use cases:
- Initializing a new project from scratch.
- Sharing an already initialized project with a new developer and getting him ready to contribute.
In those two cases, the “first success” (having the dev environment working) should be easy, you should not even think about it. That is the role of eZ Launchpad!
eZ Launchpad has been built to optimize and simplify those two cases, but not only.
Question: how simple is it to work with Docker? How do you check logs of the different services, how do you run a php command inside the php container (bad idea to install SSH on a container for instance), how do you clear the cache, run composer on the good container, etc? eZ Launchpad is made to simplify all of that for you.
eZ Launchpad behaves as a wrapper between you and Docker to save you(r) time.
With eZ Launchpad you can get your Docker stack up and running, and ready for real development in just a few minutes. (see for yourself)
Plus, eZ Launchpad is ready to wire bonus services to improve the Developer eXperience. Then by default you will get:
- Mailcatcher
- Redis/Memcache Admin
- Adminer
- Full dev architecture is here
Then let’s recap here:
- Thanks to Docker and eZ Launchpad we can bootstrap and share a eZ Platform/Symfony project with a complete architecture.
- Thanks to Git we can organize the source code to work on features, share the code, merge etc.
As a developer you can test what you are doing, you can switch branches, but what about the project managers or your clients? eZ Launchpad will certainly help to bootstrap your project on your favorite hosting provider using the 2 commands required to get your project up and running. But it feels complex to scale by features, how do you sync the data and what about the URLs to reach those environments?
Plus, remember eZ Launchpad is for development and not for production. For staging or pre-production you want a production-equivalent environment to secure your QA.
One solution would be to build Docker images based on the images used for developments (but with no mount) and use Docker in production. That is a perfectly valid and working solution. But:
- it does not really help to test different features in progress, to test Pull Request on a real production-equivalent environments.
- that imposes you to manage the production yourself with Docker, and you might not want to do that for many reasons.
That is when I introduce you to Platform.sh! Platform.sh is PaaS, Platform as a Service, it is a continuous deployment cloud hosting solution for web applications.
With Platform.sh a branch equals an environment. Better, when a Pull Request is created Platform.sh clones the parent environment branch (ex: master) and creates a new environment for your clients/project managers to test the PR with its own URL. You get a replica of the application on top of the PR including all the data storages, the databases and the services up-to-date!
It means you don’t deploy anymore! You just push (Git), that is it!
And guess what? eZ Systems teamed up with them to unleash eZ Platform Cloud!
And because that is not cool enough, eZ Launchpad is perfectly aware of Platform.sh configuration.
What does that mean? That means that if you are using eZ Launchpad, you can, “kind of” convert your Docker Compose file to a Platform.sh configuration file.
Then to sum up, in less than 15 minutes, you can:
- Install eZ Launchpad
- Initialize a new project
- Enable Platform.sh configuration through eZ Launchpad
- Push on git to transparently deploy
You don’t install, you don’t host, you don’t deploy, you just code!
And with eZ Platform Cloud you get the power of eZ Platform Enterprise(and all services related) plus Platform.sh!
- High-Performance and High-Availability: 99.99% uptime
- Great SLA and a centralized support application and infrastructure.
- Triple redundancy, performances, security
- And more!
This is the way to go for me! And what I wanted to share! Now, you definitively have to try eZ Platform with eZ Launchpad, Platform.sh and eZ Platform Cloud!
And if you have a project to realize and are looking for help, we will love to accompany you in Europe with Novactive based in Paris and Toulon and in the U.S. here in San Francisco, CA.
See you!