Deployment guide

UnoPim

Overview

UnoPim is a free, open-source product information management (PIM) system built on the Laravel framework by Webkul. It centralises product data in a single admin panel: a catalog of products with rich attributes, attribute families, nested categories, role-based user management, bulk import and export, and a REST API for feeding downstream sales channels and storefronts.

This SecureAnyCloud image delivers UnoPim fully installed and configured on Ubuntu 24.04. It is a Laravel 12 application on PHP 8.3 with OPcache, served by nginx over HTTPS with php-fpm and backed by MySQL 8.0. Migrations and seeders are already applied and the application is marked installed, so you land directly on the admin sign-in with no setup wizard to complete.

What you get:

  • UnoPim 2.1.6 (MIT licensed), served from /var/www/unopim/public
  • nginx (TLS on :443, with :80 redirected to HTTPS), PHP 8.3 (php8.3-fpm with OPcache) and MySQL 8.0, all from Ubuntu 24.04 main/universe
  • A per-VM self-signed TLS certificate generated on first boot, so the admin panel loads over a secure context
  • A background queue worker (unopim-queue.service) for imports, exports, webhooks and completeness recalculation
  • A per-VM administrator email and password, MySQL password and Laravel APP_KEY, all generated at first boot and written to a root-only file. The well-known upstream default admin@example.com / admin123 does not ship
  • nginx.service, php8.3-fpm.service, mysql.service and unopim-queue.service as enabled, active systemd units
  • 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_B2ms (2 vCPU / 8 GiB RAM) is a good starting size. Scale up for larger catalogs or heavier import workloads.

Configure the network security group (NSG) to allow inbound 22/tcp from your management network, and 443/tcp (HTTPS) plus 80/tcp (which redirects to HTTPS) from your users.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for UnoPim 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) and HTTPS (443). Then select Review + create and Create.

Step 2 - Deploy from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:unopim:default:latest
az vm create \
  --resource-group <your-rg> \
  --name unopim \
  --image sac1647283583153:unopim:default:latest \
  --size Standard_B2ms \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/id_ed25519.pub \
  --vnet-name <your-vnet> --subnet <your-subnet> \
  --public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name unopim --port 443 --priority 1010

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the services are running

Check that the four services behind UnoPim report active, that the admin panel answers HTTP 200 over HTTPS, and that the plain HTTP port redirects to it:

systemctl is-active nginx php8.3-fpm mysql unopim-queue curl -ks -o /dev/null -w 'admin login https -> %{http_code}\n' https://127.0.0.1/admin/login curl -s -o /dev/null -w 'http redirect -> %{http_code}\n' http://127.0.0.1/

Expected output: four lines of active, then admin login https -> 200 and http redirect -> 301.

Step 5 - Retrieve your administrator credentials

On the first boot of every VM, a one-shot service (unopim-firstboot.service) generates credentials that are unique to that VM: a fresh Laravel application key, a fresh MySQL password, and a fresh administrator email and password. It also generates a per-VM self-signed TLS certificate and sets the address of the VM as the application URL.

No shared or default credentials ship in the image. The well-known upstream default admin@example.com / admin123 is neutralised at build time and does not authenticate. Read the generated credentials as root:

sudo cat /root/unopim-credentials.txt

The file (mode 0600, root-only) contains the administrator email (unopim.admin.user), the administrator password (unopim.admin.pass), the admin panel URL and the database credentials. UnoPim signs in by email.

The image is secure by default. The stock admin@example.com / admin123 is rejected, while the per-VM administrator from the credentials file signs in successfully.

You can verify both from the shell of the VM. Each command reads a CSRF token, posts a real admin sign-in and prints where UnoPim redirects. A successful login lands on /admin/dashboard. A rejected one returns to /admin/login:

