Hi Everyone,
We are developing an application using mostly Liferay out-of-the-box (OOTB) features and very little custom backend development. Our implementation heavily relies on features such as:
-
Fragments
-
Objects
-
Categories and Tags
-
Workflows
-
Notification Templates
-
Pages and Page Hierarchies
-
Object Actions
-
Custom Fields (Expando)
-
Widget/Page Configurations
-
Other low-code/no-code Liferay capabilities
To manage deployments across environments, we export the site configurations and maintain them within a Liferay Workspace that is version controlled using Git.
However, we have noticed that some configurations are not fully covered by export/import mechanisms or Site Initializers. Examples include:
-
Certain Object Action configurations
-
Portlet Preferences and widget-level configurations on pages
-
Fragment configuration values
-
Some instance/site-level settings
-
Other configurations that are created through the UI and are not easily exportable
Our long-term goal is to support a multi-tenant architecture where new Virtual Instances can be provisioned automatically with the same baseline configuration. We would like to:
-
Store as much configuration as possible in Git.
-
Track changes to configurations through version control.
-
Automate tenant provisioning without requiring manual UI configuration.
-
Ensure consistent deployments across environments and virtual instances.
My questions are:
-
What are the recommended approaches for managing and version controlling OOTB Liferay configurations that are not included in standard exports?
-
How do teams typically manage Portlet Preferences and widget configurations in source control?
-
Are there recommended patterns for handling Object Actions and other non-exportable configurations?
-
Is there a preferred combination of Site Initializers, Client Extensions, Configuration Files, Upgrade Processes, or APIs to automate these setups?
-
How do organizations maintain configuration drift and change tracking when most of the application is built using Liferay’s low-code features?
Any guidance, best practices, or real-world examples would be greatly appreciated.
Thank you.