Spotter-VM/doc/existing/tech-overview.md

317 lines
11 KiB
Markdown

# Overview of technological requirements
## Basic system
Components which are installed directly as part of the basic virtual machine.
### Alpine linux
- **General description:** Operating system
- **Tech. description:** Lightweight linux distribution based on musl C libraries
- **Depends on:** -
- **Used by:** Everything
- **Related skills:** EXTLINUX / ISOLINUX, git, linux administration (cron, filesystems, iptables, networking, user/group mgmt etc.), LUKS, LVM, OpenRC init system, POSIX standards, s6 init system, shell scripting
### Acme.sh
- **General description:** Certificate renewal tool
- **Tech. description:** Shell-based Automated Certificate Management Environment client
- **Depends on:** -
- **Used by:** nginx, VMMgr
- **Related skills:** shell scripting, SSL/TLS
### Nginx
- **General description:** Web server
- **Tech. description:** Lightweight HTTP server
- **Depends on:** -
- **Used by:** All application containers, VMMgr
- **Related skills:** HTTP (proxying, rewriting)
### LXC
- **General description:** Container virtualization host
- **Tech. description:** Operating system-level container virtualization host
- **Depends on:** -
- **Used by:** All containers
- **Related skills:** container virtualization fundamentals, linux kernel (cgroups, overlayfs, seccomp), shell scripting
### Postfix
- **General description:** Mail server
- **Tech. description:** Outbound mail transfer agent
- **Depends on:** -
- **Used by:** All application containers
- **Related skills:** SMTP
### VMMgr
- **General description:** Virtual machine and application manager web interface
- **Tech. description:** In-house Werkzeug-based virtual machine and application manager WSGI application
- **Depends on:** Nginx, LXC, Python 3
- **Used by:** User
- **Related skills:** JSON, python 3 frameworks and modules (cryptography, jinja2, requests, subprocess, werkzeug), shell scripting, WSGI application development
## Runtimes
Components which are supplied as LXC overlay layers but don't run as standalone containers
### Java
- **General description:** Java runtime environment
- **Tech. description:** Java OpenJDK 8 runtime environment
- **Depends on:** -
- **Used by:** ActiveMQ, FrontlineSMS, Tomcat, CrisisCleanup, MifosX, Motech, OpenDataKit, OpenMapKit, Sigmah, Solr
- **Related skills:** -
### Node.js
- **General description:** JavaScript runtime environment
- **Tech. description:** Server-side Node.js 8 JavaScript runtime environment
- **Depends on:** -
- **Used by:** CrisisCleanup, GNU Health, Odoo, OpenDataKit Build, OpenMapKit
- **Related skills:** HTTP (proxying), JavaScript (language overview)
### PHP
- **General description:** PHP 7 runtime environment
- **Tech. description:** PHP 7 hypertext preprocessor scripting runtime
- **Depends on:** -
- **Used by:** KanBoard, SeedDMS, Ushahidi
- **Related skills:** HTTP (proxying), PHP 7 (language overview), PHP-FPM
### Python 2
- **General description:** Python 2 runtime environment
- **Tech. description:** Python 2 runtime environemnt and standard libraries
- **Depends on:** -
- **Used by:** CKAN, CKAN DataPusher, CTS, OpenMapKit, Sahana Eden
- **Related skills:** linux compilation toolchain (header files, gcc, make etc.), pip, python (language overview)
### Python 3
- **General description:** Python 3 runtime environment
- **Tech. description:** Python 3 runtime environemnt and standard libraries
- **Depends on:** -
- **Used by:** GNU Health, Odoo, Pan.do/ra, SeedDMS, VMMgr (doesn't use container)
- **Related skills:** linux compilation toolchain (header files, gcc, make etc.), pip, python (language overview)
### Ruby
- **General description:** Ruby runtime environment
- **Tech. description:** Ruby 2.4 runtime environment and gem package installer
- **Depends on:** -
- **Used by:** CrisisCleanup, OpenDataKit Build
- **Related skills:** linux compilation toolchain (header files, gcc, make etc.)
### Tomcat
- **General description:** Lightweight Java application server
- **Tech. description:** Java application JSP and servlet container
- **Depends on:** Java
- **Used by:** MifosX, Motech, OpenDataKit, Sigmah
- **Related skills:** JVM tuning, shell scripting
## Components
Components which are supplied as LXC containers required by other applications but aren't exposed directly to the end user
### ActiveMQ
- **General description:** Message broker middleware
- **Tech. description:** Java-based message broker and messaging server
- **Depends on:** Java
- **Used by:** Motech
- **Related skills:** JVM tuning, XML
### MariaDB
- **General description:** MySQL database server
- **Tech. description:** MySQL-compatible relational database management system
- **Depends on:** -
- **Used by:** MifosX, Ushahidi
- **Related skills:** SQL (language overview)
### Postgres
- **General description:** PostgreSQL database server
- **Tech. description:** PostgreSQL relational database management system
- **Depends on:** -
- **Used by:** CKAN, CrisisCleanup, CTS, GNU Health, KanBoard, Motech, Odoo, OpenDataKit, OpenDataKit Build, OpenMapKit, Pan.do/ra, Sahana Eden, SeedDMS, Sigmah
- **Related skills:** SQL (language overview)
### RabbitMQ
- **General description:** Message broker middleware
- **Tech. description:** Erlang-based message broker and messaging server
- **Depends on:** -
- **Used by:** Pan.do/ra
- **Related skills:** -
### Redis
- **General description:** Key-value NoSQL database server
- **Tech. description:** In-memory NoSQL key-value data structure object store
- **Depends on:** -
- **Used by:** CKAN
- **Related skills:** -
### Solr
- **General description:** Full-text search server
- **Tech. description:** Apache Lucene-based full-text search and indexing platform
- **Depends on:** Java
- **Used by:** CKAN
- **Related skills:** shell scripting, JVM tuning
## Applications
Components which are supplied as LXC containers exposed directly to the end user
### CKAN
- **General description:** Data management and data store system
- **Tech. description:** Flask-based data store application
- **Depends on:** CKAN DataPusher, Postgres, Python 2, Redis, Solr
- **Used by:** User
- **Related skills:** PostGIS, python frameworks and modules (flask, paster, setuptools), Solr core configuration
### CKAN DataPusher
- **General description:** Data file parser for CKAN
- **Tech. description:** Python-based data file parser service for CKAN
- **Depends on:** Python 2
- **Used by:** CKAN
- **Related skills:** MIME types identification, WSGI application development
### CrisisCleanup
- **General description:** Disaster response and relief coordination
- **Tech. description:** Ruby-on-Rails-based application with Node.js-generated frontend assets
- **Depends on:** LibXML, Node.js, Postgres, Ruby
- **Used by:** User
- **Related skills:** Node.js build systems (npm, yarn), Ruby build systems and frameworks (Bundle, Devise, Gems, Rails, Rake)
### CTS
- **General description:** Commodity tracking system
- **Tech. description:** Django-based forms applicaton
- **Depends on:** Postgres, Python 2
- **Used by:** User
- **Related skills:** python frameworks (Django), WSGI application development
### FrontlineSMS
- **General description:** Bulk text messaging
- **Tech. description:** Spring-based application for modem device access
- **Depends on:** Java
- **Used by:** User
- **Related skills:** Java build systems and frameworks (grails, Spring), Jetty, linux modem/tty handling, Xorg (X server)
### GNU Health
- **General description:** Hospital information system (ERP)
- **Tech. description:** Tryton-based form application RPC backend with Node.js-based frontend
- **Depends on:** Node.js, Postgres, Python3
- **Used by:** User
- **Related skills:** Node.js build systems (grunt, npm), python modules (setuptools, virtualenv)
### KanBoard
- **General description:** Kanban project management
- **Tech. description:** Symfony-based forms application
- **Depends on:** PHP, Postgres
- **Used by:** User
- **Related skills:** PHP build systems and frameworks (Composer, Symfony)
### MifosX
- **General description:**
- **Tech. description:** Spring-based forms application RPC backend with Node.js-packed frontend
- **Depends on:** MariaDB, Tomcat
- **Used by:** User
- **Related skills:** Java frameworks (Spring), Node.js and JavaScript development (Angular, Bower, Grunt)
### Motech
- **General description:**
- **Tech. description:** Apache Felix-based forms application
- **Depends on:** ActiveMQ, Postgres, Tomcat
- **Used by:** User
- **Related skills:** Java frameworks (Apache Felix, Spring)
### Odoo
- **General description:**
- **Tech. description:** Werkzeug-based forms application RPC backend with Node.js-based frontend
- **Depends on:** Node.js, Postgres, Python 3
- **Used by:** User
- **Related skills:** WSGI application development
### OpenDataKit
- **General description:**
- **Tech. description:** Spring and OpenRosa-based data store application
- **Depends on:** Postgres, Tomcat
- **Used by:** User
- **Related skills:** Java build systems and frameworks (Gradle, Spring)
### OpenDataKit Build
- **General description:**
- **Tech. description:** Ruby-based forms application with Node.js-based data converter
- **Depends on:** Node.js, Ruby
- **Used by:** User
- **Related skills:** Node.js build systems (npm), Ruby build systems and frameworks (Bundler, Rake)
### OpenMapKit
- **General description:**
- **Tech. description:** Node.js-based forms application with python2 dependencies
- **Depends on:** Node.js, Postgres, Python 2
- **Used by:** User
- **Related skills:** JavaScript development, Node.js build systems (Yarn)
### Pan.do/ra
- **General description:**
- **Tech. description:** Python-based media store with Javascript-based frontend
- **Depends on:** Postgres, Python 3, RabbitMQ
- **Used by:** User
- **Related skills:** ffmpeg, imagemagick, JavaScript development (oxjs)
### Sahana Eden
- **General description:**
- **Tech. description:** Web2py-based forms application
- **Depends on:** Postgres, Python 2
- **Used by:** User
- **Related skills:** PostGIS, python frameworks and modules (requests, selenium, Web2py)
### SeedDMS
- **General description:**
- **Tech. description:** PHP-based data store application with Lucene-based fulltext index
- **Depends on:** PHP, Postgres
- **Used by:** User
- **Related skills:** Apache Lucene, ghostscript, LibreOffice (unoconv), imagemagick, MIME types identification
### Sigmah
- **General description:**
- **Tech. description:** Apache Commons-based forms application
- **Depends on:** Postgres, Tomcat
- **Used by:** User
- **Related skills:** Java development (hibernate, log4j)
### Ushahidi
- **General description:**
- **Tech. description:** Laravel-based RPC backend with Angular-based frontend
- **Depends on:** MariaDB, PHP
- **Used by:** User
- **Related skills:** JavaScript build tools and frameworks (Angular, Babel, WebPck), PHP build tools and frameworks (composer, Laravel, phinx)