SeedDMS
Overview
SeedDMS is a mature, web-based open source Document Management System. It organizes files into a browsable folder tree with full version history, and per-object access control lists control who can see and edit each folder or document. It also provides review and approval workflows, categories and attributes, full text search, a WebDAV endpoint and a REST API.
The SecureAnyCloud image ships SeedDMS 6 served by nginx and PHP 8.3 FPM on a hardened Ubuntu 24.04 LTS base, patched at build time. A bundled local MariaDB server makes the appliance complete on its own. The install wizard is pre-completed and locked, so the platform is ready as soon as the instance boots.
What you get:
- SeedDMS 6 served by nginx and PHP 8.3 FPM, managed by systemd
- A bundled MariaDB server holding the SeedDMS database, already installed and ready
- MariaDB bound to
127.0.0.1only (port 3306), never exposed to the network - The install wizard pre-completed and locked, and the web install tool removed
- A per-VM administrator password generated on first boot and recorded in a root-only file
- No shipped default login. The well-known SeedDMS
admin/adminaccount is never shipped. The administrator password ships rotated to a discarded random value, and the real per-VM password is set on first boot. - Document content stored under
/var/lib/seeddms/data, kept separate from both the web root and the application code nginx.service,php8.3-fpm.serviceandmariadb.serviceas enabled systemd units- An unauthenticated
/healthzendpoint for Azure Load Balancer health probes - 24/7 SecureAnyCloud support
Prerequisites
- An active Azure subscription, an SSH key pair, and a VNet and subnet in the target region
- A Standard_B2s VM (2 vCPU / 4 GiB RAM), which is a sensible starting point for a small team. Step up to Standard_D2s_v3 for heavier document workloads.
- NSG inbound rules that allow
22/tcpfrom your management network and80/tcpfor the application, plus443/tcpif you terminate TLS on the VM
The bundled MariaDB is never exposed. It listens on 127.0.0.1 only, so port 3306 stays off the network.
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for SeedDMS by SecureAnyCloud and select Create.
On Basics, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80). Then select Review + create and Create.
Step 2 - Deploy from the Azure CLI
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:seeddms-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name seeddms \
--image sac1647283583153:seeddms-ubuntu-24-04:default:latest \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku StandardThen open port 80:
az vm open-port --resource-group <your-rg> --name seeddms --port 80Step 3 - Confirm the services are running
SSH in as azureuser and confirm that nginx, PHP FPM, MariaDB and the first-boot service are all active. MariaDB listens only on 127.0.0.1:3306, while nginx serves SeedDMS on port 80.
systemctl is-active nginx php8.3-fpm mariadb seeddms-firstbootss -tlnp | grep -E ':80 |:3306 ' | sed 's/ */ /g'Step 4 - Retrieve the per-VM administrator password
Every VM generates its own SeedDMS administrator password on first boot. It writes the password, the login user and the application URL to a root-only credentials file. Read the file with sudo:
sudo cat /root/seeddms-credentials.txtSign in to SeedDMS as user admin with the SEEDDMS_ADMIN_PASSWORD from this file. On the VM itself, you can also run sudo mariadb to reach the database directly over the local socket without a password.
Step 5 - Sign in
Browse to http://<vm-public-ip>/ to reach the SeedDMS sign-in page. Enter user ID admin and the password from Step 4.
After you sign in, you land on the DMS root folder view. The folder tree is on the left, folder information is in the center and a drag-and-drop fast upload panel is on the right.
Step 6 - Add folders and documents
From any folder, select Add subfolder to build out your folder structure. Then select Add document to upload a file.
Each document can carry a name, comment, keywords, categories, an expiry date and a sequence position. Every later upload to the same document is kept as a new version, with the full history preserved.
Step 7 - Manage users and access
Open Admin tools, then User management, to create users and groups and assign them roles. Combine users and groups with per-folder and per-document access control lists to control exactly who can read, write, review or approve each part of your document tree.
This is also where you rotate the administrator's own password from the web interface.
Step 8 - No known or default credentials
SeedDMS ships upstream with a well-known admin / admin account. The SecureAnyCloud image never ships it. The administrator password is rotated to a discarded random value at build time, and the real per-VM administrator password is generated with a unique random secret on the first boot of every VM.
You can prove both facts on the VM:
- The user table holds only the admin and disabled guest rows.
- The well-known default password hash is absent.
- The built-in round-trip check confirms that the per-VM administrator signs in through the SeedDMS login form.
Run these commands:
sudo mariadb -N -B seeddms -e "SELECT id,login,role FROM tblUsers ORDER BY id;"sudo mariadb -N -B seeddms -e "SELECT count(*) AS default_admin_present FROM tblUsers WHERE login='admin' AND pwd='21232f297a57a5a743894a0e4a801fc3';"sudo bash /usr/local/sbin/seeddms-cred-roundtrip.shStep 9 - Verify the stack and where your data lives
Confirm the health endpoint, the installed schema version and where your document content lives.
The web root at /var/www/seeddms/www holds only application code. The configuration file sits outside the web root at /var/www/seeddms/conf/settings.xml. All uploaded document content is stored under /var/lib/seeddms/data, separate from both the web root and the code, so it is never reachable from the web and survives an application upgrade:
curl -sI http://127.0.0.1/healthz | head -1sudo mariadb -N -B seeddms -e "SELECT concat('SeedDMS schema ',major,'.',minor,'.',subminor) FROM tblVersion;"ls -ld /var/www/seeddms/www /var/www/seeddms/conf /var/lib/seeddms/dataAdding your own domain and TLS
The appliance serves plain HTTP on port 80. To add TLS, point a DNS record at your VM and obtain a certificate with Let's Encrypt:
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d <your-domain>SeedDMS derives its base URL from the request Host header. Once you reach the VM on your domain over HTTPS, links render correctly with no further change.
Backing up
Your document data is the SeedDMS database plus the document content directory. Dump the database and archive the content tree:
sudo mysqldump seeddms > /tmp/seeddms-backup.sql
sudo tar czf /tmp/seeddms-content-backup.tar.gz -C /var/lib/seeddms dataCopy both files off the VM on your usual schedule. To restore, load the SQL dump into the seeddms database and unpack the archive back to /var/lib/seeddms/data.
Security notes
- SeedDMS serves plain HTTP on port 80 out of the box. For anything beyond a trusted network, add your own domain and TLS as described above, or front the VM with Azure Application Gateway.
- The bundled MariaDB listens on
127.0.0.1only and is never reachable from the network. Administer it through SeedDMS or over SSH withsudo mariadb. - The administrator password is unique per VM, and no known or blank credential authenticates. Keep
/root/seeddms-credentials.txtprotected. To rotate the password, sign in and change it under Admin tools > User management, or set a new one directly from the VM:
sudo mariadb seeddms -e "UPDATE tblUsers SET pwd=MD5('<new-password>') WHERE login='admin'"- The configuration file and document content live outside the web root. nginx denies
/inc,/utils,/doc,/installand dotfiles, so code, configuration and uploaded files are never reachable from the web. - Apply operating system updates regularly with
sudo apt update && sudo apt upgrade. Unattended security updates are enabled by default.
Deploy on Azure
Launch SeedDMS 6 Document Management System on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com
Overview
SeedDMS is the mature open source document management system used by businesses, engineering and quality teams and any organization that needs a self-hosted, access-controlled document repository. From one web interface, you organize files into a browsable folder tree and keep full version history for every document.
This image runs SeedDMS as a PHP application under /var/www/seeddms, served by nginx through PHP 8.3 FPM on port 80. Its metadata lives in a MariaDB database on a dedicated, independently resizable EBS data volume, so every document and its metadata stays off the operating system disk and survives instance replacement.
What you get:
- Per-object access control lists that control who can see and edit each folder or document
- Review and approval workflows, categories and attributes, and full text search
- A WebDAV endpoint and a REST API
- A MariaDB data directory,
/var/lib/mysql, bind-mounted onto an EBS data volume mounted at/data - A document content store,
/var/lib/seeddms, holding your uploaded files, cache, full text index and backups, kept on that same data volume - The install wizard completed during the build and locked away from the web, so you land directly on a working sign-in page
- An administrator account created on the first boot of every instance, with a freshly generated password, so two instances launched from the same Amazon Machine Image never share a password
- No well-known SeedDMS default administrator login
- Credentials written to
/root/seeddms-credentials.txtwith mode 0600, readable only by the root user - An empty document store at launch
Prerequisites
Before you deploy this image, you need:
- An Amazon Web Services account where you can launch EC2 instances
- IAM permissions to launch instances, create security groups and subscribe to AWS Marketplace products
- An EC2 key pair in the target Region for SSH access to the instance
- A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network and port 80 for the web interface
- The AWS CLI (version 2) installed locally, if you plan to deploy from the command line
Launch the Instance from the AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for SeedDMS. Select the SecureAnyCloud listing, choose Select, then choose Continue on the subscription summary.
Pick an instance type of m5.large or larger. Choose your EC2 key pair under Key pair (login). Under Network settings, select your VPC and subnet. Create or select a security group that opens port 22 from your management network and port 80 for the web interface. Leave the root volume at the default size or larger.
Select Launch instance. First-boot initialization takes a few seconds after the instance state becomes Running and the status checks pass. During this time, the per-instance administrator and database passwords are generated.
Launch the Instance from the AWS CLI
The following command launches an instance from the SecureAnyCloud SeedDMS Marketplace AMI into an existing subnet and security group.
Replace <ami-id> with the AMI ID shown on the Marketplace listing and <key-name> with your EC2 key pair name. Replace <subnet-id> with your subnet ID and <security-group-id> with a security group that opens ports 22 and 80 as described above.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type m5.large \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=seeddms}]'When the instance reaches the Running state and its status checks pass, note its public IP address or DNS name. You can find it in the EC2 console or with aws ec2 describe-instances.
Connect to Your Instance
Connect over SSH with your key pair and the login user for your operating system variant.
OS variant SSH login user
Ubuntu 24.04 ubuntu
ssh -i <key-name>.pem ubuntu@<public-ip>Retrieve the Administrator Password
The administrator password is unique to your instance and is generated on first boot. Read it as root:
sudo cat /root/seeddms-credentials.txtThe file lists the web interface URL, the administrator login name (admin) and the generated password. It also lists the MariaDB database name and its application password. Keep this file somewhere safe.
Sign In to SeedDMS
The web interface is served on port 80 by nginx. In a browser, go to the instance address:
http://<instance-public-ip>/The SeedDMS sign-in page opens. Sign in with login name admin and the password from the credentials file.
SeedDMS derives its base URL from the address you reach it on. It answers correctly whether you browse by public IP, private IP or a custom domain name, and no build-time address needs changing. After you sign in, you land on the document browser at the root DMS folder, the starting point for organizing and managing your documents.
Confirm SeedDMS Is Running
Over SSH, confirm that the web server, PHP FPM and the database are active, that the health endpoint returns 200, and that the sign-in page is served:
sudo systemctl is-active nginx php8.3-fpm mariadb curl -s -o /dev/null -w 'healthz: %{http_code}\n' http://127.0.0.1/healthz curl -s -o /dev/null -w 'login page: %{http_code}\n' http://127.0.0.1/out/out.Login.phpAll three services report active, the health endpoint returns 200, and the login page returns 200. The MariaDB database listens on the loopback interface only and is never exposed directly.
A round-trip check proves the per-instance administrator credential end to end. It signs in through the real web login form and rejects a wrong password, without ever printing the password:
sudo bash /usr/local/sbin/seeddms-cred-roundtrip.shA successful run prints SEEDDMS_CRED_ROUNDTRIP_OK.
Organize Documents into Folders
SeedDMS stores everything in a folder tree beneath the root DMS folder. From a folder view, select Add subfolder to create folders such as Finance, Engineering or HR Policies, each with its own description.
Select Access rights on any folder or document to set per-object access control lists. They control precisely who may view, edit or manage each item. The folder tree on the left lets you navigate the whole repository at a glance.
Add Documents and Track Versions
Open a folder and select Add document to upload a file. Give the document a name and comment, and add keywords. Optionally, assign reviewers and approvers to drive a review and approval workflow. A document with no reviewer or approver is released immediately.
When you upload a new file to an existing document with Update document, SeedDMS keeps the previous content as an earlier version. The document detail shows the full version history, the release status of each version and an activity timeline. You can download or view any version, compare revisions, and see exactly who changed what and when.
Administer SeedDMS
Open Admin tools from the top menu to administer the system. From here you can:
- Manage users, groups and roles
- Define categories, attributes and global keywords
- Review the contents overview and charts
- Run folder and document checks
- Schedule tasks and adjust settings
Guest login is disabled by default, so only accounts you create can sign in.
The Data Volume
The MariaDB database and the SeedDMS document content store live on a dedicated EBS volume mounted at /data. The database is bind-mounted onto /var/lib/mysql, and the content store is bind-mounted onto /var/lib/seeddms. This keeps your documents and metadata off the operating system disk and lets you resize or snapshot them independently. Confirm the mounts with:
df -h /data findmnt /var/lib/mysql findmnt /var/lib/seeddmsTo grow the data store, expand the EBS volume in the AWS console. Then grow the filesystem on the instance by running sudo resize2fs on the underlying device. The SeedDMS application code under /var/www/seeddms lives on the root volume.
Enable HTTPS
nginx serves the web interface over plain HTTP on port 80. Place it behind TLS so that the administrator password and your documents are encrypted in transit.
Point a domain name at the instance, then obtain a certificate for that domain. For example, use a managed certificate on an Application Load Balancer in front of the instance, or install Certbot on the instance. If you terminate TLS on the instance, configure nginx to listen on 443 with your certificate, exactly as the bundled site does for port 80.
SeedDMS derives its base URL from the request host, so no configuration change is needed when you move to HTTPS. Once a certificate is in front of the instance and you browse to the https:// address, SeedDMS generates its links over HTTPS automatically. Restrict the security group so that only the networks that need the web interface can reach ports 80 and 443.
Backup and Maintenance
Back up the application by snapshotting the /data EBS volume, which captures the database and the document content store together. You can also take a logical backup of the database over the loopback socket:
sudo mysqldump seeddms > seeddms-backup.sqlApply operating system security updates with sudo apt-get update && sudo apt-get upgrade, and reboot when a new kernel is installed. nginx, PHP FPM and MariaDB start automatically on boot.
Support
SecureAnyCloud publishes and supports this image. Support covers deployment, access control and workflow setup, categories and attributes, full text search, version upgrades, performance tuning, the database and document volume, TLS and backups. Contact SecureAnyCloud through the support channel listed on the AWS Marketplace listing.
All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
Deploy on AWS
Launch SeedDMS on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com