Erugo
Overview
Erugo is an open-source file sharing and file transfer platform for teams who would rather not push client work, design assets or datasets through a public consumer service. You sign in, drag in the files you want to send, and Erugo hands you a single link to pass on. Recipients need no account and no software. They open the link in a browser and download.
Uploads are resumable, so a large transfer survives a dropped connection. Every share can carry an expiry date and an optional password.
This SecureAnyCloud image installs Erugo 0.2.15 with its Vue frontend compiled at build time. It serves Erugo over HTTPS with a per-VM self-signed certificate and runs the resumable-upload service and the background queue worker as managed systemd units. The application, its database and all uploaded content live on a dedicated Azure data disk.
What you get:
- Erugo 0.2.15 served over HTTPS on port 443 by nginx with a per-VM self-signed certificate, and an HTTP-to-HTTPS redirect on port 80
- PHP 8.3 with
php8.3-fpm, and SQLite as the metadata database, matching the configuration Erugo ships and tests upstream erugo-tusd.service, the resumable-upload service, bound to loopback and reverse-proxied at/files/erugo-queue.service, the queue worker that packages shares for download and sends notificationserugo-scheduler.timer, which runs share expiry, cleanup and log pruning every minute- A dedicated Azure data disk at
/var/wwwholding the application, the database and all uploaded files - A single administrator account, created during the build. Its password, along with the application key, the API token signing secret and the TLS certificate, is regenerated uniquely on the first boot of every VM
- 24/7 SecureAnyCloud support
Prerequisites
You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.
Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting size. Choose a larger size if many people will upload at once. Size the data disk for the volume of files you intend to hold.
Configure the NSG to allow inbound 22/tcp from your management network, 443/tcp for the Erugo web interface and 80/tcp for the HTTP-to-HTTPS redirect.
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Erugo by SecureAnyCloud, and select Create.
On the Basics tab, 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), HTTP (80) and HTTPS (443).
Review the dedicated data disk on the Disks tab, then select Review + create and Create.
Step 2 - Deploy from the Azure CLI
az group create --name erugo-rg --location eastus
az vm image terms accept --urn sac1647283583153:erugo-ubuntu-24-04:default:latest
az vm create \
--resource-group erugo-rg \
--name erugo-vm \
--image sac1647283583153:erugo-ubuntu-24-04:default:latest \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku Standard \
--storage-sku StandardSSD_LRS
az vm open-port --resource-group erugo-rg --name erugo-vm --port 443 --priority 1001
az vm open-port --resource-group erugo-rg --name erugo-vm --port 80 --priority 1002Step 3 - Connect to your VM
Connect over SSH as azureuser:
ssh azureuser@<vm-ip>Step 4 - Confirm the Erugo stack is running
On first boot, Erugo generates a fresh application key, a fresh API token signing secret, a fresh administrator password and a per-VM TLS certificate. It sets its public URL to your instance address and then starts the web stack.
Check that the four services are active:
systemctl is-active nginx php8.3-fpm erugo-tusd erugo-queueAll four report active.
The scheduler runs share expiry, cleanup and log pruning once a minute:
systemctl list-timers erugo-scheduler.timer --no-pagerThe API health endpoint answers and reports the configured maximum share size:
curl -sk https://127.0.0.1/api/healtherugo-tusd listens on 127.0.0.1:8080 only. It is never exposed directly. nginx reverse-proxies it at /files/, so resumable uploads travel over the same TLS connection as the rest of the application.
Step 5 - Retrieve the administrator password
The administrator account is unique to your VM. Erugo generates its password on first boot and writes it to a root-only file. Read the file with elevated privileges:
sudo cat /root/erugo-credentials.txtThe file contains the administrator e-mail address, a unique password, and the https://<vm-public-ip>/ URL for your instance. No two SecureAnyCloud Erugo instances share a password, and no default credential ships in the image.
Step 6 - Sign in to Erugo
Browse to https://<vm-public-ip>/ and accept the self-signed certificate warning. Then sign in with the e-mail address and password from the credentials file.
Erugo is gated: there is no anonymous access to the application itself. The first-run setup wizard, which would otherwise let a passer-by claim the administrator account, is already sealed in this image.
Step 7 - Send your first share
After you sign in, you land on the create-share view. Choose Add Files or Add Folders, give the share a name and an optional message for the recipient, and set how long the link should live. The running total against your maximum share size is shown as you add files.
Press Upload to start the transfer. Uploads run through the resumable-upload service. If a connection drops mid-transfer, select the same files again and Erugo continues from where it stopped rather than starting over.
When the upload finishes, Erugo generates the share link. Copy it and send it to your recipient, who needs no account to download.
If you add recipients by e-mail instead of taking a link, Erugo mails them the link for you once you have configured SMTP under System settings.
Step 8 - Manage your shares
My Shares lists everything you have sent. It shows the files in each share, a download counter, and the creation, expiry and deletion dates. It also offers actions to expire a share immediately or extend it.
Administrators also get All Shares, Users, Branding & UI, System settings and Email templates from the same navigation.
The scheduler cleans up expired shares automatically. Erugo can e-mail both you and your recipients before a share expires or is deleted.
Data on the dedicated data disk
The application, the SQLite metadata database and every uploaded file live on the dedicated Azure data disk mounted at /var/www. The disk is separate from the OS disk and independently resizable. Confirm the mount:
df -h /var/www findmnt -no SOURCE,TARGET,FSTYPE /var/wwwUploaded content is held under /var/www/erugo/storage/app, and the database is at /var/www/erugo/database/database.sqlite.
Back up the data disk with Azure Backup, or take an application-level database backup:
sudo -u www-data php /var/www/erugo/artisan back-up-databaseReplacing the self-signed certificate
The image generates a unique certificate on your VM's first boot, so no private key is shared between instances. Browsers still warn about it because it is self-signed. For production, install a certificate for your own domain:
sudo cp <your-domain>.crt /etc/nginx/ssl/erugo.crt
sudo cp <your-domain>.key /etc/nginx/ssl/erugo.key
sudo chmod 0600 /etc/nginx/ssl/erugo.key
sudo nginx -t && sudo systemctl reload nginxPoint a DNS record at your VM's public IP first. Then update Erugo's own URL, so the share links it generates use your domain rather than the IP address:
sudo sed -i 's|^APP_URL=.*|APP_URL=https://files.<your-domain>|' /var/www/erugo/.env
sudo -u www-data php /var/www/erugo/artisan config:clearMaintenance
Erugo's scheduled jobs run automatically. You can also run each one on demand:
sudo -u www-data php /var/www/erugo/artisan clean-expired-shares
sudo -u www-data php /var/www/erugo/artisan prune-logs
sudo -u www-data php /var/www/erugo/artisan maintain-dbRestart the stack after a configuration change:
sudo systemctl restart php8.3-fpm nginx erugo-tusd erugo-queueYou configure the maximum share size, default and maximum expiry, upload modes, branding and SMTP from System settings in the web interface, not from configuration files.
The OS receives unattended security updates. Apply the latest packages, and reboot if the kernel changed:
sudo apt-get update && sudo apt-get upgrade -ySupport
SecureAnyCloud provides 24/7 support for this image. Contact sales@secureanycloud.com with your Azure subscription ID and VM name.
Deploy on Azure
Launch Erugo 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
Erugo is an open-source file sharing and file transfer platform for teams who would rather not push client work, design assets or datasets through a public consumer service. You sign in, drag in the files you want to send, and Erugo hands you a single link to pass on. Recipients need no account and no software. They open the link in a browser and download.
Uploads are resumable, so a large transfer survives a dropped connection. Every share can carry an expiry date and an optional password.
This SecureAnyCloud image installs Erugo 0.2.15 with its Vue frontend compiled at build time. It serves Erugo over HTTPS with a per-instance self-signed certificate and runs the resumable-upload service and the background queue worker as managed systemd units. The application, its database and all uploaded content live on a dedicated EBS data volume.
What you get:
- Erugo 0.2.15 served over HTTPS on port
443by nginx with a per-instance self-signed certificate, and an HTTP-to-HTTPS redirect on port80 - PHP 8.3 with
php8.3-fpm, and SQLite as the metadata database, matching the configuration Erugo ships and tests upstream erugo-tusd.service, the resumable-upload service, bound to loopback and reverse-proxied at/files/erugo-queue.service, the queue worker that packages shares for download and sends notificationserugo-scheduler.timer, which runs share expiry, cleanup and log pruning every minute- A dedicated EBS data volume at
/var/wwwholding the application, the database and all uploaded files, independently resizable and separate from the OS disk - A single administrator account, created during the build. Its password, along with the application key, the JWT signing secret and the TLS certificate, is regenerated uniquely on the first boot of every instance
- 24/7 SecureAnyCloud support
Erugo is a trademark of its respective owner. This image is produced by SecureAnyCloud and is not affiliated with, endorsed by or sponsored by the Erugo project. It ships the free and open source, MIT-licensed self-hosted software, unmodified.
Prerequisites
You need an AWS account, an EC2 key pair in the target region, and a VPC with a subnet.
m5.large (2 vCPU / 8 GiB RAM) is a good starting size. Choose a larger size if many people will upload at once. Size the data volume for the volume of files you intend to hold.
Configure the security group to allow inbound 22/tcp from your management network, 443/tcp for the Erugo web interface and 80/tcp for the HTTP-to-HTTPS redirect.
Connecting to your instance
Connect over SSH as the default login user for your operating system variant. For Ubuntu 24.04, the login user is ubuntu.
Step 1 - Subscribe and launch from AWS Marketplace
Open the product in AWS Marketplace, choose Continue to Subscribe, accept the terms, then choose Continue to Configuration. Pick the software version and your region, then choose Continue to Launch.
Under Launch this software, choose Launch through EC2. Select an instance type (m5.large is recommended), your VPC and subnet, and your EC2 key pair.
For the security group, allow SSH (22) from your management network, plus HTTPS (443) and HTTP (80). Then launch the instance.
Step 2 - Launch from the AWS CLI
Subscribe in the AWS Marketplace console first, then launch the subscribed AMI. Replace the AMI ID with the one shown on the Marketplace launch page for your region:
aws ec2 run-instances \
--image-id ami-0123456789abcdef0 \
--instance-type m5.large \
--key-name your-key \
--security-group-ids sg-0123456789abcdef0 \
--subnet-id subnet-0123456789abcdef0 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=erugo}]'Step 3 - Connect to your instance
Connect over SSH as ubuntu:
ssh ubuntu@<public-ip>Step 4 - Confirm the Erugo stack is running
On first boot, Erugo generates a fresh application key, a fresh JWT signing secret, a fresh administrator password and a per-instance TLS certificate. It sets its public URL to your instance address (discovered through EC2 IMDSv2) and then starts the web stack. Check that all four services report active:
systemctl is-active nginx php8.3-fpm erugo-tusd erugo-queueThe scheduler runs share expiry, cleanup and log pruning once a minute:
systemctl list-timers erugo-scheduler.timer --no-pagerThe API health endpoint answers and reports the configured maximum share size:
curl -sk https://127.0.0.1/api/healtherugo-tusd listens on 127.0.0.1:8080 only. It is never exposed directly. nginx reverse-proxies it at /files/, so resumable uploads travel over the same TLS connection as the rest of the application.
Step 5 - Retrieve the administrator password
The administrator account is unique to your instance. Erugo generates its password on first boot and writes it to a root-only file. Read the file with elevated privileges:
sudo cat /root/erugo-credentials.txtThe file contains the administrator e-mail address, a unique password, and the https://<public-ip>/ URL for your instance. No two SecureAnyCloud Erugo instances share a password, and no default credential ships in the image.
Step 6 - Sign in to Erugo
Browse to https://<public-ip>/ and accept the self-signed certificate warning. Then sign in with the e-mail address and password from the credentials file.
Erugo is gated: there is no anonymous access to the application itself. The first-run setup wizard, which would otherwise let a passer-by claim the administrator account, is already sealed in this image.
Step 7 - Send your first share
After you sign in, you land on the create-share view. Choose Add Files or Add Folders, give the share a name and an optional message for the recipient, and set how long the link should live. The running total against your maximum share size is shown as you add files.
Press Upload to start the transfer. Uploads run through the resumable-upload service. If a connection drops mid-transfer, select the same files again and Erugo continues from where it stopped rather than starting over.
When the upload finishes, Erugo generates the share link. Copy it and send it to your recipient, who needs no account to download.
If you add recipients by e-mail instead of taking a link, Erugo mails them the link for you once you have configured SMTP under System settings.
Step 8 - Administer your instance
Administrators reach the full management surface from the settings menu. System settings covers the application name, the login message, share limits and expiry defaults, SMTP, authentication and database backups.
Users lists every account, with actions to add a user, edit, view their shares, reset a password or delete. Self-registration is disabled by default, so only accounts you create can sign in.
My Shares and All Shares list what has been sent, with per-share download counters, expiry and deletion dates, and actions to expire a share immediately or extend it. Branding & UI and Email templates let you theme the instance and customise notification e-mails.
Data on the dedicated data volume
The application, the SQLite metadata database and every uploaded file live on the dedicated EBS data volume mounted at /var/www. The volume is separate from the OS disk and independently resizable. Confirm the mount:
df -h /var/www findmnt -no SOURCE,TARGET,FSTYPE /var/wwwUploaded content is held under /var/www/erugo/storage/app, and the database is at /var/www/erugo/database/database.sqlite.
Back up the volume with an EBS snapshot, or take an application-level database backup:
sudo -u www-data php /var/www/erugo/artisan back-up-databaseReplacing the self-signed certificate
The image generates a unique certificate on your instance's first boot, so no private key is shared between instances. Browsers still warn about it because it is self-signed. For production, install a certificate for your own domain:
sudo cp <your-domain>.crt /etc/nginx/ssl/erugo.crt
sudo cp <your-domain>.key /etc/nginx/ssl/erugo.key
sudo chmod 0600 /etc/nginx/ssl/erugo.key
sudo nginx -t && sudo systemctl reload nginxPoint a DNS record at your instance's public IP first. Then update Erugo's own URL, so the share links it generates use your domain rather than the IP address:
sudo sed -i 's|^APP_URL=.*|APP_URL=https://files.<your-domain>|' /var/www/erugo/.env
sudo -u www-data php /var/www/erugo/artisan config:clearMaintenance
Erugo's scheduled jobs run automatically. You can also run each one on demand:
sudo -u www-data php /var/www/erugo/artisan clean-expired-shares
sudo -u www-data php /var/www/erugo/artisan prune-logs
sudo -u www-data php /var/www/erugo/artisan maintain-dbYou configure the maximum share size, default and maximum expiry, upload modes, branding and SMTP from System settings in the web interface, not from configuration files.
The OS receives unattended security updates. Apply the latest packages, and reboot if the kernel changed:
sudo apt-get update && sudo apt-get upgrade -ySupport
SecureAnyCloud provides 24/7 support for this image. Contact sales@secureanycloud.com with your AWS account ID and instance ID.
Deploy on AWS
Launch Erugo Self-Hosted File Transfer with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com