Overview
Most provisioning problems fall into one of a few categories: the scheduler isn't running, credentials are wrong, a package name doesn't match, or a network/firewall issue is blocking the Panel API. Start with the Provisioning Log — the error response from the Panel is almost always enough to identify the cause.
Quick Diagnostic Checklist
- Is the Laravel scheduler running? (
crontab -lon the Commerce server) - Is there a failed entry in the Provisioning Log for this service?
- Can Commerce reach the Panel? (Test Connection on the server edit page)
- Does the package name in Commerce exactly match the Panel?
Issue Reference
Service stuck in pending
Symptom: Client paid, invoice marked paid, but service status never changes from pending.
Possible causes:
| Cause | How to confirm | Fix |
|---|---|---|
| Scheduler not running | crontab -l — no entry for schedule:run |
Add cron entry (see below) |
| Queue not processing | php artisan queue:failed |
Run php artisan queue:work or check Supervisor |
| Job failed all 3 retries | Check Provisioning Log — failed entry exists | Fix the root cause, then re-trigger manually |
Correct cron entry:
* * * * * cd /opt/opterius && php artisan schedule:run >> /dev/null 2>&1
Verify the scheduler sees the commands:
php artisan schedule:list
"Account creation failed" in the log
Symptom: Provisioning Log shows a failed create action.
- Click the failed log entry to view the full request and response.
- Match the error to the table below.
| Response / Error | Cause | Fix |
|---|---|---|
401 Unauthorized |
Wrong api_token |
Regenerate token in Panel → Settings → API; update server credentials |
Connection refused / cURL 7 |
Wrong api_url, wrong port, or firewall blocking |
Verify api_url; open port on Panel server firewall for Commerce IP |
422 account already exists |
Duplicate username on Panel | Delete duplicate on Panel, or adjust username generation logic |
SSL certificate verify failed |
Self-signed cert on Panel | Install a valid certificate; or set SSL_VERIFY=false in Commerce .env (dev only) |
504 Gateway Timeout |
Panel API slow / overloaded | Check Panel server resources; increase module timeout |
403 Forbidden |
Commerce IP not in Panel allowlist | Add Commerce server IP to Panel's API allowlist |
"Package not found"
Symptom: Panel returns a package error; account not created.
Cause: The package name set on the Commerce product does not match the package name in Opterius Panel. The comparison is case-sensitive and exact.
Fix:
- Log in to Opterius Panel → Packages.
- Copy the exact package name (e.g.
Basic Hosting— notbasic hostingorBasic). - Go to Commerce → Admin → Products → [product] → Provisioning tab.
- Paste the exact name into the Package Name field.
- Save and re-trigger the failed job.
Service suspends but hosting account stays active on the panel
Symptom: Commerce shows status = suspended, but the site is still live.
Cause: The SuspendHostingAccountJob failed (likely a transient API error) after the status was updated locally.
Fix:
- Check Provisioning Log for a failed
suspendentry. - Go to Admin → Services → [service] → Actions → Suspend to dispatch a new job.
- Monitor the log for the result.
Scheduler not running — verification steps
# Check for the cron entry
crontab -l
# Test the scheduler manually
cd /opt/opterius && php artisan schedule:run
# List all registered scheduled commands
php artisan schedule:list
The schedule list should include commerce:check-overdue-services (01:00) and commerce:check-termination-services (02:00).
Re-triggering a Failed Job
Any provisioning action can be manually dispatched:
- Go to Admin → Services → [service].
- In the Actions panel, click the relevant button: Create, Suspend, Unsuspend, or Terminate.
- The new job is dispatched immediately and its result appears in the Provisioning Log.