InDesign Server in Azure

Overview

I found the installation of InDesign Server in Azure not as straight forward as I expected so documented it here for future reference. I went in thinking I might be able to write some bicep or an ARM template to define the VM, and that's still the plan, but this is a pointy-clicky reference.

InDesign Server Trial Version

I started with the latest available trial version of InDesign Server from the Adobe prerelease site. This is feature complete but time limited to 90 days:

Adobe InDesign server trial::img-shadow

The latest version available to me is 2020.0.2 which equates to the July 2020 (15.1.1) tab in the specifications required to run InDesign Server:

Adobe InDesign server requirements

Azure VM selection

According to these specs we need a Windows 2019 VM with a video card. I did try installing on a VM with no video card (and on Windows 2022) but the installer hung. The service did claim it had installed but it wouldn't start up and refused connections.

Azure portal Windows 2019

I selected the cheapest NC Series VM we could get - it's still not cheap:

Azure Windows VMs with GPU - NC Series

I also had to select "Request Quota" in our Subscription to get acces to the resources the VM required. This took about 5 minutes.

Azure Windows VMs request quota

And nothing fancy for the rest of the VM setup in the Portal. Just opened the RDP port for a single IP address and selected "Delete public IP and NIC when VM is deleted".

InDesign Server Installation

(Always run cmd as Administrator)

Remote into the new VM and visit the Adobe prerelease site. In the available programs tab, "Join" the InDesign Server Trial Downloads Program. In that program download the latest version available:

InDesign Server Trial Download

Double clicking the extracted exe installer always hung for me so I installed via the command line. Run cmd as Administrator, cd to the extracted install directory and run:

1Set-up.exe --silent=1

It takes a while. After about 10% I got an error asking me to add a security exception for "about:security_Set-up.exe" to IE. Do that and it will keep installing to the end.

I had read about needing to set Edge as the default browser in order to enforce TLS1.2 and get through the install but this didn't seem to affect me.

At the end of the install you need to login to Adobe and Start the Trial.

Provisioning Toolkit

Apparently you also need to provision your installation by running the Provisioning Toolkit. Download it from here - the link is about halfway down.

Or directly here: http://download.macromedia.com/pub/developer/prtk/Adobe_Provisioning_Toolkit_10_0_ALL.exe

Extract the toolkit and then run it like this:

1adobe_prtk --tool=StartTrial --leid=V7{}InDesignServer-15-Win-GM

The --leid switch must correspond to the version you are installing. A list of LEID (product identifiers) is here

If the trial is successfully activated, the following message is displayed:

1> StartTrial Successful
2> Return Code = 0

Starting InDesign Server

You can now start InDesign Server from a cmd prompt like this:

1InDesignServer -port 18383

InDesign Server accpeting connections

There are a bunch of different command line arguments that can be useful - pushing events to the Windows Event log (-LogToApplicationEventLog) we found helpful.

Windows Service and MMC snap-in

There is a useful PDF document called "Intro to InDesign Server 2020.pdf" which is in the InDesign Server installation folder (for me C:\Program Files\Adobe\Adobe InDesign Server 2020\Documentation\English). It has some instructions for installing the InDesign Server Service (handy for making sure InDesign Server starts up after a reboot) and the InDesign MMC snap-in (point and click management of InDesign Server instances).

At an elevated cmd prompt, navigate to the InDesign Server installation folder (for me C:\Program Files\Adobe\Adobe InDesign Server 2020) and run:

1InDesignServerService /install

Open "Services" and change the Startup type for the "InDesignServerService x64" to Automatic.

InDesign Server Service

For the MMC snap-in, the documentation suggests using regsvr64 but I had to use regsvr32:

1regsvr32 InDesignServerMMC64.dll

You can then use MMC to administer InDesign Server instances, assign port numbers etc:

InDesign Server Service MMC snap in

InDesign Server is now ready to accept connections.

Interacting with InDesign Server will be the next post...

InDesign Server command line arguments

Apologies to Adobe - this is lifted directly from their PDF documentation but it didn't seem to be anywhere easily accessible on the internet.

