// Metadata: :description: IoT Εισαγωγή στο SwarmLab :keywords: iot, swarm :data-uri: :toc: right :toc-title: Πίνακας περιεχομένων :toclevels: 4 :source-highlighter: highlight :icons: font :sectnums: **Architecture overview** image:swarm-diagram.png[swarmlab,550,550] == Storage === IPFS Cluster image:emblem-web.png[link="https://cluster.ipfs.io/",window="_blank"] Automated data availability and redundancy on https://cluster.ipfs.io/[IPFS^]. IPFS Cluster provides data orchestration across a swarm of IPFS daemons by allocating, replicating and tracking a global pinset distributed among multiple peers. It is being used for both tutors and students to publish content on a *decentralized* manner! + Information will be *auto-deleted* after approximatelly *24 hours* of not being used. + === minio cluster image:emblem-web.png[link="https://min.io/",window="_blank"] High Performance, cloud Native Object Storage. + https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations.html[Amazon’s S3 API^] is the defacto standard in the object storage world. + MinIO is the defacto standard for S3 compatibility and was one of the first to adopt the API and the first to add support for S3 Select. + More than 750 organizations, including Microsoft Azure, use MinIO’s S3 Gateway - more than the rest of the industry combined. + It is being used for both tutors and students to save content on a *centralized* manner! + Information storage is *permanent*. + === MariaDB Galera Cluster image:emblem-web.png[link="https://mariadb.com/kb/en/what-is-mariadb-galera-cluster/",window="_blank"] https://mariadb.org/[MariaDB^] Galera Cluster is a virtually synchronous multi-master cluster for MariaDB. + Provide *Active-active* multi-master topology. + Used for user/admin authorization and authentication. === A replica set in MongoDB image:emblem-web.png[link="https://docs.mongodb.com/manual/replication/#replication-in-mongodb",window="_blank"] https://www.mongodb.com[MongoDB^] is a document database designed for ease of development and scaling. Used for labroom and swarmlab services administration and scheduling. + === ShareDB image:emblem-web.png[link="https://github.com/share/sharedb",window="_blank"] ShareDB is a realtime database backend based on Operational Transformation (OT) of JSON documents == Devel === slim image:emblem-web.png[link="http://www.slimframework.com/",window="_blank"] Slim is a https://www.php.net/[PHP^] micro framework that helps you quickly write powerful APIs. Used for main api of swarmlab.io + Slim was used for a fast and powerful router that maps route callbacks to specific HTTP request methods and URIs. + === nodejs image:emblem-web.png[link="https://nodejs.org/en/",window="_blank"] Nodejs is an asynchronous event-driven JavaScript runtime, Node.js is designed to build scalable network applications. Used for event-driven programming and for Sockets and WebSockets. === vue.js image:emblem-web.png[link="https://vuejs.org/",window="_blank"] Vue is a progressive JavaScript framework for building user interfaces. + It is designed from the ground up to be incrementally adoptable, and can easily scale between a library and a framework depending on different use cases. + It consists of an approachable core library that focuses on the view layer only, and an ecosystem of supporting libraries that helps you tackle complexity in large Single-Page Applications. + Used for the main user interface of swarmlab.io. + === python image:emblem-web.png[link="https://www.python.org/",window="_blank"] Python is an interpreted, high-level, general-purpose programming language. + Python's design philosophy emphasizes code readability with its notable use of significant whitespace. + Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects. + Used along with ansible for maintenance and administration of the machines making up the cluster of swarmlab.io. + se sinrgasia me tin ansible gia tin diachirissi ton michanon === php image:emblem-web.png[link="https://www.php.net",window="_blank"] PHP is a popular general-purpose scripting language that is especially suited to web development. + Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world. + Used with slim for creation of the main API. === codemirror image:emblem-web.png[link="https://codemirror.net/",window="_blank"] CodeMirror is a versatile text editor implemented in JavaScript for the browser. + Used for the online editors for interraction with tutors and students. + === oauth2 image:emblem-web.png[link="https://oauth.net/2/",window="_blank"] OAuth 2.0 is the industry-standard protocol for authorization. + OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices. + This specification and its extensions are being developed within the IETF OAuth Working Group. + This protocol is being used for the connection of users and services. + == System admin and devel === docker image:emblem-web.png[link="https://www.docker.com/",window="_blank"] Docker provides the ability to package and run an application in a loosely isolated environment called a container. + Used for all the services implementations. + === docker-compose image:emblem-web.png[link="https://docs.docker.com/compose/",window="_blank"] Compose is a tool for defining and running multi-container Docker applications. + Used for development, configuration and testing of the services before deployment to the swarm. + === Bash image:emblem-web.png[link="https://www.gnu.org/software/bash/",window="_blank"] A lot of bash scripting was used (low-level) tasks concerning the Linux operating system. === ansible image:emblem-web.png[link="https://www.ansible.com/",window="_blank"] Ansible is an open-source software provisioning, configuration management, and application-deployment tool. + Used for administration of the machines of the general cluster of swarmlab.io as well as its subclusters. + === keycloak image:emblem-web.png[link="https://www.keycloak.org/",window="_blank"] Open Source Identity and Access Management + Used as backend for authentication to provide secure services in our sso implementation. + == Deploy === Docker swarm image:emblem-web.png[link="https://docs.docker.com/engine/swarm/",window="_blank"] Docker swarm is a container orchestration tool, its allow to manage multiple containers deployed across a cluster. + Used for orchestration of swarmlab.io services. + == Colaboration === gittea image:emblem-web.png[link="https://gitea.com/",window="_blank"] A self-hosted Git service used for the git-repo management used by students and tutors. + === jitsi image:emblem-web.png[link="https://jitsi.org/",window="_blank"] A secure, flexible, and completely free video conferencing. + Used for the online virtual meetings attended by students and tutors. + == service access === noVNC image:emblem-web.png[link="https://novnc.com/info.html",window="_blank"] A open source VNC client - it's is both a VNC client JavaScript library as well as an application built on top of that library. + noVNC runs in any modern browser including mobile browsers (iOS and Android). + Used to access a unix graphic environment for the services provided through a normal browser. + === ttyd image:emblem-web.png[link="https://tsl0922.github.io/ttyd/",window="_blank"] Terminal over the web. + Used to access a unix command line for the services provided through a normal browser. +