Manyfold
Overview
Manyfold is a self-hosted digital asset manager for 3D-print files. It gives you a searchable web library for your STL, 3MF and OBJ models. It supports tagging, collections, geometry analysis, render thumbnails created by background workers, and multi-user accounts with roles. A household, makerspace or team can organise a growing 3D model collection on infrastructure they own instead of a third-party service.
The SecureAnyCloud image installs Manyfold 0.146.0 as the official container stack and runs it behind nginx as a systemd service. Your model library is online within minutes of launch.
What you get:
- Manyfold 0.146.0 (AGPL-3.0) deployed from the official
manyfold3d/manyfoldDocker image, pinned so the image never silently upgrades at build time - Docker Engine (Docker CE) and the Docker Compose plugin, installed from the official Docker package repository
- The Manyfold stack: the
appcontainer (the Rails web application on Puma port 3214 plus the two Sidekiq render and analysis workers, run together via foreman),postgres(PostgreSQL 15) andredis(pinned to the BSD-3-Clauseredis:7.2-alpineline) - Multi-user mode enabled, with the
f3drenderer bundled so the library grid shows rendered model thumbnails out of the box - A system
nginxreverse proxy on port 80 that forwards to the app on127.0.0.1:3214, with the WebSocket upgrade headers Hotwire needs, plus an unauthenticated static/healthendpoint - All stateful data (the PostgreSQL database, the rendered thumbnails and every uploaded model file) on a dedicated 40 GiB data disk mounted at
/var/lib/manyfold. Docker's data-root is relocated there, and the disk is independently resizable and re-provisioned on every VM. - A per-VM administrator account (username, email and a generated password) created at first boot, with a fresh Rails secret key base, a fresh database password rotated per instance, and a default library ready at
/libraries - Three systemd units:
nginx.service,manyfold.service(a oneshot wrapper arounddocker compose up -d) andmanyfold-firstboot.service - 24/7 SecureAnyCloud support
Prerequisites
- An active Azure subscription
- An SSH key
- A VNet and subnet
Standard_B2ms (2 vCPU, 8 GB RAM) is the recommended size. The Rails app and the render workers need the memory for a comfortable library.
In the NSG inbound rules, allow 22/tcp from your management CIDR for SSH. Allow 80/tcp from the CIDR that needs the Manyfold web app. Add 443/tcp if you enable HTTPS.
Connect over SSH
Replace <vm-ip> with the public IP of your VM. The default login user is azureuser.
ssh azureuser@<vm-ip>Confirm the services are active
sudo systemctl is-active docker.service nginx.service manyfold.service
sudo ss -tlnp | grep -E ':80 |:3214 'You should see active printed three times. The ss output shows nginx listening publicly on port 80. The app is bound to the loopback interface only, on 127.0.0.1:3214, so nginx is the only service exposed on the public interface.
Confirm the Manyfold containers are running
grep image /opt/manyfold/docker-compose.yml cd /opt/manyfold && sudo docker compose ps --format "table {{.Name}}\t{{.Image}}\t{{.Status}}"You should see the pinned image tags and the three containers, manyfold-app-1, manyfold-postgres-1 and manyfold-redis-1, all in the Up state.
Confirm the data disk is mounted
All stateful Manyfold data lives on a dedicated data disk mounted at /var/lib/manyfold. This includes the database, the rendered thumbnails and your uploaded model files.
findmnt /var/lib/manyfold df -h /var/lib/manyfoldfindmnt shows the device backing /var/lib/manyfold, and df confirms the 40 GiB volume.
Check the health endpoint
The nginx reverse proxy serves an unauthenticated static /health endpoint on port 80. The Manyfold app redirects the site root to the sign-in page when you are not logged in.
curl -s http://localhost/health
curl -s -o /dev/null -w "%{http_code}\n" http://localhost//health returns OK and / returns 302 (a redirect to the sign-in page). This confirms that nginx and the app are both up and that access is authenticated.
Read the per-VM admin credentials
Your instance generates a unique administrator username, email and password on first boot and writes them to a root-only file.
sudo cat /root/manyfold-credentials.txtThe file lists MANYFOLD_URL (where to sign in), MANYFOLD_ADMIN_USERNAME, MANYFOLD_ADMIN_EMAIL and MANYFOLD_ADMIN_PASSWORD. Store the password somewhere safe.
Sign in to Manyfold
Open http://<vm-ip>/ in your browser. You are redirected to the sign-in page. Enter the MANYFOLD_ADMIN_EMAIL and MANYFOLD_ADMIN_PASSWORD from Step 6 and sign in.
You can also verify the login from the command line against the Devise sign-in form. A correct password is accepted with a 303 redirect to the dashboard:
EMAIL=$(sudo grep '^MANYFOLD_ADMIN_EMAIL=' /root/manyfold-credentials.txt | cut -d= -f2-)
PASS=$(sudo grep '^MANYFOLD_ADMIN_PASSWORD=' /root/manyfold-credentials.txt | cut -d= -f2-)
JAR=$(mktemp)
TOKEN=$(curl -s -c "$JAR" http://localhost/users/sign_in | grep -oE 'name="authenticity_token"[^>]*value="[^"]+"' | head -1 | sed -E 's/.*value="([^"]+)".*/\1/')
curl -s -b "$JAR" -c "$JAR" -o /dev/null -w "%{http_code}\n" -X POST http://localhost/users/sign_in \
--data-urlencode "authenticity_token=$TOKEN" \
--data-urlencode "user[email]=$EMAIL" \
--data-urlencode "user[password]=$PASS"A 303 confirms the per-VM administrator authenticates end to end.
Browse your model library
After you sign in, you land on your library. The Models grid shows every model in the library with a rendered thumbnail created by the background worker. A default library at /libraries is ready for you to fill with your own models.
Open a model to see its files, metadata, tags and a larger interactive render:
Manage libraries and users
Open Settings (the gear icon) to manage your libraries, appearance, mesh analysis and plugins. Because multi-user mode is enabled, you can also manage user accounts and moderation. The Libraries page shows the storage service, path and model counts for each library.
To add your own 3D models, upload them from the web UI with Add content. Alternatively, copy files into a library folder on the data disk and run a Scan from the settings page. Manyfold imports the models, and the render workers generate their thumbnails.
Managing the stack
The Manyfold stack is wrapped by the manyfold.service systemd unit, which runs docker compose up -d from /opt/manyfold.
sudo systemctl restart manyfold.service
sudo systemctl status manyfold.service --no-pagerTo inspect the application logs, tail the app container:
cd /opt/manyfold
sudo docker compose logs --tail 50 appEnabling HTTPS
The image serves plain HTTP on port 80. For any public deployment, put TLS in front with your own domain. Point a DNS A record at the VM public IP, then install a certificate with certbot's nginx plugin. In outline:
- Install certbot and the nginx plugin from the Ubuntu repositories.
- Run certbot against your domain to obtain and install a certificate into the nginx site.
- When TLS terminates at nginx, set
PUBLIC_HOSTNAME=your-domainandHTTPS_ONLY=enabledin/opt/manyfold/.env. Then restart the stack withsudo systemctl restart manyfold.serviceso Manyfold generates correcthttps://URLs.
Use your own registered domain wherever the steps show an example domain.
Maintenance
The OS receives unattended security updates.
To update Manyfold itself, edit the pinned image tag in /opt/manyfold/docker-compose.yml. Then, from /opt/manyfold, run sudo docker compose pull followed by sudo systemctl restart manyfold.service. The app container runs the database migrations automatically on start.
Always snapshot the /var/lib/manyfold data disk before a major version upgrade.
Support
Backed by 24/7 SecureAnyCloud support. Manyfold is a trademark of its respective owners. This image is provided by SecureAnyCloud and is not affiliated with or endorsed by the Manyfold project.
Deploy on Azure
Launch Manyfold 0.146.0 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
Manyfold is an open-source, self-hosted digital asset manager for 3D-print files. It gives you a searchable web library for your STL, 3MF and OBJ models. It supports tagging, collections, geometry analysis, render thumbnails created by background workers, and multi-user accounts with roles. A household, makerspace or team can organise a growing 3D model collection on infrastructure they own instead of a third-party service.
The SecureAnyCloud image installs Manyfold 0.146.0 as the official Docker Compose stack and runs it behind nginx as a systemd service. Your model library is online within minutes of launch.
What you get:
- The official container stack: the Ruby on Rails web application on Puma, two Sidekiq background workers that render model thumbnails, PostgreSQL 15 for the catalogue and user accounts, and Redis 7.2 for the job queue.
- A host nginx reverse proxy on port 80, the only service published on the public interface. The app, PostgreSQL and Redis bind to the loopback interface only.
- All stateful data (the database, the render thumbnails and your uploaded model files) on a dedicated, independently resizable EBS volume mounted at
/var/lib/manyfold. The volume is captured into the image, so every instance is re-provisioned with the disk. - Multi-user mode, with accounts, roles and per-user libraries.
- Application secrets and a fresh administrator account generated on the first boot of each instance, so two instances launched from the same Amazon Machine Image never share a credential.
- The administrator username, email and password written to
/root/manyfold-credentials.txtwith mode 0600, so only the root user can read them.
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 inbound ports 80 and 443 from the networks your users will reach Manyfold from
- The AWS CLI (version 2) installed locally, if you plan to deploy from the command line
m5.large (2 vCPU, 8 GB RAM) or larger is recommended. The Rails app and the render workers need the memory for a comfortable library.
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 Manyfold. 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 allows inbound port 22 from your management network and inbound ports 80 and 443 from the networks your users will use. Leave the root and data volumes at their default sizes or larger.
Select Launch instance. First-boot initialisation takes a couple of minutes after the instance state becomes Running and the status checks pass. During that time, the stack rotates its secrets, recreates the database and creates your administrator account.
Launch the Instance from the AWS CLI
This command launches an instance from the SecureAnyCloud Manyfold 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, 80 and 443.
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> \
--metadata-options "HttpTokens=required,HttpEndpoint=enabled" \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=manyfold}]'Connecting to your instance
Connect over SSH as the login user for your instance's operating system. Manyfold is served on port 80.
OS variant SSH login user
Ubuntu 24.04 LTS ubuntu
Replace <public-ip> with the public IP of your instance:
ssh ubuntu@<public-ip>Confirm the services are active
sudo systemctl is-active docker.service nginx.service manyfold.service
sudo ss -tlnp | grep -E ':80 |:3214 'You should see active printed three times. The ss output shows nginx listening publicly on port 80. The app is bound to the loopback interface only, on 127.0.0.1:3214, so nginx is the only service exposed on the public interface.
Confirm the Manyfold containers are running
grep image /opt/manyfold/docker-compose.yml cd /opt/manyfold && sudo docker compose ps --format "table {{.Name}}\t{{.Image}}\t{{.Status}}"You should see the pinned image tags, manyfold3d/manyfold:0.146.0, postgres:15 and redis:7.2-alpine, and the three containers, manyfold-app-1, manyfold-postgres-1 and manyfold-redis-1, all in the Up state.
Confirm the data volume is mounted
All stateful Manyfold data lives on a dedicated EBS volume mounted at /var/lib/manyfold. This includes the database, the rendered thumbnails and your uploaded model files.
findmnt /var/lib/manyfold df -h /var/lib/manyfoldfindmnt shows the device backing /var/lib/manyfold, and df confirms the 40 GiB volume.
Check the health endpoint
The nginx reverse proxy serves an unauthenticated static /health endpoint on port 80. The Manyfold app redirects the site root to the sign-in page when you are not logged in.
curl -s http://localhost/health
curl -s -o /dev/null -w "%{http_code}\n" http://localhost//health returns OK and / returns 302 (a redirect to the sign-in page). This confirms that nginx and the app are both up and that access is authenticated.
Read the per-instance admin credentials
Your instance generates a unique administrator username, email and password on first boot and writes them to a root-only file.
sudo cat /root/manyfold-credentials.txtThe file lists MANYFOLD_URL (where to sign in), MANYFOLD_ADMIN_USERNAME, MANYFOLD_ADMIN_EMAIL and MANYFOLD_ADMIN_PASSWORD. Store the password somewhere safe.
Sign in to Manyfold
Open http://<public-ip>/ in your browser. You are redirected to the sign-in page. Enter the MANYFOLD_ADMIN_EMAIL and MANYFOLD_ADMIN_PASSWORD from Step 7 and sign in.
You can also verify the login from the command line against the Devise sign-in form. A correct password is accepted with a 303 redirect:
EMAIL=$(sudo grep '^MANYFOLD_ADMIN_EMAIL=' /root/manyfold-credentials.txt | cut -d= -f2-)
PASS=$(sudo grep '^MANYFOLD_ADMIN_PASSWORD=' /root/manyfold-credentials.txt | cut -d= -f2-)
JAR=$(mktemp)
TOKEN=$(curl -s -c "$JAR" http://localhost/users/sign_in | grep -oE 'name="authenticity_token"[^>]*value="[^"]+"' | head -1 | sed -E 's/.*value="([^"]+)".*/\1/')
curl -s -b "$JAR" -c "$JAR" -o /dev/null -w "%{http_code}\n" -X POST http://localhost/users/sign_in \
--data-urlencode "authenticity_token=$TOKEN" \
--data-urlencode "user[email]=$EMAIL" \
--data-urlencode "user[password]=$PASS"A 303 confirms the per-instance administrator authenticates end to end.
Explore Manyfold
After you sign in, you land on the dashboard, with a search box across your whole library and a recent-activity feed. The top bar gives you Models, Creators and Collections, plus Add content and Scan to bring your models in.
The Models page is your library grid. A fresh appliance starts empty, with a default library at /libraries ready for you to fill. Once you add models, the grid shows a rendered thumbnail for each one, created by the background worker.
Manage libraries and users
Open Site Settings (the gear icon) to manage your libraries, file settings, appearance, mesh analysis and plugins. Because multi-user mode is enabled, you can also manage user accounts and moderation. The statistics tiles summarise your models, files, creators, collections, accounts and tags.
To add your own 3D models, upload them from the web UI with Add content. Alternatively, copy files into a library folder on the data volume and run a Scan from the settings page. Manyfold imports the models, and the render workers generate their thumbnails.
Managing the stack
The Manyfold stack is wrapped by the manyfold.service systemd unit, which runs docker compose up -d from /opt/manyfold. To inspect the application logs, tail the app container:
cd /opt/manyfold && sudo docker compose logs --tail 20 appTo restart the stack, run sudo systemctl restart manyfold.service, then check it with sudo systemctl status manyfold.service --no-pager.
Enabling HTTPS
The image serves plain HTTP on port 80. For any public deployment, put TLS in front with your own domain. Point a DNS A record at the instance public IP, then install a certificate with certbot's nginx plugin. In outline:
- Install certbot and the nginx plugin from the Ubuntu repositories.
- Run certbot against your domain to obtain and install a certificate into the nginx site.
- When TLS terminates at nginx, set
PUBLIC_HOSTNAME=your-domainandHTTPS_ONLY=enabledin/opt/manyfold/.env. Then restart the stack withsudo systemctl restart manyfold.serviceso Manyfold generates correcthttps://URLs.
Use your own registered domain wherever the steps show an example domain.
Maintenance
The OS receives unattended security updates.
To update Manyfold itself, edit the pinned image tag in /opt/manyfold/docker-compose.yml. Then, from /opt/manyfold, run sudo docker compose pull followed by sudo systemctl restart manyfold.service. The app container runs the database migrations automatically on start.
Always snapshot the /var/lib/manyfold data volume before a major version upgrade.
Support
Backed by 24/7 SecureAnyCloud support. Manyfold is a trademark of its respective owners. This image is provided by SecureAnyCloud and is not affiliated with or endorsed by the Manyfold project.
Deploy on AWS
Launch Manyfold on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com