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.
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
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
and CONF_licensekey
Note: In private cloud environments you have to set the property CONF_serverURL
as well. It is recommended to set this property in other environments too.
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.
To create the environment variable names use the following rule:
CONF__
.
(dot) with __
(two underlines)
To make the configuration reproducible and updatable you should use a docker-compose.yml
file.
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 # Set the externally visible server url (un-comment and insert the correct url) #- CONF_serverURL=https://hostname.company.com:9443/ # Set the license key (un-comment and insert the full license key) #- CONF_licensekey=... # Run the application on a pre-determined port for easier mapping - CONF_listener__port=9000 # Customize an option, e.g. 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
If there are more specific requirements, such as a pre-filled user database, a custom container should be created
Using the following compose example you can create a server that is started without any permission restrictions and can be used without further authentication using the public URL context.
version: '2.1' services: pdfc: image: 'inetsoftware/i-net-pdfc-server:latest' restart: 'always' ports: # Not setting a host port allows to use --scale, but the external port varies - 9000/tcp environment: # Using the System/Default config is mandatory in cloud persistence environments - DEFAULT_CONFIG=System/Default # Set the license key (un-comment and insert the full license key) #- CONF_licensekey=... # Run the application on a pre-determined port for easier mapping - CONF_listener_ _port=9000 # Only guest account is active. Activate webapi and comparison.api - CONF_authentication__settings=[{"provider"\:"guest"}] - CONF_plugins__activated={"webapi.core"\:true,"comparison.api"\:true}
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"
The i-net PDFC Server does OCR using the Tesseract libraries. You have to create a new container with Tesseract installed.
# Build from i-net PDFC Base FROM inetsoftware/i-net-pdfc-server RUN set -x \ && apk add --update tesseract-ocr # Tesseract requires this setting ENV LC_ALL=C
If the data of the container should be persisted beyond restarts, e.g. 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 overwrittenProperty 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. |
Using MongoDB Persistence is recommended in scenarios 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 (e.g. Heroku provides an environment variable for that). This port has to be set using the environment variables: inet_http_port
or init_https_port
To bundle a docker container with a MongoDB persistence using Docker Compose, the following docker-compose.yml
script can be used as a starting point:
version: '2.1' services: pdfc: image: 'inetsoftware/i-net-pdfc-server:latest' restart: 'always' ports: # Not setting a host port allows to use --scale, but the external port varies - 9000/tcp environment: # Using the System/Default config is mandatory in cloud persistence environments - DEFAULT_CONFIG=System/Default # Set the externally visible server url (un-comment and insert the correct url) #- CONF_serverURL=https://hostname.company.com:9443/ # Set the license key (un-comment and insert the full license key) #- CONF_licensekey=... # Run the application on a pre-determined port for easier mapping - CONF_listener__port=9000 # Do not force the application to overwrite a previously imported configuration # or other instances using the same MongoDB will have their configuration modified - FORCE_IMPORT_CONFIG=0 # Set up the connection the MongoDB persistence - inet_persistence=mongodb://root:example@mongo:27017/pdfc mongo: image: mongo environment: MONGO_INITDB_ROOT_PASSWORD: example MONGO_INITDB_ROOT_USERNAME: root restart: always
Note: The parameter FORCE_IMPORT_CONFIG
should be set to 0
so that the configuration is imported only once versus every time the container is started. This way the configuration may be persisted and re-used on subsequent restarts or in a scaled environment.
Note: Depending on the specific environment there may be some more options that have to be set. Please have a look at the Environment Properties Matrix.
To distribute the computation load across several server nodes it possible to create a load balanced environment. It is crucial to know that each node will be frontend and backend server at the same time. The nodes can share the data persistence - using a MongoDB setup - so that comparisons are available across nodes.
A load balancer, such as HAProxy
, has to support some kind of sticky sessions so that a logged-in user will always be directed to the same node.
In case of the HAProxy
you can use the balance hdr(Cookie)
setting. To showcase a setup of i-net PDFC using HAProxy have a look at our gitHub example.
In situations where the service is unresponsive but the container can still be accessed, the servers subprocess can be terminated and restarted without restarting the whole container. In this case, the user has to enter the container using shell and run the following command:
ps xo pid,command | grep exitcode | grep -v grep | awk '{print $1}' | xargs -r kill -TERM