Nuxeo Enterprise Content Management


LX Brand to the rescue

The new 7.10 LTS version of Nuxeo was just released. I am very happy to report it runs very well on SmartOS in a Ubuntu Linux LX Zone.

Why a LX zone and not a native SmartOS zone you may ask?

Well let me tell you why – most of the Document Management systems I have tested, seem to rely very heavily on OpenOffice. Trying to satisfy the dependencies of OpenOffice and get it to run reliably on vanilla SmartOS, is as much fun as trying to sandpaper the belly of an alligator in a phone booth while blindfolded!

If you’re thinking that sounds like your particular brand of fun, well heck, go right ahead – don’t let me stop you 😉

Niels Goossens, the owner of the smllr blog will likewise concur that the difficulty of trying to get Document Management solutions running natively on a SmartOS zone is not a trivial endeavour.

The Test Environment

Since I was testing this for a university client, all local SmartOS test Node platform images were updated accordingly, to emulate the exact same PI that the university is currently running in production. This is important to ensure that the same specific LX brand on the same Platform Image was tested against. Primarily to avoid any unknown quirks related to Platform Image / LX dataset version interactions when running Nuxeo in production.

The specific versions tested against are as follows:

  • Platform Image: 20151001T070028Z
  • Dataset Name: ubuntu-14.04
  • Dataset Version: 20150819
  • Dataset UUID: c8d68a9e-4682-11e5-9450-4f4fadd0936d

Nuxeo Installation Steps (testing)

Preamble : The test zone was configured with 4GB of RAM – which is the minimum requirement. 2 CPU cores were allocated. In a production setup, considerably more cores / ram should be allocated and the Java Heap size and other settings should be optimised and adjusted accordingly. As a side note, even on this simple test setup after 24 hours of operation, RAM usage was only 1.3GB with an average CPU usage of approximately 2%.

In production the system can be scaled to handle extremely large environments with large volumes of document data – this is addressed in detail in the technical Q&A section of this blog post.

1. Adding Nuxeo repository

Fix the Locales for specific country you are in, and then add the official Nuxeo repository.

locale-gen en_AU.UTF-8
dpkg-reconfigure locales
wget -q -O- | sudo apt-key add -
apt-key list
echo "deb $(lsb_release -cs) releases" > /etc/apt/sources.list.d/nuxeo.list
apt-get update

2. Oracle Java download and setup

Current Nuxeo Platforms require Java JDK version 1.8 – This is not available in Ubuntu. Although in theory, a similar OpenJDK version could be used, there is mention in the Nuxeo forums/docs to use the supported Oracle version. The recommended way to install this is directly from the Oracle website after accepting the license agreement.

Download Link page: Java JDK 1.8 u65

mkdir /usr/lib/jvm/ 
tar -xvzf jdk-8u65-linux-x64.gz -C /usr/lib/jvm/
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_65/bin/java 100

3. Nuxeo Install

After the install, switch Java version back to version 1.8 as the apt-get installation process pulls down version 1.7:

apt-get install nuxeo
update-alternatives --config java
java -version
/etc/init.d/nuxeo restart

During the install process you will be prompted to install a database and to specify an ip address to listen on. In this test setup I used the default of PostgreSQL. Once the installation is completed, the remainder of the setup is done within a web browser.

In browser visit : http://server.ip:8080

You will need to accept the licence terms and sign in via google auth or via email. There are optional modules that can be chosen during the install or can be installed at a later stage from the “Nuxeo Marketplace”. Once the browser portion of the setup is complete, you can now login with the default username and password of Administrator / Administrator

Note : Immediately after Nuxeo is first started you will notice some CPU spikes as the sample content is indexed and thumbnails etc are generated. This will be evident via running the Linux top command and you will see ffmpeg and imagemagick activity.

Q&A Section

During the due diligence phase of this project, there were some additional questions that needed answering.

Before proceeding with the answers – I should reiterate how totally impressed I am with the quality of the the documentation available from Nuxeo. It is simply superb and up there with some of the best documentation I have ever seen from any company or product. They definitely consider their documentation important and regularly update it .

