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 defaultadmin@example.com/admin123does not ship nginx.service,php8.3-fpm.service,mysql.serviceandunopim-queue.serviceas 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 1010Step 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.txtThe 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.serviceExpected 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_URLand 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.txtAdministration 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 -30Common 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.comAfter 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.sqlKeep 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
UnoPim is a free, open-source Product Information Management (PIM) platform by Webkul. It gives you a single, central admin panel to model, enrich and govern your product catalog: products, typed attributes, reusable attribute families, categories, role-based users, CSV/XLSX import and export, multi-locale and multi-channel content, and a full REST API for syndicating clean catalog data to storefronts, marketplaces and other channels.
This SecureAnyCloud Amazon Machine Image delivers UnoPim fully installed and configured on Ubuntu 24.04, so a complete PIM is running within minutes of launch. The stack 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. A background queue worker handles imports, exports, webhooks and completeness jobs. Database migrations and the admin asset build are already applied, so you land directly on the sign-in page with no setup wizard to complete.
This guide covers connecting to your instance, retrieving the per-instance administrator credentials, signing in over HTTPS, modelling your catalog, administering from the command line, and installing a trusted certificate.
Architecture at a glance
Component Detail
Application UnoPim 2.1.6 (Laravel 12), served from /var/www/unopim/public
Web server nginx, HTTPS on port 443 (port 80 redirects to 443)
PHP PHP 8.3 (php8.3-fpm) with OPcache
Database MySQL 8.0, datadir on a dedicated EBS volume at /var/lib/mysql
Application storage Code, docroot and product media on a dedicated EBS volume at /var/www
Queue worker unopim-queue.service (database queue: imports, exports, webhooks, completeness)
Admin panel https://<instance-public-ip>/admin (sign in by email)
Health endpoint https://<instance-public-ip>/admin/login (returns HTTP 200 when healthy)
UnoPim is admin-panel only. It manages catalog data and exposes it through the REST API, and it is not a storefront.
Connecting to your instance
Connect over SSH on port 22 as the default login user for your operating system variant:
OS variant SSH login user
Ubuntu 24.04 ubuntu
ssh -i /path/to/your-key.pem ubuntu@<instance-public-ip>Open ports 22 (SSH), 80 and 443 (HTTPS) in the security group of the instance. Port 80 only redirects to 443, and all application traffic is served over HTTPS.
Per-instance credentials
On first boot, a one-shot service (unopim-firstboot.service) generates credentials that are unique to your instance and writes them to a root-only file. No shared or default credentials ship in the image. Retrieve them with:
sudo cat /root/unopim-credentials.txtThe file contains the admin panel URL, the administrator email and password, and the MySQL database name, user and password. First boot also:
- Generates a fresh Laravel application key (
APP_KEY) - Rotates the MySQL password
- Sets a fresh administrator email and password
- Generates a per-instance self-signed TLS certificate
- Sets the address of the instance as
APP_URL
Because the certificate is self-signed, your browser shows a one-time certificate warning on the first visit. Click through it, or install your own trusted certificate as described in Enabling a trusted certificate below.
Verifying the service
The four services that back UnoPim should all report active:
systemctl is-active nginx php8.3-fpm mysql unopim-queueExpected output:
active active active activeThe admin panel is served over HTTPS and returns HTTP 200 when healthy. The -k flag accepts the per-instance self-signed certificate:
curl -ks -o /dev/null -w '%{http_code}\n' https://localhost/admin/login200Plain HTTP on port 80 redirects to HTTPS:
curl -s -o /dev/null -w '%{http_code}\n' http://localhost/301Confirm the database and application tiers are on their dedicated EBS volumes:
df -h /var/www /var/lib/mysqlFilesystem Size Used Avail Use% Mounted on /dev/nvme1n1 30G 218M 28G 1% /var/www /dev/nvme2n1 20G 203M 19G 2% /var/lib/mysqlConfirm the application framework version:
php /var/www/unopim/artisan --versionLaravel Framework 12.61.1Signing in
Browse to the admin panel of your instance over HTTPS. Accept the one-time certificate warning, then sign in with the administrator email and password from /root/unopim-credentials.txt:
https://<instance-public-ip>/adminAfter you sign in, the UnoPim dashboard shows a catalog overview (total products, categories, attributes, families, locales, currencies and channels) and quick actions to create products or import and export data.
We strongly recommend changing the administrator email and password, and creating additional named user accounts with appropriate roles, from Settings once you are signed in.
Note on the administrator email: first boot sets the administrator email to admin@<instance-public-ip>. The sign-in form of UnoPim validates the email format in the browser. If you access the panel by a bare IP address, set a real domain-style administrator email before you rely on browser sign-in. Change it under Settings > Users, or point a DNS name at the instance.
Modelling your catalog
UnoPim structures a catalog from a few reusable building blocks:
- Attributes are the typed fields that describe a product, such as text, select, boolean, price and image. The image ships with a starter set that includes brand, size, colour, weight, dimensions and SEO fields.
- Attribute families group attributes into reusable templates, so every product of a given type captures a consistent, complete set of information.
- Categories organise the catalog into a navigable tree, with category-level fields.
- Products are created against an attribute family and enriched per locale and per channel, then exported or served through the REST API.
A typical first workflow looks like this. Review the starter Attributes, define or adjust an Attribute Family, and build your Category tree. Then choose Create Product, or bulk-import products from CSV/XLSX with Data Transfer. Long-running imports, exports and completeness recalculations run on the background queue worker.
Administering from the command line
UnoPim ships Laravel's artisan CLI. Run admin tasks as the www-data user from the application root:
sudo -u www-data php /var/www/unopim/artisan <command>Common tasks:
... artisan optimize:clearclears the application config, route, view and cache stores.... artisan queue:restartgracefully restarts the background queue worker after changes.... artisan unopim:versionshows the installed UnoPim version.
Manage the services with systemctl (nginx, php8.3-fpm, mysql, unopim-queue). The queue worker runs as unopim-queue.service. After you change the queue configuration, restart it with sudo systemctl restart unopim-queue.
Enabling a trusted certificate
The image serves UnoPim over HTTPS with a per-instance self-signed certificate, so the admin panel is a secure context out of the box. For production, replace it with a trusted certificate. Either terminate TLS at an AWS Application Load Balancer or CloudFront in front of the instance, or issue a certificate directly on the instance with Let's Encrypt.
To use Let's Encrypt on the instance, point a DNS name at the public IP of the instance, then install Certbot and request a certificate. Run the following commands, substituting your own domain and email:
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.com -m you@example.com --agree-tos --no-eff-emailAfter you enable HTTPS on your own domain, set APP_URL and TRUSTED_HOSTS in /var/www/unopim/.env to the new hostname. Then run sudo -u www-data php /var/www/unopim/artisan optimize:clear so that generated links use the new URL. A domain-style hostname also resolves the browser email-validation note above.
Support
This is a repackaged open-source software product. UnoPim itself is licensed under the MIT License (Copyright Webkul Software).
SecureAnyCloud provides 24/7 technical support for this image by email and chat. Support covers UnoPim deployment, upgrades, HTTPS and trusted-certificate setup, import and export (CSV/XLSX) configuration, REST API integration, queue and background-job tuning, and MySQL database administration. For assistance, contact sales@secureanycloud.com.
Deploy on AWS
Launch UnoPim with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com