From 41b4cfc03cdc852f7ce13de5b2170f37ff28105b Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Mon, 17 Nov 2025 15:12:07 -0500 Subject: [PATCH 01/26] Restore manyfold from last pull request --- ct/{deferred => }/manyfold.sh | 0 install/{deferred => }/manyfold-install.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename ct/{deferred => }/manyfold.sh (100%) rename install/{deferred => }/manyfold-install.sh (100%) diff --git a/ct/deferred/manyfold.sh b/ct/manyfold.sh similarity index 100% rename from ct/deferred/manyfold.sh rename to ct/manyfold.sh diff --git a/install/deferred/manyfold-install.sh b/install/manyfold-install.sh similarity index 100% rename from install/deferred/manyfold-install.sh rename to install/manyfold-install.sh From 990fc78926e295bdf2cb2986fed325584d8b2486 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sun, 23 Nov 2025 15:27:12 -0500 Subject: [PATCH 02/26] Update dependecies --- install/manyfold-install.sh | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index f7bb7c2f6..5578a9b3b 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -2,6 +2,7 @@ # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 +# Co-Author: SunFlowerOwl # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" @@ -18,12 +19,24 @@ $STD apt-get install -y \ rbenv \ libpq-dev \ libarchive-dev \ - git \ libmariadb-dev \ redis-server \ nginx \ libffi-dev \ - libyaml-dev + libyaml-dev \ + libassimp-dev \ + build-essential \ + pkg-config \ + libssl-dev \ + libreadline-dev \ + zlib1g-dev \ + libgmp-dev \ + libmagickwand-dev \ + redis \ + imagemagick \ + libjpeg-dev \ + libwebp-dev \ + libheif-dev msg_ok "Installed Dependencies" PG_VERSION="16" setup_postgresql From b1f44cf878c56702ac33db18824fed4d53ac3317 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sun, 23 Nov 2025 15:28:11 -0500 Subject: [PATCH 03/26] Fix: Remove PUBLIC_HOSTNAME var due to a bug in manyfold --- install/manyfold-install.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 5578a9b3b..51fb86d42 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -75,7 +75,6 @@ cat </opt/.env export APP_VERSION=12345 export GUID=1002 export PUID=1001 -export PUBLIC_HOSTNAME=subdomain.somehost.org export PUBLIC_PORT=5000 export REDIS_URL=redis://127.0.0.1:6379/1 export DATABASE_ADAPTER=postgresql From e9e8b529f05eadb0bd7597bfdb8789087908dd18 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sun, 23 Nov 2025 15:28:47 -0500 Subject: [PATCH 04/26] Remove comments --- install/manyfold-install.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 51fb86d42..2e1e4e5f1 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -99,8 +99,6 @@ $STD bundle install $STD gem install sidekiq $STD npm install --global corepack corepack enable yarn -# $STD corepack prepare $YARN_VERSION --activate -# $STD corepack use $YARN_VERSION chown manyfold:manyfold /opt/.env rm /opt/manyfold/config/credentials.yml.enc $STD bin/rails credentials:edit From 4c3c2fd490ea97cb9d27497ca0d0d7f67a8258ac Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sun, 23 Nov 2025 15:30:09 -0500 Subject: [PATCH 05/26] Creating services using foreman instead --- install/manyfold-install.sh | 29 +++++++---------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 2e1e4e5f1..8e9a68952 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -106,27 +106,12 @@ $STD bin/rails db:migrate $STD bin/rails assets:precompile msg_ok "Installed manyfold" -msg_info "Creating Service" -cat </etc/systemd/system/manyfold.service -[Unit] -Description=Manyfold3d -Requires=network.target - -[Service] -Type=simple -User=root -Group=root -WorkingDirectory=/opt/manyfold -ExecStart=/usr/bin/bash -lc 'source /opt/.env && /opt/manyfold/bin/rails server -b 127.0.0.1 --port 5000 --environment production' -TimeoutSec=30 -RestartSec=15s -Restart=always - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now manyfold - +msg_info "Creating Services" +$STD foreman export systemd /etc/systemd/system -a manyfold -u root -f /opt/manyfold/Procfile +for f in /etc/systemd/system/manyfold-*.service; do + sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/.env \&\& |" "$f" +done +systemctl enable -q --now manyfold manyfold-rails manyfold-default_worker manyfold-performance_worker cat </etc/nginx/sites-available/manyfold.conf server { listen 80; @@ -149,7 +134,7 @@ EOF ln -s /etc/nginx/sites-available/manyfold.conf /etc/nginx/sites-enabled/ rm -f /etc/nginx/sites-enabled/default $STD systemctl reload nginx -msg_ok "Created Service" +msg_ok "Created Services" motd_ssh customize From b19d7f5ba0466a84bd7203d833b583c04a8a0901 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sun, 23 Nov 2025 15:38:14 -0500 Subject: [PATCH 06/26] Upgrade OS from Debian 12 to 13 --- ct/manyfold.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/manyfold.sh b/ct/manyfold.sh index 2d782d551..a4c1112b9 100644 --- a/ct/manyfold.sh +++ b/ct/manyfold.sh @@ -11,7 +11,7 @@ var_cpu="${var_cpu:-4}" var_ram="${var_ram:-4096}" var_disk="${var_disk:-15}" var_os="${var_os:-debian}" -var_version="${var_version:-12}" +var_version="${var_version:-13}" var_unprivileged="${var_unprivileged:-1}" header_info "$APP" From c99e41a30e36683f84c0ff0a8d9554fe8a49c375 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sun, 23 Nov 2025 15:43:48 -0500 Subject: [PATCH 07/26] Revert deleted manyfold json --- frontend/public/json/manyfold.json | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 frontend/public/json/manyfold.json diff --git a/frontend/public/json/manyfold.json b/frontend/public/json/manyfold.json new file mode 100644 index 000000000..bb232666c --- /dev/null +++ b/frontend/public/json/manyfold.json @@ -0,0 +1,35 @@ +{ + "name": "Manyfold", + "slug": "manyfold", + "categories": [ + 24 + ], + "date_created": "2025-03-18", + "type": "ct", + "updateable": false, + "privileged": false, + "interface_port": 80, + "documentation": "https://manyfold.app/sysadmin/", + "website": "https://manyfold.app/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/manyfold.webp", + "config_path": "", + "description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.", + "install_methods": [ + { + "type": "default", + "script": "ct/manyfold.sh", + "resources": { + "cpu": 2, + "ram": 1024, + "hdd": 15, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} From c5d741d17d77bed73e820d228a95cf590562f297 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sun, 23 Nov 2025 15:45:13 -0500 Subject: [PATCH 08/26] Upgrade needed ressources --- frontend/public/json/manyfold.json | 66 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/frontend/public/json/manyfold.json b/frontend/public/json/manyfold.json index bb232666c..ce31971fc 100644 --- a/frontend/public/json/manyfold.json +++ b/frontend/public/json/manyfold.json @@ -1,35 +1,35 @@ { - "name": "Manyfold", - "slug": "manyfold", - "categories": [ - 24 - ], - "date_created": "2025-03-18", - "type": "ct", - "updateable": false, - "privileged": false, - "interface_port": 80, - "documentation": "https://manyfold.app/sysadmin/", - "website": "https://manyfold.app/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/manyfold.webp", - "config_path": "", - "description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.", - "install_methods": [ - { - "type": "default", - "script": "ct/manyfold.sh", - "resources": { - "cpu": 2, - "ram": 1024, - "hdd": 15, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] + "name": "Manyfold", + "slug": "manyfold", + "categories": [ + 24 + ], + "date_created": "2025-03-18", + "type": "ct", + "updateable": false, + "privileged": false, + "interface_port": 80, + "documentation": "https://manyfold.app/sysadmin/", + "website": "https://manyfold.app/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/manyfold.webp", + "config_path": "", + "description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.", + "install_methods": [ + { + "type": "default", + "script": "ct/manyfold.sh", + "resources": { + "cpu": 4, + "ram": 4096, + "hdd": 15, + "os": "debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] } From a23e4bff4dc78fc8304e7e7698795f4c10ff2a0d Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sun, 23 Nov 2025 16:18:24 -0500 Subject: [PATCH 09/26] Re introduce git needed by ruby --- install/manyfold-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 8e9a68952..d00d3c5c1 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -19,6 +19,7 @@ $STD apt-get install -y \ rbenv \ libpq-dev \ libarchive-dev \ + git \ libmariadb-dev \ redis-server \ nginx \ From 2ee1cbc25e3d083c3eec0dd32dfd758b33ec33d9 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Mon, 24 Nov 2025 16:29:52 -0500 Subject: [PATCH 10/26] change var_tag --- ct/manyfold.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/manyfold.sh b/ct/manyfold.sh index a4c1112b9..c3c981dee 100644 --- a/ct/manyfold.sh +++ b/ct/manyfold.sh @@ -6,7 +6,7 @@ source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxV # Source: https://github.com/manyfold3d/manyfold APP="Manyfold" -var_tags="${var_tags:-network}" +var_tags="${var_tags:-3d}" var_cpu="${var_cpu:-4}" var_ram="${var_ram:-4096}" var_disk="${var_disk:-15}" From 7423408982605d806ab35f19ffd984a81d71e332 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Mon, 24 Nov 2025 16:31:02 -0500 Subject: [PATCH 11/26] Fix: Re-introduce corepack to avoid question during install --- install/manyfold-install.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index d00d3c5c1..f2d7d33eb 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -102,6 +102,8 @@ $STD npm install --global corepack corepack enable yarn chown manyfold:manyfold /opt/.env rm /opt/manyfold/config/credentials.yml.enc +$STD corepack prepare $YARN_VERSION --activate +$STD corepack use $YARN_VERSION $STD bin/rails credentials:edit $STD bin/rails db:migrate $STD bin/rails assets:precompile From 0ed0856c66c09b873e4dda220dee2f5cbb1d56ee Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Mon, 24 Nov 2025 16:33:22 -0500 Subject: [PATCH 12/26] Fix: Service creation error --- install/manyfold-install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index f2d7d33eb..df0fde88f 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -110,11 +110,12 @@ $STD bin/rails assets:precompile msg_ok "Installed manyfold" msg_info "Creating Services" +$STD gem install foreman $STD foreman export systemd /etc/systemd/system -a manyfold -u root -f /opt/manyfold/Procfile for f in /etc/systemd/system/manyfold-*.service; do sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/.env \&\& |" "$f" done -systemctl enable -q --now manyfold manyfold-rails manyfold-default_worker manyfold-performance_worker +systemctl enable -q --now manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1 cat </etc/nginx/sites-available/manyfold.conf server { listen 80; From c66a062114550b284a497a7d3570db7c4848bfdf Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Mon, 24 Nov 2025 16:34:04 -0500 Subject: [PATCH 13/26] Fix: Cable not redirect by reverse-proxy --- install/manyfold-install.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index df0fde88f..9f131f6d1 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -122,6 +122,19 @@ server { server_name manyfold; root /opt/manyfold/public; + location /cable { + proxy_pass http://127.0.0.1:5000; + proxy_set_header Host \$host; + + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "Upgrade"; + + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + } + location / { try_files \$uri/index.html \$uri @rails; } From c6df16a41364ee0ebc67af9e809a277f7006d1cc Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Mon, 24 Nov 2025 16:35:36 -0500 Subject: [PATCH 14/26] Start rework updating function --- ct/manyfold.sh | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/ct/manyfold.sh b/ct/manyfold.sh index c3c981dee..439a842ca 100644 --- a/ct/manyfold.sh +++ b/ct/manyfold.sh @@ -27,31 +27,30 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi - RELEASE=$(curl -fsSL https://api.github.com/repos/benjaminjonard/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') - if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + if check_for_gh_release "manyfold" "manyfold3d/manyfold"; then msg_info "Stopping Service" - systemctl stop apache2 + systemctl stop manyfold manyfold-rails manyfold-default_worker manyfold-performance_worker msg_ok "Stopped Service" - msg_info "Updating ${APP} to v${RELEASE}" - cd /opt - mv /opt/manyfold/ /opt/manyfold-backup + fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app" - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated $APP to v${RELEASE}" + msg_info "Update services" + $STD foreman export systemd /etc/systemd/system -a manyfold -u root -f /opt/manyfold/Procfile + for f in /etc/systemd/system/manyfold-*.service; do + sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/.env \&\& |" "$f" + done + msg_ok "Updated services" msg_info "Starting Service" - systemctl start service + systemctl start manyfold manyfold-rails manyfold-default_worker manyfold-performance_worker msg_ok "Started Service" - - msg_info "Cleaning up" - rm -r "/opt/${RELEASE}.zip" - rm -r /opt/manyfold-backup - msg_ok "Cleaned" - msg_ok "Updated Successfully" - else - msg_ok "No update required. ${APP} is already at v${RELEASE}" fi + + msg_info "Cleaning up" + $STD apt -y autoremove + $STD apt -y autoclean + $STD apt -y clean + msg_ok "Cleaned" exit } From eb8f381a9fc21944dec583763ce5907a63ab30c6 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Tue, 25 Nov 2025 15:28:58 -0500 Subject: [PATCH 15/26] Fix: Rails credential warning --- install/manyfold-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 9f131f6d1..d5a3692a2 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -104,6 +104,7 @@ chown manyfold:manyfold /opt/.env rm /opt/manyfold/config/credentials.yml.enc $STD corepack prepare $YARN_VERSION --activate $STD corepack use $YARN_VERSION +export VISUAL="code --wait" $STD bin/rails credentials:edit $STD bin/rails db:migrate $STD bin/rails assets:precompile From 8d1c558af802e4596ceeac3297af23df4fb1b28a Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Tue, 25 Nov 2025 15:32:54 -0500 Subject: [PATCH 16/26] Remove unused credential file --- install/manyfold-install.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index d5a3692a2..206311074 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -51,12 +51,6 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" -{ - echo "Manyfold Credentials" - echo "Manyfold Database User: $DB_USER" - echo "Manyfold Database Password: $DB_PASS" - echo "Manyfold Database Name: $DB_NAME" -} >>~/manyfold.creds msg_ok "Set up PostgreSQL" fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold" From 5d48467a50687e3211557711e9e4f215cb3402cf Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Tue, 25 Nov 2025 16:10:05 -0500 Subject: [PATCH 17/26] Rework APP version logic --- install/manyfold-install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 206311074..1e5391f62 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -54,6 +54,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" msg_ok "Set up PostgreSQL" fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold" +RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RUBY_INSTALL_VERSION=$(cat /opt/manyfold/.ruby-version) YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') @@ -67,7 +68,7 @@ msg_ok "Added manyfold user" msg_info "Setting .env file" cat </opt/.env -export APP_VERSION=12345 +export APP_VERSION=${RELEASE} export GUID=1002 export PUID=1001 export PUBLIC_PORT=5000 From 3f5f8c4db58089ce9aa36999530662d11f1302c2 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Thu, 27 Nov 2025 17:49:51 -0500 Subject: [PATCH 18/26] Run manyfold as manyfold user --- install/manyfold-install.sh | 75 +++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 1e5391f62..5c3f3872e 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -16,7 +16,6 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ lsb-release \ - rbenv \ libpq-dev \ libarchive-dev \ git \ @@ -54,19 +53,12 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" msg_ok "Set up PostgreSQL" fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold" -RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -RUBY_INSTALL_VERSION=$(cat /opt/manyfold/.ruby-version) -YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') - -NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs -RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" setup_ruby - -msg_info "Adding manyfold user" +msg_info "Configuring manyfold environment" useradd -m -s /usr/bin/bash manyfold -msg_ok "Added manyfold user" - -msg_info "Setting .env file" +echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >>/home/manyfold/.bashrc +echo 'eval "$(rbenv init -)"' >>/home/manyfold/.bashrc +RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cat </opt/.env export APP_VERSION=${RELEASE} export GUID=1002 @@ -83,31 +75,50 @@ export MULTIUSER=enabled export HTTPS_ONLY=false export RAILS_ENV=production EOF -msg_ok ".env file setup" +RUBY_INSTALL_VERSION=$(cat /opt/manyfold/.ruby-version) +YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') +cat </opt/user_setup.sh +#!/bin/bash + +source /opt/.env +export PATH="/home/manyfold/.rbenv/bin:\$PATH" +eval "\$(/home/manyfold/.rbenv/bin/rbenv init - bash)" +cd /opt/manyfold +rbenv global $RUBY_INSTALL_VERSION +gem install bundler +bundle install +gem install sidekiq +gem install foreman +corepack enable yarn +rm -f /opt/manyfold/config/credentials.yml.enc +corepack prepare $YARN_VERSION --activate +corepack use $YARN_VERSION +export VISUAL="code --wait" +bin/rails credentials:edit +bin/rails db:migrate +bin/rails assets:precompile +EOF +chown -R manyfold:manyfold /opt +$STD chmod +x /opt/user_setup.sh +msg_ok "Configured manyfold environment" + +NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs +RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby msg_info "Installing Manyfold" -source /opt/.env -cd /opt/manyfold -chown -R manyfold:manyfold /opt/manyfold -$STD gem install bundler -$STD rbenv global $RUBY_INSTALL_VERSION -$STD bundle install -$STD gem install sidekiq -$STD npm install --global corepack -corepack enable yarn -chown manyfold:manyfold /opt/.env -rm /opt/manyfold/config/credentials.yml.enc -$STD corepack prepare $YARN_VERSION --activate -$STD corepack use $YARN_VERSION -export VISUAL="code --wait" -$STD bin/rails credentials:edit -$STD bin/rails db:migrate -$STD bin/rails assets:precompile +chown -R manyfold:manyfold /home/manyfold/.rbenv +npm install --global corepack +$STD sudo -u manyfold bash /opt/user_setup.sh +rm -f /opt/user_setup.sh msg_ok "Installed manyfold" msg_info "Creating Services" -$STD gem install foreman -$STD foreman export systemd /etc/systemd/system -a manyfold -u root -f /opt/manyfold/Procfile +cd /opt/manyfold +source /opt/.env +export RBENV_PATH="/home/manyfold/.rbenv" +export PATH="$RBENV_PATH/bin:$PATH" +eval "$($RBENV_PATH/bin/rbenv init - bash)" +$STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/Procfile for f in /etc/systemd/system/manyfold-*.service; do sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/.env \&\& |" "$f" done From 2e46f96c714b3e673b906d31b934ba216cf2209d Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Fri, 28 Nov 2025 14:32:42 -0500 Subject: [PATCH 19/26] Reduce msg verbosity and improve dir architecture --- install/manyfold-install.sh | 49 +++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 5c3f3872e..cf3a673bd 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -41,7 +41,13 @@ msg_ok "Installed Dependencies" PG_VERSION="16" setup_postgresql -msg_info "Setting up PostgreSQL" +fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app" + +msg_info "Configuring manyfold building environment" +RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version) +YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') +RBENV_PATH="/home/manyfold/.rbenv" +PATH="$RBENV_PATH/bin:$PATH" DB_NAME=manyfold DB_USER=manyfold DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) @@ -50,16 +56,11 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" -msg_ok "Set up PostgreSQL" - -fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold" - -msg_info "Configuring manyfold environment" useradd -m -s /usr/bin/bash manyfold echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >>/home/manyfold/.bashrc echo 'eval "$(rbenv init -)"' >>/home/manyfold/.bashrc RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') -cat </opt/.env +cat </opt/manyfold/.env export APP_VERSION=${RELEASE} export GUID=1002 export PUID=1001 @@ -75,22 +76,20 @@ export MULTIUSER=enabled export HTTPS_ONLY=false export RAILS_ENV=production EOF -RUBY_INSTALL_VERSION=$(cat /opt/manyfold/.ruby-version) -YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') -cat </opt/user_setup.sh +cat </opt/manyfold/user_setup.sh #!/bin/bash -source /opt/.env -export PATH="/home/manyfold/.rbenv/bin:\$PATH" -eval "\$(/home/manyfold/.rbenv/bin/rbenv init - bash)" -cd /opt/manyfold +source /opt/manyfold/.env +export PATH="$RBENV_PATH/bin:\$PATH" +eval "\$($RBENV_PATH/bin/rbenv init - bash)" +cd /opt/manyfold/app rbenv global $RUBY_INSTALL_VERSION gem install bundler bundle install gem install sidekiq gem install foreman corepack enable yarn -rm -f /opt/manyfold/config/credentials.yml.enc +rm -f /opt/manyfold/app/config/credentials.yml.enc corepack prepare $YARN_VERSION --activate corepack use $YARN_VERSION export VISUAL="code --wait" @@ -99,8 +98,8 @@ bin/rails db:migrate bin/rails assets:precompile EOF chown -R manyfold:manyfold /opt -$STD chmod +x /opt/user_setup.sh -msg_ok "Configured manyfold environment" +$STD chmod +x /opt/manyfold/user_setup.sh +msg_ok "Configured manyfold building environment" NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby @@ -108,26 +107,24 @@ RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfo msg_info "Installing Manyfold" chown -R manyfold:manyfold /home/manyfold/.rbenv npm install --global corepack -$STD sudo -u manyfold bash /opt/user_setup.sh -rm -f /opt/user_setup.sh +$STD sudo -u manyfold bash /opt/manyfold/user_setup.sh +rm -f /opt/manyfold/user_setup.sh msg_ok "Installed manyfold" msg_info "Creating Services" -cd /opt/manyfold -source /opt/.env -export RBENV_PATH="/home/manyfold/.rbenv" -export PATH="$RBENV_PATH/bin:$PATH" +cd /opt/manyfold/app +source /opt/manyfold/.env eval "$($RBENV_PATH/bin/rbenv init - bash)" -$STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/Procfile +$STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile for f in /etc/systemd/system/manyfold-*.service; do - sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/.env \&\& |" "$f" + sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f" done systemctl enable -q --now manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1 cat </etc/nginx/sites-available/manyfold.conf server { listen 80; server_name manyfold; - root /opt/manyfold/public; + root /opt/manyfold/app/public; location /cable { proxy_pass http://127.0.0.1:5000; From 1ceff77bf46c47a8ca44c7908d4b2beb690bf4ea Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Fri, 28 Nov 2025 15:40:35 -0500 Subject: [PATCH 20/26] Provide place to store models --- install/manyfold-install.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index cf3a673bd..c88f91869 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -43,7 +43,7 @@ PG_VERSION="16" setup_postgresql fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app" -msg_info "Configuring manyfold building environment" +msg_info "Configuring manyfold environment" RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version) YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') RBENV_PATH="/home/manyfold/.rbenv" @@ -97,9 +97,10 @@ bin/rails credentials:edit bin/rails db:migrate bin/rails assets:precompile EOF -chown -R manyfold:manyfold /opt +$STD mkdir -p /opt/manyfold/data +chown -R manyfold:manyfold /opt/manyfold $STD chmod +x /opt/manyfold/user_setup.sh -msg_ok "Configured manyfold building environment" +msg_ok "Configured manyfold environment" NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby From 8c06940d962997e65198d360e003214d76702be4 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Fri, 28 Nov 2025 16:38:12 -0500 Subject: [PATCH 21/26] Rework update function --- ct/manyfold.sh | 70 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/ct/manyfold.sh b/ct/manyfold.sh index 439a842ca..0e0d1c003 100644 --- a/ct/manyfold.sh +++ b/ct/manyfold.sh @@ -2,6 +2,7 @@ source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func) # Copyright (c) 2021-2025 community-scripts ORG # Author: bvdberg01 +# Co-Author: SunFlowerOwl # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/manyfold3d/manyfold @@ -27,23 +28,72 @@ function update_script() { msg_error "No ${APP} Installation Found!" exit fi + if check_for_gh_release "manyfold" "manyfold3d/manyfold"; then msg_info "Stopping Service" - systemctl stop manyfold manyfold-rails manyfold-default_worker manyfold-performance_worker + systemctl stop manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1 msg_ok "Stopped Service" + msg_info "Backing up data" + source /opt/manyfold/.env + mv /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config/credentials.yml.enc /opt/manyfold/app/config/master.key ~/ + tar -cvzf "/opt/manyfold_${APP_VERSION}_backup.tar.gz" /opt/manyfold/app/ + rm -rf /opt/manyfold/app/ + msg_ok "Backed-up data" + fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app" - msg_info "Update services" - $STD foreman export systemd /etc/systemd/system -a manyfold -u root -f /opt/manyfold/Procfile - for f in /etc/systemd/system/manyfold-*.service; do - sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/.env \&\& |" "$f" - done - msg_ok "Updated services" + msg_info "Configuring manyfold environment" + RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version) + YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') + RBENV_PATH="/home/manyfold/.rbenv" + RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + sed -i "s/^export APP_VERSION=.*/export APP_VERSION=$RELEASE/" "/opt/manyfold/.env" + cat </opt/manyfold/user_setup.sh +#!/bin/bash - msg_info "Starting Service" - systemctl start manyfold manyfold-rails manyfold-default_worker manyfold-performance_worker - msg_ok "Started Service" +source /opt/manyfold/.env +export PATH="$RBENV_PATH/bin:\$PATH" +eval "\$($RBENV_PATH/bin/rbenv init - bash)" +cd /opt/manyfold/app +rbenv global $RUBY_INSTALL_VERSION +gem install bundler +bundle install +gem install sidekiq +gem install foreman +corepack enable yarn +corepack prepare $YARN_VERSION --activate +corepack use $YARN_VERSION +bin/rails db:migrate +bin/rails assets:precompile +EOF + $STD mkdir -p /opt/manyfold/data + chown -R manyfold:manyfold /opt/manyfold + $STD chmod +x /opt/manyfold/user_setup.sh + msg_ok "Configured manyfold environment" + + RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby + + msg_info "Installing Manyfold" + chown -R manyfold:manyfold /home/manyfold/.rbenv + rm -rf /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config/credentials.yml.enc + mv ~/storage ~/tmp /opt/manyfold/app/ + mv ~/credentials.yml.enc ~/master.key /opt/manyfold/app/config/ + chown -R manyfold:manyfold /opt/manyfold + $STD sudo -u manyfold bash /opt/manyfold/user_setup.sh + rm -f /opt/manyfold/user_setup.sh + msg_ok "Installed manyfold" + + msg_info "Restoring Service" + cd /opt/manyfold/app + source /opt/manyfold/.env + export PATH="$RBENV_PATH//shims:$RBENV_PATH/bin:$PATH" + $STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile + for f in /etc/systemd/system/manyfold-*.service; do + sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f" + done + systemctl enable -q --now manyfold.target manyfold-rails.1 manyfold-default_worker.1 manyfold-performance_worker.1 + msg_ok "Restored Service" fi msg_info "Cleaning up" From 49f6a047f27bd211d521cca383aae28cdc4c2586 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sun, 30 Nov 2025 15:31:50 -0500 Subject: [PATCH 22/26] Cleaning up the code --- ct/manyfold.sh | 14 ++++------ frontend/public/json/manyfold.json | 9 ++++-- install/manyfold-install.sh | 45 +++++++++++++++--------------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/ct/manyfold.sh b/ct/manyfold.sh index 0e0d1c003..294161a54 100644 --- a/ct/manyfold.sh +++ b/ct/manyfold.sh @@ -37,7 +37,7 @@ function update_script() { msg_info "Backing up data" source /opt/manyfold/.env mv /opt/manyfold/app/storage /opt/manyfold/app/tmp /opt/manyfold/app/config/credentials.yml.enc /opt/manyfold/app/config/master.key ~/ - tar -cvzf "/opt/manyfold_${APP_VERSION}_backup.tar.gz" /opt/manyfold/app/ + $STD tar -cvzf "/opt/manyfold_${APP_VERSION}_backup.tar.gz" /opt/manyfold/app/ rm -rf /opt/manyfold/app/ msg_ok "Backed-up data" @@ -46,15 +46,14 @@ function update_script() { msg_info "Configuring manyfold environment" RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version) YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') - RBENV_PATH="/home/manyfold/.rbenv" RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') sed -i "s/^export APP_VERSION=.*/export APP_VERSION=$RELEASE/" "/opt/manyfold/.env" cat </opt/manyfold/user_setup.sh #!/bin/bash source /opt/manyfold/.env -export PATH="$RBENV_PATH/bin:\$PATH" -eval "\$($RBENV_PATH/bin/rbenv init - bash)" +export PATH="/home/manyfold/.rbenv/bin:\$PATH" +eval "\$(/home/manyfold/.rbenv/bin/rbenv init - bash)" cd /opt/manyfold/app rbenv global $RUBY_INSTALL_VERSION gem install bundler @@ -67,9 +66,6 @@ corepack use $YARN_VERSION bin/rails db:migrate bin/rails assets:precompile EOF - $STD mkdir -p /opt/manyfold/data - chown -R manyfold:manyfold /opt/manyfold - $STD chmod +x /opt/manyfold/user_setup.sh msg_ok "Configured manyfold environment" RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfold setup_ruby @@ -80,14 +76,14 @@ EOF mv ~/storage ~/tmp /opt/manyfold/app/ mv ~/credentials.yml.enc ~/master.key /opt/manyfold/app/config/ chown -R manyfold:manyfold /opt/manyfold + chmod +x /opt/manyfold/user_setup.sh $STD sudo -u manyfold bash /opt/manyfold/user_setup.sh rm -f /opt/manyfold/user_setup.sh msg_ok "Installed manyfold" msg_info "Restoring Service" - cd /opt/manyfold/app source /opt/manyfold/.env - export PATH="$RBENV_PATH//shims:$RBENV_PATH/bin:$PATH" + export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH" $STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile for f in /etc/systemd/system/manyfold-*.service; do sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f" diff --git a/frontend/public/json/manyfold.json b/frontend/public/json/manyfold.json index ce31971fc..7080630ad 100644 --- a/frontend/public/json/manyfold.json +++ b/frontend/public/json/manyfold.json @@ -12,7 +12,7 @@ "documentation": "https://manyfold.app/sysadmin/", "website": "https://manyfold.app/", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/manyfold.webp", - "config_path": "", + "config_path": "/opt/manyfold/.env", "description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.", "install_methods": [ { @@ -31,5 +31,10 @@ "username": null, "password": null }, - "notes": [] + "notes": [ + { + "text": "Setup library on first connection in /opt/manyfold/data", + "type": "info" + } + ] } diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index c88f91869..bad8ab356 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -15,28 +15,32 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ - lsb-release \ - libpq-dev \ libarchive-dev \ git \ libmariadb-dev \ redis-server \ nginx \ - libffi-dev \ - libyaml-dev \ libassimp-dev \ - build-essential \ - pkg-config \ - libssl-dev \ - libreadline-dev \ - zlib1g-dev \ - libgmp-dev \ libmagickwand-dev \ - redis \ imagemagick \ + build-essential \ + libtool \ libjpeg-dev \ + libpng-dev \ + libtiff-dev \ libwebp-dev \ - libheif-dev + libheif-dev \ + libde265-dev \ + libopenjp2-7-dev \ + libxml2-dev \ + liblcms2-dev \ + libfreetype6-dev \ + libraw-dev \ + libfftw3-dev \ + liblqr-1-0-dev \ + libgsl-dev \ + pkg-config \ + ghostscript msg_ok "Installed Dependencies" PG_VERSION="16" setup_postgresql @@ -46,8 +50,7 @@ fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" msg_info "Configuring manyfold environment" RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version) YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') -RBENV_PATH="/home/manyfold/.rbenv" -PATH="$RBENV_PATH/bin:$PATH" +RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') DB_NAME=manyfold DB_USER=manyfold DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) @@ -57,9 +60,6 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8' $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" useradd -m -s /usr/bin/bash manyfold -echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >>/home/manyfold/.bashrc -echo 'eval "$(rbenv init -)"' >>/home/manyfold/.bashrc -RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') cat </opt/manyfold/.env export APP_VERSION=${RELEASE} export GUID=1002 @@ -80,8 +80,8 @@ cat </opt/manyfold/user_setup.sh #!/bin/bash source /opt/manyfold/.env -export PATH="$RBENV_PATH/bin:\$PATH" -eval "\$($RBENV_PATH/bin/rbenv init - bash)" +export PATH="/home/manyfold/.rbenv/bin:\$PATH" +eval "\$(/home/manyfold/.rbenv/bin/rbenv init - bash)" cd /opt/manyfold/app rbenv global $RUBY_INSTALL_VERSION gem install bundler @@ -98,8 +98,6 @@ bin/rails db:migrate bin/rails assets:precompile EOF $STD mkdir -p /opt/manyfold/data -chown -R manyfold:manyfold /opt/manyfold -$STD chmod +x /opt/manyfold/user_setup.sh msg_ok "Configured manyfold environment" NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs @@ -107,15 +105,16 @@ RUBY_VERSION=${RUBY_INSTALL_VERSION} RUBY_INSTALL_RAILS="true" HOME=/home/manyfo msg_info "Installing Manyfold" chown -R manyfold:manyfold /home/manyfold/.rbenv +chown -R manyfold:manyfold /opt/manyfold +chmod +x /opt/manyfold/user_setup.sh npm install --global corepack $STD sudo -u manyfold bash /opt/manyfold/user_setup.sh rm -f /opt/manyfold/user_setup.sh msg_ok "Installed manyfold" msg_info "Creating Services" -cd /opt/manyfold/app source /opt/manyfold/.env -eval "$($RBENV_PATH/bin/rbenv init - bash)" +export PATH="/home/manyfold/.rbenv/shims:/home/manyfold/.rbenv/bin:$PATH" $STD foreman export systemd /etc/systemd/system -a manyfold -u manyfold -f /opt/manyfold/app/Procfile for f in /etc/systemd/system/manyfold-*.service; do sed -i "s|/bin/bash -lc '|/bin/bash -lc 'source /opt/manyfold/.env \&\& |" "$f" From 0c767836f2c7b0322ce4311f6acc559a17997d28 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Fri, 5 Dec 2025 18:07:11 -0500 Subject: [PATCH 23/26] use builtin function to setup imagemagick --- install/manyfold-install.sh | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index bad8ab356..03601ac58 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -20,29 +20,11 @@ $STD apt-get install -y \ libmariadb-dev \ redis-server \ nginx \ - libassimp-dev \ - libmagickwand-dev \ - imagemagick \ - build-essential \ - libtool \ - libjpeg-dev \ - libpng-dev \ - libtiff-dev \ - libwebp-dev \ - libheif-dev \ - libde265-dev \ - libopenjp2-7-dev \ - libxml2-dev \ - liblcms2-dev \ - libfreetype6-dev \ - libraw-dev \ - libfftw3-dev \ - liblqr-1-0-dev \ - libgsl-dev \ - pkg-config \ - ghostscript + libassimp-dev msg_ok "Installed Dependencies" +setup_imagemagick + PG_VERSION="16" setup_postgresql fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" "/opt/manyfold/app" From 60472c43e217b6bd99b51b34e8b02b856507b2b1 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sat, 6 Dec 2025 05:54:00 -0500 Subject: [PATCH 24/26] Fix: Show manyfold updateable in json file --- frontend/public/json/manyfold.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/public/json/manyfold.json b/frontend/public/json/manyfold.json index 7080630ad..b7b6cdb37 100644 --- a/frontend/public/json/manyfold.json +++ b/frontend/public/json/manyfold.json @@ -6,7 +6,7 @@ ], "date_created": "2025-03-18", "type": "ct", - "updateable": false, + "updateable": true, "privileged": false, "interface_port": 80, "documentation": "https://manyfold.app/sysadmin/", From c5766a57770d9bb3d48b1ee102bd2cf1f0f5c4a3 Mon Sep 17 00:00:00 2001 From: SunFlowerOwl <85146049+SunFlowerOwl@users.noreply.github.com> Date: Sat, 6 Dec 2025 07:18:49 -0500 Subject: [PATCH 25/26] Update frontend/public/json/manyfold.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com> --- frontend/public/json/manyfold.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/public/json/manyfold.json b/frontend/public/json/manyfold.json index b7b6cdb37..26bfa13d9 100644 --- a/frontend/public/json/manyfold.json +++ b/frontend/public/json/manyfold.json @@ -11,7 +11,7 @@ "interface_port": 80, "documentation": "https://manyfold.app/sysadmin/", "website": "https://manyfold.app/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/manyfold.webp", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/manyfold.webp", "config_path": "/opt/manyfold/.env", "description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.", "install_methods": [ From ea96873e9e6994b18adcf90a860cf55aabb82e0e Mon Sep 17 00:00:00 2001 From: SunFlowerOwl Date: Sat, 6 Dec 2025 07:20:56 -0500 Subject: [PATCH 26/26] Review: fix way to get release using builtin function --- ct/manyfold.sh | 2 +- install/manyfold-install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ct/manyfold.sh b/ct/manyfold.sh index 294161a54..a7f359d5f 100644 --- a/ct/manyfold.sh +++ b/ct/manyfold.sh @@ -46,7 +46,7 @@ function update_script() { msg_info "Configuring manyfold environment" RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version) YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') - RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + RELEASE=$(get_latest_github_release "manyfold3d/manyfold") sed -i "s/^export APP_VERSION=.*/export APP_VERSION=$RELEASE/" "/opt/manyfold/.env" cat </opt/manyfold/user_setup.sh #!/bin/bash diff --git a/install/manyfold-install.sh b/install/manyfold-install.sh index 03601ac58..500a9f71c 100644 --- a/install/manyfold-install.sh +++ b/install/manyfold-install.sh @@ -32,7 +32,7 @@ fetch_and_deploy_gh_release "manyfold" "manyfold3d/manyfold" "tarball" "latest" msg_info "Configuring manyfold environment" RUBY_INSTALL_VERSION=$(cat /opt/manyfold/app/.ruby-version) YARN_VERSION=$(grep '"packageManager":' /opt/manyfold/app/package.json | sed -E 's/.*"(yarn@[0-9\.]+)".*/\1/') -RELEASE=$(curl -fsSL https://api.github.com/repos/manyfold3d/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(get_latest_github_release "manyfold3d/manyfold") DB_NAME=manyfold DB_USER=manyfold DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)