Héberger un serveur

Pré-requis

  • Python >= 3.6
  • PostgreSQL >= 10

En plus de cela, un service de stockage de type objet est nécessaire afin de stocker les blocs de données chiffrés. À cette fin, Amazon S3 et OpenStack Swift sont tous deux supportés.

Hébergement

La communication entre client et serveur est effectuée via des Websocket. Ce protocole fournit une communication bidirectionnelle (nécessaire afin que le serveur puisse notifier le client des changements) tout en s’appuyant sur des standards du web.

Le serveur Parsec respecte la philosophie des applications à 12 facteurs. De ce fait une instance du serveur ne contient pas d’état et peut être remplacée à tout moment, ce qui la rend idéale pour un hébergement sur du PAAS ou bien au sein d’une architecture à base de conteneurs.

Au final, d’un point de vue hébergement, le serveur Parsec est similaire à une application web classique.

Installation

python -m venv venv
. ./venv/bin/activate
pip install parsec-cloud[backend]

Démarrage

Use the parsec backend run command to start Parsec server, for instance:

parsec backend run --port $PORT --host 0.0.0.0 --db postgresql://<...> --blockstore s3:<...> --administration-token <token>

Paramètres

Note

Settings can be specified by using environment variable PARSEC_CMD_ARGS. All available command line arguments can be used and environ variables within it will be expanded. For instance:

DB_URL=postgres:///parsec PARSEC_CMD_ARGS='--db=$DB_URL --host=0.0.0.0' parsec backend run

Hôte

  • --host <host>, -H <host>
  • Environnement: PARSEC_HOST
  • Défaut: 127.0.0.1

Host sur lequel écouter.

Port

  • --port <port>, -P <port>
  • Environnement: PARSEC_PORT
  • Défaut: 6777

Port sur lequel écouter.

URL de la base de données

  • --db <url>
  • Environnement: PARSEC_DB

Configuration de la base de données

Variables autorisées:

  • MOCKED: Simulé en mémoire
  • postgresql://<...>: Utilise une base PostgreSQL

Avertissement

MOCKED est disponible uniquement à des fins de développement et de test, il ne faut pas l’utiliser en production.

Connexion à la Base de données

  • --db-min-connections <int>
  • Environnement: PARSEC_DB_MIN_CONNECTIONS
  • Défaut: 5

Nombre minimal de connexions à la base de données PostgreSQL.

  • --db-max-connections <int>
  • Environnement: PARSEC_DB_MAX_CONNECTIONS
  • Défaut: 7

Nombre maximum de connexions à la base de données PostgreSQL.

URL de stockage des blocs

  • --blockstore <url>, -b <url>
  • Environnement: PARSEC_BLOCKSTORE

Configuration du stockage des blocs

Variables autorisées:

  • MOCKED: Simulé en mémoire
  • POSTGRESQL: Utilise la base de données définie via le paramètre --db
  • s3:[<endpoint_url>]:<region>:<bucket>:<key>:<secret>: Use Amazon S3 storage
  • swift:<auth_url>:<tenant>:<container>:<user>:<password>: Use OpenStack SWIFT storage

