<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>FOLIO Documentation – Install FOLIO</title>
    <link>https://trillium.docs.folio.org/docs/getting-started/installation/</link>
    <description>Recent content in Install FOLIO on FOLIO Documentation</description>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Mon, 06 Jan 2025 00:00:00 +0000</lastBuildDate>
    
	  <atom:link href="https://trillium.docs.folio.org/docs/getting-started/installation/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Host names</title>
      <link>https://trillium.docs.folio.org/docs/getting-started/installation/hostnames/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://trillium.docs.folio.org/docs/getting-started/installation/hostnames/</guid>
      <description>
        
        
        &lt;p&gt;Choosing the host names of front-end and back-end has implications on deployment, security and performance.&lt;/p&gt;
&lt;p&gt;The frond-end host serves the content to be displayed in the browser. The back-end exposes Okapi and the APIs of the back-end modules.&lt;/p&gt;
&lt;h2 id=&#34;same-host-name&#34;&gt;Same host name&lt;/h2&gt;
&lt;p&gt;Front-end and back-end can be provided on the same host so that they use the same host name, the back-end is served on a special URL path.&lt;/p&gt;
&lt;p&gt;Existing example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://folio-demo.gbv.de&#34;&gt;https://folio-demo.gbv.de&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://folio-demo.gbv.de/okapi&#34;&gt;https://folio-demo.gbv.de/okapi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most secure solution. Using a single host name allows to use the most restrictive configuration regarding cross-origin resource sharing (CORS) and cross-site request forgery (CSRF).&lt;/li&gt;
&lt;li&gt;Most simple security configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Disadvantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requires a path based proxy. Example snippet for nginx:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;        # WARNING: location requires a trailing slash
        location /okapi/ {
                # WARNING: proxy_cookie_path requires a trailing slash
                proxy_cookie_path / /okapi/;
                # WARNING: proxy_pass requires a trailing slash
                proxy_pass http://127.0.0.1:9130/;
                proxy_redirect default;
        }

        location / {
                root /var/www/tenanta;
                try_files $uri /index.html;
        }
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Using a content delivery network (CDN) might require different cache configurations for front-end and back-end URL paths.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;two-host-names-on-same-site&#34;&gt;Two host names on same site&lt;/h2&gt;
&lt;p&gt;Some FOLIO deployments use different host names for font-end and back-end, and the host names belong to the same site. Example for site folio.org:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://folio-snapshot.dev.folio.org&#34;&gt;https://folio-snapshot.dev.folio.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://folio-snapshot-okapi.dev.folio.org&#34;&gt;https://folio-snapshot-okapi.dev.folio.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;ldquo;Same site&amp;rdquo; has a special meaning, learn more at &lt;a href=&#34;https://web.dev/samesite-cookies-explained/&#34;&gt;https://web.dev/samesite-cookies-explained/&lt;/a&gt; and &lt;a href=&#34;https://publicsuffix.org/&#34;&gt;https://publicsuffix.org/&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;Advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Simple host name based configuration, requires no path based proxy configuration.&lt;/li&gt;
&lt;li&gt;Continuously tested on FOLIO&amp;rsquo;s reference environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Disadvantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Slower because the browser needs to send extra &amp;ldquo;preflight&amp;rdquo; OPTIONS HTTP requests for cross-origin resource sharing (CORS) protection resulting in latency.&lt;/li&gt;
&lt;li&gt;Less secure as it requires a configuration that weakens the security restrictions regarding cross-origin resource sharing (CORS) and cross-site request forgery (CSRF).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;two-host-names-on-different-sites&#34;&gt;Two host names on different sites&lt;/h2&gt;
&lt;p&gt;FOLIO doesn&amp;rsquo;t support running front-end and back-end on host names that belong to different sites.&lt;/p&gt;
&lt;p&gt;Fictional example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://beispiel.de&#34;&gt;https://beispiel.de&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://okapi.example.org&#34;&gt;https://okapi.example.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This requires removing security restrictions regarding cross-origin resource sharing (CORS) and cross-site request forgery (CSRF) and likely violates security rules required by law or policy.&lt;/p&gt;
&lt;p&gt;FOLIO prevents this configuration for the most security sensitive module, the single-sign-on (SSO) module mod-login-saml.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Kubernetes example</title>
      <link>https://trillium.docs.folio.org/docs/getting-started/installation/kubernetesex/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://trillium.docs.folio.org/docs/getting-started/installation/kubernetesex/</guid>
      <description>
        
        
        &lt;p&gt;The Rancher/Kubernetes solution allows for the addition of new tenants and hardware resources on demand.  It is ideal if you need to scale-up your FOLIO instance in the future.  This guide describes a Rancher/Kubernetes installation.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://trillium.docs.folio.org/img/kubernetes_deployment.png&#34; alt=&#34;Kubernetes Deployment&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;deployment-environments&#34;&gt;Deployment environments&lt;/h2&gt;
