= Architecture = Sahana Eden uses the MVC (Model-View-Controller) design with a [wiki:S3#RESTfulAPI WebServices] architecture == Conceptual View == Sahana Eden is a highly flexible tool which is used in many different scenarios, so there is no single conceptual view. This varies heavily between deployments. == Module View == Sahana Eden is designed to be deployed flexibly from lightweight laptop installs to highly-available cloud deployments, so it supports a range of stacks. ||Web Server || Apache || Other web servers can also be used, such as Cherokee. || ||Application || Sahana Eden |||| ||Web Application Framework || Web2Py |||| ||Programming Language || Python & Java Script |||| ||Database || MySQL, PostgreSQL, or SQLite || MySQL, PostgreSQL, and SQLite are supported. Other databases should be usable without major additional work since Web2Py supplies many connectors. || ||Operating System|| Linux (Debian recommended) || Windows and Mac OS X are possible, but only recommended for developer & single-user environments. || [[Image(https://eden.sahanafoundation.org/raw-attachment/wiki/DeveloperGuidelines/Architecture/Architecture.png)]] [[Image(https://eden.sahanafoundation.org/raw-attachment/wiki/DeveloperGuidelines/Architecture/Sahana%20Architecture.png)]] == Execution View == Being a lightweight system, most Sahana deployments are simple Client-Server: * A single (usually Virtual) Server contains the 3 tiers of Web, Application & Database If there is a need to scale beyond this, then the 3 tiers can be separated onto different servers, each of which can be duplicated for performance & redundancy: * InstallationGuidelines/Cluster == Code View == Sahana Eden uses the MVC (Model-View-Controller) design Folder layout is shown here: * http://en.flossmanuals.net/sahana-eden/installation/ Note: Models are actually stored in {{{modules/s3db}}} to allow conditional loading. === Builds === Since Python is an interpreted language, there isn't a need to do builds when editing Python code on a developer machine. There is a 'compile' script for server-based deployments and CSS/JS are minified using their build script: * DeveloperGuidelines/Minify Compile & Builds are quick (<1 min & <5 mins) === Release Process === * SysAdmin/ReleaseProcess === Testing === Testing is done using !UnitTest, Twill, Selenium and Travis CI: * DeveloperGuidelines/Testing === Data Model === ==== ER Diagrams ==== We don't maintain ER diagrams for the whole system as it would be too large to be meaningful. Instead we recommend building your own for the relevant modules for your deployment using one of these tools: * MySQL Workbench * dbwrench (for PostgreSQL) ==== !Key/Value Tables ==== In order to allow extensibility of the core schema, many resources have key/value 'tag' tables associated with them. This allows supporting many different coding schemes at the same time and could allow interop with triple-store databases via RDF. ---- DeveloperGuidelines [wiki:S3 S3 API Guide]