Naming Convention
This document describes the Docker container naming convention and application structure used in OnTree Node.
Application Structure
Each application in OnTree Node consists of three essential files:
1. docker-compose.yml
The standard Docker Compose configuration file that defines services, networks, and volumes for your application.
2. .env file
Contains environment variables that configure Docker Compose behavior:
COMPOSE_PROJECT_NAME=ontree-<app-identifier>
COMPOSE_SEPARATOR=-
COMPOSE_PROJECT_NAME: Defines the project name used by Docker Compose for all resourcesCOMPOSE_SEPARATOR: Sets the separator character (always-in OnTree)
3. app.yaml
The OnTree-specific configuration file that defines application metadata and expected state:
id: <app-identifier>
name: <display-name>
primary_service: <main-service-name>
expected_services:
- <service-1>
- <service-2>
initial_setup_required: true # Optional, only for newly created apps from templates
Fields:
id: The lowercase identifier used internally (e.g.,uptime-kuma,openwebui-0902)name: Human-readable display name shown in the UIprimary_service: The main service that represents the applicationexpected_services: List of container names that should be running (used by the monitoring agent)initial_setup_required: Optional boolean flag. Whentrue, the agent performs initial setup tasks like pulling and locking Docker image versions
Container Naming Convention
OnTree uses a strict naming convention for all Docker containers to ensure isolation and prevent conflicts:
ontree-<app-identifier>-<service-name>-<instance>
Components
ontree: Static prefix identifying OnTree-managed containers<app-identifier>: Lowercase version of the application directory name<service-name>: Service name as defined in docker-compose.yml<instance>: Instance number (typically 1, managed by Docker Compose)
Important Rules
- Directory names are converted to lowercase for container naming
- The app identifier in all three files must match (after lowercase conversion)
- All OnTree containers start with
ontree-prefix
Examples
Example 1: Uptime Kuma
Directory: /opt/ontree/apps/uptime-kuma/
.env file:
COMPOSE_PROJECT_NAME=ontree-uptime-kuma
COMPOSE_SEPARATOR=-
app.yaml:
id: uptime-kuma
name: Uptime Kuma
primary_service: uptime-kuma
expected_services:
- ontree-uptime-kuma-uptime-kuma-1
Resulting container: ontree-uptime-kuma-uptime-kuma-1
Example 2: OpenWebUI with Mixed Case
Directory: /opt/ontree/apps/OpenWebUI-0902/
.env file:
COMPOSE_PROJECT_NAME=ontree-openwebui-0902
COMPOSE_SEPARATOR=-
app.yaml:
id: openwebui-0902
name: OpenWebUI 0902
primary_service: openwebui
expected_services:
- ontree-openwebui-0902-openwebui-1
- ontree-openwebui-0902-ollama-1
initial_setup_required: true
Resulting containers:
ontree-openwebui-0902-openwebui-1ontree-openwebui-0902-ollama-1
How It Works
-
App Creation: When you create an app (manually or from template), OnTree automatically:
- Creates the app directory
- Generates the
.envfile with the correctCOMPOSE_PROJECT_NAME - Creates the
app.yamlwith expected services - Sets
initial_setup_required: truefor template-based apps
-
Container Operations: When starting/stopping containers:
- Docker Compose reads the
COMPOSE_PROJECT_NAMEfrom.env - All containers are created with the
ontree-<app>-<service>-<number>pattern - OnTree's monitoring agent uses
expected_servicesto verify container health
- Docker Compose reads the
-
Initial Setup: For new apps with
initial_setup_required: true:- The agent automatically pulls the latest Docker images
- Locks the image versions in docker-compose.yml to specific tags
- Removes the
initial_setup_requiredflag after completion - Reports progress through the chat interface
Network and Volume Naming
Following the same pattern:
- Networks:
ontree-<app-identifier>_default - Volumes:
ontree-<app-identifier>_<volume-name>
This ensures complete isolation between applications while maintaining a clear, consistent structure that's easy to identify and manage.