Storage Azure

Erugo on Ubuntu 24.04 on Azure User Guide

| Product: Erugo on Ubuntu 24.04 LTS on Azure

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 tidy 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, and every share can carry an expiry date and an optional password.

The cloudimg image installs Erugo 0.2.15 with its Vue frontend compiled at build time, serves it over HTTPS with a per-VM self-signed certificate, runs the resumable-upload service and the background queue worker as managed systemd units, and keeps the application, its database and all uploaded content on a dedicated Azure data disk. A single administrator account is created during the build and its password is regenerated uniquely on the first boot of every VM. Backed by 24/7 cloudimg support.

What is included:

  • 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 notifications
  • erugo-scheduler.timer, which runs share expiry, cleanup and log pruning every minute
  • A dedicated Azure data disk at /var/www holding the application, the database and all uploaded files
  • A single administrator account whose password, along with the application key, the API token signing secret and the TLS certificate, is regenerated on the first boot of every VM
  • 24/7 cloudimg support

Prerequisites

An active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region. Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting point; choose a larger size if many people will upload at once. Size the data disk for the volume of files you intend to hold. NSG inbound: allow 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 cloudimg, 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), HTTP (80) and HTTPS (443). Review the dedicated data disk on the Disks tab, then Review + create -> Create.

Step 2 - Deploy from the Azure CLI

az group create --name erugo-rg --location eastus

az vm create \
  --resource-group erugo-rg \
  --name erugo-vm \
  --image cloudimg: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 1002

Step 3 - Connect to your VM

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, sets its public URL to your instance address, and then starts the web stack.

systemctl is-active nginx php8.3-fpm erugo-tusd erugo-queue

All four report active.

Erugo service health on Ubuntu 24.04

The scheduler runs share expiry, cleanup and log pruning once a minute:

systemctl list-timers erugo-scheduler.timer --no-pager

The API health endpoint answers, and reports the configured maximum share size:

curl -sk https://127.0.0.1/api/health

Erugo listeners and API health check

Note that erugo-tusd listens on 127.0.0.1:8080 only. It is never exposed directly: nginx reverse-proxies it at /files/ so that 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. Its password is generated on first boot and written to a root-only file.

sudo cat /root/erugo-credentials.txt

The file contains the administrator e-mail address, a unique password, and the https://<vm-public-ip>/ URL for your instance. No two cloudimg Erugo instances share a password, and no default credential ships in the image.

Per-VM Erugo credentials file and compiled frontend

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 sign-in page

Erugo is gated: there is no anonymous access to the application itself, and the first-run setup wizard that would otherwise let a passer-by claim the administrator account is already sealed in this image.

Step 7 - Send your first share

After signing 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.

Creating a share in Erugo with files staged for upload

Press Upload to start the transfer. Uploads run through the resumable-upload service, so if a connection drops mid-transfer you can 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.

The generated Erugo share link

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, with the files in each share, a download counter, the creation, expiry and deletion dates, and actions to expire a share immediately or extend it. Administrators also get All Shares, plus Users, Branding & UI, System settings and Email templates from the same navigation.

Managing shares in Erugo

Expired shares are cleaned up automatically by the scheduler, and 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, separate from the OS disk and independently resizable.

df -h /var/www
findmnt -no SOURCE,TARGET,FSTYPE /var/www

Erugo runtime versions and dedicated data disk

Uploaded 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-database

Replacing the self-signed certificate

The image ships a certificate generated uniquely on your VM's first boot, so no private key is shared between instances. Browsers still warn on 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 nginx

Point a DNS record at your VM's public IP first, then update Erugo's own URL so that 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:clear

Maintenance

Erugo's scheduled jobs run automatically, but each can also be run 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-db

Restart the stack after a configuration change:

sudo systemctl restart php8.3-fpm nginx erugo-tusd erugo-queue

The maximum share size, default and maximum expiry, upload modes, branding and SMTP are all configured from System settings in the web interface rather than 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 -y

Support

cloudimg provides 24/7 support for this image. Contact support@cloudimg.co.uk with your Azure subscription ID and VM name.