Building Multi-Tenant and SaaS products in PHP - CloudConf 2015

49
Building Multi-Tenant and SaaS products in PHP

Transcript of Building Multi-Tenant and SaaS products in PHP - CloudConf 2015

Building Multi-Tenant and SaaS products in PHP

What  is  Innoma,c?  

2

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

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

Building multi-tenant apps and SaaS products in Innomatic

5

Building new SaaS: Classic vs Innomatic approach

6 Innomatic Platform

Go  live!  

Classic  life  cycle  

Innoma,c  life  cycle  

Learn  and  configure  Innoma4c  

+  4me  +  budget  

to  develop  &  market  the  app  

Innomatic Platform

Go  live!  (late…)  

Develop  infrastructure  (mul4  tenancy,  build  system,  

billing  tools,  CRM,  etc.)  

-­‐  Time  -­‐  budget  

to  develop  &  market  the  app  

Opt.:  Innomedia  CMF  for  web  sites  +  Innowork  BAF  for  intranets  

Innomatic Layers

7 Innomatic Platform

Debug  

Tenant  Web  Apps  

HTTP  Kernel   File  system   Rou4ng  

Cache   Localiza4on   Logging   Web  services  Symfony  

Components  based  deploy  and  tasks   AppCentral  

Root  Desktop   Tenant  Desktop   Panels  /  Web  User  Interface  

Dependency  Injec4on   Database  /  ORM   Templa4ng   Class  Loader  

Mul4  tenancy   Applica4ons  container   Tenant  Users  /  RBAC  

Packages  Composer  

Innoma4c  

Innomedia  CMF   Innowork  BAF   SaaS  tools  (billing,  CRM,  4ckets,  …)  

Other  major  Frameworks  and  tools  

PLATFORM  

Multi-Tenancy in Innomatic

8 Innomatic Platform

Innoma4c  strategy:  Mul,-­‐Tenant  code    +    Single  Tenant  databases  

Frustrated Sysadmin/Developer

9 Innomatic Platform

Innomatic = Innovation + AUTOMATIC

Innomatic handles this for you

Deployment and update tasks are automatized by Innomatic for each tenant

10 Innomatic Platform

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

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

<?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

<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

<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  

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

Applications may also define their own component types that can be used by other applications.

Extending Component Types

Innomatic Platform 17

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

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" />

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

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

<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

Web User Interface example

Innomatic Platform 23

Some Real Life Tenant Applications

24

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

Tenant Desktop Dashboard

26 Innomatic Platform

Some applications built with Innowork: Tasks

27 Innomatic Platform

Tickets

28 Innomatic Platform

Kanban

29 Innomatic Platform

A CMS built with Innomedia CMF- 1/3

30 Innomatic Platform

Innomedia – 2/3

31 Innomatic Platform

Innomedia – 3/3

32 Innomatic Platform

Multi-Tenant deployable web sites with Innomedia An example: Winenot

33 Innomatic Platform

Winenot SaaS provider: applications

34 Innomatic Platform

Winenot tenants examples

35 Innomatic Platform

Winenot tenants with different web site themes

36 Innomatic Platform

Customizing look for SaaS providers: Desktop Themes

Innomatic Platform 37

<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

Customizing look: Saas Provider settings

Innomatic Platform 39

Simple customization example

Innomatic Platform 40

Another desktop customization example

Innomatic Platform 41

Managing Tenants and Applications from the Root Desktop

42

Managing Tenants

43 Innomatic Platform

Creating a Tenant

44 Innomatic Platform

Managing Applications

45 Innomatic Platform

Enabling an application to a tenant

46 Innomatic Platform

Updating / Downgrading Applications

47 Innomatic Platform

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

Thanks!

Free Innomatic Basic Developer training slides for Cloud Conf attendees here:

49 Innomatic Platform

http://cloudconf.innomatic.io