Prepare Your Environment
Before creating subscriptions, configure the infrastructure services that Sadeem connects to. This is a one-time setup — once done, every new subscription you create will inherit these settings automatically from the Portainer environment or DBFilter server group.
1. Add a Cloudflare Account
Go to Infrastructure → Cloudflare Accounts → New.
| Field | Value |
|---|---|
| Name | Label for this account, e.g. sadeem.cloud |
| API Token | Cloudflare API token with Zone → DNS → Edit permission |
| Zone ID | Found on your domain's overview page in the Cloudflare dashboard |
Click Confirm to validate the token.
DNS strategy — pick one
You have two options for how subscription domains resolve. Choose based on your preference:
Option A — Auto create DNS record (per subscription)
Enable Auto create DNS record on the Portainer environment (Docker) or DBFilter server group. When each subscription is built, Sadeem automatically creates an individual A record in Cloudflare for that subscription's domain. No manual DNS setup needed beyond adding the Cloudflare account above.
Option B — Wildcard DNS record (manual, one-time)
Create a single wildcard A record in Cloudflare that covers all subdomains at once:
Go to Infrastructure → Cloudflare Accounts → <your account> → Records → New:
| Field | Value |
|---|---|
| Type | A |
| Name | * |
| Content | Your server's public IP |
| Proxied | Enabled |
With this in place every subdomain resolves without Sadeem touching DNS at all. Leave Auto create DNS record disabled on your environments.
Note
You don't need both. If Auto create DNS record is disabled and no wildcard exists, DNS resolution is your responsibility to handle outside of Sadeem.
2. Add an Nginx Proxy Manager Server
Go to Infrastructure → Nginx Servers → New.
| Field | Value |
|---|---|
| Name | Label, e.g. main-nginx |
| URL | NPM API base URL, e.g. http://your-server:81 |
| Username | NPM admin email |
| Password | NPM admin password |
Click Confirm to test the connection.
3. Add a Root Server (optional — needed for Git integration)
A root server is a Linux machine accessible via SSH. It is not required for basic subscription provisioning. You only need it if you plan to:
- Deploy custom Odoo addons via Git integration
- Use the VS Code server feature
- Run SSH commands directly from Odoo
Go to Infrastructure → Root Servers → New.
| Field | Value |
|---|---|
| Name | Label, e.g. main-server |
| Host | IP address or hostname |
| SSH Port | Default 22 |
| SSH User | User with appropriate filesystem access |
| SSH Key / Password | Authentication method |
Click Test Connection to verify, then Confirm.
Docker deployments
For Docker subscriptions, the root server is auto-assigned from the Portainer environment's Server field when you pick a Docker image. You do not need to set it manually on each subscription.
4. Add a Portainer Server (Docker deployments)
Go to Infrastructure → Portainer Servers → New.
| Field | Value |
|---|---|
| Name | Label, e.g. main-portainer |
| URL | Portainer API URL, e.g. https://your-server:9443 |
| Access Token | Portainer API access token (User Settings → Access Tokens in Portainer) |
Click Confirm, then open the server and click Sync Environments to import your Docker environments.
Configure the Portainer Environment
Open the synced environment and fill in the default values that will be inherited by all subscriptions created in this environment:
| Field | Purpose |
|---|---|
| Server | Root server for this environment (used for Git integration) |
| Nginx Server | NPM instance to use for proxy hosts |
| Cloudflare Account | Cloudflare connector for DNS records |
| Main Domain | Base domain for subdomain generation, e.g. sadeem.cloud |
| Subdomain Start | Default prefix, e.g. client → generates client1.sadeem.cloud |
| Next Port | Starting port for HTTP port assignment (e.g. 8100) |
| Backup Server | Default backup server for all subscriptions in this environment |
When a subscription is created and a Docker image is selected, all these values are automatically copied to the subscription. You rarely need to set them manually on individual subscriptions.
5. Add a DBFilter Server Group (DBFilter deployments)
Go to Subscriptions → DBFilter Servers → New.
| Field | Purpose |
|---|---|
| Name | Label for this server group |
| Nginx Server | NPM instance for proxy hosts |
| Cloudflare Account | Cloudflare connector for DNS |
| Main Domain | Base domain for subdomain generation |
| Backup Server | Default backup server |
When a subscription uses this server group, these values are inherited automatically.
What's Next
With your environment configured, you're ready to create your first subscription.
- Your First Subscription — create, confirm, build, and verify a customer instance