Your First Subscription
This walkthrough creates a customer subscription end-to-end — from a blank form to a live running Odoo instance. It assumes you have completed Installation and Prepare Your Environment.
The walkthrough uses the Docker deployment strategy. DBFilter differences are noted where relevant.
Subscription Lifecycle
Draft → Confirmed → Building → Running
| State | Meaning |
|---|---|
| Draft | Being configured — nothing provisioned yet |
| Confirmed | Validated and ready to build |
| Building | DNS, Nginx proxy, and Docker stack being provisioned |
| Build Failed | A provisioning step errored — inspect and retry |
| Running | Customer instance is live |
| Stopped | Instance paused — proxy redirects visitors, data preserved |
| Terminated | Subscription ended — stack removed |
Step 1: Create a Package
Packages define the resource limits for a subscription tier. Create one before creating subscriptions.
Go to Subscriptions → Packages → New.
| Field | Value |
|---|---|
| Name | e.g. Starter Plan |
| Module Limit | Max Odoo modules the customer can install |
| User Limit | Max number of users |
| Storage Limit (GB) | Max disk usage |
Save the package.
Step 2: Create the Subscription
Go to Subscriptions → Subscriptions → New.
Basic Information
| Field | Value |
|---|---|
| Customer | Select or create the customer partner |
| Package | The package created above |
| SAAS Type | Docker (or DBFilter) |
| Responsible Users | Operators managing this subscription |
Docker — select a Docker image
Pick a Docker Image. When you do, Sadeem automatically copies all defaults from the image's Portainer environment into the subscription:
- Portainer environment
- Nginx server
- Cloudflare account, zone ID, and DNS settings
- Main domain and subdomain start
- PostgreSQL server
- Root server (for Git integration)
- Backup server
You typically don't need to fill in any of those fields manually.
Tip
If you haven't configured your Portainer environment defaults yet, see Prepare Your Environment.
DBFilter — select a server group
Pick a DBFilter Server Group. Sadeem copies the Nginx server, Cloudflare account, domain, and backup server from the group into the subscription automatically.
Domain
The domain is generated automatically from the Main Domain and Sub Domain Start values inherited from your environment (e.g. client1.sadeem.cloud). You can override either field or set the full Domain directly if you prefer.
Step 3: Confirm
Click Confirm in the status bar.
Sadeem validates:
- Domain is not already in use
- Domain format is valid
- Required fields are present (
nginx_server,server_ip,docker_imagefor Docker)
On success, the subscription moves to Confirmed and receives a sequence number (e.g. SUB/2026/001).
Step 4: Build
Click Build.
Sadeem provisions in order:
- DNS — Creates a Cloudflare A record for the domain if Auto create DNS record is enabled; skipped entirely if disabled (e.g. when using a wildcard record)
- Nginx — Creates a reverse proxy host in NPM with SSL
- Instance — Creates and starts the Odoo Docker stack on Portainer, assigning HTTP and WebSocket ports automatically
Progress is tracked in the Build Steps section. If a step fails, the subscription moves to Build Failed and the error appears in Build Fail Message.
Build Failed?
Read the Build Fail Message, fix the underlying issue, then click Diagnosis Fix to auto-repair and retry — or Reset to Draft to start over.
Step 5: Verify
Once state is Running:
- Click the domain link on the subscription form — the Odoo login page should load
- In Portainer, confirm the stack is running under your environment
- In NPM, confirm the proxy host is active with a valid SSL certificate
Step 6: Add a Stage (optional)
A subscription can have multiple stages — independently deployed instances (e.g. production + staging). Each stage gets its own Docker stack, Nginx proxy host, and optionally its own DNS record.
Click Create Stage on the subscription form.
| Field | Value |
|---|---|
| Name | e.g. Staging |
| Sub Domain Start | e.g. client1-staging |
| Portainer Environment | Can differ from production |