Deploy DocuSeal 3 Document Signing (Postgres)
Self-hosted e-signature: PDF forms, signing links, audit log. Postgres.
Just deployed
DocuSeal
Just deployed
Deploy and Host DocuSeal with Railway
DocuSeal is an open-source platform for creating fillable PDF forms and collecting electronic signatures. This community template runs the official DocuSeal 3 image with PostgreSQL, a persistent volume for documents, a pinned version and an admin account created for you before the instance goes public.
About Hosting DocuSeal
DocuSeal is a Ruby on Rails app that runs its web server, background jobs and a small Redis in one container. It needs a database, a stable SECRET_KEY_BASE (it encrypts settings and the signing certificate) and persistent storage for uploaded and signed documents. A fresh DocuSeal shows a setup page where the first visitor creates the admin account; on a public URL anyone could get there first. This template completes that setup on a private loopback port during the first start, with a generated password, and only then opens the public port. Documents stay on a Railway volume across redeploys.
Common Use Cases
- Sending contracts, NDAs, offer letters and order forms for signature without per-envelope fees
- Turning existing PDFs into reusable templates with signature, date, text and checkbox fields
- Embedding signing links in your own product or portal and receiving results by webhook or API
- Keeping signed documents and audit logs on infrastructure you control
Dependencies for DocuSeal Hosting
- DocuSeal 3.3.6, official image
docuseal/docuseal, pinned by digest (AGPL-3.0) - PostgreSQL 18 (Railway Postgres, pinned by digest)
- A Railway volume for documents (
/data/docuseal) - Optional: an SMTP server for e-mail (see below)
Deployment Dependencies
- DocuSeal: https://www.docuseal.com
- Source, releases and licence: https://github.com/docusealco/docuseal
- Documentation and API: https://www.docuseal.com/docs
- Self-hosting guide: https://www.docuseal.com/install
Implementation Details
| Service | Role | Public | Storage |
|---|---|---|---|
| DocuSeal | Web app, API, background jobs, embedded Redis; health /up | Yes, port 3000 | Volume /data/docuseal (documents) |
| Postgres | Accounts, templates, submissions, audit events | No | Volume |
First login
- Wait until the DocuSeal deployment is active. The very first start takes a little longer because the admin account is created first.
- Open
https://{your-domain}and sign in withDOCUSEAL_ADMIN_EMAIL(defaultadmin@example.com) andDOCUSEAL_ADMIN_PASSWORDfrom the DocuSeal service's Variables tab. There is no default or shared password. - Change the e-mail to your own under Profile, or set
DOCUSEAL_ADMIN_EMAILbefore the first deploy. Turning on two-factor authentication in Profile is recommended.
The setup page is never reachable from the internet: while the database has no user, DocuSeal runs only on 127.0.0.1 and the start script fills in upstream's own setup form. If that fails, the service stops instead of opening an unclaimed instance.
Send your first document: Templates > Upload a PDF, place fields, then Send or Copy the share link. Signers open the link; no account is needed on their side.
Lost admin password: set DOCUSEAL_ADMIN_PASSWORD (8-128 characters) and DOCUSEAL_RESET_ADMIN_PASSWORD=true, redeploy, log in, then set it back to false. This also unlocks an account locked after failed logins. A password that is empty or too short never blocks the deploy: the admin is created with a random password and the log explains this reset.
E-mail: DocuSeal sends signature requests, reminders and completed copies by SMTP only. Configure it under Settings > Email, or set SMTP_ADDRESS, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD and SMTP_FROM on the DocuSeal service. Railway allows outbound SMTP only on Pro plans; on other plans copy the signing link from DocuSeal and send it yourself, or use an e-mail provider that offers SMTP on an allowed port.
Custom domain: add it in Railway, then change the app URL under Settings > Account so signing links use it.
Resources and plans: measured idle on Railway: DocuSeal ~180-200 MiB (web server, jobs and its Redis together), Postgres ~80-110 MiB, near-zero CPU; roughly $3-4 per month idle plus volume storage. Both services fit the Trial plan (1 GB per service). DocuSeal also started and kept its documents with a 0.5 GB limit (Free plan); very large PDFs or many signers at once need more memory, so raise the limit if you see restarts.
Backups: enable Railway volume backups for both the DocuSeal and the Postgres volume; signed documents live on the DocuSeal volume, their records in Postgres.
Scaling: DocuSeal keeps documents on its volume, so it runs as one replica. Raise its memory if large PDFs are slow.
Pinning and upgrades: the DocuSeal version is the FROM line in services/docuseal/Dockerfile (tag plus digest). Read the release notes, change both, back up, and redeploy; DocuSeal migrates the database on start.
Licence: DocuSeal is AGPL-3.0 with an additional term that keeps the DocuSeal attribution in the user interface. The image runs unmodified. Pro features (white-label, user roles, SMS verification and others) are not part of the open-source edition.
Why Deploy DocuSeal on Railway?
Railway gives DocuSeal an HTTPS domain, a private network to Postgres, persistent volumes with backups, generated secrets and usage-based billing. A signing service is running in minutes, and upgrades are a one-line change.
Template Content
