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
Hi Alvaro,
I followed the same instruction for Documentum Server 22.4 setup on docker oraclelinux image using CS-Docker-Compose_Stateless.yml file but setup failed.
I pulled the dctm-server:22.4.0 from registry.opentext.com which is build on oraclelinux9
[dmadmin@cntrepo dctm22.4-stateless-deploy]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.opentext.com/dctm-server 22.4.0 9f3536c82f54 17 months ago 3.28GB
[dmadmin@cntrepo dctm22.4-stateless-deploy]$ docker-compose -f CS-Docker-Compose_Stateless.yml up -d
Creating network “dctm224-stateless-deploy_nw_cntrepo” with driver “bridge”
Creating volume “dctm224-stateless-deploy_cntrepo_data” with local driver
Creating volume “dctm224-stateless-deploy_cntrepo_share” with local driver
Creating volume “dctm224-stateless-deploy_cntrepo_dba” with default driver
Creating volume “dctm224-stateless-deploy_cntrepo_dfc” with default driver
Creating volume “dctm224-stateless-deploy_cntrepo_odbc” with default driver
Creating volume “dctm224-stateless-deploy_cntrepo_mdserver_conf” with default driver
Creating volume “dctm224-stateless-deploy_cntrepo_mdserver_logs” with default driver
Creating volume “dctm224-stateless-deploy_cntrepo_Thumbnail_Server_conf” with default driver
Creating volume “dctm224-stateless-deploy_cntrepo_Thumbnail_Server_webinf” with default driver
Creating volume “dctm224-stateless-deploy_cntrepo_XhiveConnector” with local driver
Creating volume “dctm224-stateless-deploy_cntrepo_xhive_storage” with local driver
Creating volume “dctm224-stateless-deploy_cntrepo_MigrationUtility” with default driver
Creating cntrepo … done
[dmadmin@cntrepo dctm22.4-stateless-deploy]$
[dmadmin@cntrepo dctm22.4-stateless-deploy]$
[dmadmin@cntrepo dctm22.4-stateless-deploy]$ docker-compose -f CS-Docker-Compose_Stateless.yml logs rcs
Attaching to cntrepo
cntrepo | In cs_startup.sh
cntrepo | cs_startup.sh failed
Could you please suggest where can be the issue due to which this issue is happening.
LikeLike
I have no idea as OT changes the script almost on every version… so only they know what they might have changed…
LikeLike
Thank you for your response!
I am happy to share that, following your guidance, I was able to successfully set up Documentum Server 22.4 with PostgreSQL 14.4 on Docker. Your blog has been extremely helpful throughout this process and has made learning and implementing these configurations much easier. I truly appreciate the effort you have put into sharing this knowledge. it has been a great resource.
[dmadmin@cntrepo logs]$ idql cntrepo
Picked up JAVA_TOOL_OPTIONS: -Djdk.util.zip.disableZip64ExtraFieldValidation=true
Please enter a user (dmadmin):
Please enter password for dmadmin:
OpenText Documentum idql - Interactive document query interface Copyright (c) 2022. OpenText Corporation All rights reserved. Client Library Release 22.4.0006.0146Connecting to Server using docbase cntrepo
[DM_SESSION_I_SESSION_START]info: “Session 0106ea6080000909 started for user dmadmin.”
Connected to OpenText Documentum Server running Release 22.4.00010.0191 Linux64.Postgre
1>
LikeLike