&lt;p&gt;FOLIO is a system built on micro-services.  It is designed to be a multi-tenant cloud environment.  Having said that, some institutions will also choose to deploy FOLIO on premise.  The community can expect a wide range of deployment environments and mechanisms.  This guide will describe some of the issues that need to be understood in a Rancher/Kubernetes environment and the choices around those issues.  We will also label what are felt to be best practices when possible.&lt;/p&gt;
&lt;h3 id=&#34;public-cloud-vs-on-premise&#34;&gt;Public cloud vs on premise&lt;/h3&gt;
&lt;p&gt;A production ready FOLIO deployment will need adequate infrastructure for reliable service.  The institution will have to decide where and how to deploy FOLIO.  The public cloud vs on premise choice will define sets of alternatives for technology and tooling.  For example, if a site chooses to deploy in AWS then it will have a set of tooling and technology that are not available on premise.  It will also possibly use proprietary solutions such as RDS.  The deployment process will be adapted for the specifics of each organization.&lt;/p&gt;
&lt;h3 id=&#34;virtual-vs-physical&#34;&gt;Virtual vs physical&lt;/h3&gt;
&lt;p&gt;Virtualization has become a common practice in data centers due to the convenience of managing virtual environments.  However, some institutions may prefer physical servers for various reasons.  The virtual vs physical choice need not be dictated by the cloud vs on premise choice.   For example, you can run VMware in AWS.  Fortunately, the deployment process for a FOLIO instance is practically the same in both scenarios.&lt;/p&gt;
&lt;h3 id=&#34;database-considerations&#34;&gt;Database considerations&lt;/h3&gt;
&lt;p&gt;FOLIO has been designed and developed with PostgreSQL as the default database engine.  Although using Postgres isn&amp;rsquo;t mandatory, it is recommended for the vast majority of use cases.  The main considerations with PostgreSQL and FOLIO are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use a Cloud service such as Amazon RDS or Amazon Aurora.&lt;/li&gt;
&lt;li&gt;Set up a dedicated database server or cluster.&lt;/li&gt;
&lt;li&gt;Implement PostgreSQL-as-a-Service using Kubernetes.&lt;/li&gt;
&lt;li&gt;Use independent PostgreSQL servers for the components of FOLIO.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These choices will depend on each organization&amp;rsquo;s needs.  However, from the FOLIO deployment perspective you only will need an accessible PostgreSQL service.&lt;/p&gt;
&lt;h3 id=&#34;orchestration-tools&#34;&gt;Orchestration tools&lt;/h3&gt;
&lt;p&gt;There are many orchestration tools for both on premise and cloud solutions, including but not limited to: Kubernetes, OpenShift, Docker Swarm or ECS (Amazon). In theory, you can use any of them to deploy FOLIO due to its microservice architecture, but the Rancher/Kubernetes solution is the most common within the FOLIO community and therefore it will be covered in this manual.&lt;/p&gt;
&lt;h2 id=&#34;deploy-rancher-server&#34;&gt;Deploy Rancher server&lt;/h2&gt;
&lt;p&gt;You will need a Rancher server for managing the Kubernetes cluster for FOLIO.  This server should be accessible for all of the Kubernetes nodes in your cluster.   If you are using AWS, you will need to configure a VPC, subnets and route tables.&lt;/p&gt;
&lt;p&gt;A sample configuration and deployment procedure can be found at
&lt;a href=&#34;https://github.com/folio-org/folio-install/tree/master/alternative-install/kubernetes-rancher/TAMU&#34;&gt;https://github.com/folio-org/folio-install/tree/master/alternative-install/kubernetes-rancher/TAMU&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Customizations</title>
      <link>https://trillium.docs.folio.org/docs/getting-started/installation/customizations/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://trillium.docs.folio.org/docs/getting-started/installation/customizations/</guid>
      <description>
        
        
        &lt;h2 id=&#34;branding-stripes&#34;&gt;Branding Stripes&lt;/h2&gt;
