Server Deployment

This section describes how to deploy the Parsec Server on Linux.

Before you begin, take a look at the Application architecture section for an overview of software systems and interactions involved with the Parsec Server.

The steps and requirements described in this section may vary based on your specific needs. It is recommended to deploy and observe performance on a pilot project prior to using in production.

Note

Some setup and administrative operations must be performed with Parsec CLI on Linux. Please refer to the Install Parsec CLI on Linux section.

Deployment options

Parsec offers the following deployment options:

Prerequisites

The Parsec Server depends on the following components:

Optionally, the following components can be used to support additional features:

Important

For security reasons, installation and configuration of these components are not covered in this guide. Please refer to their corresponding official documentation for instructions on how to do it.

This guide provides instructions for quickly settings up mock-ups or basic installs of those components. Keep in mind that these instructions are provided for convenience and should not be used in production.

Important

It is not recommended to deploy both Parsec Server and PostgreSQL database on a single system for production use, but it is a good option for testing purposes.

System Requirements

The following panel describes the minimum software and hardware requirements.

Minimum system requirements

  • Hardware: 1 vCPU/core with 1GB RAM

  • Database: PostgreSQL v16+, 20GB for metadata storage

  • S3 Object Storage: 2TB for encrypted data storage (around x100 metadata size)

Preparation

TLS certificates

This section describe how to generate the required TLS certificates with a custom Certificate Authority (CA) created for this purpose.

Important

For a production environment, you should always use certificates issued from a trusted CA.

The setup-tls.sh script below will allow you to generate everything you need:

  1. Generate the CA key & self-signed certificate (custom-ca.{key,crt}).

  2. For parsec-s3 and parsec-server services:

    1. Generate the service key & Certificate Signing Request (CSR) parsec-{service}.{key,csr}.

    2. Generate the certificate using the CSR and the CA.

  3. For parsec-server service:

    1. Change the key file group ID to 1234 (the GID used by the parsec-server container).

    2. Change the file mode to give read permission to the group 1234. This is required because Docker Compose does not allow to mount the file with the correct permissions in the container.

setup-tls.sh
 1# shellcheck disable=SC2148
 2function generate_cert_conf() {
 3    local name=$1
 4    local san=$2
 5
 6    echo "Generating $name.crt.conf"
 7
 8    cat << EOF > "$name".crt.conf
 9[req]
10distinguished_name = req_dist_name
11req_extensions = req_ext
12prompt = no
13
14[req_dist_name]
15CN = $name
16
17[req_ext]
18subjectAltName = $san
19EOF
20}
21
22function generate_certificate_request() {
23    local name=$1
24    echo "Generate certificate request $name.csr"
25    openssl req -batch \
26        -new -sha512 -noenc -newkey rsa:4096 \
27        -config "$name".crt.conf \
28        -keyout "$name".key -out "$name".csr
29}
30
31function sign_crt_with_ca() {
32    local ca_crt=$1
33    local ca_key=$2
34    local name=$3
35
36    echo "Sign certificate request $name.crt"
37
38    openssl x509 -req -in "$name".csr \
39        -CA "$ca_crt" -CAkey "$ca_key" \
40        -extfile "$name".crt.conf \
41        -extensions req_ext \
42        -CAcreateserial -out "$name".crt \
43        -days 10 -sha512
44}
45
46if [ ! -f custom-ca.key ]; then
47    echo "Generate a mini Certificate Authority"
48    openssl req -batch \
49        -x509 -sha512 -nodes -days 10 -newkey rsa:4096 \
50        -subj "/CN=Mini Certificate Authority" \
51        -keyout custom-ca.key -out custom-ca.crt
52fi
53
54for service in parsec-{s3,server,proxy}; do
55    if [ ! -f "$service".crt.conf ]; then
56        generate_cert_conf "$service" DNS:"$service",DNS:localhost,IP:127.0.0.1
57    fi
58
59    # Generate key + csr if missing or if the key is older than the conf
60    if [ ! -f "$service".key ] || [ "$service".key -ot "$service".crt.conf ]; then
61        generate_certificate_request "$service"
62    fi
63
64    # Generate crt if missing or if it's older than the csr or the custom CA
65    if [ ! -f "$service".crt ] || [ "$service".crt -ot "$service".csr ] || [ "$service".crt -ot custom-ca.key ]; then
66        sign_crt_with_ca custom-ca.{crt,key} "$service"
67    fi
68done
69
70if [ "$(stat -c %g parsec-server.key)" -ne 1234 ]; then
71    echo "Changing group id of parsec-server.key to 1234"
72    sudo chown "$USER":1234 parsec-server.key
73fi
74
75if [ "$(stat -c %a parsec-server.key)" -ne 640 ]; then
76    echo "Changing permission of parsec-server.key to 640"
77    chmod 640 parsec-server.key
78fi

