Production Configuration

This page lists configuration setup that would be suitable for Production

Properties

Loading

Property files are loaded in the following order by org.kuali.kfs.sys.context.PropertyLoadingFactoryBean

  1. classpath:kfs-default-config.properties
  2. classpath:kfs-rice-default-config.properties
  3. classpath:kfs-security-default-config.properties
  4. classpath:institutional-config.properties

  5. files specified via -Dadditional.kfs.config.locations
  6. files specified via -Dadditional.kfs.test.config.locations

Configuration

institutional-config.properties

This configuration point is used for common configuration across all institutionally hosted environments. This file would reside in src/main/resources of your maven overlay

spring.source.files=classpath:org/kuali/rice/core/CommonSpringBeans.xml,\
  classpath:kfs-cache-config.xml,\
  classpath:spring-kfs-imported-rice-beans.xml,\
  classpath:spring-additional-rice-beans.xml,\
  classpath:org/kuali/kfs/sys/spring-sys.xml,\
  classpath:org/kuali/kfs/coa/spring-coa.xml,\
  classpath:org/kuali/kfs/fp/spring-fp.xml,\
  classpath:org/kuali/kfs/gl/spring-gl.xml,\
  classpath:org/kuali/kfs/pdp/spring-pdp.xml,\
  classpath:org/kuali/kfs/vnd/spring-vnd.xml,\
  classpath:spring-kfs-batch.xml,\
  classpath:org/kuali/kfs/integration/spring-integration.xml,\
  classpath:org/kuali/kfs/module/ec/spring-ec.xml,\
  classpath:org/kuali/kfs/module/ld/spring-ld.xml,\
  classpath:org/kuali/kfs/module/cg/spring-cg.xml,\
  classpath:org/kuali/kfs/module/ar/spring-ar.xml,\
  classpath:org/kuali/kfs/module/purap/spring-purap.xml,\
  classpath:org/kuali/kfs/module/cam/spring-cam.xml,\
  classpath:org/kuali/kfs/module/cab/spring-cab.xml,\
  classpath:org/kuali/kfs/sec/spring-sec.xml,\
  classpath:org/kuali/kfs/sec/spring-sec-gl-overrides.xml,\
  classpath:org/kuali/kfs/module/ld/spring-sec-ld-overrides.xml,\
  classpath:org/kuali/kfs/sys/spring-dev-env-beans.xml,\
  classpath:com/rsmart/kuali/kfs/sec/spring-sec.xml,\
  classpath:com/rsmart/kuali/kfs/module/purap/spring-purap.xml,\
  classpath:com/rsmart/kuali/kfs/fp/spring-fp.xml,\
  classpath:com/rsmart/kuali/kfs/sys/spring-sys.xml,\
  classpath:com/rsmart/kuali/kfs/cr/spring-cr.xml,\
  classpath:com/rsmart/kuali/kfs/gl/spring-gl.xml,\
  classpath:com/rsmart/kuali/kfs/coa/spring-coa.xml,\
  classpath:com/rsmart/kuali/kfs/module/ld/spring-ld.xml,\
  classpath:com/rsmart/kuali/kfs/pdp/spring-pdp.xml,\
  classpath:com/rsmart/kuali/kfs/module/cg/spring-cg.xml,\
  classpath:com/rsmart/kuali/kfs/module/cam/spring-cam.xml,\
  classpath:com/rsmart/kuali/kfs/module/ec/spring-ec.xml,\
  classpath:com/rsmart/kuali/kfs/module/ar/spring-ar.xml,\
#overrides for Access Security
  classpath:edu/institute/kuali/kfs/sec/spring-sec.xml,\
  classpath:edu/institute/kuali/kfs/sec/spring-sec-gl-overrides.xml,\
  classpath:kfs-RiceJTASpringBeans.xml,\
  classpath:kfs-RiceDataSourceSpringBeans.xml

spring.test.files=classpath:org/kuali/kfs/sys/spring-sys-unit-test.xml,\
  classpath:org/kuali/kfs/sys/spring-sys-test.xml,\
  classpath:org/kuali/kfs/gl/spring-gl-test.xml

# contains overrides for implementation of encryptionService
rice.core.additionalSpringFiles=classpath:com/rsmart/kuali/spring-kfs-rice-core-overrides.xml

# contains overrides for implementation of encryptionService
rice.kr.additionalSpringFiles=classpath:spring-rice-krad-overrides.xml,\
  classpath:org/kuali/kfs/sec/spring-sec-rice-overrides.xml,\
  classpath:com/rsmart/kuali/spring-kfs-rice-krad-overrides.xml