&lt;p&gt;Stripes has some basic branding configurations that are applied during the build process.  In the file &lt;strong&gt;stripes.config.js&lt;/strong&gt;, you can configure the logo and favicon of the tenant, and the CSS style of the main navigation and the login.  These parameters can be set under the branding key at the end of the file.  You can add the new images in the folder &lt;strong&gt;tenant-assets&lt;/strong&gt; and link to them in the configuration file.&lt;/p&gt;
&lt;p&gt;In the config key you can set the &lt;code&gt;welcomeMessage&lt;/code&gt; shown after login, the &lt;code&gt;platformName&lt;/code&gt; that is appended to the page title and is shown in browser tabs and browser bookmarks.  Add a header with additional information to the Settings &amp;gt; Software versions page via the &lt;code&gt;aboutInstallVersion&lt;/code&gt; and &lt;code&gt;aboutInstallDate&lt;/code&gt; properties, the latter is automatically converted into the locale of the user opening the page, for example &lt;code&gt;10/30/2023&lt;/code&gt; or &lt;code&gt;30.10.2023&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Take into account that these changes will take effect after you build the webpack for Stripes.&lt;/p&gt;
&lt;p&gt;Example &lt;strong&gt;stripes.config.js&lt;/strong&gt; customization:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;module.exports = {
  config: {
    welcomeMessage: &#39;Welcome, the Future Of Libraries Is OPEN!&#39;,
    platformName: &#39;FOLIO&#39;,
    aboutInstallVersion: &#39;Poppy Hot Fix #2&#39;,
    aboutInstallDate: &#39;2023-10-30&#39;,
  },
  branding: {
    logo: {
      src: &#39;./tenant-assets/my-logo.png&#39;,
      alt: &#39;my alt text&#39;,
    },
    favicon: {
      src: &#39;./tenant-assets/my-favicon.ico&#39;,
    },
    style: {
      mainNav: {
        backgroundColor: &amp;quot;#036&amp;quot;,
      },
      login: {
        backgroundColor: &amp;quot;#fcb&amp;quot;,
      },
    },
  },
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There are other &lt;a href=&#34;https://folio-org.atlassian.net/wiki/spaces/DEV/pages/46858271/stripes.config.js+properties&#34;&gt;stripes.config.js properties&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;okapi-security&#34;&gt;Okapi security&lt;/h2&gt;
&lt;p&gt;Make sure that you have secured Okapi before publishing it to the Internet.  If you do not configure a super-tenant user and password for Okapi API, any user on the net could run privileged requests. The process of securing Okapi is performed with the &lt;strong&gt;secure-supertenant&lt;/strong&gt; script and it is explained in the Single server deployment guides.&lt;/p&gt;
&lt;p&gt;Additionally, it is recommended that you configure SSL certificates for Okapi in order to prevent data being sent as plain text over the Internet.  Okapi does not have native HTTPS support, but you can set up a reverse proxy (e.g NGINX) that receives HTTPS requests and forwards them to Okapi.  You can find more information about HTTPS on NGINX &lt;a href=&#34;http://nginx.org/en/docs/http/configuring_https_servers.html&#34;&gt;here&lt;/a&gt;.  Also, if you are using an Ingress in Kubernetes, you can configure SSL certificates using Rancher.  For more information on this process check &lt;a href=&#34;https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/load-balancers-and-ingress/ingress/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;email-configuration&#34;&gt;Email configuration&lt;/h2&gt;
&lt;p&gt;The module mod-email provides the role of delivering messages using SMTP server to send emails in FOLIO.  It is used for sending notifications and restarting user passwords.&lt;/p&gt;
&lt;p&gt;The mod-email module uses mod-configuration to get connection parameters.  A detailed list of parameters can be found in the documentation of the &lt;a href=&#34;https://github.com/folio-org/mod-email#introduction&#34;&gt;module&lt;/a&gt;.  The required configuration options are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EMAIL_SMTP_HOST&lt;/li&gt;
&lt;li&gt;EMAIL_SMTP_PORT&lt;/li&gt;
&lt;li&gt;EMAIL_USERNAME&lt;/li&gt;
&lt;li&gt;EMAIL_PASSWORD&lt;/li&gt;
&lt;li&gt;EMAIL_FROM&lt;/li&gt;
&lt;li&gt;EMAIL_SMTP_SSL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These parameters should be set in Okapi through POST requests using the name of the module: &lt;strong&gt;SMTP_SERVER&lt;/strong&gt;.  For example, the host configuration would look like this.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -X POST \
 http://localhost:9130/configurations/entries \
 -H &#39;Content-Type: application/json&#39; \
 -H &#39;X-Okapi-Tenant: &amp;lt;tenant&amp;gt;&#39; \
 -H &#39;x-okapi-token: &amp;lt;token&amp;gt;&#39; \
 -d
   &#39;{
     &amp;quot;module&amp;quot;: &amp;quot;SMTP_SERVER&amp;quot;,
     &amp;quot;configName&amp;quot;: &amp;quot;smtp&amp;quot;,
     &amp;quot;code&amp;quot;: &amp;quot;EMAIL_SMTP_HOST&amp;quot;,
     &amp;quot;description&amp;quot;: &amp;quot;server smtp host&amp;quot;,
     &amp;quot;default&amp;quot;: true,
     &amp;quot;enabled&amp;quot;: true,
     &amp;quot;value&amp;quot;: &amp;quot;smtp.googlemail.com&amp;quot;
   }&#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Take into account that this configuration is performed on a per tenant basis and the tenant ID is defined in the &lt;strong&gt;X-Okapi-Tenant&lt;/strong&gt; header.  Also, you have to be logged in as the superuser of the tenant and provide the access token in the header &lt;strong&gt;x-okapi-token&lt;/strong&gt;.   You can find an example of a login request &lt;a href=&#34;https://github.com/folio-org/folio-install/tree/master/runbooks/single-server#load-mods-records&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once you have configured the mod-email module, you should configure other modules related to the email configuration.  You should configure the users module and edge-sip2.  You can find a Bash script that could be used to automate this process &lt;a href=&#34;https://github.com/folio-org/folio-install/blob/kube-rancher/alternative-install/kubernetes-rancher/TAMU/deploy-jobs/create-email/create-email-config.sh&#34;&gt;here&lt;/a&gt;.  Make sure that you replace all of the environment variables required for the script.&lt;/p&gt;
