1
Fork 0
mirror of https://github.com/Steffo99/sophon.git synced 2024-10-16 07:07:26 +00:00

📔 It keeps going

This commit is contained in:
Steffo 2021-11-04 03:12:27 +01:00
parent 7dd6cc08f0
commit 57139547f9
12 changed files with 193 additions and 49 deletions

View file

@ -19,4 +19,4 @@ Screenshots
.. image:: ../2_concepts/5_notebooks/list.png
.. image:: ../2_concepts/5_notebooks/detail.png
.. image:: ../2_concepts/5_notebooks/inside_the_lab.png
.. image:: ../../2_admin/2_administration/admin_page.png
.. image:: ../../2_admin/2_administration/admin_home.png

View file

@ -1,12 +0,0 @@
Licenza
*******
Sophon è rilasciato sotto la `GNU Affero General Public License 3`_ (o successiva).
Il testo completo della licenza è disponibile all'interno del file `LICENSE.txt`_ allegato al codice sorgente del software.
Si specifica che la licenza copre tutti i file all'interno del repository ``Steffo99/sophon``, anche se essi non contengono un header che indica che sono protetti da copyright.
.. _GNU Affero General Public License 3: https://www.gnu.org/licenses/agpl-3.0.html
.. _LICENSE.txt: https://github.com/Steffo99/sophon/blob/main/LICENSE.txt

View file

@ -0,0 +1,35 @@
Strumenti usati per lo sviluppo
*******************************
Per sviluppare Sophon sono usati i seguenti strumenti:
- `IntelliJ IDEA Ultimate`_, un IDE multilinguaggio, con i seguenti plugin:
- Python
- Poetry
- ReStructuredText
- Node.JS
- JavaScript and TypeScript
- CSS
- Git
- Docker
- `Git`_, uno strumento di controllo versione;
- `GitHub`_, un host per repository `Git`_;
- `GitHub Issues`_, un issue tracker integrato in `GitHub`_;
- `GitHub Actions`_, un sistema di `Continuous Integration`_ e `Continuous Deployment`_ integrato in `GitHub`_;
- `GitHub Containers`_, un registro di container Docker integrato in `GitHub`_;
- `CodeQL`_, un tool di analisi statica integrato in `GitHub`_;
.. _IntelliJ IDEA Ultimate: https://www.jetbrains.com/idea/
.. _Git: https://git-scm.com/
.. _GitHub: https://github.com/
.. _GitHub Issues: https://github.com/features/issues/
.. _GitHub Actions: https://github.com/features/actions
.. _Continuous Integration: https://it.wikipedia.org/wiki/Integrazione_continua
.. _Continuous Deployment: https://en.wikipedia.org/wiki/Continuous_deployment
.. _CodeQL: https://codeql.github.com/
.. _GitHub Containers: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
.. seealso::
Nel capitolo successivo sono descritte le tecnologie utilizzate all'interno di Sophon.

View file

@ -1,27 +0,0 @@
Differenze da altri progetti simili
***********************************
Sophon a prima vista può sembrare simile ad altri progetti già esistenti, ma si differenzia in alcune particolarità del suo funzionamento.
Differenze da JupyterHub
========================
`JupyterHub`_ è un progetto con scopi molto simili a quelli di Sophon, ovvero di permettere a tanti utenti di utilizzare `Jupyter`_ su un server remoto, ma ha funzionalità di autorizzazione molto semplici e non ha supporto per :ref:`collaborazione` in tempo reale, in quanto i server `Jupyter`_ che istanzia sono single-user.
È però più facile da scalare per grandi numeri di utenti, e ha più opzioni di deployment, a differenza di Sophon, che ne supporta una sola.
.. _JupyterHub: https://jupyter.org/hub
.. _Jupyter: https://jupyter.org/
Differenze da Google Colab
==========================
`Google Colab`_ è un progetto che permette di effettuare ricerca su server `Jupyter`_ utilizzando le risorse della `Google Cloud Platform`_.
A differenza di Sophon, è disponibile esclusivamente come `software-as-a-service`_, il che costringe agli utenti a trasmettere le loro informazioni ai server di Google, e non ha alcun tipo di supporto alla :ref:`collaborazione` in tempo reale.
.. _Google Colab: https://colab.research.google.com/#
.. _Google Cloud Platform: https://cloud.google.com/
.. _software-as-a-service: https://it.wikipedia.org/wiki/Software_as_a_service

