I try to setup mifos 18 on ubuntu 20.04 server.
Everything seems to be setup fine. But, I couldn't connect the app with backend. App receives 404 while it is trying to access https://ip:8443/fineract-provider/api/v1/authentication?username=mifos&password=password
Even, https://ip:8443/fineract-provider/ returns 404
I tried to check the followings:
- fineract-provider.war is deployed properly and I can see fineract-provider inside tomcat's webapps dir
- community app is running without any errors on https://ip:8443/
- db is up and running
- no logs in docker log or catalina logs
The prequisities
- Oracle Java - JDK 8 (.html)
- MySQL server - 5.5 or 5.6 (.5.html#downloads/)
- Apache Tomcat - 7.0.68 (.cgi)
Based on this and other steps mentioned in setup, I created following docker images and docker-compose files
mifos/Dockerfile
FROM tomcat:jre8
ADD ./server.xml /usr/local/tomcat/conf/server.xml
ADD ./fineract-provider.war /usr/local/tomcat/webapps/fineract-provider.war
ADD ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
RUN apt-get update \
&& apt-get install -y mysql-client \
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN mkdir -p /run/mysqld \
&& chown 999 /run/mysqld
# Install unzip and wget
RUN apt-get update && apt-get install -y unzip wget
# Ensure the file is available in the build context
COPY mifosplatform-18.03.01.RELEASE.zip /app/mifosplatform-18.03.01.RELEASE.zip
COPY drizzle-jdbc-1.4.jar /app/drizzle-jdbc-1.4.jar
# Extract the Mifos platform, move necessary files, and clean up
RUN mkdir -p /app /docker-entrypoint-initdb.d /root/.mifosx \
&& cd /app \
&& unzip mifosplatform-18.03.01.RELEASE.zip -d /app \
&& mv /app/fineractplatform-18.03.01.RELEASE/apps/community-app /usr/local/tomcat/webapps/ \
&& mv /app/fineractplatform-18.03.01.RELEASE/pentahoReports /root/.mifosx \
&& mv /app/drizzle-jdbc-1.4.jar /usr/local/tomcat/lib/ \
&& cd / \
&& rm -rf /app
VOLUME /docker-entrypoint-initdb.d
ENTRYPOINT /entrypoint.sh
mifos/entrypoint.sh
#!/bin/bash
keytool -genkey -noprompt -storepass ****** -keypass ****** -keyalg RSA -alias tomcat -dname "CN=tomcat" -keystore /usr/share/tomcat.keystore
while ! mysqladmin --user=root --password=******** ping -h "db-server" --silent; do
sleep 2
echo "Waiting database..."
done
catalina.sh run
mariadb/Dockerfile
FROM mariadb:10
RUN apt-get update \
&& apt-get install -y wget unzip \
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN mkdir -p /docker-entrypoint-initdb.d && cd /
ADD ./00-create-databases.sql /docker-entrypoint-initdb.d/00-create-databases.sql
ADD ./01-mifospltaform-tenants-first-time-install.sql /docker-entrypoint-initdb.d/01-mifospltaform-tenants-first-time-install.sql
ADD ./02-load_sample_data.sql /docker-entrypoint-initdb.d/02-load_sample_data.sql
VOLUME /docker-entrypoint-initdb.d
docker-compse.yml
services:
db-server:
build:
context: ./mariadb
dockerfile: Dockerfile
image: mifos-mariadb:18.03.01
restart: always
environment:
MYSQL_ROOT_PASSWORD: ******
ports:
- "3306:3306"
volumes:
- db-data:/var/lib/mysql
networks:
- mifos-network
mifosx:
build:
context: ./mifos
dockerfile: Dockerfile
image: mifos-app:18.03.01
restart: always
depends_on:
- db-server
ports:
- "8443:8443"
networks:
- mifos-network
volumes:
db-data:
networks:
mifos-network:
server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className=".apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className=".apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className=".apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className=".apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase"
auth="Container"
type=".apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory=".apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<!-- Data Source for JDBC Connection -->
<Resource type="javax.sql.DataSource"
name="jdbc/mifosplatform-tenants"
factory=".apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName=".drizzle.jdbc.DrizzleDriver"
url="jdbc:mysql:thin://db-server:3306/mifosplatform-tenants"
username="root"
password="*******"
initialSize="3"
maxActive="10"
maxIdle="6"
minIdle="3"
validationQuery="SELECT 1"
testOnBorrow="true"
testOnReturn="true"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="30000"
minEvictableIdleTimeMillis="60000"
logAbandoned="true"
suspectTimeout="60"
/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- SSL Connector using JSSE -->
<Connector port="8443" protocol=".apache.coyote.http11.Http11NioProtocol"
maxThreads="200" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/usr/share/tomcat.keystore"
type="RSA" certificateKeystorePassword="******" />
</SSLHostConfig>
</Connector>
<Engine name="Catalina" defaultHost="localhost">
<Realm className=".apache.catalina.realm.LockOutRealm">
<Realm className=".apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" />
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- Fineract Context Configuration -->
<!-- <Context path="/fineract-provider" docBase="fineract-provider" /> -->
<Valve className=".apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
mifos-container log
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore /usr/share/tomcat.keystore -destkeystore /usr/share/tomcat.keystore -deststoretype pkcs12".
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Waiting database...
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Waiting database...
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqld is alive
15-Mar-2025 13:36:04.431 INFO [main] .apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.35] using APR version [1.7.0].
15-Mar-2025 13:36:04.432 INFO [main] .apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
15-Mar-2025 13:36:04.436 INFO [main] .apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.2 15 Mar 2022]
15-Mar-2025 13:36:05.108 INFO [main] .apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
15-Mar-2025 13:36:05.141 INFO [main] .apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["https-openssl-nio-8443"]
15-Mar-2025 13:36:05.241 INFO [main] .apache.catalina.startup.Catalina.load Server initialization in [1023] milliseconds
15-Mar-2025 13:36:05.408 INFO [main] .apache.catalina.core.StandardService.startInternal Starting service [Catalina]
15-Mar-2025 13:36:05.408 INFO [main] .apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.0.23]
15-Mar-2025 13:36:05.429 INFO [main] .apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/fineract-provider.war]
15-Mar-2025 13:36:17.389 INFO [main] .apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
15-Mar-2025 13:36:17.405 INFO [main] .apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/fineract-provider.war] has finished in [11,975] ms
15-Mar-2025 13:36:17.405 INFO [main] .apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/community-app]
15-Mar-2025 13:36:17.418 INFO [main] .apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
15-Mar-2025 13:36:17.419 INFO [main] .apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/community-app] has finished in [14] ms
15-Mar-2025 13:36:17.421 INFO [main] .apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
15-Mar-2025 13:36:17.447 INFO [main] .apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["https-openssl-nio-8443"]
15-Mar-2025 13:36:17.449 INFO [main] .apache.catalina.startup.Catalina.start Server startup in [12208] milliseconds
catalina.2025-03-15.log
root@server:/usr/local/tomcat# cat logs/catalina.2025-03-15.log
15-Mar-2025 13:36:04.431 INFO [main] .apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.35] using APR version [1.7.0].
15-Mar-2025 13:36:04.432 INFO [main] .apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
15-Mar-2025 13:36:04.436 INFO [main] .apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.2 15 Mar 2022]
15-Mar-2025 13:36:05.108 INFO [main] .apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
15-Mar-2025 13:36:05.141 INFO [main] .apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["https-openssl-nio-8443"]
15-Mar-2025 13:36:05.241 INFO [main] .apache.catalina.startup.Catalina.load Server initialization in [1023] milliseconds
15-Mar-2025 13:36:05.408 INFO [main] .apache.catalina.core.StandardService.startInternal Starting service [Catalina]
15-Mar-2025 13:36:05.408 INFO [main] .apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.0.23]
15-Mar-2025 13:36:05.429 INFO [main] .apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/fineract-provider.war]
15-Mar-2025 13:36:17.389 INFO [main] .apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
15-Mar-2025 13:36:17.405 INFO [main] .apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/fineract-provider.war] has finished in [11,975] ms
15-Mar-2025 13:36:17.405 INFO [main] .apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/community-app]
15-Mar-2025 13:36:17.418 INFO [main] .apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
15-Mar-2025 13:36:17.419 INFO [main] .apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/community-app] has finished in [14] ms
15-Mar-2025 13:36:17.421 INFO [main] .apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
15-Mar-2025 13:36:17.447 INFO [main] .apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["https-openssl-nio-8443"]
15-Mar-2025 13:36:17.449 INFO [main] .apache.catalina.startup.Catalina.start Server startup in [12208] milliseconds