mirror of
https://github.com/Steffo99/sophon.git
synced 2024-12-21 22:34:21 +00:00
📔 It keeps going
This commit is contained in:
parent
7dd6cc08f0
commit
57139547f9
12 changed files with 193 additions and 49 deletions
|
@ -19,4 +19,4 @@ Screenshots
|
||||||
.. image:: ../2_concepts/5_notebooks/list.png
|
.. image:: ../2_concepts/5_notebooks/list.png
|
||||||
.. image:: ../2_concepts/5_notebooks/detail.png
|
.. image:: ../2_concepts/5_notebooks/detail.png
|
||||||
.. image:: ../2_concepts/5_notebooks/inside_the_lab.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
|
||||||
|
|
|
@ -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
|
|
35
docs/source/3_dev/1_tools/index.rst
Normal file
35
docs/source/3_dev/1_tools/index.rst
Normal 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.
|
|
@ -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
|
|
64
docs/source/3_dev/2_structure/1_backend/index.rst
Normal file
64
docs/source/3_dev/2_structure/1_backend/index.rst
Normal 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
|
||||||
|
|
33
docs/source/3_dev/2_structure/2_frontend/index.rst
Normal file
33
docs/source/3_dev/2_structure/2_frontend/index.rst
Normal 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.
|
||||||
|
|
19
docs/source/3_dev/2_structure/3_proxy/index.rst
Normal file
19
docs/source/3_dev/2_structure/3_proxy/index.rst
Normal 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
|
||||||
|
------------------------
|
||||||
|
|
16
docs/source/3_dev/2_structure/4_jupyter/index.rst
Normal file
16
docs/source/3_dev/2_structure/4_jupyter/index.rst
Normal 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
|
||||||
|
------------------------
|
11
docs/source/3_dev/2_structure/index.rst
Normal file
11
docs/source/3_dev/2_structure/index.rst
Normal 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
|
|
@ -8,13 +8,6 @@
|
||||||
|
|
||||||
import datetime
|
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
|
import pkg_resources
|
||||||
|
|
||||||
# -- Project information -----------------------------------------------------
|
# -- Project information -----------------------------------------------------
|
||||||
|
@ -72,3 +65,13 @@ intersphinx_mapping = {
|
||||||
"django": ("http://docs.djangoproject.com/en/3.2/", "http://docs.djangoproject.com/en/3.2/_objects/"),
|
"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),
|
"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,
|
||||||
|
}
|
||||||
|
|
|
@ -31,8 +31,10 @@ Si è cercato di mantenere il registro di ciascuna parte al livello tecnico del
|
||||||
:caption: Documentazione tecnica
|
:caption: Documentazione tecnica
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
3_dev/1_license/index
|
3_dev/1_tools/index
|
||||||
3_dev/2_differences/index
|
3_dev/2_structure/index
|
||||||
|
3_dev/3_differences/index
|
||||||
|
3_dev/4_license/index
|
||||||
|
|
||||||
|
|
||||||
Pagine speciali
|
Pagine speciali
|
||||||
|
|
Loading…
Reference in a new issue