Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building Multi-tenant and SaaS products in PHP

Building Multi-tenant and SaaS products in PHP

Let’s look at how you can build multi-tenant applications and SaaS products in PHP faster and better with the open source Innomatic Platform.

We will take a look at how to easily build a scalable infrastructure, integrating Innomatic with Amazon AWS. We will also see how Innomatic brings developers and system administrators a continuous delivery approach in a DevOp fashion.

Salvatore Pollaci

March 19, 2015
Tweet

More Decks by Salvatore Pollaci

Other Decks in Programming

Transcript

  1. First of all: what is NOT Innomatic? Innomatic is NOT

    a framework like Laravel or Symfony – in fact, we are progressively migrating to a system based on Symfony components! 3
  2. So, what really is Innomatic? Innomatic is an open source

    platform for: developing, deploying and managing Multi-Tenant and SaaS web applications in PHP 4
  3. Building new SaaS: Classic vs Innomatic approach 6 Innomatic Platform

    Go live! Classic life cycle Innomatic life cycle Learn and configure Innomatic + time + budget to develop & market the app Innomatic Platform Go live! (late…) Develop infrastructure (multi tenancy, build system, billing tools, CRM, etc.) - Time - budget to develop & market the app Opt.: Innomedia CMF for web sites + Innowork BAF for intranets
  4. Innomatic Layers 7 Innomatic Platform Debug Tenant Web Apps HTTP

    Kernel File system Routing Cache Localization Logging Web services Symfony Components based deploy and tasks AppCentral Root Desktop Tenant Desktop Panels / Web User Interface Dependency Injection Database / ORM Templating Class Loader Multi tenancy Applications container Tenant Users / RBAC Packages Composer Innomatic Innomedia CMF Innowork BAF SaaS tools (billing, CRM, tickets, …) Other major Frameworks and tools PLATFORM
  5. Innomatic = Innovation + AUTOMATIC Innomatic handles this for you

    Deployment and update tasks are automatized by Innomatic for each tenant 10 Innomatic Platform
  6. An Innomatic application is a set of components of the

    types supported by Innomatic or other Innomatic based applications: •  PHP classes, •  database tables, •  catalogues of localization strings, •  dashboard widgets, •  desktop UI elements, •  traybar items, •  maintenance tasks, •  etc. Structure of an Innomatic application 11 Innomatic Platform
  7. This is the core of Innomatic automation at runtime. Each

    component type defines the operation to be executed in the following phases: Innomatic components operations Innomatic Platform 12 Application: •  Deploy inside Innomatic •  Upgrade •  Undeploy Tenant: •  Enable component to the tenant •  Upgrade component in the tenant •  Disable component from the tenant
  8. <?xml version='1.0'?> <application> <definition> <idname>example-basic-app</idname> <release> <version>1.0.0</version> <date>2014/10/07</date> <changesfile>CHANGES</changesfile> </release>

    <description>Innomatic example: basic application</description> <category>examples</category> <iconfile></iconfile> <dependencies> <dependency>innomatic[6.4.0]</dependency> </dependencies> <options> <!-- <option></option> --> </options> The application.xml file 1/3 – Meta data part 1 Innomatic Platform 13
  9. <legal> <author> <name>Innomatic Company</name> <email>[email protected]</email> <web>http://www.innomatic.io/</web> </author> <copyright>Copyright (c) 2014

    Innomatic Company</copyright> <license>New BSD</license> <licensefile>LICENSE</licensefile> </legal> <support> <supportemail>[email protected]</supportemail> <bugsemail>[email protected]</bugsemail> <maintainer> <name>Alex Pagnoni</name> <email>[email protected]</email> </maintainer> </support> </definition> The application.xml file 2/3 – Meta data part 2 Innomatic Platform 14
  10. <components> <tempdir name="example-basic-app" /> <domaingroup name="examples" catalog="example-basic-app::misc" /> <domaintable name="example_basic_table"

    file="example_basic_table.xml" /> <domainpanel name="basicapp" catalog="example-basic-app::misc" category="examples" /> <catalog name="example-basic-app" /> <class name="examples/basic/BasicClass.php" /> </components> </application> The application.xml file 3/3 – Components Innomatic Platform 15 You can also use Composer for your classes
  11. You can also declare your dependencies to external packages using

    Composer: you only have to add your composer.json inside your application package. Since Innomatic is a platform and you deploy applications at runtime, Innomatic provides a recursive Composers dependencies feature with multiple composer.json from different Innomatic applications. Including classes and packages with Composer Innomatic Platform 16
  12. Applications may also define their own component types that can

    be used by other applications. Extending Component Types Innomatic Platform 17
  13. Normally Innomatic desktop applications are built up of various panels

    which provide an USER INTERFACE inside the Innomatic desktop. Panels & Panel Groups Innomatic Platform 18
  14. Declaring a Panel inside application.xml Innomatic Platform 19 <tempdir name="example-basic-app"

    /> <domaingroup name="examples" catalog="example-basic-app::misc" /> <domaintable name="example_basic_table" file="example_basic_table.xml" /> <domainpanel name="basicapp" catalog="example-basic-app::misc" category="examples" /> <catalog name="example-basic-app" /> <class name="examples/basic/BasicClass.php" />
  15. class BasicappPanelViews extends \Innomatic\Desktop\Panel\PanelViews { public function update($observable, $arg =

    '’) {} public function beginHelper() {} public function endHelper() {} public function viewDefault($eventData) { $this->tpl->set(’title', ‘Panel title’); } } Panel views – View code example Innomatic Platform 20
  16. class BasicappPanelActions extends \Innomatic\Desktop\Panel\PanelActions { public function __construct(\Innomatic\Desktop\Panel\PanelController $controller) {

    parent::__construct($controller); } public function beginHelper() {} public function endHelper() {} public function executeDeleteItem($eventData) { $this->dataAccess->execute(‘DELETE FROM my_items WHERE ID=‘.$eventData[‘id’]); } } Panel actions – Code example Innomatic Platform 21
  17. <form> <name>item</name> <args> <action><?=$editAction?></action> </args> <children> <grid> <children> <label row="0"

    col="0" halign="right"> <args> <label><?=$nameLabel?></label> </args> </label> <string row="0" col="1"> <name>name</name> <args> <disp>action</disp> <size>30</size> <value><?=$nameValue?></value> </args> </string> Web User Interface (WUI) Innomatic Platform 22
  18. Tenant Desktops and Web Apps Tenants have 2 types of

    interfaces: Tenant Desktop A web desktop with a standard GUI for backoffice applications accessible via a login panel. e.g. intranet, enterprise applications Web App An interface for external web applications with a chained router e.g. public web sites, extranets The Tenant Desktop and the Web App share the same database and can interact (e.g. you may have a CMS inside the Desktop for managing the Web App content). 25 Innomatic Platform
  19. <wuitheme name="flattheme" file="flattheme_wuitheme.ini" catalog="innomatic::flattheme" /> <wuicolorsset name="flattheme" file="flattheme_wuicolorsset.ini” catalog="innomatic::flattheme" />

    <wuistyle name="flattheme" file="flattheme_wuistyle.ini" catalog="innomatic::flattheme" /> <wuiiconsset name="subway" file="subway_wuiiconsset.ini" catalog="innomatic::flattheme" /> Declaring new themes in application.xml Innomatic Platform 38
  20. You can also do it inside PHP and CLI scripts

    Creating a tenant from CLI: php core/scripts/tenant.php create <tenant_name> <description> <admin_password> Deploying an application from CLI: php core/scripts/application.php deploy <application_archive.tgz> Enabling an application to a tenant from CLI: php core/scripts/tenant.php appenable <tenantname> <appname> 48 Innomatic Platform
  21. Thanks! Free Innomatic Basic Developer training slides for Cloud Conf

    attendees here: 49 Innomatic Platform http://cloudconf.innomatic.io