WebErpMesv2
Overview
WebErpMesv2 (WEM) is a free, open source Resource Management and Manufacturing Execution System (MES) built for small industry, such as sheet metal, machining, moulds and similar make-to-order workshops. It brings the commercial pipeline (leads, opportunities, quotes), sales orders, production planning and execution (routings, work orders, workshop tracking), stock and purchasing, and ISO-9001 quality management together in one web application. A small manufacturer can run quote-to-delivery from a single tool.
The SecureAnyCloud image delivers WebErpMesv2 fully installed and configured on Ubuntu 24.04. It is a Laravel 12 application (with AdminLTE) on PHP 8.3 with OPcache, served by nginx over HTTPS and backed by MariaDB. Database migrations are already applied and a demo dataset is pre-loaded, so you land on a populated dashboard and can explore straight away.
This is not the classic webERP accounting application. WebErpMesv2 is a manufacturing-focused ERP/MES from the SMEWebify project. It is a different product from the older weberp.org accounting ERP. This image is the manufacturing MES.
What you get:
- WebErpMesv2 (MIT licensed), served from
/var/www/weberpmes/public. - nginx (HTTPS on :443 with a per-VM self-signed certificate, and :80 redirecting to :443), PHP 8.3 (php8.3-fpm with OPcache) and MariaDB, all from Ubuntu 24.04.
- Front-end assets compiled at build time with Vite. No Node or composer toolchain ships in the image.
- A per-VM administrator password, MariaDB password and Laravel
APP_KEY, all generated at first boot and written to a root-only file. No default login ships in the image, and self-registration is disabled. - A pre-loaded demo dataset (companies, quotes, orders, products and CRM opportunities), so the interface is populated on first sign-in.
nginx.service,php8.3-fpm.serviceandmariadb.serviceas systemd units, enabled and active.- A plain-HTTP liveness endpoint at
http://<vm>/upthat returnsok. - 24/7 SecureAnyCloud support.
Prerequisites
Before you deploy this image, make sure you have:
- An active Azure subscription.
- An SSH key pair.
- A VNet and subnet in the target region.
- A VM size of Standard_B2s (2 vCPU / 4 GiB RAM) or larger. Standard_B2s is a good starting point. Scale up for more concurrent users or larger datasets.
- NSG inbound rules that allow
22/tcpfrom your management network, and443/tcpfrom your users. Also allow80/tcpfor the HTTP to HTTPS redirect.
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal and choose Create a resource. Search the Marketplace for WebErpMesv2 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).
Then choose Review + create, followed by 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:weberp-mesv2-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name weberpmes \
--image sac1647283583153:weberp-mesv2-ubuntu-24-04:default:latest \
--size Standard_B2s \
--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 weberpmes --port 443 --priority 1010
az vm open-port --resource-group <your-rg> --name weberpmes --port 80 --priority 1011Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>Step 4 - Confirm the services are running
The three services that back WebErpMesv2 should all report active. A plain-HTTP liveness endpoint answers on /up and never touches the app or the database. The site itself is served over HTTPS:
systemctl is-active nginx php8.3-fpm mariadb curl -s http://127.0.0.1/up curl -ks -o /dev/null -w 'https /en/login -> HTTP %{http_code}\n' https://127.0.0.1/en/loginExpected: three lines of active, then ok, then HTTP 200.
Step 5 - Retrieve your administrator credentials
On the first boot of every VM, a one-shot service (weberp-mesv2-firstboot.service) generates credentials that are unique to that VM. These are a fresh Laravel application key, a fresh MariaDB password and a fresh administrator password.
The service also sets the VM's own address as the application URL and generates a per-VM self-signed TLS certificate. No shared or default credentials ship in the image. Every seeded account's password is scrambled at build time, and the administrator's password is set only on first boot.
sudo cat /root/weberp-mesv2-credentials.txtThe file (mode 0600, root only) contains the administrator email (wem.admin.user, which is contact@wem-project.org), the administrator password (wem.admin.pass), the site URL and the database credentials. WebErpMesv2 signs you in by email.
Step 6 - Sign in
Browse to https://<vm-public-ip>/en/login and sign in with the administrator email and password from the credentials file.
The VM ships a per-VM self-signed certificate, so your browser shows a one-time security warning the first time. Accept it to continue. Step 9 shows how to install a trusted domain certificate.
After you sign in, you land on the dashboard. It is already populated with the pre-loaded demo dataset, including open quotes and orders, supplier counts and financial forecasts.
You can also prove the login round-trip from the VM's own shell. The following commands read the per-VM credentials, fetch a CSRF token and post a real sign-in over HTTPS. A successful WebErpMesv2 login answers HTTP 302:
ADMIN_USER=$(sudo grep '^wem.admin.user=' /root/weberp-mesv2-credentials.txt | cut -d= -f2-)
ADMIN_PASS=$(sudo grep '^wem.admin.pass=' /root/weberp-mesv2-credentials.txt | cut -d= -f2-)
CJ=$(mktemp)
TOK=$(curl -ks -c "$CJ" https://127.0.0.1/en/login | grep -oE 'name="_token" value="[^"]+"' | head -1 | sed 's/.*value="//;s/"//')
curl -ks -o /dev/null -w 'login HTTP %{http_code}\n' -b "$CJ" -c "$CJ" \
-d "_token=$TOK" -d "modeView=desktop" --data-urlencode "email=$ADMIN_USER" --data-urlencode "password=$ADMIN_PASS" \
https://127.0.0.1/en/login rm -f "$CJ"Step 7 - Explore quotes, orders, production and CRM
Use the left navigation to move through the whole quote-to-delivery flow. Opportunities and Leads hold the commercial pipeline. The opportunities view summarises win probability, amounts and recent activity from the demo dataset.
Quotes and Orders carry the sales documents through to production. The Workshop interface is where manufacturing execution happens, with the task list and planning, production declarations and shop-floor stock.
The demo dataset (250 companies, 500 quotes, 500 orders, 50 products) keeps the interface populated while you evaluate. To start clean, remove the demo records from each module. Alternatively, reset the database and re-run the migrations for an empty install.
Step 8 - Confirm the application stack
Laravel's about command summarises the running application, including the framework version, PHP, environment and the configured drivers:
sudo -u www-data HOME=/tmp php /var/www/weberpmes/artisan about --only=environmentYou should see WebErpMesv2 on Laravel 12 / PHP 8.3, environment production and debug OFF.
Step 9 - Install a trusted HTTPS certificate (recommended for production)
The image ships a per-VM self-signed certificate, so the site is encrypted from first boot. For production, point a DNS name at the VM and replace the certificate with a free Let's Encrypt certificate:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.comCertbot installs the certificate into the nginx site and sets up automatic renewal. Afterwards, update APP_URL in /var/www/weberpmes/.env to your https://your-domain.example.com address.
Administration from the CLI
Run admin tasks with Laravel's artisan as the www-data user. For example, the following command lists the available commands:
sudo -u www-data HOME=/tmp php /var/www/weberpmes/artisan listThe MariaDB database is named wem, and its per-VM password is in /root/weberp-mesv2-credentials.txt. The Laravel scheduler runs every minute from /etc/cron.d/weberpmes-scheduler. It drives backups (spatie/laravel-backup) and activity-log maintenance.
Maintenance
- OS updates: unattended-upgrades is enabled, so security patches apply automatically. Apply the full set with
sudo apt-get update && sudo apt-get -y dist-upgrade. - Upgrading WebErpMesv2: back up the database and
/var/www/weberpmes, then follow the project's documentation. - Backups: back up the
wemMariaDB database and the/var/www/weberpmes/storagetree, which holds uploaded documents and files.
Support
Every SecureAnyCloud deployment includes 24/7 support. SecureAnyCloud is not affiliated with, endorsed by, or sponsored by the WebErpMesv2 project, SMEWebify or its authors. All product names are the property of their respective owners.
Deploy on Azure
Launch WebErpMesv2 Manufacturing Execution System 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