i-net PDFC

i-net PDFC Server Docker Container

This is a pre-build containerized version of the i-net PDFC Server application. The container only brings the application and tools required to run the application.

Note: The container does not provide any default users. You have to use the Sign Up method first. See below for advanced use cases.

Please have a look at our website for more information about the i-net PDFC Server.

Quickstart

Run the following command to start an i-net PDFC Server Docker Container:

docker run -d -p 9000:9000 -e CONF_listener__port=9000 --name pdfc inetsoftware/i-net-pdfc-server

Available Tags

Creating a pre-set configuration

The i-net PDFC Server Docker Container should be pre-configured using either a configuration properties file or environment variables. Either way, a local installation with the specific setup should be created first. Using the Maintenance module a backup of the configuration can be created and the configuration properties file in there can be used as a basis.

Note: To have the container fully set up on startup you have to specify at least the following properties: CONF_listener__port

Adding the configuration

A configuration file can be added by using a volume or any other means that adds a specified configuration to the container. The default configuration file can be used or a different one can be set using an environment variable. See Environment Properties Matrix.

Setting up the configuration using environment variables

To create the environment variable names use the following rule:

  • prefix the property with CONF__
  • replace every . (dot) with __ (two underlines)

To make the configuration reproducible you should use a docker-compose.yml file.

Example

version: '2.1'

services:

    pdfc:
        image: 'inetsoftware/i-net-pdfc-server:latest'
        restart: 'always'
        ports:
            - 9000:9000

        environment:
            - DEFAULT_PROPFILE=/tmp/defaultConfiguration.properties
            - DEFAULT_CONFIG=User/Default
 
            # Run the application on a pre-determined port for easier mapping
            - CONF_listener__port=9000
 
            # Customize an option, eg. the theming colors
            - CONF_theme__themecolors={"@base-color":"#0a89dd","@primary-color":"#42a7ca"}
 
            # Enable logging, route log to the container log-file
            - CONF_log__engine=true
            - CONF_log__file=/dev/stdout
 
            # Location for automatic backups
            - CONF_BackupLocation=/root/.i-net software/pdfc_User_Default/backup

Advanced Use Case

If there are more specific requirements, such as a pre-filled user database, a custom container should be created

Example: add PAM authentication and a default user

The following Dockerfile will create a user admin with the password password in a new container.

FROM inetsoftware/i-net-pdfc-server
 
# Tools
RUN apk add --update linux-pam
 
# grant pam permissions to everybody
# Create User that we can log in with
RUN chmod +r /etc/shadow \
    && adduser -D -g "User" admin \
    && echo admin:password | chpasswd \
    && ln -s "/etc/pam.d/base-password" "/etc/pam.d/pdfc"

Example: enable Tesseract OCR recognition

The i-net PDFC Server does OCR using the Tesseract libraries. You have to create a new container with Tesseract installed.

# Add tesseract builder container
FROM inetsoftware/alpine-tesseract:tess4j as tesseract
 
# Build from i-net PDFC Base
FROM inetsoftware/i-net-pdfc-server
 
COPY --from=tesseract /tesseract/tesseract-git-* /tesseract/
 
RUN set -x \
    && echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
    && apk add --update --allow-untrusted /tesseract/tesseract-git-* \
    && rm  -rf /tesseract
 
# Tesseract requires this setting
ENV LC_ALL=C

Mounting / Re-using a given configuration

If the data of the container should be persisted beyond restarts, eg. for new container versions, a volume should be mounted.

The persistence and configuration is located in the home folder of the user root. You should use the following additional options to mount this folder:

-v /folder/to/mount/from:/root -e FORCE_IMPORT_CONFIG=0
  • -v /folder/to/mount/from:/root - mount the specific folder to the home folder of the user root
  • -e FORCE_IMPORT_CONFIG=0 - specify that the given configuration should not be overwritten

Environment Properties Matrix

Property Name Default Value Description
DEFAULT_PROPFILE /tmp/defaultConfiguration.properties Configuration Properties file for initial setup
DEFAULT_CONFIG User/Default Configuration the server will be started with
FORCE_IMPORT_CONFIG 1 Forces the import of the given configuration, overwriting an already existing one. Set to 0 if a configuration is mounted.
DOCKER_ENTRYPOINT_SCRIPT Additional inline-script to run before starting the server
CONF_prop__name Configuration property for server initialization. prop__name was derived from an actual property prop.name which can be taken from a previous backup.
inet_http_port Set a default HTTP port that overrides the one in the configuration. This is intended for shared cloud persistences
inet_https_port Set a default HTTPS port that overrides the one in the configuration. This is intended for shared cloud persistences
inet_persistence URI of the persistence to use. Currently on MongoDB is supported. Will uses the file persistence if not set.

MongoDB Persistence

Using MongoDB Persistence is recommended in scenarios where where no hard drive is available or the file system can disappear together with the server instance. For technical details, please have a look at the documentation.

To configure either persistences the environment variable inet_persistence has to be set up accordingly:

inet_persistence=<PERSISTENCE URI>
 
# MongoDB
inet_persistence=mongodb://(<USERNAME>:<PASSWORD>@)<MONGODB SERVER>/<DATABASE>

If the platform does provide these URIs using environment variables, these have to be forwarded respectively.

Since the configuration is being stored in the persistence it might be required to set the application port to a specific value every time the container starts (eg. Heroku provides an environment variable for that). This port has to be set using the environment variables: inet_http_port or init_https_port

 

© Copyright 1996 - 2019, i-net software; All Rights Reserved.