This is a step-by-step guide to install Documentum 20.2 in a Linux environment with PostgreSQL 11 and Docker.
Some notes before starting:
- Bundled scripts are from 16.7 (be careful with the paths)
- Container image still has a lot of “wasted” space:
- +0.5GB on /tmp
- +0.5GB on files for windows/hpux/aix on a Linux image
- Provided yml scripts are for an outdated docker composer version and don’t work OOTB
Environment
Host:
Windows 10 x64 8GB RAM
VMware Workstation Player 15
Guest:
CentOS 7.7 x64 25GB HD 4GB RAM 2 cores
PostgreSQL 11
Docker 19.03.4
VM Creation + PostgreSQL 11 configuration
You can just follow the procedure described in Opentext Documentum 20.2 PostgreSQL Developer Edition, as I’ve used the same VM for this one.
Docker configuration
- Install docker:
[dmadmin@dctm202 ~]$ sudo yum install -y yum-utils && device-mapper-persistent-data && lvm2 [dmadmin@dctm202 ~]$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo [dmadmin@dctm202 ~]$ sudo yum install -y docker-ce docker-ce-cli containerd.io [dmadmin@dctm202 ~]$ sudo systemctl start docker
- Install docker compose and check it is correctly installed:
[dmadmin@dctm202 docker]$ sudo yum install -y epel-release [dmadmin@dctm202 docker]$ sudo yum install -y python-pip [dmadmin@dctm202 docker]$ sudo pip install docker-compose [dmadmin@dctm202 docker]$ sudo yum upgrade python* [dmadmin@dctm202 docker]$ docker-compose version docker-compose version 1.25.4, build unknown docker-py version: 4.2.0 CPython version: 2.7.5 OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
Docker configuration
- Import image:
[dmadmin@dctm202 docker]$ docker load -i Contentserver_Centos.tar 9e607bb861a7: Loading layer [==================================================>] 227.4MB/227.4MB 0b8351dad8f5: Loading layer [==================================================>] 156MB/156MB 0bdffe493043: Loading layer [==================================================>] 331.9MB/331.9MB 4477c4933872: Loading layer [==================================================>] 3.072kB/3.072kB 2cb92160ff08: Loading layer [==================================================>] 83.45MB/83.45MB 3791acd2392f: Loading layer [==================================================>] 11.92MB/11.92MB 9edf87e7e96b: Loading layer [==================================================>] 267.3kB/267.3kB f823733197a1: Loading layer [==================================================>] 3.297MB/3.297MB 8175917577fb: Loading layer [==================================================>] 46.08kB/46.08kB 66c808159e56: Loading layer [==================================================>] 15.53MB/15.53MB c60aa2091bd5: Loading layer [==================================================>] 98.3kB/98.3kB b148e43b1fc1: Loading layer [==================================================>] 2.667GB/2.667GB 2cd48c26512d: Loading layer [==================================================>] 7.168kB/7.168kB 03eb108f7247: Loading layer [==================================================>] 12.6MB/12.6MB ba3de33f6548: Loading layer [==================================================>] 2.56kB/2.56kB Loaded image: contentserver/centos/stateless/cs:20.2.0000.0110
- Create PostgreSQL tablespace file (Remember that you also need to add the container’s IP to the pg_hba file in order to be able to connect from the contanier)
[dmadmin@dctm202 dctmdocker]$ su - postgres Password: Last login: Sat Oct 19 19:39:49 CEST 2019 on pts/0 -bash-4.2$ mkdir /var/lib/pgsql/11/data/db_dockerdctm167_dat.dat -bash-4.2$ exit logout
- Set required environment variables:
[dmadmin@dctm202 Scripts]$ vi ~/.bash_profile export APP_SERVER_PASSWORD=dmadmin export INSTALL_OWNER_PASSWORD=dmadmin export ROOT_PASSWORD=dmadmin export DOCBASE_PASSWORD=dmadmin export DATABASE_PASSWORD=dmadmin export GLOBAL_REGISTRY_PASSWORD=dmadmin export AEK_PASSPHRASE=dmadmin
- Configure file CS-Docker-Compose_Stateless.yml:
version: '3.7' services: rcs: image: contentserver/centos/stateless/cs:20.2.0000.0110 environment: - DOCKER_HOST=192.168.94.130 - DATABASE_HOST=192.168.94.130 - DATABASE_USER=postgres - DATABASE_PASSWORD=${DATABASE_PASSWORD} - DATABASE_SERVER_PORT=5432 - SERVICE_NAME=MyPostgres - ROOT_PASSWORD=${ROOT_PASSWORD} - INSTALL_OWNER=dmadmin - INSTALL_OWNER_PASSWORD=${INSTALL_OWNER_PASSWORD} - DOCBASE_NAME=dctmdocker202 - GLOBAL_REGISTRY_PASSWORD=${GLOBAL_REGISTRY_PASSWORD} - AEK_ALGORITHM=AES_256_CBC - AEK_PASSPHRASE=${AEK_PASSPHRASE} - AEK_NAME=CSaek - CONFIGURE_THUMBNAIL_SERVER=NO - THUMBNAIL_SERVER_PORT=8081 - THUMBNAIL_SERVER_SSL_PORT=8443 - EXTERNAL_DOCBROKER_PORT=1689 - CONTENTSERVER_PORT=50000 - APP_SERVER_PASSWORD=${APP_SERVER_PASSWORD} - INSTALL_OWNER_UID=1000 - HIGH_VOLUME_SERVER_LICENSE= - TRUSTED_LICENSE= - STORAGEAWARE_LICENSE= - XMLSTORE_LICENSE= - SNAPLOCKSTORE_LICENSE= - RPS_LICENSE= - FED_RECD_SERVICE_LICENSE= - RECORD_MANAGER_LICENSE= - PRM_LICENSE= - DOCBASE_PASSWORD=${DOCBASE_PASSWORD} - INSTALLER_UI=silent - KEEP_TEMP_FILE=true - INSTALLER_DEBUG_LOG=true - DOCBASE_ID=453216 - USE_EXISTING_DATABASE_ACCOUNT= - INDEXSPACE_NAME=DM_XCHIVE_DOCBASE - USE_EXISTING_AEK=false hostname: "dctmdocker202" container_name: "dctmdocker202" ports: - "1689:1689" - "1690:1690" - "50000:50000" - "50001:50001" - "9080:9080" - "9082:9082" - "9081:9081" - "9084:9084" - "8081:8081" - "8443:8443" volumes: - DocbaseName_odbc:/opt/dctm/odbc - DocbaseName_data:/opt/dctm/data - DocbaseName_dba:/opt/dctm/dba - DocbaseName_share:/opt/dctm/share - DocbaseName_dfc:/opt/dctm/config - DocbaseName_mdserver_conf:/opt/dctm/mdserver_conf - DocbaseName_mdserver_log:/opt/dctm/wildfly17.0.1/server/DctmServer_MethodServer/log - DocbaseName_mdserver_logs:/opt/dctm/wildfly17.0.1/server/DctmServer_MethodServer/logs - DocbaseName_Thumbnail_Server_conf:/opt/dctm/product/20.2/thumbsrv/conf - DocbaseName_Thumbnail_Server_webinf:/opt/dctm/product/20.2/thumbsrv/container/webapps/thumbsrv/WEB-INF - DocbaseName_xhive_storage:/opt/dctm/xhive_storage - DocbaseName_XhiveConnector:/opt/dctm/wildfly17.0.1/server/DctmServer_MethodServer/deployments/XhiveConnector.ear - DocbaseName_MigrationUtility:/opt/dctm/product/20.2/install/external_apps/MigrationUtil privileged: true #'volumes' service definition: volumes: DocbaseName_data: driver: local driver_opts: type: none o: bind device: /opt/docker/data DocbaseName_share: driver: local driver_opts: type: none o: bind device: /opt/docker/share DocbaseName_dba: DocbaseName_dfc: DocbaseName_odbc: DocbaseName_mdserver_conf: DocbaseName_mdserver_log: DocbaseName_mdserver_logs: DocbaseName_Thumbnail_Server_conf: DocbaseName_Thumbnail_Server_webinf: DocbaseName_XhiveConnector: driver: local driver_opts: type: none o: bind device: /opt/docker/xhive DocbaseName_xhive_storage: driver: local driver_opts: type: none o: bind device: /opt/docker/xhive_storage DocbaseName_MigrationUtility:
Note: As usual, documentation is lacking/wrong and the scripts don’t work at all. This is the list of parameters that I had to change in CS-Docker-Compose_Stateless.yml file in order for docker compose to work:
image: contentserver/centos/stateless/cs:16.7.0000.0810 environment: - DOCKER_HOST=192.168.94.130 - DATABASE_HOST=192.168.94.130 - DOCBASE_NAME=dctmdocker202 hostname: "dctmdocker202" container_name: "dctmdocker202" ports: - "1689:1689" - "1690:1690" - "50000:50000" - "50001:50001" - "9080:9080" - "9082:9082" - "9081:9081" - "9084:9084" - "8081:8081" - "8443:8443" volumes: DocbaseName_data: driver: local driver_opts: type: none o: bind device: /opt/docker/data DocbaseName_share: driver: local driver_opts: type: none o: bind device: /opt/docker/share DocbaseName_XhiveConnector: driver: local driver_opts: type: none o: bind device: /opt/docker/xhive DocbaseName_xhive_storage: driver: local driver_opts: type: none o: bind device: /opt/docker/xhive_storage
- Run the docker compose file:
[dmadmin@dctm202 Scripts]$ docker-compose -f CS-Docker-Compose_Stateless.yml up -d Creating volume "scripts_DocbaseName_mdserver_logs" with default driver Creating volume "scripts_DocbaseName_dfc" with default driver Creating volume "scripts_DocbaseName_XhiveConnector" with local driver Creating volume "scripts_DocbaseName_Thumbnail_Server_conf" with default driver Creating volume "scripts_DocbaseName_Thumbnail_Server_webinf" with default driver Creating volume "scripts_DocbaseName_data" with local driver Creating volume "scripts_DocbaseName_dba" with default driver Creating volume "scripts_DocbaseName_mdserver_conf" with default driver Creating volume "scripts_DocbaseName_mdserver_log" with default driver Creating volume "scripts_DocbaseName_odbc" with default driver Creating volume "scripts_DocbaseName_share" with local driver Creating volume "scripts_DocbaseName_xhive_storage" with local driver Creating volume "scripts_DocbaseName_MigrationUtility" with default driver Creating dctmdocker202 ... done
Remember that if something goes wrong you’ll have to:
- Stop the container
- Delete the container
- Delete the volumes created
Once the process finishes, you should be able to idql from the container:
[dmadmin@dctm202 ~]$ docker exec -i -t dctmdocker202 /bin/basht dctmdocker202 /bin/bash [root@dctmdocker202 /]# su - dmadmin [dmadmin@dctmdocker202 ~]$ idql dctmdocker202 Please enter a user (dmadmin): Please enter password for dmadmin: OpenText Documentum idql - Interactive document query interface Copyright (c) 2020. OpenText Corporation All rights reserved. Client Library Release 20.2.0000.0082 Connecting to Server using docbase dctmdocker202 [DM_SESSION_I_SESSION_START]info: "Session 0106ea608000016c started for user dmadmin." Connected to OpenText Documentum Server running Release 20.2.0000.0110 Linux64.Postgres 1>
[…] So let’s assume we can use an actual container, that can be scaled up quickly, and won’t force us to “redeploy” a Centos OS on each container (for Tomcat, as DA is not a process and should not be “a container”), what should we do? Here we go (Note that I’ve used the same VM used for Opentext Documentum 20.2 Docker with PostgreSQL install guide): […]
LikeLike