module.access.security.enabled=true

property.files=classpath:org/kuali/rice/krad/ApplicationResources.properties,\
  classpath:org/kuali/rice/krad/KRAD-ApplicationResources.properties,\
  classpath:org/kuali/rice/kew/ApplicationResources.properties,\
  classpath:org/kuali/rice/ksb/ApplicationResources.properties,\
  classpath:org/kuali/rice/kim/ApplicationResources.properties,\
  classpath:org/kuali/rice/krms/ApplicationResources.properties,\
  classpath:org/kuali/rice/core/web/cache/CacheApplicationResources.properties,\
  classpath:org/kuali/kfs/coa/coa-resources.properties,\
  classpath:org/kuali/kfs/fp/fp-resources.properties,\
  classpath:org/kuali/kfs/gl/gl-resources.properties,\
  classpath:org/kuali/kfs/pdp/pdp-resources.properties,\
  classpath:org/kuali/kfs/sys/sys-resources.properties,\
  classpath:org/kuali/kfs/vnd/vnd-resources.properties,\
  classpath:org/kuali/kfs/module/ar/ar-resources.properties,\
  classpath:org/kuali/kfs/module/cam/cam-resources.properties,\
  classpath:org/kuali/kfs/module/cg/cg-resources.properties,\
  classpath:org/kuali/kfs/module/ec/ec-resources.properties,\
  classpath:org/kuali/kfs/module/ld/ld-resources.properties,\
  classpath:org/kuali/kfs/module/external/kc/kc-resources.properties,\
  classpath:org/kuali/kfs/module/purap/purap-resources.properties,\
  classpath:rsmartApplicationResources.properties,\
  classpath:org/kuali/kfs/sec/sec-resources.properties

rice.struts.message.resources=org.kuali.rice.krad.ApplicationResources,\
  org.kuali.rice.krad.KRAD-ApplicationResources,\
  org.kuali.rice.kew.ApplicationResources,\
  org.kuali.rice.ksb.ApplicationResources,\
  org.kuali.rice.kim.ApplicationResources,\
  org.kuali.rice.krms.ApplicationResources,\
  org.kuali.rice.core.web.cache.CacheApplicationResources,\
  org.kuali.kfs.coa.coa-resources,\
  org.kuali.kfs.fp.fp-resources,\
  org.kuali.kfs.gl.gl-resources,\
  org.kuali.kfs.pdp.pdp-resources,\
  org.kuali.kfs.sys.sys-resources,\
  org.kuali.kfs.vnd.vnd-resources,\
  org.kuali.kfs.module.ar.ar-resources,\
  org.kuali.kfs.module.cam.cam-resources,\
  org.kuali.kfs.module.cg.cg-resources,\
  org.kuali.kfs.module.ec.ec-resources,\
  org.kuali.kfs.module.external.kc.kc-resources,\
  org.kuali.kfs.module.ld.ld-resources,\
  org.kuali.kfs.module.purap.purap-resources,\
  org.kuali.kfs.sec.sec-resources,\
  rsmartApplicationResources

app.code=fin
environment=
app.context.name=fin
rice.ksb.registry.serviceUrl=${rice.url}/remoting/soap/ksb/v2_0/serviceRegistry
rice.ksb.web.forceEnable=true

# Do not run batch on weekends
batch.schedule.cron.expression=00 00 23 ? * SUN-THU
# except for a job that we need to run on Friday as well
batch.schedule.sixDay.cron.expression=00 00 23 ? * SUN-FRI
useQuartzDatabase=false
context.names.rice=rice

login.filter.className=co.kuali.core.auth.web.CoreAuthenticationFilter
login.filter.param.authConfigurationClass=org.kuali.kfs.sys.web.filter.CoreAuthenticationFilterConfiguration

updateDatabaseOnStartup=true

kfs.properties (-Dadditional.kfs.config.locations)

This configuration point is used for individual machines 

# overrides for instance specific configuration (urls mostly)
environment=prd
base.url=https://institute.kuali.co
application.url=https://institute.kuali.co/fin
appserver.url=https://institute.kuali.co
rice.server.url=https://institute.kuali.co/rice
rice.url=https://institute.kuali.co/rice
rice.ksb.registry.serviceUrl=http://${rice.url}/remoting/soap/ksb/v2_0/serviceRegistry
base.directory=/data/fin/kfs
logs.directory=${base.directory}/logs/${app.code}
work.directory=${base.directory}/work/${app.code}
keystore.file=/app/fin/kfs/app/tomcat/conf/rice.keystore
security.property.file=file:/app/fin/kfs/app/tomcat/conf/security.properties
log4j.settings.file=/app/fin/kfs/app/tomcat/conf/log4j.properties