Set up the env files

The easiest way to configure the Parsec Sever is by using environment variables. These variables can be stored in a file and sourced before running the server.

In this guide, the environment variables are stored into multiple files in order to better describe how to configure each component.

The administration token

To be able to perform admin tasks (like creating an organization) on the server, an administration token is required. Below you will find a simple script to generate a token:

gen-admin-token.sh
 1# shellcheck disable=SC2148
 2set -euo pipefail
 3
 4ENV_FILE=parsec-admin-token.env
 5if [ ! -f $ENV_FILE ]; then
 6    PARSEC_ADMINISTRATION_TOKEN=$(openssl rand -hex 32)
 7    echo "PARSEC_ADMINISTRATION_TOKEN=$PARSEC_ADMINISTRATION_TOKEN" > $ENV_FILE
 8
 9    PARSEC_FAKE_ACCOUNT_PASSWORD_ALGORITHM_SEED=$(openssl rand -hex 32)
10    echo "PARSEC_FAKE_ACCOUNT_PASSWORD_ALGORITHM_SEED=$PARSEC_FAKE_ACCOUNT_PASSWORD_ALGORITHM_SEED" >> $ENV_FILE
11
12    echo "Parsec administration token generated in: $ENV_FILE"
13else
14    echo "Parsec administration token already exists in: $ENV_FILE"
15fi

The script will generate a random token (openssl rand -hex 32) and create the env file parsec-admin-token.env.

The token doesn’t have to be a valid hexadecimal value: any string with enough entropy can be used. For example, it could be replaced by a value from a password-generator.

The script above also generates FAKE_ACCOUNT_PASSWORD_ALGORITHM_SEED which is a secret used to make unpredictable the password algorithm configuration returned for non-existing accounts.

Database env file

Create the file parsec-db.env and specify the the following content to configure the access to the PostgreSQL database:

parsec-db.env
1# The PostgreSQL database URL
2PARSEC_DB=postgresql://DB_USER:DB_PASS@parsec-postgres:5432/parsec
3
4# The minimum number of connections to the database
5PARSEC_DB_MIN_CONNECTIONS=5
6
7# The maximum number of connections to the database
8PARSEC_DB_MAX_CONNECTIONS=7

SMTP env file

Create the file parsec-smtp.env to configure the access to the SMTP server (mailhog in this case).

We need to set the connection information, the sender information, the default language the emails are sent in:

parsec-smtp.env
 1# The SMTP host to use for sending email
 2PARSEC_EMAIL_HOST=parsec-smtp
 3
 4# The SMTP server port
 5PARSEC_EMAIL_PORT=1025
 6
 7# The SMTP server username
 8PARSEC_EMAIL_HOST_USER=SMTP_USER
 9
10# The SMTP password
11PARSEC_EMAIL_HOST_PASSWORD=SMTP_PASS
12
13# The SMTP sender's email address
14PARSEC_EMAIL_SENDER=parsec@test.xyz
15
16# Enable to use TLS (secure) connection to connect to the SMTP server
17# PARSEC_EMAIL_USE_SSL
18
19# Enable to use implicit TLS (secure) connection to connect to the SMTP server
20# PARSEC_EMAIL_USE_TLS

S3 env file

Create the file parsec-s3.env with the following content to set the URL for the S3-like service:

parsec-s3.env
 1# The blockstore configuration
 2#
 3# The syntax should be one of the following:
 4#
 5# - s3:[<endpoint_url>]:<region>:<bucket>:<key>:<secret>
 6# - swift:<auth_url>:<tenant>:<container>:<user>:<password>
 7# - POSTGRESQL
 8# - MOCKED
 9#
