> >> Hello. I am seeking some advice for the best ways to deploy Java web
> >> applications to different Tomcat environments.
> >>
> >> In particular, my application requires that a JNDI resource be
defined
> >> for a database, where the database server address and credentials
will
> >> vary depending on the environment the application is deployed to.
> >>
> >> * Tomcat: 8.0.36
> >> * OS: varies depending on the environment deployed to
> >>
> >> If I include in the WAR file, a META-INF/context.xml that includes
the
> >> Resource element, Tomcat will use that to create the file:
> >> $CATALINA_HOME/conf/engine/host/my-application.xml
> >>
> >> The context file my-application.xml can then be modified so that the
> >> Resource settings are appropriate for the environment.
> >>
> >> However, if, for any reason, the application is undeployed and then
> >> re-deployed, my-application.xml will be recreated with the settings
as
> >> they originally appeared in the WAR file.
> >>
> >> The options that seem evident to me are:
> >>
> >> 1) Create a different WAR file for each environment. This strikes me
as
> >> a bit onerous.
> >>
> >> 2) Use environment variables in my-application.xml such as:
> >> url="${databaseurl}" and then define those environment variables
using
> >> the Environment element in the GlobalNamingResources of Tomcat's
> > server.xml.
> >> Regarding #2, would it be possible to instead use a properties file
to
> >> define the variables? I assume adding entries to catalina.properties
> >> would work, but is it possible to define a properties file separate
from
> >> catalina.properties which deals more with system properties rather
than
> >> application properties?
> >>
> > We set such system properties in setenv.sh, e.g.:
> >
> > JAVA_OPTS="$JAVA_OPTS -Ddatabase.password=$DATABASE_PASSWORD"
> >
> >
> > The environment variable $DATABASE_PASSWORD is used because we wrap
our
> > applications along with tomcat and jvm in docker images. Operations
> > specify environment specific parameters (as database passwords) when
they
> > launch the docker container with -e switch, e.g.:
> >
> > docker run -d -e DATABASE_PASSWORD=secret .....
> >
> >
> > Due to docker we don't need context.xml files inside WARs. Instead we
have
> > application specific tomcat config files in our source trees. Our
build
> > process includes them in the docker image as top level tomcat config.
As
> > we build application specific images there is just one app per image
and
> > thus per tomcat instance.
> >
> >
> > Of course that is linux only.
>
> I don't believe docker is an option for me. At least, not at this
> time. I do like the idea of setting environment-specific variables as
> system properties in the setenv.sh. However, setting passwords there
> gives me pause for security reasons since it would be visible to
> anything running within the Tomcat environment, should there be some way
> to exploit a vulnerability and access Tomcat's system properties or
> environment variables remotely.
>
> Thank you for sharing,
> Philip
>
Well, having passwords in config files does not add much security ;)
Regards,
Christoph
This Email was scanned by Sophos Anti Virus