APIs have been around for a long time, and it has taken many iterations of development and web evolution to demonstrate the fact that, however we are building things today, it will be different tomorrow. The ways we deliver content consistently and reliably and future-proof our current efforts are key components to success.
Every piece of content, from a simple component to those living within custom Mura ORM entities, is available for remote consumption.
API-led development seeks to address these concerns by starting with a robust, flexible and purpose-designed API. By developing here first, ensuring that the concerns of security, testing, authentication and failure protection are addressed at the core level, it will be possible to reliably deliver content to any number of platforms, known and unknown.
Starting with version 7.1, Mura's robust JSON API and the Mura.js library will be the basis for all new core development. It is already found in the new Configurator/Scaffolder (see below) and elsewhere.
Sometimes referred to as "headless" or "decoupled," Content as a Service (CaaS) is fast becoming a highly sought-after aspect of modern content and experience management, and it's now available in Mura. Every piece of content, from a simple component to those living within custom Mura ORM entities, is available for remote consumption. Mura JS and the JSON API act as the gateways to the content and are fully supported by Mura's robust security and integrated permissions.
Check out this example using Vue.js to take it for a spin.
Swagger is an API developer framework that allows you to test and extend supported remote APIs. It allows developers to easily learn about, test and interact with Mura's JSON API. For instance, hand-crafting a feed that links several entities used to mean a try/fail iteration of coding until you had it working. Now you can just plug in your parameters and play with the results until they fit with what you need.
Docker will ease many common workflow challenges and change the way you build your local and production server stacks, for the better.
The Mura Assembler allows you to assemble custom Mura ORM entities via the Mura administrator. These entities can be stand-alone objects, or may exist in relationships with other objects (i.e. office locations linked to managers, linked to contact information).
Mura Scaffolder adds complete data management on top of Mura ORM entities, so that you can add, edit, delete and manage the data they contain.
Docker is a way to "containerize" your website, including its infrastructure (web server, database, internal and external resources), its component parts (theme, plugins and modules), and even its security and management (testing, development, source control, deployment, failure protection and security).
There is no room here to fully explain what Docker brings to Mura, but suffice it to say, it will ease many common workflow challenges and change the way you build your local and production server stacks, for the better.
Mura 7.1 is now fully compatible with Docker and available as a completely self-contained Docker image. We have created detailed instructions on how to use and deploy Mura on Docker, how to manage and configure your Docker instance, and more. (See recent posts on the Mura In Flow blog for more detailed explorations of using Docker with Mura.)
Containerization adds the concept of Continuous Deployment - the ability to continually work on your website in both local and shared development with full source control, and then deploy these fully tested instances to your live server - along with a layer of enhanced security, because your work is done in containers isolated from the rest of your system, and because you are incorporating the very latest fully-patched versions of every layer of your application from database to engine, in every build.
Testing is easier because every member of the development team is working in the exact same environment as the live version of the application. Support is easier because you can test using the exact same environment that is experiencing the problem.
All of this means fewer distractions, fewer worries about failure or the cost (in hours and dollars) of supporting the project. You spend less cycles managing and more doing, and that is a very good thing.
"Immutable infrastructure is an approach to managing services and software deployments on IT resources wherein components are replaced rather than changed. An application or service is effectively redeployed each time any change occurs"
Immutable Infrastructure is the end-goal. Before now, it required a complex infrastructure capable of orchestrating many moving parts at once, in a unified way, which was something only large organizations with unlimited budgets could manage.
That is no longer the case.
With a Docker-optimized core enabling continuous deployment, and a fully-integrated API, Mura 7.1 turns this philosophy into a reality. Installation, migration and deployment are just a few of the many places the benefits are realized, greatly reducing the amount of time spent on infrastructure maintenance and troubleshooting.
Mura 7.1 introduces a host of new configuration options that will allow you to more easily integrate these external services. Defining your S3 store and asset directories is now as simple as adding a few values to the settings.ini.cfm file, and reloading the application.
Auto updates have also changed. Rather than separately updating core files, and then the files for each Mura site, version 7.1 does not separate core and site updates.
We have also made it possible for you to define your own Mura update URL, so you can have your own distribution endpoint for internal use. This will allow you to test updates in isolation, then deploy them across your infrastructure.
For additional stability, minor-version updates will no longer be released in the form of incremental patches with minute, ongoing code changes and bug fixes. Instead, we will define specific release points which will be available to the auto-update process.
For help in easing the transition from Mura 7.0 to 7.1, we have created a special section of the documentation with instructions and tips for a successful upgrade to existing installations.
The need for third-party widgets (or asking your dev team to create them) in order to add full-screen overlays, modal windows, slide out drawers and bars to specific calls-to-action or alerts is now a thing of the past.
In order for Mura to be fully modular and container-friendly, we've made some important changes to the underlying directory structure. For one, we've eliminated the root-level site directories, combining them in a parent /sites folder. Rather than nesting the theme files within the site's /includes folder, themes are now installed globally into a root-level /themes folder, and display objects (now known as "modules" in keeping with common industry terms) live in the root-level /modules folder.
This makes managing Mura sites simpler in general, whether you are using Docker or not, and eliminates the need for code duplication, making it much easier to share assets and themes among multiple sites.
(It is worth mentioning, prior-version site and theme directory structures will continue to work as expected. There's no need to move things around in order to upgrade to this version.)
We have added much more granular event handling in Mura 7.1. Now, instead of being required to register event handlers across entire sites, developers can register events for specific Mura ORM entities only.
There is no longer a theme included in the Mura core. Instead, a default theme is downloaded and installed the first time Mura runs after installation. This keeps the Mura instance lighter and more compartmentalized, and allows for maintenance of the default Mura theme as a separate project, with its own codebase.
...the transition isn't anywhere near as traumatic as it seems.
While there is a lot to know about the GDPR, you can ensure compliance with some new features in Mura:
Notification & Consent
The need for third-party widgets (or asking your dev team to create them) in order to add full-screen overlays, modal windows, slide out drawers and bars to specific calls-to-action or alerts is now a thing of the past. All of these are now built into Mura and can easily be added via drag-and-drop using the Mura layout manager. They become even more powerful when you use them with Mura's personalization engine.
This free, one-hour webinar by Blueriver founding partners Matt Levine and Sean Schroeder offers a casual, informative look at the new features and overall approach in Mura 7.1, and the thinking that led to the latest advancements.
All documentation has been updated specifically for Mura 7.1, with an expanded level of detail and comprehensive breakdowns of key functions and settings.
If you're ready for a deep dive and want to get up to speed quickly, sign up for our November training. We offer three courses - Content Manager (one day), Theme Development (one day), Developer (three days).- with a discount rate for groups, or for anyone attending all five days.
The era of artisan "assemble everything by hand" technology stacks, just so you can get your website up and running - and having to do this on every single one of your team's local systems - is over.
The nice thing is, the transition isn't anywhere near as traumatic as it seems.
At Blueriver, the Docker-first approach has enabled us to make vast improvements in our own organization, in time spent developing and debugging, in coordinating work between teams spread across wide geographic locations, in delivering testable applications to clients and stakeholders, and in managing and supporting websites once deployed. Often these improvements came so quickly and easily, it was hard to appreciate until months later, when we realized how much simpler everything was coming together.
Immutable Infrastructure is a big technical concept, and can be a bit intimidating when looked at from on high. The fact is, you can finally achieve it without having to greatly adapt your current routines. We've worked hard at making Mura 7.1 the kind of application that will fit in with the modern infrastructure and reduce the barriers between where you are and what you want to achieve.