10# For S3/Swift, <endpoint_url> & <auth_url> are considered as HTTPS by default
11# (e.g."s3:foo.com:[...]" -> https://foo.com).
12#
13#   Note that escaping must be used in URLs in order to provide:
14#   - a custom scheme (e.g. "s3:http\\://foo.com:[...]"")
15#   - a port (e.g. "s3:parsec-s3\:9000:[...]")
16#
17# No extra parameter is needed for MOCKED (will use in-memory store) and
18# POSTGRESQL (will use the same database specified in PARSEC_DB).
19#
20# Multiple blockstore can be provided to form a RAID0/1/5 cluster.
21# In this case, each configuration must be provided with the following syntax:
22# - <raid_type>:<node>:<config>
23#  where <raid_type> is RAID0/RAID1/RAID5, <node> is an integer and
24# `<config>` is one of the previous s3/swift/POSTGRESQL/MOCKED configuration.
25
26PARSEC_BLOCKSTORE=s3:parsec-s3\:9000:region1:parsec:S3_ROOT_USER:S3_ROOT_PASS

Parsec env file

Create the file parsec.env with the following content to configure the parsec-server service:

parsec.env
 1# Host & Port to listen to.
 2PARSEC_HOST=0.0.0.0
 3PARSEC_PORT=6777
 4
 5# The SSL key file.
 6PARSEC_SSL_KEYFILE=/run/secrets/parsec-pem-key
 7
 8# The SSL certificate file.
 9PARSEC_SSL_CERTFILE=/run/secrets/parsec-pem-crt
10
11# A comma-separated list of ciphers suites to use
12# This is the list of suites recommended by ANSSI
13# See: https://cyber.gouv.fr/guide-tls
14PARSEC_SSL_CIPHERS=
15PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}TLS_AES_256_GCM_SHA384,
16PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}TLS_AES_128_GCM_SHA256,
17PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}TLS_AES_128_CCM_SHA256,
18PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}TLS_CHACHA20_POLY1305_SHA256,
19PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}ECDHE-ECDSA-AES256-GCM-SHA384,
20PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}ECDHE-ECDSA-AES128-GCM-SHA256,
21PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}ECDHE-ECDSA-AES256-CCM,
22PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}ECDHE-ECDSA-AES128-CCM,
23PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}ECDHE-ECDSA-CHACHA20-POLY1305,
24PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}ECDHE-RSA-AES256-GCM-SHA384,
25PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}ECDHE-RSA-AES128-GCM-SHA256,
26PARSEC_SSL_CIPHERS=${PARSEC_SSL_CIPHERS}ECDHE-RSA-CHACHA20-POLY1305
27
28# The log file (defaults to stderr)
29# PARSEC_LOG_FILE=
30
31# The log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
32# Only log messages of the specified level (or above) will be displayed
33# (e.g. WARNING will output WARNING + ERROR + CRITICAL messages)
34PARSEC_LOG_LEVEL=WARNING
35
36# The log message format (CONSOLE, JSON)
37PARSEC_LOG_FORMAT=CONSOLE
38
39# List of proxy addresses to trust
40PARSEC_PROXY_TRUSTED_ADDRESS=parsec-proxy
41
42# The URL to reach Parsec server
43PARSEC_SERVER_ADDR=parsec3://example.com
44
45# Keep SSE connection open by sending keepalive messages to client in seconds.
46# Set to 0 to disable keepalive messages.
47PARSEC_SSE_KEEPALIVE=30
48
49# Sentry environment for telemetry report.
50PARSEC_SENTRY_ENVIRONMENT=production

Parsec Server can be further configured with other environment variables. To see the full list, run the following command and look for sections such as [env var: VARIABLE] next to each configuration option. For example:

$ python -m parsec run --help

[...]

--administration-token TOKEN    Secret token to access the Administration API
                                [env var: PARSEC_ADMINISTRATION_TOKEN; required]

Deploy with Docker

This section describes how to install Parsec Server directly on Linux.

This method is an alternative to the Direct installation on Linux server.

Additional Requirements

In addition to the base requirements, you will need:

The Docker Compose file

You can use the following Docker Compose file to deploy Parsec Server for testing:

parsec-server.docker.yaml
 1services:
 2  parsec-proxy:
 3    depends_on:
 4      - parsec-server
 5    image: nginx:1.27-alpine
 6    container_name: parsec-proxy
 7    ports:
 8      - 443:443
 9      - 80:80
10    volumes:
11      - ./parsec-nginx.conf:/etc/nginx/nginx.conf:ro
12      - ./parsec-proxy.crt:/certs/proxy.crt:ro
13      - ./parsec-proxy.key:/certs/proxy.key:ro
14
15  parsec-postgres:
16    image: postgres:16.10-alpine
17    container_name: parsec-postgres
18    environment:
19      POSTGRES_USER: DB_USER
20      POSTGRES_PASSWORD: DB_PASS
21      POSTGRES_DB: parsec
22    ports:
23      # Expose PostgreSQL to localhost
24      - 127.0.0.1:5432:5432
25    volumes:
26      - parsec-db-data:/var/lib/postgresql/data
27
28  parsec-s3:
29    image: quay.io/minio/minio:RELEASE.2024-09-13T20-26-02Z
30    container_name: parsec-s3
31    command: server --console-address ":9090" --certs-dir /opts/certs /data
32    environment:
33      MINIO_ROOT_USER: S3_ROOT_USER
34      MINIO_ROOT_PASSWORD: S3_ROOT_PASS
35    ports:
36      # Admin console exposed to https://127.0.0.1:9090
37      - 127.0.0.1:9090:9090
38      # Expose S3 API to localhost
39      - 127.0.0.1:9000:9000
40    volumes:
41      - parsec-object-data:/data
42      - ./parsec-s3.key:/opts/certs/private.key:ro
43      - ./parsec-s3.crt:/opts/certs/public.crt:ro
44      - ./custom-ca.crt:/opts/certs/CAs/ca.test.crt:ro
45
46  parsec-smtp:
47    image: mailhog/mailhog:v1.0.1
48    container_name: parsec-smtp
49    ports:
50      - 1025:1025
51      # Web interface exposed to http://127.0.0.1:8025
52      - 127.0.0.1:8025:8025
53
54  parsec-server:
55    depends_on:
56      - parsec-smtp
57      - parsec-s3
58      - parsec-postgres
59    image: ghcr.io/scille/parsec-cloud/parsec-server:3.9.0
60    restart: on-failure
61    container_name: parsec-server
62    env_file:
63      - parsec.env
64      - parsec-s3.env
65      - parsec-db.env
66      - parsec-smtp.env
67      - parsec-admin-token.env
68    environment:
69      AWS_CA_BUNDLE: /run/secrets/mini-ca-crt
70    secrets:
71      - mini-ca-crt
72      - parsec-pem-crt
73      - parsec-pem-key
74    ports:
75      - 127.0.0.1:6777:6777
76
77volumes:
78  parsec-db-data: {}
79  parsec-object-data: {}
80
81secrets:
82  parsec-pem-crt:
83    file: ./parsec-server.crt
84  parsec-pem-key:
85    file: ./parsec-server.key
86  mini-ca-crt:
87    file: ./custom-ca.crt

It will setup 4 services:

Service name

Description

parsec-postgres

The PostgreSQL database

parsec-s3

The Object Storage service

parsec-smtp

A mock SMTP server

parsec-server

The Parsec Server

parsec-proxy

A Nginx proxy server, used as an example to configure a reverse proxy.

Learn more about using Parsec behind a reverse proxy

Starting the services

The docker containers can be started as follows:

docker compose -f parsec-server.docker.yaml up

Initial configuration

On the first start, a one-time configuration is required for the database and s3 services.

Applying the database migration

(Optional) Check that the database is accessible:

$ set -a
$ source parsec-db.env
$ docker exec -t parsec-postgres psql 'postgresql://DB_USER:DB_PASS@0.0.0.0:5432/parsec' \
            -c "\conninfo"
...
You are connected to database "parsec" as user "parsec" on host "0.0.0.0" at port "5432".

To bootstrap the database, apply the migrations:

docker compose -f parsec-server.docker.yaml run parsec-server migrate