&lt;p&gt;Alternatively, if you deployed FOLIO on a Kubernetes cluster, you can create a Kubernetes Job for this task.  This docker project  &lt;a href=&#34;https://github.com/folio-org/folio-install/tree/kube-rancher/alternative-install/kubernetes-rancher/TAMU/deploy-jobs/create-email&#34;&gt;https://github.com/folio-org/folio-install/tree/kube-rancher/alternative-install/kubernetes-rancher/TAMU/deploy-jobs/create-email&lt;/a&gt; can be built, pushed to the image registry and executed on the cluster similarly to other scripts mentioned in the Kubernetes deployment section.&lt;/p&gt;
&lt;h2 id=&#34;install-and-serve-edge-modules&#34;&gt;Install and serve edge modules&lt;/h2&gt;
&lt;p&gt;These instructions have been written for a single server environment in which Okapi is running on localhost:9130.&lt;/p&gt;
&lt;p&gt;If you do a test installation of FOLIO, you do not need to install any edge modules at all. Install an edge module in a test environment only if you want to &lt;em&gt;test the edge module&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The Edge modules bridge the gap between some specific third-party services and FOLIO (e.g. RTAC, OAI-PMH).  In these FOLIO reference environments, the set of edge services are accessed via port 8000.  In this example, the edge-oai-pmh will be installed.&lt;/p&gt;
&lt;p&gt;You can find more information about the Edge modules of FOLIO in the Wiki &lt;a href=&#34;https://wiki.folio.org/display/FOLIOtips/Edge+APIs&#34;&gt;https://wiki.folio.org/display/FOLIOtips/Edge+APIs&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create institutional user. An institutional user must be created with appropriate permissions to use the edge module. You can use &lt;a href=&#34;https://github.com/folio-org/folio-install/blob/master/runbooks/single-server/scripts/create-user.py&#34;&gt;the included create-user.py&lt;/a&gt; to create a user and assign permissions.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;python3 create-user.py -u instuser -p instpass \
    --permissions oai-pmh.all --tenant diku \
    --admin-user diku_admin --admin-password admin
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you need to specify an Okapi instance running somewhere other than http://localhost:9130, then add the &amp;ndash;okapi-url flag to pass a different url.  If more than one permission set needs to be assigned, then use a comma delimited list, i.e. &amp;ndash;permissions edge-rtac.all,edge-oai-pmh.all.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;The institutional user is created for each tenant for the purposes of edge APIs. The credentials are stored in one of the secure stores and retrieved as needed by the edge API. See &lt;a href=&#34;https://github.com/folio-org/edge-common#secure-stores&#34;&gt;more information about secure stores&lt;/a&gt;.  In this example, a basic EphemeralStore using an &lt;strong&gt;ephemeral.properties&lt;/strong&gt; file which stores credentials in plain text.  This is meant for development and demonstration purposes only.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;sudo mkdir -p /etc/folio/edge
sudo vi /etc/folio/edge/edge-oai-pmh-ephemeral.properties
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The ephemeral properties file should look like this.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;secureStore.type=Ephemeral
# a comma separated list of tenants
tenants=diku
#######################################################
# For each tenant, the institutional user password...
#
# Note: this is intended for development purposes only
#######################################################
# format: tenant=username,password
diku=instuser,instpass
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Start edge module Docker containers.
You will need the version of the edge-modules available on Okapi for the tenant.  You can run a CURL request to Okapi and get the version of the &lt;strong&gt;edge-oai-pmh&lt;/strong&gt; module.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;curl -s http://localhost:9130/_/proxy/tenants/diku/modules | jq -r &#39;.[].id&#39; | grep &#39;edge-&#39;
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Set up a docker compose file in &lt;strong&gt;/etc/folio/edge/docker-compose.yml&lt;/strong&gt; that defines each edge module that is to be run as a service. The compose file should look like this.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;version: &#39;2&#39;
services:
  edge-oai-pmh:
    ports:
      - &amp;quot;9700:8081&amp;quot;
    image: folioorg/edge-oai-pmh:2.2.1
    volumes:
      - /etc/folio/edge:/mnt
    command:
      -&amp;quot;Dokapi_url=http://10.0.2.15:9130&amp;quot;
      -&amp;quot;Dsecure_store_props=/mnt/edge-oai-pmh-ephemeral.properties&amp;quot;
    restart: &amp;quot;always&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Make sure you use the private IP of the server for the Okapi URL.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start the edge module containers.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;cd /etc/folio/edge
