Restore Dataset Using Docker

These steps will help as a guide to restore dotCMS dataset (database and assets) using docker compose, on local machine for testing purposes.

Please note also that versions 22.02 and later include a simple menu button for exporting assets and database dumps.

1. Install Docker#


To install Docker, follow the steps here: https://docs.docker.com/engine/install/

In most cases, the easiest approach is to install Docker Desktop, though Linux servers may instead opt for one of the packages in the Server section.

a. Install Docker Compose#

If you installed Docker Desktop in Step 1, this is already installed. Otherwise, follow the steps here: https://docs.docker.com/compose/install/

2. Create docker-compose File#


Copy this docker-compose.yml file to use as an example; change as needed.

version: '3.5' networks: db_net: es_net: volumes: cms-shared: dbdata: esdata: services: ################################################################################ elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2 environment: - cluster.name=elastic-cluster - discovery.type=single-node - data - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xmx3G " ports: - 9200:9200 - 9600:9600 volumes: - esdata:/usr/share/elasticsearch/data networks: - es_net ################################################################################ dotcms: image: dotcms/dotcms:22.03_lts environment: "CATALINA_OPTS": '-Xmx1g ' "DB_BASE_URL": "jdbc:postgresql://db/dotcms" "DB_USERNAME": 'dotcmsdbuser' "DB_PASSWORD": 'password' "DOT_ES_AUTH_BASIC_PASSWORD": 'admin' "DOT_ES_ENDPOINTS": 'http://elasticsearch:9200' "DOT_INITIAL_ADMIN_PASSWORD": 'admin' depends_on: - db - elasticsearch volumes: - cms-shared:/data/shared networks: - db_net - es_net ports: - "8082:8082" - "8443:8443" ################################################################################ db: image: dotcms/postgres:15 command: postgres -c 'max_connections=400' -c 'shared_buffers=512MB' -c 'effective_cache_size=1536MB' -c 'maintenance_work_mem=128MB' environment: "POSTGRES_USER": 'dotcmsdbuser' "POSTGRES_PASSWORD": 'db_pass' "POSTGRES_DB": 'dotcms' networks: - db_net volumes: - dbdata:/var/lib/postgresql/data restart: "unless-stopped" ports: - "5432:5432"

3. Create Directories#


a. Base Directories#

Create the directory paths shared and logs on the same path that the docker-compose.yml file will read from:

mkdir shared logs

b. Asset Directories#

Next, create an assets directory under the shared path like this: ./shared/assets/ and place the assets from your dataset on that folder.

4. Move Plugins#


If there are any Dynamic Plugins (OSGi), place them in the ./shared/felix/load/ directory.

Any undeployed OSGi plugins should be moved to ./shared/felix/undeployed/

5. Adjust Folder Permissions#


Change the permissions on the shared and logs paths to userid and groupid 65001, which is the userid that dotCMS runs inside the container:

sudo chown -R 65001.65001 shared sudo chown -R 65001.65001 logs

This should result in something like the following:

dotcms-standalone $ ls -lha total 20K drwxrwxr-x 4 dotcmsuser dotcmsuser 4.0K Jan 8 14:31 . drwxrwxr-x 4 dotcmsuser dotcmsuser 4.0K Jan 7 08:46 .. -rw-rw-r-- 1 dotcmsuser dotcmsuser 1.7K Jan 7 14:43 docker-compose.yml drwxrwxr-x 2 65001 65001 4.0K Jan 8 14:31 logs drwxrwxr-x 2 65001 65001 4.0K Jan 8 14:31 shared

6. Start the DB Container#


For now, just start the DB container to restore the database (use -d to run it as daemon):

docker compose up db

7. Restore Database#


Restore the database by connecting with the credentials on the docker-compose.yml file, similar to restoring any other database dump in Postgresql:

psql -U dotcmsdbuser dotcms -h localhost

Enter your password when prompted, and then use:

dotcms=# \i dotcms-prod-restore.sql

8. Stop the Database Container#


Stop the docker compose with stop or control + c, if it was not running as daemon.

docker compose stop

9. Reinitialize and Reindex#


Start docker compose with all the services (use -d to run it as daemon):

docker compose up -d

At this point, you should be able to access your dotCMS instance running with the restored dataset by accessing http://localhost:8082 in the browser. To conclude the restoration process, simply complete a full reindex of content.

Please note that this has been an example presented for testing purposes, and as such is simpler than a typical production environment.