diff --git a/examples/simple/config/dhis.conf b/examples/simple/config/dhis.conf
new file mode 100644
index 0000000..4f4a4bf
--- /dev/null
+++ b/examples/simple/config/dhis.conf
@@ -0,0 +1,7 @@
+connection.dialect = org.hibernate.dialect.PostgreSQLDialect
+connection.driver_class = org.postgresql.Driver
+connection.url = jdbc:postgresql://db/dhis
+connection.username = dhis
+connection.password = dhis
+
+tracker.import.preheat.cache.enabled=off
\ No newline at end of file
diff --git a/examples/simple/config/log4j2.xml b/examples/simple/config/log4j2.xml
new file mode 100644
index 0000000..e332f21
--- /dev/null
+++ b/examples/simple/config/log4j2.xml
@@ -0,0 +1,40 @@
+
+
+
+
+ %-5level %c [%t] %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/simple/config/nginx.conf b/examples/simple/config/nginx.conf
new file mode 100644
index 0000000..231d5f2
--- /dev/null
+++ b/examples/simple/config/nginx.conf
@@ -0,0 +1,50 @@
+worker_processes 1;
+
+events {
+ worker_connections 1024;
+}
+
+http {
+ upstream web {
+ server web:8080 max_fails=3 fail_timeout=60s;
+ }
+
+ gzip on; # Enables compression, incl Web API content-types
+ gzip_types
+ "application/json;charset=utf-8" application/json
+ "application/javascript;charset=utf-8" application/javascript text/javascript
+ "application/xml;charset=utf-8" application/xml text/xml
+ "text/css;charset=utf-8" text/css
+ "text/plain;charset=utf-8" text/plain;
+
+ server {
+ listen 80;
+ port_in_redirect off;
+
+ root /data/apps;
+
+ client_max_body_size 25m;
+
+ # Redirect required to prevent 403 error on / access
+ rewrite ^/$ $scheme://$http_host/dhis-web-dashboard redirect;
+
+ location / {
+ include mime.types;
+ try_files $uri $uri/ $uri/index.html @web;
+ }
+
+ # location /screenshot {
+ # proxy_set_header Host $http_host;
+ # proxy_set_header X-Real-IP $remote_addr;
+ # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ # proxy_pass http://screenshot:9000;
+ # }
+
+ location @web {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://web;
+ }
+ }
+}
diff --git a/examples/simple/config/server.xml b/examples/simple/config/server.xml
new file mode 100644
index 0000000..86e2951
--- /dev/null
+++ b/examples/simple/config/server.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/simple/docker-compose.yml b/examples/simple/docker-compose.yml
new file mode 100644
index 0000000..424488b
--- /dev/null
+++ b/examples/simple/docker-compose.yml
@@ -0,0 +1,63 @@
+version: "3.8"
+
+services:
+ web:
+ image: "${DHIS2_IMAGE:-dhis2/core:2.40.1}"
+ restart: unless-stopped
+ volumes:
+ - files:/opt/dhis2
+ - ./config/dhis.conf:/opt/dhis2/dhis.conf:ro
+ - ./config/log4j2.xml:/opt/dhis2/log4j2.xml:ro
+ - ./config/server.xml:/usr/local/tomcat/conf/server.xml
+ environment:
+ JAVA_OPTS: "-Dcontext.path='${DHIS2_CORE_CONTEXT_PATH:-}' \
+ -Dlog4j2.configurationFile=/opt/dhis2/log4j2.xml"
+ depends_on:
+ db:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "wget -q -S -O /dev/null http://127.0.0.1:8080/dhis-web-commons/security/login.action 2>&1| grep -q 'HTTP.*200'"]
+ start_period: 120s
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ security_opt:
+ - no-new-privileges:true
+
+ db:
+ image: postgis/postgis
+ restart: unless-stopped
+ volumes:
+ - postgresql:/var/lib/postgresql
+ environment:
+ POSTGRES_USER: dhis
+ POSTGRES_DB: dhis
+ POSTGRES_PASSWORD: &postgres_password dhis
+ PGPASSWORD: *postgres_password # needed by psql in healthcheck
+ healthcheck:
+ test: ["CMD-SHELL", "psql --no-password --quiet --username $$POSTGRES_USER postgres://127.0.0.1/$$POSTGRES_DB -p 5432 --command \"SELECT 'ok'\" > /dev/null"]
+ start_period: 120s
+ interval: 10s
+ timeout: 3s
+ retries: 5
+ security_opt:
+ - no-new-privileges:true
+
+ gateway:
+ image: nginx
+ restart: always
+ depends_on:
+ web:
+ condition: service_healthy
+ ports:
+ - "${DHIS2_PORT:-8080}:80"
+ volumes:
+ - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
+ security_opt:
+ - no-new-privileges:true
+
+volumes:
+ files:
+ driver: local
+ postgresql:
+ driver: local
diff --git a/simple/config/dhis.conf b/simple/config/dhis.conf
new file mode 100644
index 0000000..4f4a4bf
--- /dev/null
+++ b/simple/config/dhis.conf
@@ -0,0 +1,7 @@
+connection.dialect = org.hibernate.dialect.PostgreSQLDialect
+connection.driver_class = org.postgresql.Driver
+connection.url = jdbc:postgresql://db/dhis
+connection.username = dhis
+connection.password = dhis
+
+tracker.import.preheat.cache.enabled=off
\ No newline at end of file
diff --git a/simple/config/log4j2.xml b/simple/config/log4j2.xml
new file mode 100644
index 0000000..e332f21
--- /dev/null
+++ b/simple/config/log4j2.xml
@@ -0,0 +1,40 @@
+
+
+
+
+ %-5level %c [%t] %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/simple/config/nginx.conf b/simple/config/nginx.conf
new file mode 100644
index 0000000..231d5f2
--- /dev/null
+++ b/simple/config/nginx.conf
@@ -0,0 +1,50 @@
+worker_processes 1;
+
+events {
+ worker_connections 1024;
+}
+
+http {
+ upstream web {
+ server web:8080 max_fails=3 fail_timeout=60s;
+ }
+
+ gzip on; # Enables compression, incl Web API content-types
+ gzip_types
+ "application/json;charset=utf-8" application/json
+ "application/javascript;charset=utf-8" application/javascript text/javascript
+ "application/xml;charset=utf-8" application/xml text/xml
+ "text/css;charset=utf-8" text/css
+ "text/plain;charset=utf-8" text/plain;
+
+ server {
+ listen 80;
+ port_in_redirect off;
+
+ root /data/apps;
+
+ client_max_body_size 25m;
+
+ # Redirect required to prevent 403 error on / access
+ rewrite ^/$ $scheme://$http_host/dhis-web-dashboard redirect;
+
+ location / {
+ include mime.types;
+ try_files $uri $uri/ $uri/index.html @web;
+ }
+
+ # location /screenshot {
+ # proxy_set_header Host $http_host;
+ # proxy_set_header X-Real-IP $remote_addr;
+ # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ # proxy_pass http://screenshot:9000;
+ # }
+
+ location @web {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://web;
+ }
+ }
+}
diff --git a/simple/config/server.xml b/simple/config/server.xml
new file mode 100644
index 0000000..86e2951
--- /dev/null
+++ b/simple/config/server.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/simple/docker-compose.yml b/simple/docker-compose.yml
new file mode 100644
index 0000000..485fe81
--- /dev/null
+++ b/simple/docker-compose.yml
@@ -0,0 +1,65 @@
+version: "3.8"
+
+services:
+ web:
+ image: "${DHIS2_IMAGE:-dhis2/core:2.40.1}"
+ restart: unless-stopped
+ volumes:
+ - files:/opt/dhis2
+ - ./config/dhis.conf:/opt/dhis2/dhis.conf:ro
+ - ./config/log4j2.xml:/opt/dhis2/log4j2.xml:ro
+ - ./config/server.xml:/usr/local/tomcat/conf/server.xml
+ environment:
+ JAVA_OPTS: "-Dcontext.path='${DHIS2_CORE_CONTEXT_PATH:-}' \
+ -Dlog4j2.configurationFile=/opt/dhis2/log4j2.xml"
+ depends_on:
+ db:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "wget -q -S -O /dev/null http://127.0.0.1:8080/dhis-web-commons/security/login.action 2>&1| grep -q 'HTTP.*200'"]
+ start_period: 120s
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ security_opt:
+ - no-new-privileges:true
+
+ db:
+ image: postgis/postgis
+ restart: unless-stopped
+ ports:
+ - 127.0.0.1:5432:5432
+ volumes:
+ - postgresql:/var/lib/postgresql
+ environment:
+ POSTGRES_USER: dhis
+ POSTGRES_DB: dhis
+ POSTGRES_PASSWORD: &postgres_password dhis
+ PGPASSWORD: *postgres_password # needed by psql in healthcheck
+ healthcheck:
+ test: ["CMD-SHELL", "psql --no-password --quiet --username $$POSTGRES_USER postgres://127.0.0.1/$$POSTGRES_DB -p 5432 --command \"SELECT 'ok'\" > /dev/null"]
+ start_period: 120s
+ interval: 10s
+ timeout: 3s
+ retries: 5
+ security_opt:
+ - no-new-privileges:true
+
+ gateway:
+ image: nginx
+ restart: always
+ depends_on:
+ web:
+ condition: service_healthy
+ ports:
+ - "${DHIS2_PORT:-8080}:80"
+ volumes:
+ - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
+ security_opt:
+ - no-new-privileges:true
+
+volumes:
+ files:
+ driver: local
+ postgresql:
+ driver: local