Argument Description
-adminport number Optional. Opens the specified port for server administrative tasks.
-configuration name Optional. Specifies the configuration name for this instance of InDesign Server. name must be a valid folder name in the current system, as InDesign Server uses it to create the configuration folder that stores private data, cache, and configuration files. By default, the folder name is configuration_noport or configuration_n where n is the port number (if the -port argument is specified). The configuration folder is created in: On Windows: C:\Users<username>\AppData\Roaming\Adobe\InDesign Server<version><locale>\ . On Windows under Windows Service: C:\ProgramData\Adobe\InDesign Server<version><locale>\ . On Mac OS: /Users//Library/Preferences/Adobe InDesign Server///
-[no]console Optional. Windows only. This creates a new console window (a command shell) and redirects stderr and stdout there. If -noconsole specified, stdout and stderr are piped to the terminal (or window) that launched InDesign Server. This argument is useful when using the Microsoft Visual Studio debugger to debug an InDesign Server plug-in that you are developing, because by default, the debugger discards data written to stderr and stdout. This also might be useful when starting InDesign Server from within another application, like an application server. This argument can be used only with InDesignServer.exe, not with InDesignServer.com. The default is -noconsole.
-[no]errorlist Optional. Controls whether InDesign Server should store the scripting errors from SOAP invocations in memory. The error list is not cleared automatically; if more errors are accumulated than allowed for, new errors are lost. The default is -noerrorlist.
-heartbeatupdateinterval (number) Optional. Time interval (in seconds) at which the last active time of InDesign Server is updated with the administrative application.
-help Optional. Displays short descriptions of all arguments.
-host name Optional. Name of the machine on which InDesignServer is running. Either symbolic (for example, host.corp.com) or IPv4 address (for example, 123.345.678.90).
-iorfile filepath Required for use with CORBA; otherwise, optional. Tells InDesign Server where to write the file containing the application object's IOR. The IOR in this file is used by a client to create a reference to the InDesign Server application object. You can think of this as a cookie that your client code uses to access InDesign Server's application object. Each server instance requires a unique IOR file. Multiple clients access a given server using the IOR file for that server. You will know that the IOR was written to the specified file if InDesign Server outputs the following notification: "[server] Writing IOR to ..."
-LogToApplicationEventLog Optional. On Windows, this routes InDesign Server's console output to the Window's application event log. The output can be viewed in the standard Application Event Viewer Computer Management Control Panel. On Macintosh, this argument should be used when InDesign Server is used as a launchd daemon. To view the output, use the standard Mac OS Console application.
-maxerrors (number) Optional. The number specifies the maximum number of scripting errors from SOAP invocations that InDesign Server should store in memory. The default is 10,000.
-maxwaitss (number) Optional. The number specifies the time in seconds that the client is willing to wait for a session to begin. Provides nonblocking Session Support when used with -noblockss.The default wait time is 3 seconds.
-noblockss Optional. Specifies that the BeginSession request will be nonblocking in nature. If this is not supplied, the client will be blocked until the server has a free worker thread in the thread pool, and so can begin a new session for the client. Provides nonblocking Session Support when used with
-onmainthread Optional. Execute all incoming client requests on the main thread only.
-pluginpath path[,path] Required for use with CORBA; otherwise, optional. Directs the server to load all plug-ins in the specified folder(s) and their subfolders. By specifying the installed server/corba subdirectory, the InDesign Server Corba Support plug-in is loaded and enabled. path is a relative path based on the InDesign Server install folder (for example, passing in "Server/Corba" specifies the folder "C:\Program Files\Adobe\ Adobe InDesign Server 2020\Server\Corba"). Do not use an absolute path. You will know that the Corba Support plug-in loaded if InDesign Server outputs the following notification: "[server] ApplicationIOR: ..."
-port (number) Required. This is the port number of the socket that InDesign Server will use to service SOAP requests from client applications. If not specified, no port is used, and SOAP requests cannot be processed. Each instance of InDesign Server running on the same system must have a unique port when enabling SOAP. The port number must be a positive integer value.
-[no]previews Optional. Specifies whether to generate previews when importing images. The default is -nopreviews.
-rxidletimeout (number) Optional. Sets the idle timeout (in seconds) after which the client connection is dropped.
-[no]seh Optional. Windows only. Specifies whether structured exception handling should be used. The default is -seh.
-[no]sendcrashlogs Automatically sends crash logs to Adobe. The default is -nosendcrashlogs