endpoint_url/auth_url sont considérées comme HTTPS par défaut (s3:foo.com:[…] deviant https://foo.com. Des caractères d’échappement doivent être ajoutés pour fournir un schéma personnalisé (s3:http\://foo.com:[…]).

En plus de ça, plusieurs configurations de blockstore peuvent être fournies pour former une grappe RAID0/1/5.

Chaque configuration doit être passée sous la forme``<raid_type>:<node>:<config>`` avec <raid_type> RAID0/RAID1/RAID5, <node> un nombre et <config> la configuration de type MOCKED/POSTGRESQL/S3/SWIFT.

Par exemple, pour configurer un RAID0 avec deux nœuds:

$ parsec backend run -b RAID0:0:MOCKED -b RAID0:1:POSTGRESQL [...]

Avertissement

MOCKED et POSTGRESQL sont disponibles uniquement à des fins de développement et de test, il ne faut pas les utiliser en production.

Jeton d’administration

  • --administration-token <token>
  • Environnement: PARSEC_ADMINISTRATION_TOKEN

Jeton secret pour accéder à l’api d’administration.

SSL

  • --ssl-keyfile <file>
  • Environnement: PARSEC_SSL_KEYFILE

Fichier de clé SSF. Permet d’utiliser Parsec au-dessus de SSL.

  • --ssl-certfile <file>
  • Environnement: PARSEC_SSL_CERTFILE

Fichier de certificat SSL. Permet d’utiliser Parsec au-dessus de SSL.

  • --forward-proto-enforce-https
  • Environnement: PARSEC_FORWARD_PROTO_ENFORCE_HTTPS

Impose le HTTPS en redirigeant les requêtes entrantes qui ne correspondent pas à l’entête fourni. Peut être utile lorsque Parsec tourne derrière un forward-proxy qui gère la couche SSL. N’utilisez ce paramètre que si vous avez le contrôle de votre proxy ou que vous avez la garantie qu’il gère correctement cet entête.

Logs

  • --log-level <level>, -l <level>
  • Environnement: PARSEC_LOG_LEVEL
  • Défaut: WARNING

Granularité des logs d’erreurs.

Doit être DEBUG, INFO, WARNING, ERROR ou CRITICAL.

  • --log-format <format>, -f <format>
  • Environnement: PARSEC_LOG_FORMAT
  • Défaut: CONSOLE

Format de log utilisé. Doit être CONSOLE ou JSON.

  • --log-file <file>, -o <file>
  • Environnement: PARSEC_LOG_FILE
  • Défaut: log dans stderr

Le fichier de log dans lequel écrire.

Email

  • --backend-addr
  • Environnement: PARSEC_BACKEND_ADDR

URL pour communiquer avec ce serveur (utilisé pour les emails d’invitation.

  • --email-host
  • Environnement: PARSEC_EMAIL_HOST

L’hôte à utiliser pour l’envoi d’email.

  • --email-port
  • Environnement: PARSEC_EMAIL_PORT
  • Default: 25

Le port à utiliser pour le serveur STMP défini dans EMAIL_HOST.

  • --email-host-user
  • Environnement: PARSEC_EMAIL_HOST_USER

Le nom d’utilisateur à utiliser pour le serveur SMTP défini dans EMAIL_HOST.

  • --email-host-password
  • Environnement: PARSEC_EMAIL_HOST_PASSWORD

Le mot de passe à utiliser pour le serveur SMTP défini dans EMAIL_HOST. Ce mot de passe est utilisé avec EMAIL_HOST_USER pour l’authentification auprès du serveur SMTP.

  • --email-use-ssl
  • Environnement: PARSEC_EMAIL_USE_SSL

Utiliser ou non une connexion TLS sécurisée pour communiquer avec le serveur SMTP. Utilisé pour une connexion TLS explicite, généralement sur le port 587.

  • --email-use-tls
  • Environnement: PARSEC_EMAIL_USE_TLS

Utiliser ou non une connexion TLS sécurisée pour communiquer avec le serveur SMTP. Dans la plupart des documentation, ce type de connexion TLS est nommé SSL. Elle utilise généralement le port 465.À noter que --email-use-tls/--email-use-ssl sont mutuellement exclusifs, un seul doit être mis à True.

  • --email-language
  • Environnement: PARSEC_EMAIL_LANGUAGE
  • Default: en

La langue à utiliser dans les emails (Valeurs possibles: en (Anglais) ou fr (Français)).

Webhooks

  • --spontaneous-organization-bootstrap
  • Environnement: PARSEC_SPONTANEOUS_ORGANIZATION_BOOTSTRAP

Autoriser le démarrage d’une organisation sans l’avoir créée au préalable.

Sans cette option, une organisation doit d’abord être créée par un administrateur (voir parsec core create_organization command) avant que le démarrage puisse être effectué.

With this flag, the server allows anybody to bootstrap an organanization by providing an empty bootstrap token given 1) the organization is not boostrapped yet and 2) the organization hasn’t been created by administration (which would act as a reservation and change the bootstrap token)

  • --organization-bootstrap-webhook
  • Environnement: PARSEC_ORGANIZATION_BOOTSTRAP_WEBHOOK

URL pour avertir les tierces parties qu’une nouvelle organisation a été démarrée.

Chaque fois qu’une organisation est démarée, un POST HTTP est envoyé à l’URL avec un corps application/json qui contient les champs suivants: organization_id, device_id, device_label (possiblement NULL), human_email (possiblement NULL), human_label (possiblement NULL).

Exemple :

{
  "organization_id": "MyOrg",
  "device_id": "123@abc",
  "device_label": "laptop",
  "human_email": "j.doe@example.com",
  "human_label": "John Doe"
}

Sentry

  • --sentry-dsn <url>
  • Environnement: PARSEC_SENTRY_DSN

URL de Sentry utilisé pour la télémétrie.

  • --sentry-environment <name>
  • Environnement: PARSEC_SENTRY_ENVIRONMENT
  • Default: production

Paramètre de nom d’environnement de Sentry pour la télémetrie.

Débogage

  • --debug
  • Environnement: PARSEC_DEBUG

Active les informations de débogage.

  • --dev

Equivalent to --debug --db=MOCKED --blockstore=MOCKED --administration-token=s3cr3t --email-sender=no-reply@parsec.com --email-host=MOCKED --backend-addr=parsec://localhost:<port>(?no_ssl=False if ssl is not set).