View file

@ -0,0 +1,64 @@
Modulo backend
==============
.. default-domain:: py
.. default-role:: obj
.. py:currentmodule:: sophon
Il *modulo backend* consiste in un server web che consente agli utenti:
- Attraverso l'API:
- *autenticazione* e *autorizzazione* degli utenti;
- *visualizzazione*, *interazione*, *creazione*, *modifica* ed *eliminazione* di gruppi di ricerca, progetti di ricerca e notebook
- *visualizzazione* di utenti e dettagli sull'istanza Sophon.
- Attraverso pagine web dinamiche:
- *amministrazione* dell'istanza Sophon.
Inoltre, effettua le seguenti operazioni in risposta a determinate richieste effettuate dagli utenti:
- *configurazione*, *avvio* e *arresto* di container Docker basati sulle immagini specificate dai notebook;
- *configurazione*, *attivazione* e *disattivazione* del servizio di proxying effettuato dal :ref:`modulo proxy`.
Librerie e tecnologie utilizzate
--------------------------------
.. note::
Sono elencate solo le principali librerie utilizzate; dipendenze e librerie minori non sono specificate, ma sono visibili all'interno del file ``poetry.lock``.
- Il linguaggio di programmazione `Python <https://www.python.org/>`_
- Il gestore di dipendenze `Poetry <https://python-poetry.org/>`_
- Il framework web `Django <https://www.djangoproject.com/>`_
- L'estensione per Django `Django REST Framework <https://www.django-rest-framework.org/>`_
- L'estensione per Django `Django CORS Headers <https://github.com/adamchainz/django-cors-headers>`_
- L'adattatore database per PostgreSQL `Psycopg <https://pypi.org/project/psycopg2/>`_
- Il `Docker SDK for Python <https://docker-py.readthedocs.io/en/stable/>`_
- I server web `Gunicorn <https://gunicorn.org/>`_ e `Uvicorn <https://www.uvicorn.org/>`_
- L'utilità `lazy-object-proxy <https://github.com/ionelmc/python-lazy-object-proxy>`_
Struttura del modulo
--------------------
Il modulo consiste nel package Python :mod:`sophon`, che contiene al suo interno un progetto Django, che a sua volta contiene tre app Django.
Il progetto `sophon`
^^^^^^^^^^^^^^^^^^^^
.. module:: sophon
L'app `sophon.core`
^^^^^^^^^^^^^^^^^^^
.. module:: sophon.core
L'app `sophon.projects`
^^^^^^^^^^^^^^^^^^^^^^^
.. module:: sophon.projects
L'app `sophon.notebooks`
^^^^^^^^^^^^^^^^^^^^^^^^
.. module:: sophon.notebooks

View file