What operating systems clients are available for Nuxeo?

The following native Clients are available and can be downloaded directly via web browser from a running Nuxeo server instance. * Mac OSX * Windows * Linux (needs to be installed manually)

What client platforms are supported?

There are native mobile apps for: * IOS * Android

Nuxeo Mobile App

Is re-branding the UI difficult?

The Nuxeo platform is extremely customizable and the way it can be rebranded and modified, is handled in a clean, elegant and sane manner. It is possible to provide customised views and workflows that match business needs and to provide easier and faster inter-staff collaboration. It provides maximum flexibility and extensibility to match enterprise level business needs. via: * Nuxeo UI Framework * Nuxeo Studio

What type of API is available?

Nuxeo has a complete and comprehensive REST API and it is accessed via http://servername:8080/nuxeo/api/v1/*. This API facilitates integrations of remote applications with the Nuxeo API endpoints. There is also an API Playground available for evaluation and testing purposes as well as some video training resources on the Nuxeo University site. In addition Nuxeo provides several client SDK’s to help with integration – namely: Java, javascript, IOS, Android, PHP, DART

Can you use external user databases/oauth?

Nuxeo supports OAuth 2 and adheres closely to OAuth RFC. To use OAuth 2, Nuxeo should be configured to run in HTTPS Secure mode. Endpoints include:

  • Authorization endpoint : used by the client to obtain authorization from the resource owner via user-agent redirection
  • Token endpoint : used by the client to exchange an authorization grant for an access token, typically with client authentication

Nuxeo Using OAuth 2

How does storage scale?

Nuxeo storage is pluggable and can be adapted to multiple deployment environments and use cases. It supports multiple storage backends for different types of data. You can define specifically where you choose to store:

  • Document meta data
    • SQL Database (PostgresSQL, Oracle, MSSQL, MySQL, Amazon RDS)
    • MongoDB
  • Document Binary streams (the actual files attached to documents)
    • Simple Local FileSystem
    • SQL Database
    • S3, Azure
    • Content Delivery Networks (leveraging)
  • Document Indexes (including full-text)
    • SQL Database
    • Elasticsearch

Scalability, HA, Clustering & Compute

Nuxeo handles scale-out by enabling a clustering mode. In clustering mode you can have multiple Nuxeo Server Nodes connected to the same database server. In order to scale and handle more requests you simply add more Nuxeo nodes/servers.

When running in Cluster mode it is strongly recommended to use REDIS to share caches between nodes and make cache more efficient and avoid invalidation issues as well as share scheduled work queues.

To avoid the database being the single point of failure in a distributed clustered Nuxeo setup, the database should be run in a replicated configuration. A document outlining Nuxeo HA and PostgreSQL configuration is linked below:

Nuxeo HA configuration with PostgreSQL

An excellent Blog post about testing the Nuxeo platform with 1 Billion Documents linked below:

Testing the Limits of Nuxeo

More comprehensive details / documentation on deployment options and architecture diagrams can be found at the following link:

Nuxeo Deployment Options

What do upgrades look like?

Nuxeo always recommends upgrading to the latest public release when it is available. Each release addresses bug fixes and possibly adds new features. Each release is carefully tested to ensure it does not break anything both in terms of backwards compatibility, API compatibility and data migration. They provide guidelines for each update and its generally a simple and painless procedure.

The Nuxeo General Upgrade Procedure document is referenced below:

Nuxeo Upgrade Procedure


Nuxeo ECM Open Source is one of the better if not the best document management system I have tested. It is easy to use, intuitive and heavily customizable. It seems to run very well on a LX branded zone, thank you Joyent for making LX zones possible on SmartOS and opening the door to using the myriad of Linux only applications on SmartOS while retaining all the benefits that native SmartOS containers provide. Most of all thank you to John Paul Catholic University for sponsoring this work and openly sharing this information so that other SmartOS users may benefit.