Create the S3 Bucket

Access the console at https://127.0.0.1:9090. You will need to use the credential specified in parsec-server.docker.yaml:

parsec-server.docker.yaml
33      MINIO_ROOT_USER: S3_ROOT_USER
34      MINIO_ROOT_PASSWORD: S3_ROOT_PASS

Go to https://127.0.0.1:9090/buckets/add-bucket to create a new bucket named parsec with the features object locking toggled on.

After that you will need to restart the parsec-server (that likely exited because it wasn’t able to access the S3 bucket):

docker compose -f parsec-server.docker.yaml restart parsec-server

Test the SMTP configuration & server

You can test mailhog with the following script:

ping-mailhog.sh
 1# shellcheck disable=SC2148
 2set -a
 3source parsec-smtp.env
 4
 5curl \
 6    --url "smtp://127.0.0.1:$PARSEC_EMAIL_PORT" \
 7    --user "$PARSEC_EMAIL_HOST_USER@localhost:$PARSEC_EMAIL_HOST_PASSWORD" \
 8    --mail-from "$PARSEC_EMAIL_SENDER" \
 9    --mail-rcpt rcpt@test.com \
10    --upload-file <(date --rfc-3339=seconds)

You can then check if the email is present in the web interface at http://127.0.0.1:8025

Deploy with Linux

This section describes how to install Parsec Server directly on Linux.

This method is an alternative to the Container-Based deployment.

Additional Requirements

In addition to the base requirements, you will need:

  • Python v3.12 with pip and venv modules

  • Parsec Server (Python package), available at https://pypi.org/project/parsec-cloud/

    • It can be installed with pip (see Installation step below).

    • To perform an offline install, you will need to download the package and all its dependencies. You can do this with pip download.

Set up

Configure the env files as described in Set up the env files.

Installation

  1. Set up a virtual env:

    python -m venv venv
    
  2. Activate the virtual env in your current shell:

    source venv/bin/activate
    
  3. Install Parsec Server:

    python -m pip install 'parsec-cloud==3.9.0'
    
  4. Apply database migrations:

    $ set -a
    $ source parsec-db.env
    $ python -m parsec migrate
    

Start the server

  1. Create a wrapper script run-parsec-server with the following content:

    run-parsec-server
    # Load the virtual env
    source venv/bin/activate
    
    # Load the env files into the environment table
    set -a
    source parsec-admin-token.env
    source parsec-db.env
    source parsec-smtp.env
    source parsec-s3.env
    source parsec.env
    set +a
    
    # Start Parsec Server
    python -m parsec run
    
  2. Make the script executable

    chmod +x run-parsec-server
    
  3. Start Parsec Server with the wrapper:

    ./run-parsec-server
    

Start using Parsec Server

Create an Organization

