Deploy opensign-railway-creator

Self-host OpenSign e-signing on Railway - signing works without SMTP

Deploy opensign-railway-creator

Just deployed

Just deployed

/usr/src/app/files/files

MongoDB

mongo:8.0

Just deployed

/data/db

OpenSign — Self-Hosted Document Signing on Railway

One-click deploy of OpenSign, the open-source DocuSign alternative. Upload a PDF, place signature, date and text fields, send a signing link, and collect legally trackable signatures with a full audit trail and signing certificate — on your own Railway project.

Deploy on Railway

What you get

  • 3 services, provisioned and wired automatically: OpenSign Client (React SPA), OpenSign Server (Parse Server API with LibreOffice document conversion), and MongoDB.
  • Zero required variables — every environment variable ships with a working default (secrets are generated per deploy via Railway secret references).
  • Signing works out of the box — a shared self-signed signing certificate is preconfigured, so you can complete a full signature round-trip immediately.
  • Persistent by design — MongoDB data and all uploaded/signed documents live on Railway volumes and survive redeploys.
  • Digest-pinned images — deploys reference immutable image digests, not floating tags.

How it works

ServiceImagePortNotes
Clientopensign/opensign (digest-pinned)3000React SPA served by a Node static server
Serveropensign/opensignserver (digest-pinned)8080Parse Server API, LibreOffice for DOCX to PDF
Mongomongo (digest-pinned)27017Private networking only

The Client is deployed on its own public domain and calls the Server API cross-origin at /app (CORS is enabled server-side). The browser can only reach the Server through its public domain, so both app services get one; Mongo stays private.

Configuration (all pre-filled, nothing required)

Everything deploys with working defaults — there are no required inputs. The Server variables are generated per deployment from Railway template expressions:

VariableServiceDefaultPurpose
MASTER_KEYServerrandom 12-char secret per deploymentParse Server master key
MONGODB_URIServercomposed from the MongoDB service references (per-deploy credentials)Database connection
SERVER_URLServerpublic domain of Server + /appPublic API URL
REACT_APP_SERVERURLClientpublic domain of Server + /appAPI URL baked into the client at boot
MONGO_INITDB_ROOT_USERNAME / _PASSWORDMongoDBrandom secrets per deploymentDatabase root credentials

Fixed settings (local storage mode, the signing certificate and its passphrase) are baked into the Server start command, so they ship with the template but can be changed later in the Server service settings.

Optional additions:

  • Email notifications (SMTP): set SMTP_ENABLE=true, SMTP_HOST, SMTP_PORT, SMTP_USERNAME, SMTP_PASS, SMTP_USER_EMAIL on the Server. Without mail config everything still signs — but sign-request and completion emails are not sent, so share signing links manually from the UI, and password reset is unavailable. Port 465 uses implicit TLS, any other port uses STARTTLS. Mailgun works too via MAILGUN_API_KEY, MAILGUN_DOMAIN, MAILGUN_SENDER.
  • S3-compatible storage: remove USE_LOCAL from the Server start command and set DO_SPACE, DO_ENDPOINT, DO_BASEURL, DO_ACCESS_KEY_ID, DO_SECRET_ACCESS_KEY, DO_REGION. The default uses the Server volume at /usr/src/app/files/files.

Notes on the signing certificate

The template ships a shared self-signed P12 certificate (baked into the Server start command as PFX_BASE64, passphrase opensign) so signing and certificate generation work immediately. It is fine for trials and internal use. For production, upload your own certificate per organization inside OpenSign (Organisation settings), which overrides the bundled one. The bundled certificate was generated with the commands in cert/generate.sh.

Deploy and Host

About Hosting

This template provisions three services on Railway. The Server runs OpenSign's Parse Server (Node 22) with LibreOffice bundled for DOCX to PDF conversion — give it at least 1 GB of RAM; signature application and conversions are memory-hungry. Documents and uploads persist on a volume mounted at /usr/src/app/files/files on the Server; MongoDB persists on its own volume. On first boot the Server runs database migrations before it starts listening, so the first deploy can take a few minutes. Both app services expose healthcheck endpoints (/health on the Client, /app/health on the Server) and Railway restarts them automatically if they crash. Existing OpenSign templates on the marketplace show small deploy counts (1 and 7 deploys at publish time); this template differentiates with digest-pinned images, zero required variables, working signing on first boot, and verified volume persistence.

Why Deploy

Manual self-hosting of OpenSign requires a reverse proxy (Caddy), a Mongo instance, runtime environment wiring between the React client and the Parse Server, and a signing certificate before the first signature can complete. This template does all of it: the client-to-API URL is wired via cross-service references, Mongo credentials flow through private networking, the signing certificate is preconfigured, and uploads land on a persistent volume. You get a working e-signature platform in one click instead of four hand-wired containers.

Common Use Cases

  • Signing contracts, NDAs, offer letters and vendor agreements with a full audit trail (IP addresses, timestamps, signing certificate).
  • Sending documents to external signers who complete them from a public link without creating an account.
  • Self-hosted DocuSign alternative where documents never leave your own infrastructure.
  • Teams that need templates and bulk sending of reusable documents.

Dependencies for

Deployment Dependencies

  • A Railway account with a Developer or Hobby plan; the three-service stack with two volumes fits comfortably, but the Server should be placed on a plan with 1 GB or more RAM.
  • No external services are required: MongoDB is provisioned by the template, and local file storage is the default. SMTP or a Mailgun account is optional and only needed for automated email notifications; an S3-compatible bucket is optional and only needed if you prefer object storage over the volume.

Template Content

More templates in this category

View Template
Rocky Linux
Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
51
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
52