Deployment guide

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/manyfold Docker 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 app container (the Rails web application on Puma port 3214 plus the two Sidekiq render and analysis workers, run together via foreman), postgres (PostgreSQL 15) and redis (pinned to the BSD-3-Clause redis:7.2-alpine line)
  • Multi-user mode enabled, with the f3d renderer bundled so the library grid shows rendered model thumbnails out of the box
  • A system nginx reverse proxy on port 80 that forwards to the app on 127.0.0.1:3214, with the WebSocket upgrade headers Hotwire needs, plus an unauthenticated static /health endpoint
  • 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 around docker compose up -d) and manyfold-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.

1

Connect over SSH

Replace <vm-ip> with the public IP of your VM. The default login user is azureuser.

ssh azureuser@<vm-ip>
2

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.

3

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.

4

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/manyfold

findmnt shows the device backing /var/lib/manyfold, and df confirms the 40 GiB volume.

5

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.

6

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.txt

The file lists MANYFOLD_URL (where to sign in), MANYFOLD_ADMIN_USERNAME, MANYFOLD_ADMIN_EMAIL and MANYFOLD_ADMIN_PASSWORD. Store the password somewhere safe.

7

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.

8

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:

9

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-pager

To inspect the application logs, tail the app container:

cd /opt/manyfold
sudo docker compose logs --tail 50 app

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 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-domain and HTTPS_ONLY=enabled in /opt/manyfold/.env. Then restart the stack with sudo systemctl restart manyfold.service so Manyfold generates correct https:// 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

Deploy on Azure