core.authentication.filter.authBaseUrl=https://institute.kuali.co

# example of disabling db update on startup for a single environment
updateDatabaseOnStartup=false
 
b2b.environment=Production
b2b.purchase.order.url=https://solutions.sciquest.com/apps/Router/POXMLImport
b2b.punch.back.url=${application.url}/b2b.do?methodToCall=returnFromShopping
b2b.punch.out.url=https://solutions.sciquest.com/apps/Router/ExternalAuth/cXML/institute

mailing.list.batch=kfs.batch.institute@kuali.co

Here is a sample configuration for custom analytics provider:

web.analytics.enabled=true
web.analytics.key=[key]
# the entire script must be on a single line -- make sure to adjust JS appropriately
web.analytics.tag=<script type='text/javascript'> !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics};};for(var t=0;t<analytics.methods.length;t++){var e = analytics.methods[t];analytics[e] = analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="4.0.0";analytics.load('${web.analytics.key}');analytics.page();}}();</script>

security.properties

kfs.datasource.username=[username1]
kfs.datasource.password=[password1]
kfs.datasource.url=[URL1]
kfs.datasource.pool.maxActive=200
kfs.datasource.pool.maxSize=200

#used by liquirelational
kfs.datasource.ddl.username=[username2]
kfs.datasource.ddl.password=[password2]
kfs.datasource.ddl.url=[URL2]

rice.datasource.url=[URL3]
rice.datasource.username=[username3]
rice.datasource.password=[password3]
rice.datasource.pool.maxActive=200
rice.datasource.pool.maxSize=200

#used by liquirelational
rice.datasource.ddl.url=[URL4]
rice.datasource.ddl.username=[username4]
rice.datasource.ddl.password=[password4]

keystore.alias=rice
keystore.password=[something really secure here!]
encryption.key=[something else really secure here!]

# configure only if the environment will be connected to Sciquest
b2b.user.agent=Institute
b2b.purchase.order.identity=[identity1]
b2b.purchase.order.password=[password1]
b2b.shopping.identity=[identity2]
b2b.shopping.password=[password2]
# override this property if using Sciquest
csrf.exempt.paths=b2b.do

Struts Configuration

