# HG changeset patch # User Alain Mazy # Date 1719566129 -7200 # Node ID 28c52e047cf19a79671ed01bc3179ce54f37f96c # Parent 05d37a5abcc454b7c4fb4582a5a8648079beafd5# Parent 337bbecf74c0d96c91ca0169300ce32e9b3e7e2c merge diff -r 05d37a5abcc4 -r 28c52e047cf1 Sphinx/source/plugins/object-storage.rst --- a/Sphinx/source/plugins/object-storage.rst Fri Jun 28 11:15:17 2024 +0200 +++ b/Sphinx/source/plugins/object-storage.rst Fri Jun 28 11:15:29 2024 +0200 @@ -10,42 +10,75 @@ ------------- Release notes are available `here -`__ - +`__. + Introduction ------------ -These 3 plugins enable storing the Orthanc files in `Object Storage `__ -at the 3 main Cloud providers: `AWS `__, -`Azure `__ & -`Google Cloud `__ +These 3 plugins enable storing the Orthanc files into `object storage +`__ at the 3 public +cloud providers: `AWS `__, `Azure +`__, and +`Google Cloud `__. -Storing Orthanc files in object storage and your index SQL in a -managed database allows you to have a stateless Orthanc that does -not store any data in its local file system which is highly recommended +Storing Orthanc files in object storage and your index SQL in a +managed database allows you to have a stateless Orthanc that does not +store any data in its local file system, which is highly recommended when deploying an application in the cloud. Pre-compiled binaries --------------------- -These 3 plugins are provided as part of the ``orthancteam/orthanc`` :ref:`Docker images `. -The AWS plugin is available in the default Docker images while the Azure and Google plugins are available -in the ``-full`` images. +Note about proprietary cloud storage +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +These plugins are used to interface Orthanc with commercial and +proprietary cloud services that you accept to pay. As a consequence, +the Orthanc project usually doesn't freely update them or fix them +unless the requester purchases a support contract, e.g., at `Orthanc +Team `__. + +Although you are obviously free to compile these plugins by +yourself (instructions are given below), purchasing such support +contracts makes the Orthanc project sustainable in the long term, to +the benefit of the worldwide community of medical imaging. + + +``orthancteam/orthanc`` Docker image +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +All the 3 plugins are provided as part of the ``orthancteam/orthanc`` +:ref:`Docker images `. The AWS plugin is available +in the default Docker images, while the Azure and Google plugins are +available in the ``-full`` images. + + +AWS S3 plugin +^^^^^^^^^^^^^ + +Because the AWS S3 plugin is compatible with free and open-source +implementations of the S3 protocol (notably MinIO and Ceph), we +provide pre-compiled binaries of the AWS S3 plugin, which can be found +at the following locations: + +* In the `official Microsoft Windows installers `__, starting with release 24.6.3. +* For `Microsoft Windows 32 `__, +* For `Microsoft Windows 64 `__, +* For `cross-distribution Linux `__, +* In the :ref:`backport Debian repository ` (notably compatible with Ubuntu 22.04 and 24.04), +* In the :ref:`jodogne/orthanc Docker images `, +* In the :ref:`orthancteam/orthanc Docker images `. + + +Microsoft Azure plugin +^^^^^^^^^^^^^^^^^^^^^^ The Azure plugin is also available as part of the `Windows Installer `__ (only for 64bits platform). -These plugins are used to interface Orthanc with commercial and -proprietary cloud services that you accept to pay. As a consequence, -the Orthanc project usually doesn't freely update them or fix them unless -the requester purchases a support contract e.g. at `Orthanc Team `__. -Although you are obviously free to compile these plugins by -yourself (instructions are given below), purchasing such support -contracts makes the Orthanc project sustainable in the long term, to -the benefit of the worldwide community of medical imaging. Configuration @@ -91,6 +124,12 @@ The **UseTransferManager** configuration is used to select the `Transfer Manager `__ mode in the AWS SDK client. This option was introduced in version 2.3.0. If set to false (default value), the default "object" mode is used. +**Important:** On Microsoft Windows, it is recommended to set the +environment variable ``AWS_EC2_METADATA_DISABLED`` to ``true`` to +speed up the initialization of the plugin. The reasons are explained +in the `AWS official documentation +`__. + .. _minio: @@ -209,7 +248,7 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When the ``HybridMode`` is set to ``WriteToFileSystem``, it is sometimes useful to move old files -to the object-storage for long term archive or to `pre-fetch` files from object-storage to file +to the object-storage for long term archive or to "pre-fetch" files from object-storage to file system for improved performances e.g when before opening the study in a viewer. When the ``HybridMode`` is set to ``WriteToObjectStorage``, it is useful to move file from the @@ -236,12 +275,12 @@ The **StorageStructure** configuration allows you to select the way objects are organized within the storage (``flat`` or ``legacy``). Unlike the traditional file system in which Orthanc uses 2 levels -of folders, object storages usually have no limit on the number of files per folder and +of folders, an object storage usually has no limit on the number of files per folder and therefore all objects are stored at the root level of the object storage. This is the -default ``flat`` behaviour. Note that, in the ``flat`` mode, an extension `.dcm` or `.json` +default ``flat`` behavior. Note that, in the ``flat`` mode, an extension ``.dcm`` or ``.json`` is added to the filename which is not the case in the legacy mode. -The ``legacy`` behaviour mimics the Orthanc File System convention. This is actually helpful +The ``legacy`` behavior mimics the Orthanc File System convention. This is actually helpful when migrating your data from a file system to an object storage since you can copy all the file hierarchy as is. @@ -332,7 +371,7 @@ The format of data stored on disk is therefore the following: -- **VERSION HEADER**: 2 bytes: identify the structure of the following data currently `A1` +- **VERSION HEADER**: 2 bytes: identify the structure of the following data currently ``A1`` - **MASTER KEY ID**: 4 bytes: a numerical ID of the KEK that was used to encrypt the DEK - **EIV**: 32 bytes: IV used by DEK for data encryption; encrypted by KEK - **EDEK**: 32 bytes: the DEK encrypted by the KEK. @@ -348,11 +387,11 @@ openssl rand -base64 -out /tmp/test.key 32 -Each key must have a unique id that is a uint32 number. +Each key must have a unique id that is a ``uint32`` number. .. highlight:: json -Here's a sample configuration file of the `StorageEncryption` section of the plugins:: +Here's a sample configuration file of the ``StorageEncryption`` section of the plugins:: { "GoogleCloudStorage" : { @@ -418,7 +457,7 @@ **NB:** If you don't want to use vcpkg, you can use the following command (this syntax is not compatible with Ninja yet):: - $ cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_VCPKG_PACKAGES=OFF -DUSE_SYSTEM_GOOGLE_TEST=OFF ../../orthanc-object-storage/Aws + $ cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_VCPKG_PACKAGES=OFF -DUSE_SYSTEM_GOOGLE_TEST=OFF -DUSE_SYSTEM_ORTHANC_SDK=OFF ../../orthanc-object-storage/Aws $ make Crypto++ must be installed (on Ubuntu, run ``sudo apt install libcrypto++-dev``).