sudo docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Set up NGINX.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Create a new virtual host configuration to proxy the edge modules.  This needs to be done inside your Stripes container.
Log in to the stripes container, cd into the nginx configuration directory and create a new nginx configuration file there:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;docker ps --all | grep stripes
docker exec -it &amp;lt;stripes container id&amp;gt; /bin/sh
cd /etc/nginx/conf.d
edit edge-oai.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Insert the following contents into the new file edge-oai.conf:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
  listen 8130;
  server_name &amp;lt;YOUR_SERVER_NAME&amp;gt;;
  charset utf-8;
  access_log  /var/log/nginx/oai.access.log  combined;
  location /oai {
    rewrite ^/oai/(.*) /$1 break;
    proxy_pass http://&amp;lt;YOUR_SERVER_NAEM&amp;gt;:9700/;
  }
}

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;YOUR_SERVER_NAME might be localhost. If you are working inside a Vagrant box, it is 10.0.2.15.
Exit the container and then restart the container:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker restart &amp;lt;stripes container id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You might also want to modify the Docker file that builds your Stripes container. So you will be able to re-build the container later or on some other machine.
Add the file edge-oai.conf (with the contents as above) to the directory &lt;code&gt;$HOME/platform-complete/docker/&lt;/code&gt;.
Then add a line to the Dockerfile &lt;code&gt;$HOME/platform-complete/docker/Dockerfile&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;COPY docker/edge-oai.conf /etc/nginx/conf.d/edge-oai.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Commit your changes to a local (or personal or institutional) git repository.&lt;/p&gt;
&lt;p&gt;Now, an OAI service is running on http://server:8130/oai .&lt;/p&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Follow this procedure to generate the API key for the tenant and institutional user that were configured in the previous sections.  Currently, the edge modules are protected through API Keys.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;cd ~
git clone https://github.com/folio-org/edge-common.git
cd edge-common
mvn package
java -jar target/edge-common-api-key-utils.jar -g -t diku -u instuser
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will return an API key that must be included in requests to edge modules. With this APIKey, you can test the edge module access.  For instance, a test OAI request would look like this.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -s &amp;quot;http://localhost:8130/oai?apikey=APIKEY=&amp;amp;verb=Identify&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The specific method to construct a request for an edge module is documented in the developers website: &lt;a href=&#34;https://dev.folio.org/source-code/map/&#34;&gt;https://dev.folio.org/source-code/map/&lt;/a&gt; or you can refer to the github project of the edge module.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