Follow the steps below to create an Organization (replace ORG_NAME with the desired name for your organization)

  1. Create the organization

    $ set -a
    $ source parsec-admin-token.env
    $ export SSL_CAFILE=$PWD/custom-ca.crt
    $ parsec-cli organization create --addr parsec3://127.0.0.1:6777
    [...]
    Bootstrap organization url: [...]
    

    Save the Bootstrap organization url to create the first user (owner) of the Organization.

  2. Start Parsec with the custom CA:

    $ export SSL_CAFILE=$PWD/custom-ca.crt
    $ parsec
    
  3. Bootstrap the Organization (create its first User)

    1. Got to Menu β€£ Join an organization`

    2. Paste the Bootstrap organization url from before (should already be filled in the text field)

    3. Follow the instructions to create the first user of the Organization.

Running behind a reverse proxy

To run Parsec behind a reverse proxy you will need to add the option --proxy-trusted-address or set the environment variable PARSEC_PROXY_TRUSTED_ADDRESS to the address of the reverse proxy (e.g.: localhost).

If this option is not set, the gunicorn/uvicorn FORWARDED_ALLOW_IPS environment variable is used, defaulting to trusting only localhost if absent.

Tip

You can provide multiple addresses by separating them with a comma. For example: --proxy-trusted-address '::1,10.0.0.42' will trust the addresses ::1 and 10.0.0.42

An example of a reverse proxy configuration for nginx can be found in the Docker Compose file:

parsec-server.docker.yaml
 2  parsec-proxy:
 3    depends_on:
 4      - parsec-server
 5    image: nginx:1.27-alpine
 6    container_name: parsec-proxy
 7    ports:
 8      - 443:443
 9      - 80:80
10    volumes:
11      - ./parsec-nginx.conf:/etc/nginx/nginx.conf:ro
12      - ./parsec-proxy.crt:/certs/proxy.crt:ro
13      - ./parsec-proxy.key:/certs/proxy.key:ro

Use the following Nginx configuration file to serve the domain example.com by listening on port 80 and 443, and proxy the requests to the Parsec Server.

parsec-nginx.conf
 1events {
 2    worker_connections 128;
 3}
 4
 5
 6http {
 7    server {
 8        listen 80;
 9        listen 443 ssl;
10        server_name example.com;
11        http2 on;
12        # Hide version number
13        server_tokens off;
14
15        # Only provide tlsv1.3
16        ssl_protocols       TLSv1.3;
17        ssl_certificate     /certs/proxy.crt;
18        ssl_certificate_key /certs/proxy.key;
19
20        location ~ ^/authenticated/.*/events$ {
21            proxy_pass https://parsec-server:6777;
22
23            # Specific configuration for SSE:
24            # Disable buffering, cache & chunking
25            proxy_buffering             off;
26            proxy_cache                 off;
27            chunked_transfer_encoding   off;
28            proxy_read_timeout          24h;
29
30            # Add X-Forwarded headers to the proxied request
31            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
32            proxy_set_header X-Forwarded-Proto $scheme;
33            proxy_set_header X-Forwarded-Host $host;
34            proxy_set_header X-Forwarded-Port $server_port;
35
36            # Remove the Forwarded header
37            proxy_set_header Forwarded "";
38
39            # Overwrite the Host header
40            proxy_set_header Host example.com;
41
42        }
43
44        location / {
45            proxy_pass https://parsec-server:6777;
46
47            # Add X-Forwarded headers to the proxied request
48            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
49            proxy_set_header X-Forwarded-Proto $scheme;
50            proxy_set_header X-Forwarded-Host $host;
51            proxy_set_header X-Forwarded-Port $server_port;
52
53            # Remove the Forwarded header
54            proxy_set_header Forwarded "";
55
56            # Overwrite the Host header
57            proxy_set_header Host example.com;
58        }
59    }
60}

The important takeaways are:

  • Set the X-Forwarded-For, X-Forwarded-Proto, X-Forwarded-Host and X-Forwarded-Port headers.

    • Currently, Parsec only uses the X-Forwarded-For and X-Forwarded-Proto headers, but it is better to set all of them to avoid any issue.

  • Remove the Forwarded header.

    • The Forwarded header (RFC-7239) is not used by Parsec, but it may be in the future.

  • Set the header host to the accessible address. Here we force the value to be example.com, but you can set it to $host like for X-Forwarded-Host.

TLS Recommendation

We recommend that connections to the service are made using a TLS layer. If you are using a reverse proxy refer to it’s documentation on how to configure TLS:

Or if you do not use a reverse proxy, see how to configure TLS on the server.

TLS Server configuration

We recommend that when user directly connects to the server (i.e. without using a reverse proxy) to configure the TLS settings on the server.

We provide 3 options to configure the TLS connection:

  • --ssl-keyfile (PARSEC_SSL_KEYFILE): The TLS key file

  • --ssl-certfile (PARSEC_SSL_CERTFILE): The TLS certificate file

  • --ssl-ciphers (PARSEC_SSL_CIPHERS): A list of ciphers that can be used when the client & server negotiate which algorithm to use when doing the TLS handcheck

    Note

    You are not required to provide the ciphers list as we use a default list that was recommended by the French Cybersecurity Agency (ANSSI) in Recommandations de sΓ©curitΓ© relatives Γ  TLS

If you followed the installation described in Deploy with Docker, you should only have to replace the file s parsec-server.crt and parsec-server.key that where generated on section TLS certificates. The env variables PARSEC_SSL_KEYFILE and PARSEC_SSL_CERTFILE are already configured in parsec.env (see Parsec env file).