Deployment
Deploy Signa on-premise
Install Signa with Docker Compose, create the first owner, and configure durable storage, mail delivery, HTTPS, backups, and upgrades.
Before you begin
- A Linux server with Docker Engine and the Docker Compose plugin
- Access to the Signa source repository
- Port 3000 available for local evaluation, or a domain and HTTPS reverse proxy for production
What you will complete
- A running Signa installation on port 3000
- A persistent owner account and document store
- A deployment you can verify, back up, and upgrade
Install with Docker Compose
Clone Signa, create the small environment file below, and start the stack. This default installation keeps SQLite, uploaded files, completed documents, the generated application secret, and private Redis data in the signa-data Docker volume.
git clone https://github.com/codeignite-labs/signa.git
cd signa
printf 'APP_URL=http://localhost:3000\nREGISTRATION_MODE=initial_only\n' > .env
docker compose up -d --buildDo not run docker compose down -v unless you intend to permanently delete the named data volume.
Verify the installation
Wait for the image build and application startup to finish, then inspect the container and call the health endpoint. The health response should report a successful status before you create an account.
- Application: http://localhost:3000
- API documentation: http://localhost:3000/api/docs
- Health endpoint: http://localhost:3000/api/health
docker compose ps
curl -fsS http://localhost:3000/api/health
docker compose logs --tail=100 signaCreate the first owner
- 1Open registrationVisit http://localhost:3000/auth/register, enter the owner details, and create the first account.
- 2Sign in to the workspaceAfter registration, Signa opens the product workspace. Confirm that Templates, Submissions, and Settings are available.
- 3Keep registration restrictedREGISTRATION_MODE=initial_only automatically blocks later self-service registrations after the first user exists. Add other users through workspace invitations.
Run without Docker Compose
If you prefer a single Docker command, build the same image from the repository and mount /data as a named volume.
docker build -t signa:local .
docker run -d \
--name signa \
--restart unless-stopped \
-p 3000:3000 \
-e APP_URL=http://localhost:3000 \
-e REGISTRATION_MODE=initial_only \
-v signa-data:/data \
signa:localSet the production URL
Point your domain to the server, terminate HTTPS with a reverse proxy or load balancer, and set APP_URL to the public HTTPS origin. Signa derives frontend, API, signing, storage, and email links from this one value.
APP_URL=https://sign.example.com
REGISTRATION_MODE=initial_onlyAfter changing .env, apply it with docker compose up -d. Keep port 3000 behind the HTTPS proxy instead of exposing it directly to the public internet.
Choose database and document storage
The default SQLite database and local document storage are appropriate for a single-node installation when the signa-data volume is backed up. Set DATABASE_URL for PostgreSQL and S3_ATTACHMENTS_BUCKET for private object storage when your recovery or scaling requirements call for external persistence.
DATABASE_URL=postgresql://signa:replace-me@postgres.example.com:5432/signa
DATABASE_SSL=true
S3_ATTACHMENTS_BUCKET=signa-documents
AWS_REGION=eu-west-1On AWS, prefer an instance or workload role. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY only when the runtime cannot receive credentials from its platform. Set S3_ENDPOINT only for a non-AWS S3-compatible provider.
Enable email delivery
SMTP_ADDRESS enables email. Add the provider settings to .env, recreate the container, then send a test signature request to an address you control.
SMTP_ADDRESS=smtp.example.com
SMTP_PORT=587
SMTP_USERNAME=signa-smtp-user
SMTP_PASSWORD=replace-me
SMTP_AUTHENTICATION=plain
SMTP_FROM=Signa <signing@example.com>
SMTP_REPLY_TO=support@example.com
SMTP_ENABLE_STARTTLS=true
SMTP_SSL_VERIFY=trueDo not disable certificate verification in production. If delivery fails, inspect the submission activity and docker compose logs before retrying.
Apply and test the production configuration
- Create a template and wait for every page preview to render.
- Send a request and confirm the invitation email arrives.
- Complete the request and download the completed PDF.
- Restart the container and confirm the template and completed document still exist.
docker compose config
docker compose up -d --build
docker compose ps
curl -fsS https://sign.example.com/api/healthBack up and upgrade
For the default single-node installation, archive /data before an upgrade. External PostgreSQL databases and S3 buckets must be backed up with their provider-native tools as part of the same recovery point.
docker compose exec -T signa tar -C /data -czf - . > signa-data-$(date +%F-%H%M%S).tar.gz
git pull --ff-only
docker compose up -d --build
docker compose psTest restoration on a separate server. A backup is not complete until the database and document objects can be restored together.
Production checklist
- The public APP_URL uses HTTPS and resolves to the deployment.
- The health endpoint returns success through the public proxy.
- The first owner exists and public registration is closed.
- Database records and document objects share a tested backup schedule.
- Pin a Git release or commit and test upgrades in a staging environment.
- Monitor health, storage failures, queue failures, and email delivery errors.
- Keep secrets out of Compose files and source control.