forked from openmrs/openmrs-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile
144 lines (109 loc) · 5.3 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# syntax=docker/dockerfile:1
# This Source Code Form is subject to the terms of the Mozilla Public License,
# v. 2.0. If a copy of the MPL was not distributed with this file, You can
# obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
# the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
#
# Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
# graphic logo is a trademark of OpenMRS Inc.
### Development Stage
FROM maven:3.8-jdk-11 as dev
WORKDIR /app
ENV DEPENDENCY_PLUGIN="org.apache.maven.plugins:maven-dependency-plugin:3.3.0"
ENV MVN_ARGS_SETTINGS="-s /usr/share/maven/ref/settings-docker.xml"
# Setup SDK
RUN mvn org.openmrs.maven.plugins:openmrs-sdk-maven-plugin:setup-sdk -DbatchAnswers=n -B $MVN_ARGS_SETTINGS
# Copy poms to resolve dependencies
COPY pom.xml .
COPY liquibase/pom.xml ./liquibase/
COPY tools/pom.xml ./tools/
COPY test/pom.xml ./test/
COPY web/pom.xml ./web/
COPY api/pom.xml ./api/
COPY webapp/pom.xml ./webapp/
# Resolve dependencies in order to cache them and run offline builds
# Store dependencies in /usr/share/maven/ref/repository for re-use when running
# If mounting ~/.m2:/root/.m2 then the m2 repo content will be copied over from the image
RUN mvn $DEPENDENCY_PLUGIN:resolve-plugins $DEPENDENCY_PLUGIN:resolve $MVN_ARGS_SETTINGS
ARG MVN_ARGS='install'
# Build the app using cached dependencies
# Append --build-arg MVN_ARGS='install -o' to change default maven arguments
# Build modules individually to benefit from caching
COPY checkstyle.xml checkstyle-suppressions.xml CONTRIBUTING.md findbugs-include.xml LICENSE license-header.txt \
NOTICE.md README.md ruleset.xml SECURITY.md ./
# build the parent project first
RUN mvn --non-recursive $MVN_ARGS_SETTINGS $MVN_ARGS
COPY liquibase ./liquibase/
RUN mvn -pl liquibase $MVN_ARGS_SETTINGS $MVN_ARGS
COPY tools/ ./tools/
RUN mvn -pl tools $MVN_ARGS_SETTINGS $MVN_ARGS
COPY test/ ./test/
RUN mvn -pl test $MVN_ARGS_SETTINGS $MVN_ARGS
COPY api/ ./api/
RUN mvn -pl api $MVN_ARGS_SETTINGS $MVN_ARGS
COPY web/ ./web/
RUN mvn -pl web $MVN_ARGS_SETTINGS $MVN_ARGS
COPY webapp/ ./webapp/
RUN mvn -pl webapp $MVN_ARGS_SETTINGS $MVN_ARGS
WORKDIR /app/webapp
# Startup jetty by default for the dev image
# TODO: Use Tomcat with spring devtools instead
CMD ["mvn", "jetty:run", "-o"]
### Production Stage
FROM tomcat:8.5-jdk8-adoptopenjdk-hotspot
RUN apt-get update && apt-get install -y zip dumb-init \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/local/tomcat/webapps/*
RUN groupadd -r openmrs \
&& useradd --no-log-init -r -g openmrs openmrs \
&& chown -R openmrs $CATALINA_HOME \
&& mkdir -p /openmrs/data/modules \
&& mkdir -p /openmrs/data/owa \
&& mkdir -p /openmrs/data/configuration \
&& chown -R openmrs /openmrs
# Copy in the start-up scripts
COPY wait-for-it.sh startup.sh /usr/local/tomcat/
RUN chmod -R 755 /usr/local/tomcat/wait-for-it.sh && chmod -R 755 /usr/local/tomcat/startup.sh
USER openmrs
WORKDIR /openmrs
# All environment variables that are available to configure on this container are listed here
# for clarity. These list the variables supported, and the default values if not overridden
# These environment variables are appended to configure the Tomcat JAVA_OPTS
ENV OMRS_JAVA_MEMORY_OPTS="-XX:NewSize=128m"
ENV OMRS_JAVA_SERVER_OPTS="-Dfile.encoding=UTF-8 -server -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Djava.awt.headlesslib=true"
# These environment variables are used to create the openmrs-server.properties file, which controls how OpenMRS initializes
ENV OMRS_CONFIG_ADD_DEMO_DATA="false"
ENV OMRS_CONFIG_ADMIN_USER_PASSWORD="Admin123"
ENV OMRS_CONFIG_AUTO_UPDATE_DATABASE="true"
ENV OMRS_CONFIG_CREATE_DATABASE_USER="false"
ENV OMRS_CONFIG_CREATE_TABLES="false"
ENV OMRS_CONFIG_HAS_CURRENT_OPENMRS_DATABASE="true"
ENV OMRS_CONFIG_INSTALL_METHOD="auto"
ENV OMRS_CONFIG_MODULE_WEB_ADMIN="true"
# These variables are specific to database connections
# Supported values for OMRS_CONFIG_CONNECTION_TYPE are "mysql" and "postgresql"
# other values are treated as MySQL
ENV OMRS_CONFIG_CONNECTION_TYPE="mysql"
ENV OMRS_CONFIG_CONNECTION_USERNAME="openmrs"
ENV OMRS_CONFIG_CONNECTION_PASSWORD="openmrs"
ENV OMRS_CONFIG_CONNECTION_SERVER="localhost"
ENV OMRS_CONFIG_CONNECTION_DATABASE="openmrs"
# These environment variables can be used to customise the database connection.
# Their default values depend on which database you are using.
# OMRS_CONFIG_CONNECTION_DRIVER_CLASS
# OMRS_CONFIG_CONNECTION_PORT
# OMRS_CONFIG_CONNECTION_ARGS
# OMRS_CONFIG_CONNECTION_EXTRA_ARGS
#
# If you really need complete control, you can just set
# OMRS_CONFIG_CONNECTION_URL to whatever the URL should be
# These environment variables are meant to enable developer settings
# OMRS_DEV_DEBUG_PORT
# Additional environment variables as needed. This should match the name of the distribution supplied OpenMRS war file
ENV OMRS_WEBAPP_NAME="openmrs"
RUN sed -i '/Connector port="8080"/a URIEncoding="UTF-8" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>"' /usr/local/tomcat/conf/server.xml
COPY --from=dev /app/LICENSE LICENSE
# Copy the app
COPY --from=dev /app/webapp/target/openmrs.war /openmrs/distribution/openmrs_core/openmrs.war
EXPOSE 8080
CMD ["dumb-init", "/usr/local/tomcat/startup.sh"]