@ -0,0 +1,33 @@
Modulo frontend
===============
.. default-domain:: js
Il *modulo frontend* consiste in una interfaccia web che consente agli utenti di interagire con il :ref:`modulo backend` e di accedere al :ref:`modulo Jupyter`.
Si è cercato di renderla più user-friendly possibile, cercando di comunicare più informazioni possibili all'utente attraverso colori e icone, rendendo possibile apprendere ad utilizzare l'interfaccia intuitivamente.
Librerie e tecnologie utilizzate
--------------------------------
.. note::
Sono elencate solo le principali librerie utilizzate; dipendenze e librerie minori non sono specificate, ma sono visibili all'interno del file ``yarn.lock``.
- I linguaggi di programmazione `JavaScript <https://developer.mozilla.org/en-US/docs/Web/JavaScript/About_JavaScript>`_ e `TypeScript <https://www.typescriptlang.org/>`_
- Il gestore di dipendenze `Yarn <https://yarnpkg.com/>`_
- La libreria grafica `Bluelib <https://github.com/Steffo99/bluelib>`_ (sviluppata come progetto personale nell'estate 2021)
- Il framework per interfacce grafiche `React <https://reactjs.org>`_
- Il router `Reach Router <https://reach.tech/router/>`_
- L'integrazione con React di Bluelib `bluelib-react <https://github.com/Steffo99/bluelib-react>`_ (sviluppata durante il tirocinio)
- Il componente React `react-markdown <https://github.com/remarkjs/react-markdown>`_
- Il framework per testing `Jest <https://jestjs.io/>`_
- Un fork personalizzato del client XHR `axios <https://github.com/axios/axios>`_
- Il webserver statico `serve <https://www.npmjs.com/package/serve>`_
Struttura del modulo
--------------------
Il modulo consiste nel package JavaScript :mod:`@steffo45/sophon-frontend`, che contiene tutti i componenti che assemblati insieme formano l'intera interfaccia web.

View file

@ -0,0 +1,19 @@
Modulo proxy
============
Il *modulo proxy* consiste in un webserver che riceve tutte le richieste HTTP dirette ad uno degli altri moduli e le smista in base a regole statiche e dinamiche.
Tecnologie utilizzate
---------------------
- Il server web `Apache HTTPd <https://httpd.apache.org/>`_
- Il modulo `mod_rewrite <https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html>`_
- Il modulo `mod_proxy <https://httpd.apache.org/docs/2.4/mod/mod_proxy.html>`_
- Il modulo `mod_proxy_http <https://httpd.apache.org/docs/2.4/mod/mod_proxy_http.html>`_
- Il modulo `mod_proxy_wstunnel <https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html>`_
Funzionamento del modulo
------------------------

View file

@ -0,0 +1,16 @@
Modulo Jupyter
==============
Il *modulo Jupyter* consiste in un ambiente `Jupyter <https://jupyter.org/>`_ e `JupyterLab <https://jupyterlab.readthedocs.io/en/stable/>`_ modificato per una migliore integrazione con Sophon.
Progetti utilizzati
-------------------
- Le immagini Docker ufficiali di Jupyter `jupyter/docker-stacks <https://github.com/jupyter/docker-stacks>`_
- Il tema `jupyterlab-theme-sophon <https://github.com/Steffo99/jupyterlab-theme-sophon>`_ (realizzato durante il tirocinio)
- Il tool per il trasferimento dati `curl <https://curl.se/>`_
Funzionamento del modulo
------------------------

View file

@ -0,0 +1,11 @@
Struttura del progetto
**********************
Sophon è composto da quattro moduli, *backend*, *frontend*, *proxy* e *jupyter*, che interagiscono tra loro per fornire agli utenti tutti i servizi necessari.
.. toctree::
1_backend/index
2_frontend/index
3_proxy/index
4_jupyter/index

View file

@ -8,13 +8,6 @@
import datetime
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
import pkg_resources
# -- Project information -----------------------------------------------------
@ -72,3 +65,13 @@ intersphinx_mapping = {
"django": ("http://docs.djangoproject.com/en/3.2/", "http://docs.djangoproject.com/en/3.2/_objects/"),
"docker": ("https://docker-py.readthedocs.io/en/stable/", None),
}
# -- Automodule options ------------------------------------------------------
autodoc_default_options = {
'members': True,
'member-order': 'bysource',
'special-members': '__init__',
'undoc-members': True,
'show-inheritance': False,
}

View file

@ -31,8 +31,10 @@ Si è cercato di mantenere il registro di ciascuna parte al livello tecnico del
:caption: Documentazione tecnica
:maxdepth: 2
3_dev/1_license/index
3_dev/2_differences/index
3_dev/1_tools/index
3_dev/2_structure/index
3_dev/3_differences/index
3_dev/4_license/index
Pagine speciali