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.