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>



























































