.. _user/maintenance: ################## Backup and Restore ################## Backup and restore are administrative operations in Connectware. They are used to ensure reliable recovery of a Connectware installation after critical circumstances like hardware or software failures. The required data to backup consist of: #. Configuration files stored in shared docker container volumes. (This is less critical if all service commissioning files have been deployed using automated tools such as Ansible or similar, though.) #. Postgresql database for user, role, and permission setup. The recommended way of Connectware backup is to automate the backup procedure and execute it regularly. To restore Connectware properly, the data stored in the Docker volumes should be consistent with the user and permissions data stored in the database. Any creation or update of a Connectware service may result in a database change. It is recommended to start a backup of the Docker volumes and the database backup at approximately the same time. Also, during the backup operation there should be no changes in the service configuration. Only in this case the consistency in the restored Connectware instance data can be guaranteed. It is generally possible to restore the database across versions, too, i.e. from an older Connectware version's backup into a newer Connectware version. However, as Connectware is enhanced and new features are added, the database structure might change sometimes between versions. If there is such a change in the database structure, additional steps will be required as described below. This situation is going to be explained in the status message of the restore operation. .. note:: After a restore, Connectware should restart, and all Admin-UI browser sessions should be restarted as well. .. _user/maintenance/volumes: Volumes ======= The most reliable way of creating a backup of all Connectware-related data is to backup all used Docker volumes completely. (This might not be possible due to unavailable root permissions, but is the most secure way of backup for all Connectware.) All volumes that have been defined from the ``docker-compose.yml`` file can be backed up, and if they are all restored on any docker environment, the Connectware installation is fully restored. .. _user/maintenance/volumes/services: Service Commissioning File Volume --------------------------------- In order to back-up all service commissioning file data, the ``service-manager`` volume must be backed up. (In versions up to 1.0.82, the `protocol-mapper` volume(s) were also containing service commissioning file data, but starting with 1.0.83, all this data is stored only within the `service-manager` volume and there is no longer any actively used `protocol-mapper` volume.) Kubernetes ^^^^^^^^^^^^ In a Kubernetes installation, the content of the persistent volume `service-manager` needs to be backed up. The name of the volume is starting with `service-manager` and may have certain suffixes. The way of creating a backup and restoring this depends on the storage providers that are used in a specific Kubernetes installation. Docker-compose ^^^^^^^^^^^^^^^^^ In a `docker-compose` installation, the respective volume name is prepended by the docker-compose `project name`. This docker-compose project name is either given explicitly when running docker-compose e.g. using the ``-p`` option, or is taken from the current working directory, such as ``connectware``. If the project name is `connectware`, the respective volume name is `connectware_service-manager`. With the volume name given as e.g. `connectware_service-manager`, the actual storage location on a local harddisk can be looked up using the command ``docker volume inspect connectware_service-manager``. In a default docker configuration, this is the local harddisk directory - ``/var/lib/docker/volumes/connectware_service-manager/_data`` This directory must be backed up regularly, and restored if a restore operation is needed. An example command (requiring root privileges) which creates a compressed backup file ``/tmp/connectware-volume-backup.tgz`` looks like this: .. code-block:: bash cd /var/lib/docker/volumes; \ tar cvfz /tmp/connectware-volume-backup.tgz \ ./connectware_service-manager/_data To restore the volume data from the created backup file, use the following command: .. code-block:: bash cd /var/lib/docker/volumes; \ rm -rf ./connectware_service-manager/_data/*; \ tar xvfz /tmp/connectware-volume-backup.tgz .. _user/maintenance/database: User Database ============== Connectware provides REST APIs to perform database maintenance operations for backup and restore. For creating a backup, there is one REST call (shown below) to trigger the creation of the backup file. As this is a time-consuming operation, the creation of the backup file will be ongoing for some time and the status of the backup operation can be queried by another REST call. Once the creation of the backup file is completed, the resulting backup file can be downloaded by yet another REST call. For restoring the state of a backup, there is one REST call where the backup file can be uploaded and also the restore operation can be started immediately. Limitations of restore across versions --------------------------------------- In a cross-version scenario, where a backup file from an older version is used for restoring in a newer version, some seldom version combinations can occur where the restore operation is being refused due to database structure changes. In this case, Connectware database maintenance status message will report the last possible version that can be used to restore from the given backup file. If this backup file needs to be restored, it is necessary to downgrade the Connectware version to the reported older version. If such a Connectware version downgrade is necessary, first ensure another backup of all data. Then, shut down Connectware and remove the volumes named postgresql and service-manager (of which a backup was stored beforehand). Then, follow the regular steps for the installation of the older version, as described in detail in the following article: https://www.cybus.io/learn/installing-the-connectware After the older version is installed, the backup file can be used for restore again. After restoring from the backup file, it is recommended to upgrade the Connectware version again, then creating a new backup file which is now from the newer version. Example REST calls ------------------- To validate the status of a database maintenance operation, you can use the following CURL command: .. code-block:: bash curl -k --header "Content-Type: application/json" \ --request GET -u admin \ https:///api/maintenance/db The result looks like this: .. code-block:: text {"running":false,"backup":{"succeded":true,"id":"1.0.73_2022-02-16T15:37:19.242Z","statusMessage":"OK","startDate":"2022-02-16T15:37:19.242Z","endDate":"2022-02-16T15:37:19.270Z"},"restore":{"succeded":true,"id":"1.0.73_2022-02-16T10:19:11.377Z","statusMessage":"OK","startDate":"2022-02-16T15:38:39.197Z","endDate":"2022-02-16T15:38:39.385Z"}} To start the creation of a backup file, call the following CURL command: .. code-block:: bash curl -k --request POST -u admin \ https:///api/maintenance/db/backup On success, the request returns HTML status code ``202 (Accepted)``. To download the database backup in a file ``/tmp/connectware-db-backup.tgz``, call the following CURL command: .. code-block:: bash curl -k --request GET -u admin \ https:///api/maintenance/db/backup \ --output /tmp/connectware-db-backup.tgz To restore the database from the backup file ``/tmp/connectware-db-backup.tgz``, call the following CURL command: .. code-block:: bash curl -k --request POST -u admin \ -F file=@/tmp/connectware-db-backup.tgz \ https:///api/maintenance/db/restore On success, the request returns HTML status code ``202 (Accepted)``. After each operation, the database maintenance operation status can be queried again (as shown in the first command).