SlideShare a Scribd company logo
1 of 49
Download to read offline
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
6Innomatic 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
7Innomatic 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
8Innomatic Platform
Innoma4c	
  strategy:	
  
Mul,-­‐Tenant	
  code	
  	
  +	
  	
  Single	
  Tenant	
  databases	
  
Frustrated Sysadmin/Developer
9Innomatic Platform
Innomatic = Innovation + AUTOMATIC
Innomatic handles this for you
Deployment and update tasks are
automatized by Innomatic for each tenant
10Innomatic 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
11Innomatic 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>info@innomatic.io</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>support@innomatic.io</supportemail>
<bugsemail>bugs@innomatic.io</bugsemail>
<maintainer>
<name>Alex Pagnoni</name>
<email>alex.pagnoni@innomatic.io</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 InnomaticDesktopPanelPanelViews
{
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 InnomaticDesktopPanelPanelActions {
public function __construct(InnomaticDesktopPanelPanelController $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).
25Innomatic Platform
Tenant Desktop Dashboard
26Innomatic Platform
Some applications built with Innowork: Tasks
27Innomatic Platform
Tickets
28Innomatic Platform
Kanban
29Innomatic Platform
A CMS built with Innomedia CMF- 1/3
30Innomatic Platform
Innomedia – 2/3
31Innomatic Platform
Innomedia – 3/3
32Innomatic Platform
Multi-Tenant deployable web sites with Innomedia
An example: Winenot
33Innomatic Platform
Winenot SaaS provider: applications
34Innomatic Platform
Winenot tenants examples
35Innomatic Platform
Winenot tenants with different web site themes
36Innomatic 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
43Innomatic Platform
Creating a Tenant
44Innomatic Platform
Managing Applications
45Innomatic Platform
Enabling an application to a tenant
46Innomatic Platform
Updating / Downgrading Applications
47Innomatic 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>
48Innomatic Platform
Thanks!
Free Innomatic
Basic Developer
training slides for
Cloud Conf
attendees here:
49Innomatic Platform
http://cloudconf.innomatic.io

More Related Content

What's hot

From framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytvFrom framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytvCodelyTV
 
Scaling up task processing with Celery
Scaling up task processing with CeleryScaling up task processing with Celery
Scaling up task processing with CeleryNicolas Grasset
 
How Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for PerformanceHow Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for PerformanceBrendan Gregg
 
Scalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureScalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureNicholas Zakas
 
Kali linux useful tools
Kali linux useful toolsKali linux useful tools
Kali linux useful toolsmilad mahdavi
 
Deploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and KubernetesDeploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and KubernetesPetteriTeikariPhD
 
NextJS, A JavaScript Framework for building next generation SPA
NextJS, A JavaScript Framework for building next generation SPA  NextJS, A JavaScript Framework for building next generation SPA
NextJS, A JavaScript Framework for building next generation SPA Pramendra Gupta
 
(PFC306) Performance Tuning Amazon EC2 Instances | AWS re:Invent 2014
(PFC306) Performance Tuning Amazon EC2 Instances | AWS re:Invent 2014(PFC306) Performance Tuning Amazon EC2 Instances | AWS re:Invent 2014
(PFC306) Performance Tuning Amazon EC2 Instances | AWS re:Invent 2014Amazon Web Services
 
스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴Sanghyuk Jung
 
Getting Started with IT Service Intelligence
Getting Started with IT Service IntelligenceGetting Started with IT Service Intelligence
Getting Started with IT Service IntelligenceSplunk
 
Threat Hunting with Elastic at SpectorOps: Welcome to HELK
Threat Hunting with Elastic at SpectorOps: Welcome to HELKThreat Hunting with Elastic at SpectorOps: Welcome to HELK
Threat Hunting with Elastic at SpectorOps: Welcome to HELKElasticsearch
 
Microservices Testing Strategies JUnit Cucumber Mockito Pact
Microservices Testing Strategies JUnit Cucumber Mockito PactMicroservices Testing Strategies JUnit Cucumber Mockito Pact
Microservices Testing Strategies JUnit Cucumber Mockito PactAraf Karsh Hamid
 
Monitoring and Scaling Redis at DataDog - Ilan Rabinovitch, DataDog
 Monitoring and Scaling Redis at DataDog - Ilan Rabinovitch, DataDog Monitoring and Scaling Redis at DataDog - Ilan Rabinovitch, DataDog
Monitoring and Scaling Redis at DataDog - Ilan Rabinovitch, DataDogRedis Labs
 
Microservices design patterns
Microservices design patternsMicroservices design patterns
Microservices design patternsMasashi Narumoto
 
Pragmatic CQRS with existing applications and databases (Digital Xchange, May...
Pragmatic CQRS with existing applications and databases (Digital Xchange, May...Pragmatic CQRS with existing applications and databases (Digital Xchange, May...
Pragmatic CQRS with existing applications and databases (Digital Xchange, May...Lucas Jellema
 
Designing APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignDesigning APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignLaunchAny
 
IT Automation with Ansible
IT Automation with AnsibleIT Automation with Ansible
IT Automation with AnsibleRayed Alrashed
 
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 -  Part1: Kotlin 語法介紹炎炎夏日學 Android 課程 -  Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹Johnny Sung
 

What's hot (20)

From framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytvFrom framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytv
 
Scaling up task processing with Celery
Scaling up task processing with CeleryScaling up task processing with Celery
Scaling up task processing with Celery
 
Introducing Kogito
Introducing KogitoIntroducing Kogito
Introducing Kogito
 
How Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for PerformanceHow Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for Performance
 
Scalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureScalable JavaScript Application Architecture
Scalable JavaScript Application Architecture
 
Kali linux useful tools
Kali linux useful toolsKali linux useful tools
Kali linux useful tools
 
Deploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and KubernetesDeploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and Kubernetes
 
NextJS, A JavaScript Framework for building next generation SPA
NextJS, A JavaScript Framework for building next generation SPA  NextJS, A JavaScript Framework for building next generation SPA
NextJS, A JavaScript Framework for building next generation SPA
 
(PFC306) Performance Tuning Amazon EC2 Instances | AWS re:Invent 2014
(PFC306) Performance Tuning Amazon EC2 Instances | AWS re:Invent 2014(PFC306) Performance Tuning Amazon EC2 Instances | AWS re:Invent 2014
(PFC306) Performance Tuning Amazon EC2 Instances | AWS re:Invent 2014
 
스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴
 
Getting Started with IT Service Intelligence
Getting Started with IT Service IntelligenceGetting Started with IT Service Intelligence
Getting Started with IT Service Intelligence
 
Threat Hunting with Elastic at SpectorOps: Welcome to HELK
Threat Hunting with Elastic at SpectorOps: Welcome to HELKThreat Hunting with Elastic at SpectorOps: Welcome to HELK
Threat Hunting with Elastic at SpectorOps: Welcome to HELK
 
Microservices Testing Strategies JUnit Cucumber Mockito Pact
Microservices Testing Strategies JUnit Cucumber Mockito PactMicroservices Testing Strategies JUnit Cucumber Mockito Pact
Microservices Testing Strategies JUnit Cucumber Mockito Pact
 
Monitoring and Scaling Redis at DataDog - Ilan Rabinovitch, DataDog
 Monitoring and Scaling Redis at DataDog - Ilan Rabinovitch, DataDog Monitoring and Scaling Redis at DataDog - Ilan Rabinovitch, DataDog
Monitoring and Scaling Redis at DataDog - Ilan Rabinovitch, DataDog
 
Microservices design patterns
Microservices design patternsMicroservices design patterns
Microservices design patterns
 
Pragmatic CQRS with existing applications and databases (Digital Xchange, May...
Pragmatic CQRS with existing applications and databases (Digital Xchange, May...Pragmatic CQRS with existing applications and databases (Digital Xchange, May...
Pragmatic CQRS with existing applications and databases (Digital Xchange, May...
 
Secure Code Review 101
Secure Code Review 101Secure Code Review 101
Secure Code Review 101
 
Designing APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignDesigning APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven Design
 
IT Automation with Ansible
IT Automation with AnsibleIT Automation with Ansible
IT Automation with Ansible
 
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 -  Part1: Kotlin 語法介紹炎炎夏日學 Android 課程 -  Part1: Kotlin 語法介紹
炎炎夏日學 Android 課程 - Part1: Kotlin 語法介紹
 

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

Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con InnomaticCostruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con InnomaticInnoteam Srl
 
The fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose ReactThe fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose ReactOliver N
 
Android 3.0 Portland Java User Group 2011-03-15
Android 3.0 Portland Java User Group 2011-03-15Android 3.0 Portland Java User Group 2011-03-15
Android 3.0 Portland Java User Group 2011-03-15sullis
 
Android 3.1 - Portland Code Camp 2011
Android 3.1 - Portland Code Camp 2011Android 3.1 - Portland Code Camp 2011
Android 3.1 - Portland Code Camp 2011sullis
 
Introduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R ShinyIntroduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R Shinyanamarisaguedes
 
Pragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecturePragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecturePiotr Pelczar
 
SenchaCon 2016: Enterprise Applications, Role Based Access Controls (RBAC) an...
SenchaCon 2016: Enterprise Applications, Role Based Access Controls (RBAC) an...SenchaCon 2016: Enterprise Applications, Role Based Access Controls (RBAC) an...
SenchaCon 2016: Enterprise Applications, Role Based Access Controls (RBAC) an...Sencha
 
Rits Brown Bag - Salesforce Lightning
Rits Brown Bag - Salesforce LightningRits Brown Bag - Salesforce Lightning
Rits Brown Bag - Salesforce LightningRight IT Services
 
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Juliano Martins
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Eliran Eliassy
 
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010Heiko Behrens
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web ComponentsRed Pill Now
 
Practical Dynamic Actions - Intro
Practical Dynamic Actions - IntroPractical Dynamic Actions - Intro
Practical Dynamic Actions - IntroJorge Rimblas
 
Bootstrapping an App for Launch
Bootstrapping an App for LaunchBootstrapping an App for Launch
Bootstrapping an App for LaunchCraig Phares
 
Take Your XPages Development to the Next Level
Take Your XPages Development to the Next LevelTake Your XPages Development to the Next Level
Take Your XPages Development to the Next Levelbalassaitis
 
Busy Developer's Guide to Windows 8 HTML/JavaScript Apps
Busy Developer's Guide to Windows 8 HTML/JavaScript AppsBusy Developer's Guide to Windows 8 HTML/JavaScript Apps
Busy Developer's Guide to Windows 8 HTML/JavaScript AppsJAX London
 
Android apps development
Android apps developmentAndroid apps development
Android apps developmentMonir Zzaman
 
Android - Open Source Bridge 2011
Android - Open Source Bridge 2011Android - Open Source Bridge 2011
Android - Open Source Bridge 2011sullis
 
V Legakis Presentation
V Legakis PresentationV Legakis Presentation
V Legakis PresentationVLegakis
 

Similar to Building Multi-Tenant and SaaS products in PHP - CloudConf 2015 (20)

Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con InnomaticCostruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
Costruire applicazioni multi-tenant e piattaforme SaaS in PHP con Innomatic
 
The fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose ReactThe fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose React
 
Android 3.0 Portland Java User Group 2011-03-15
Android 3.0 Portland Java User Group 2011-03-15Android 3.0 Portland Java User Group 2011-03-15
Android 3.0 Portland Java User Group 2011-03-15
 
Android 3.1 - Portland Code Camp 2011
Android 3.1 - Portland Code Camp 2011Android 3.1 - Portland Code Camp 2011
Android 3.1 - Portland Code Camp 2011
 
Introduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R ShinyIntroduction to interactive data visualisation using R Shiny
Introduction to interactive data visualisation using R Shiny
 
Pragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecturePragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecture
 
SenchaCon 2016: Enterprise Applications, Role Based Access Controls (RBAC) an...
SenchaCon 2016: Enterprise Applications, Role Based Access Controls (RBAC) an...SenchaCon 2016: Enterprise Applications, Role Based Access Controls (RBAC) an...
SenchaCon 2016: Enterprise Applications, Role Based Access Controls (RBAC) an...
 
Rits Brown Bag - Salesforce Lightning
Rits Brown Bag - Salesforce LightningRits Brown Bag - Salesforce Lightning
Rits Brown Bag - Salesforce Lightning
 
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics
 
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
 
Clean Architecture @ Taxibeat
Clean Architecture @ TaxibeatClean Architecture @ Taxibeat
Clean Architecture @ Taxibeat
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web Components
 
Practical Dynamic Actions - Intro
Practical Dynamic Actions - IntroPractical Dynamic Actions - Intro
Practical Dynamic Actions - Intro
 
Bootstrapping an App for Launch
Bootstrapping an App for LaunchBootstrapping an App for Launch
Bootstrapping an App for Launch
 
Take Your XPages Development to the Next Level
Take Your XPages Development to the Next LevelTake Your XPages Development to the Next Level
Take Your XPages Development to the Next Level
 
Busy Developer's Guide to Windows 8 HTML/JavaScript Apps
Busy Developer's Guide to Windows 8 HTML/JavaScript AppsBusy Developer's Guide to Windows 8 HTML/JavaScript Apps
Busy Developer's Guide to Windows 8 HTML/JavaScript Apps
 
Android apps development
Android apps developmentAndroid apps development
Android apps development
 
Android - Open Source Bridge 2011
Android - Open Source Bridge 2011Android - Open Source Bridge 2011
Android - Open Source Bridge 2011
 
V Legakis Presentation
V Legakis PresentationV Legakis Presentation
V Legakis Presentation
 

Recently uploaded

Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 

Recently uploaded (20)

Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 

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

  • 3. 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
  • 4. 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
  • 5. Building multi-tenant apps and SaaS products in Innomatic 5
  • 6. Building new SaaS: Classic vs Innomatic approach 6Innomatic 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  
  • 7. Innomatic Layers 7Innomatic 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  
  • 8. Multi-Tenancy in Innomatic 8Innomatic Platform Innoma4c  strategy:   Mul,-­‐Tenant  code    +    Single  Tenant  databases  
  • 10. Innomatic = Innovation + AUTOMATIC Innomatic handles this for you Deployment and update tasks are automatized by Innomatic for each tenant 10Innomatic Platform
  • 11. 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 11Innomatic Platform
  • 12. 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
  • 13. <?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
  • 14. <legal> <author> <name>Innomatic Company</name> <email>info@innomatic.io</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>support@innomatic.io</supportemail> <bugsemail>bugs@innomatic.io</bugsemail> <maintainer> <name>Alex Pagnoni</name> <email>alex.pagnoni@innomatic.io</email> </maintainer> </support> </definition> The application.xml file 2/3 – Meta data part 2 Innomatic Platform 14
  • 15. <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  
  • 16. 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
  • 17. Applications may also define their own component types that can be used by other applications. Extending Component Types Innomatic Platform 17
  • 18. 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
  • 19. 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" />
  • 20. class BasicappPanelViews extends InnomaticDesktopPanelPanelViews { 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
  • 21. class BasicappPanelActions extends InnomaticDesktopPanelPanelActions { public function __construct(InnomaticDesktopPanelPanelController $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
  • 22. <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
  • 23. Web User Interface example Innomatic Platform 23
  • 24. Some Real Life Tenant Applications 24
  • 25. 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). 25Innomatic Platform
  • 27. Some applications built with Innowork: Tasks 27Innomatic Platform
  • 30. A CMS built with Innomedia CMF- 1/3 30Innomatic Platform
  • 33. Multi-Tenant deployable web sites with Innomedia An example: Winenot 33Innomatic Platform
  • 34. Winenot SaaS provider: applications 34Innomatic Platform
  • 36. Winenot tenants with different web site themes 36Innomatic Platform
  • 37. Customizing look for SaaS providers: Desktop Themes Innomatic Platform 37
  • 38. <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
  • 39. Customizing look: Saas Provider settings Innomatic Platform 39
  • 41. Another desktop customization example Innomatic Platform 41
  • 46. Enabling an application to a tenant 46Innomatic Platform
  • 47. Updating / Downgrading Applications 47Innomatic Platform
  • 48. 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> 48Innomatic Platform
  • 49. Thanks! Free Innomatic Basic Developer training slides for Cloud Conf attendees here: 49Innomatic Platform http://cloudconf.innomatic.io