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

11 KiB

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)