On startup, KFS looks for a file in WEB-INF/ called institutional-struts-config.xml. This file would reside in src/main/webapp/WEB-INF of your maven overlay

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
   - The Kuali Financial System, a comprehensive financial management system for higher education.
   - 
   - Copyright 2005-2017 Kuali, Inc.
   - 
   - This program is free software: you can redistribute it and/or modify
   - it under the terms of the GNU Affero General Public License as
   - published by the Free Software Foundation, either version 3 of the
   - License, or (at your option) any later version.
   - 
   - This program is distributed in the hope that it will be useful,
   - but WITHOUT ANY WARRANTY; without even the implied warranty of
   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   - GNU Affero General Public License for more details.
   - 
   - You should have received a copy of the GNU Affero General Public License
   - along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -->
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
    <data-sources />

    <form-beans>
      <!--  Rice Bean Definitions : This is a bean declared in Rice, but is needed throughout this config -->
      <form-bean name="KualiForm"
         type="org.kuali.kfs.kns.web.struts.form.KualiForm" />

        <!--  CR Form -->
        <form-bean name="CheckReconciliationReportForm"
            type="com.rsmart.kuali.kfs.cr.document.web.struts.CheckReconciliationReportForm" />

        <!--  Balance Inquiry Form -->
        <form-bean name="BalanceInquiryForm"
         type="com.rsmart.kuali.kfs.gl.web.struts.BalanceInquiryForm" />

      <!--  PURAP Forms  -->
      <form-bean name="PurchaseOrderForm"
         type="com.rsmart.kuali.kfs.module.purap.web.struts.PurchaseOrderForm" />

      <form-bean name="RequisitionForm"
               type="org.kuali.kfs.module.purap.document.web.struts.RequisitionForm" />

      <!--  eThority Form  -->
        <form-bean name="EThorityForm"
            type="com.rsmart.kuali.kfs.sys.web.struts.EThorityForm" />

      <form-bean name="PcardDistributionForm"
         type="com.rsmart.kuali.kfs.fp.document.web.struts.PcardDistributionForm" />

      <form-bean name="B2BForm"
               type="org.kuali.kfs.module.purap.web.struts.B2BForm" />

    </form-beans>

    <action-mappings>
        <action path="/cr*" name="{1}Form"
            input="/jsp/modules/cr/{1}.jsp"
            type="com.rsmart.kuali.kfs.cr.document.web.struts.{1}Action"
            scope="request" parameter="methodToCall" validate="true"
            attribute="KualiForm">
            <set-property property="cancellable" value="true" />
            <forward name="basic" path="/jsp/module/cr/{1}.jsp" />
        </action>

      <action path="/eThority"
            name="EThorityForm" scope="request"
            attribute="KualiForm" parameter="methodToCall"
         type="com.rsmart.kuali.kfs.sys.web.struts.EThorityAction">

         <forward name="basic" path="/jsp/sys/EThority.jsp" />
      </action>

      <action path="/financialPcardDistribution" name="PcardDistributionForm"
         input="/jsp/fp/PcardDistribution.jsp"
         type="com.rsmart.kuali.kfs.fp.document.web.struts.PcardDistributionAction" scope="request"
         parameter="methodToCall" validate="true" attribute="KualiForm">
         <set-property property="cancellable" value="true" />
         <forward name="basic" path="/jsp/fp/PcardDistribution.jsp" />
      </action>

      <action path="/glModifiedInquiry" name="BalanceInquiryForm"
         scope="request" attribute="KualiForm" parameter="methodToCall"
         type="com.rsmart.kuali.kfs.gl.web.struts.BalanceInquiryAction">
         <set-property property="cancellable" value="true" />
         <forward name="basic" path="/jsp/gl/ModifiedInquiry.jsp" />
         <forward name="accountBalance" path="/jsp/gl/AccountBalanceModifiedInquiry.jsp" />
      </action>

      <action path="/purapPurchaseOrder" name="PurchaseOrderForm" input="/jsp/module/purap/PurchaseOrder.jsp"
         type="org.kuali.kfs.module.purap.document.web.struts.PurchaseOrderAction"
         scope="request" parameter="methodToCall" validate="true" attribute="KualiForm">
         <set-property property="cancellable" value="true" />
         <forward name="basic" path="/jsp/module/purap/PurchaseOrder.jsp" />
         <forward name="printPurchaseOrderPDF" path="/jsp/module/purap/PrintForward.jsp"
            redirect="false" />
         <forward name="retransmitPurchaseOrderPDF" path="/jsp/module/purap/RetransmitForward.jsp"
            redirect="false" />
         <forward name="printReceivingTicketPDF" path="/jsp/module/purap/ReceivingTicketForward.jsp"
            redirect="false" />
         <forward name="printPOQuoteListPDF" path="/jsp/module/purap/PrintPOQuoteListForward.jsp"
            redirect="false" />
      </action>

      <action path="/purapRequisition" name="RequisitionForm" input="/jsp/module/purap/Requisition.jsp"
            type="com.rsmart.kuali.kfs.module.purap.document.web.struts.RequisitionAction"
            scope="request" parameter="methodToCall" validate="true" attribute="KualiForm">
         <set-property property="cancellable" value="true" />
         <forward name="basic" path="/jsp/module/purap/Requisition.jsp" />
         <forward name="printPurchaseOrderPDF" path="/jsp/module/purap/PrintForward.jsp"
                redirect="false" />
         <forward name="retransmitPurchaseOrderPDF" path="/jsp/module/purap/RetransmitForward.jsp"
                redirect="false" />
         <forward name="printReceivingTicketPDF" path="/jsp/module/purap/ReceivingTicketForward.jsp"
                redirect="false" />
         <forward name="printPOQuoteListPDF" path="/jsp/module/purap/PrintPOQuoteListForward.jsp"
                redirect="false" />
      </action>

      <action path="/b2b" name="B2BForm" scope="request" attribute="KualiForm"
            parameter="methodToCall" type="com.rsmart.kuali.kfs.module.purap.web.struts.B2BAction">

         <forward name="basic" path="/jsp/module/purap/ShopCatalogs.jsp" />
         <forward name="removeframe" path="/jsp/module/purap/ShopRemoveFrame.jsp" />
         <forward name="failure" path="/requisition/requisitionFailure.jsp" />
         <forward name="invalid" path="/requisition/shopFail.jsp" />
      </action>

   </action-mappings>
</struts-config>


Monitoring