ADMIN_USER=$(sudo grep '^unopim.admin.user=' /root/unopim-credentials.txt | cut -d= -f2-)
ADMIN_PASS=$(sudo grep '^unopim.admin.pass=' /root/unopim-credentials.txt | cut -d= -f2-)
CJ=$(mktemp)
TOK=$(curl -ks -c "$CJ" https://127.0.0.1/admin/login | grep -oE 'name="_token" value="[^"]+"' | head -1 | sed 's/.*value="//;s/"//')
curl -ks -o /dev/null -w 'per-VM admin -> %{redirect_url}\n' -b "$CJ" -c "$CJ" \
  -d "_token=$TOK" --data-urlencode "email=$ADMIN_USER" --data-urlencode "password=$ADMIN_PASS" \
  https://127.0.0.1/admin/login rm -f "$CJ"

Step 6 - Sign in to the admin panel

Browse to https://<vm-public-ip>/admin and sign in with the administrator email and password from the credentials file.

The image ships a per-VM self-signed certificate, so your browser shows a one-time certificate warning on the first visit. Click through it, or install your own domain certificate into /etc/nginx/ssl/.

After you sign in, the dashboard summarises your catalog: total products, categories, attributes, attribute families, locales, currencies and channels, with recent product activity.

Step 7 - Manage your catalog

Use the Catalog menu of the admin panel to manage Products, Categories, Category Fields, Attributes, Attribute Groups and Attribute Families. The application ships ready for your own data.

To add a product, choose Catalog > Products > Create Product, pick an attribute family and SKU, and fill in the attributes. To import and export in bulk, use the REST API or Data Transfer.

Attribute families group the attributes that describe a class of product, so every product of that family shares a consistent, complete data structure. The image ships with a Default family that you can extend or replace.

Step 8 - Confirm the version and the stack

Print the UnoPim, PHP and MySQL versions and the state of the first-boot service:

grep -m1 '"version"' /var/www/unopim/composer.json php -r 'echo PHP_VERSION."\n";' mysql --version systemctl is-active unopim-firstboot.service

Expected output: UnoPim 2.1.6, PHP 8.3.x, MySQL 8.0.x, and the first-boot service active.

First-boot service and security model

A one-shot unopim-firstboot.service runs After=mysql.service and Before=nginx.service, so the per-VM credentials and TLS certificate are in place before the first page is ever served. It runs exactly once, and it does the following:

  • Rotates the MySQL password in lock-step with the application .env
  • Regenerates the Laravel APP_KEY
  • Rotates the administrator email and password
  • Sets APP_URL and the trusted hosts from the address of the VM
  • Writes the credentials file at mode 0600 (root-only), then drops a sentinel so it never runs again
systemctl status unopim-firstboot.service --no-pager | head -6 sudo stat -c '%a %U:%G %n' /root/unopim-credentials.txt

Administration from the CLI

Run admin tasks with Laravel's artisan as the www-data user. For example, list the available commands:

sudo -u www-data php /var/www/unopim/artisan list | head -30

Common operations include php artisan cache:clear, php artisan optimize:clear and inspecting the queue worker with systemctl status unopim-queue. Imports, exports, webhooks and completeness recalculation run through the queue worker, so leave unopim-queue.service enabled.

Enabling Elasticsearch for large catalogs

The image runs UnoPim on its database driver with no external search dependency, which suits small and medium catalogs. For large catalogs, you can enable Elasticsearch.

Install an Elasticsearch 8.x node, then set ELASTICSEARCH_ENABLED=true and the connection settings in /var/www/unopim/.env. Run sudo -u www-data php /var/www/unopim/artisan config:clear, then reindex with sudo -u www-data php /var/www/unopim/artisan unopim:product:index.

Enabling HTTPS with your own domain

The image already serves HTTPS with a per-VM self-signed certificate. For production, point a real domain at the public IP of the VM and open 443/tcp in the NSG. Then replace the self-signed certificate with a trusted one from Let's Encrypt, substituting your own domain:

sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

After the certificate is issued, set the new address as the application URL and add it to the trusted hosts in /var/www/unopim/.env. Set APP_URL=https://your-domain.com and add the domain to TRUSTED_HOSTS. Then run sudo -u www-data php /var/www/unopim/artisan optimize:clear.

Backup and maintenance

The database lives in MySQL. The application tree, including uploaded media, is under /var/www/unopim. For a point-in-time backup, snapshot the OS disk in Azure. Alternatively, dump the database with the following command. The database password is in the credentials file:

sudo mysqldump unopim > unopim-backup.sql

Keep the OS patched with sudo apt update && sudo apt upgrade. Unattended security upgrades are enabled by default. The stack restarts cleanly with sudo systemctl restart nginx php8.3-fpm mysql unopim-queue.

Support

This image is backed by 24/7 SecureAnyCloud support. Contact us by email or chat for help with UnoPim deployment, upgrades, catalog modelling, attributes and attribute families, import and export, REST API integration, multi-channel and multi-locale configuration, performance tuning and database administration.

All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.

Deploy on Azure

Launch UnoPim 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