Features
Environments
Deploy Environment

Deploy Environment

Feature ID: ENV-003 Category: Environments Required Permission: project.environments.deploy API Endpoint: POST /api/v1/projects/{project_id}/environments/{env_id}/deploy


Overview

Deploy an Odoo environment to your server by creating Docker containers, setting up the database, cloning Git repositories, and configuring networking. Deployment is an asynchronous background process that typically completes in 2-5 minutes.

Use this feature to:

  • Deploy a newly created environment for the first time
  • Redeploy after configuration changes (resources, branches, settings)
  • Update code after Git pushes (manual or auto-deploy)
  • Apply addon repository changes
  • Recover from errors by redeploying

What happens during deployment:

  1. Docker containers created on target server (PostgreSQL + Odoo)
  2. Git repositories cloned to server
  3. Odoo Docker image pulled
  4. Database initialized or connected to existing DB
  5. Traefik routing configured for domain access
  6. Health check validates deployment success

Prerequisites

Required Configuration

  • Server Assigned: Environment must have vm_id set (target server)
  • Server Status: Server must be RUNNING (not offline or provisioning)
  • Git Repository (optional): Project with Git connection for auto-cloning
  • No Concurrent Deployments: Cannot deploy if another deployment is in progress

Resource Requirements

  • Available Server Capacity: Server must have sufficient CPU, RAM, disk for environment
  • Organization Quota: Must not exceed quota limits
  • Network Access: Server must allow Docker Hub access for image pulling
  • Ports Available: Environment's port (default 8069) must be available on server

Permissions

  • Permission: project.environments.deploy (Project Admin or Org Owner)
  • Server Access: Backend must have SSH credentials for target server

How to Deploy an Environment

Method 1: Deploy from Environment Page (Recommended)

  1. Navigate to DashboardProjects → Select project
  2. Click Environments tab
  3. Find the environment you want to deploy
  4. Click Deploy button (looks like rocket icon)
    • Button states:
      • Deploy (blue) - Ready to deploy
      • Deploying (gray, spinner) - Deployment in progress
      • Redeploy (yellow) - Already deployed, redeploy to apply changes

Deployment Progress Modal Opens:

  • Shows real-time progress (16 steps)
  • Step-by-step status updates
  • Logs displayed for each step
  • Auto-refreshes every 2 seconds
  • Estimated time: 2-5 minutes

Method 2: Deploy from Environment Detail Page

  1. Navigate to environment detail page at /environments/ENV_ID/edit
  2. Click Overview tab
  3. In the main status card, click Deploy button
  4. Deployment Progress modal opens (same as Method 1)

Method 3: Deploy After Creating Environment

After creating a new environment:

  1. Success modal appears: "Environment created successfully"
  2. Dialog: "Deploy Now?"
    • Click Deploy Now to start deployment immediately
    • Click Deploy Later to deploy manually later
  3. If Deploy Now, deployment starts and Progress modal opens

Method 4: Auto-Deploy (Automatic)

If auto_deploy is enabled on the environment:

  1. Developer pushes code to the configured git_branch
  2. Git webhook triggers OEC.SH
  3. Deployment starts automatically
  4. Notification sent to project members
  5. View progress in Deployments tab

Deployment Steps (16 Steps)

Each deployment goes through exactly 16 steps. Progress is tracked in real-time.

Step 1: Initializing (1-3 seconds)

What happens: Load deployment configuration from database

  • Fetch environment details (CPU, RAM, disk, port)
  • Load project info (Odoo version, Git repo URL, branch)
  • Load server info (IP, SSH credentials)
  • Validate configuration completeness

Success Indicator: "Configuration loaded successfully"


Step 2: Connecting (1-2 seconds)

What happens: Establish SSH connection to target server

  • Create SSH session using paramiko library
  • Authenticate with SSH key or password
  • Test connectivity with simple command

Success Indicator: "Connected to server SERVER_IP" Potential Error: "Failed to connect - server offline or firewall blocking"


Step 3: Creating Network (1 second)

What happens: Create isolated Docker network for environment

  • Network name: paasportal_net_ENVIRONMENT_ID
  • Ensures containers can communicate
  • Isolated from other environments

Command: docker network create paasportal_net_ENV_ID Success Indicator: "Docker network created"


Step 4: Configuring DNS (2-5 seconds)

What happens: Create DNS A record pointing to server

  • Uses Cloudflare API or configured DNS provider
  • Record: SUBDOMAIN.apps.oec.sh → Server IP
  • TTL: 300 seconds (5 minutes)

Success Indicator: "DNS record created for SUBDOMAIN" Note: If custom domain configured, DNS must be set manually


Step 5: Creating Database (5-10 seconds)

What happens: Start PostgreSQL container

  • Container Name: ENVIRONMENT_ID_db
  • Image: postgres:15-alpine
  • Database Name: ENVIRONMENT_ID (UUID)
  • User: odoo
  • Password: Auto-generated secure password
  • Volume: paasportal_pgdata_ENV_ID (persistent storage)
  • Network: Attached to paasportal_net_ENV_ID
  • Memory Limit: 512 MB (or configured postgres_ram_mb)
  • CPU Limit: 0.3 cores (or configured postgres_cpu_cores)

Command:

docker run -d --name {env-id}_db \
  --network paasportal_net_{env-id} \
  -e POSTGRES_DB={env-id} \
  -e POSTGRES_USER=odoo \
  -e POSTGRES_PASSWORD={generated-password} \
  -v paasportal_pgdata_{env-id}:/var/lib/postgresql/data \
  --memory 512m \
  --cpus 0.3 \
  postgres:15-alpine

Health Check: Waits up to 60 seconds for PostgreSQL to accept connections Success Indicator: "PostgreSQL container started and healthy"


Step 6: Cloning Platform Repos (5-15 seconds)

What happens: Clone platform-level addon repositories

  • Location: /opt/paasportal/ENV_ID/addons/platform/
  • These are global addons provided by OEC.SH
  • Consolidates apt.txt and requirements.txt files

Success Indicator: "Cloned COUNT platform repositories"


Step 7: Cloning Organization Repos (5-15 seconds)

What happens: Clone organization-specific addon repositories

  • Location: /opt/paasportal/ENV_ID/addons/org/
  • Custom addons shared across all org projects
  • Example: Custom theme, common integrations

Success Indicator: "Cloned COUNT organization repositories"


Step 8: Cloning Project Repository (10-30 seconds)

What happens: Clone primary project Git repository

  • Location: /opt/paasportal/ENV_ID/addons/project/
  • Uses configured git_repo_url and git_branch
  • Authenticates with Git OAuth token for private repos
  • Checks out specific branch

Command:

git clone -b GIT_BRANCH GIT_REPO_URL /opt/paasportal/ENV_ID/addons/project/

Success Indicator: "Cloned project repository: REPO_NAME (branch: BRANCH_NAME)" Potential Error: "Git authentication failed" or "Branch not found"


Step 9: Cloning Additional Repos (5-20 seconds)

What happens: Clone any additional configured addon repositories

  • Location: /opt/paasportal/ENV_ID/addons/additional/
  • Multi-repo support for complex projects
  • Each repo can have different branch

Success Indicator: "Cloned COUNT additional repositories"


Step 10: Pulling Image (30-120 seconds, or less than 5s if cached)

What happens: Download Odoo Docker image from Docker Hub

  • Image: odoo:{version} (e.g., odoo:17.0, odoo:18.0)
  • First time: Full download (~500-800 MB)
  • Subsequent deploys: Uses cached image (less than 5 seconds)

Command:

docker pull odoo:{version}

Progress Indicator: Shows pull progress with percentage Success Indicator: "Odoo Docker image pulled successfully" Timeout: 600 seconds (10 minutes) for slow connections


Step 11: Generating Config (1-2 seconds)

What happens: Create Odoo configuration file (odoo.conf)

  • Location: /opt/paasportal/ENV_ID/odoo.conf
  • Configures database connection
  • Sets addons paths (all cloned repos)
  • Applies custom Odoo configuration from environment settings
  • Generates admin password

Configuration Includes:

[options]
db_host = ENV_ID_db
db_port = 5432
db_user = odoo
db_password = GENERATED_PASSWORD
db_name = ENV_ID
addons_path = /mnt/extra-addons/platform,/mnt/extra-addons/org,/mnt/extra-addons/project,/mnt/extra-addons/additional,/usr/lib/python3/dist-packages/odoo/addons
admin_passwd = GENERATED_ADMIN_PASSWORD
workers = 4
max_cron_threads = 2
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
log_level = info

Success Indicator: "Odoo configuration generated"


Step 12: Starting Container (5-15 seconds)

What happens: Create and start Odoo application container

  • Container Name: ENVIRONMENT_ID_odoo
  • Image: odoo:VERSION
  • Port: PORT:8069 (default 8069)
  • WebSocket Port (Odoo 18+): WS_PORT:8072
  • Network: Attached to paasportal_net_ENV_ID
  • Volume Mounts:
    • /opt/paasportal/ENV_ID//mnt/extra-addons (addons)
    • paasportal_odoo_data_ENV_ID/var/lib/odoo (filestore)
  • Environment Variables:
    • ODOO_RC=/mnt/extra-addons/odoo.conf
    • Custom environment variables from settings
  • Resource Limits:
    • Memory: Configured ram_mb - postgres_ram_mb
    • CPU: Configured cpu_cores - postgres_cpu_cores
  • Traefik Labels: For domain routing

Command:

docker run -d --name ENV_ID_odoo \
  --network paasportal_net_ENV_ID \
  -p PORT:8069 \
  -e ODOO_RC=/mnt/extra-addons/odoo.conf \
  -v /opt/paasportal/ENV_ID/:/mnt/extra-addons \
  -v paasportal_odoo_data_ENV_ID:/var/lib/odoo \
  --memory RAM_MINUS_POSTGRES m \
  --cpus CPU_MINUS_POSTGRES \
  -l traefik.enable=true \
  -l traefik.http.routers.ENV_ID.rule=Host(`DOMAIN`) \
  odoo:VERSION

Success Indicator: "Odoo container started"


Step 13: Installing Dependencies (10-30 seconds)

What happens: Install system and Python dependencies

  • Runs apt-get install from consolidated apt.txt (all repos)
  • Runs pip install -r requirements.txt from consolidated file
  • Executed inside running Odoo container

Commands:

# Inside container
apt-get update && apt-get install -y $(cat /mnt/extra-addons/apt.txt | xargs)
pip install -r /mnt/extra-addons/requirements.txt

Success Indicator: "Dependencies installed successfully" Potential Error: "Failed to install package X" (check requirements format)


Step 14: Initializing Database (10-60 seconds)

What happens: Initialize Odoo database or connect to existing

  • For new databases: Run odoo-bin -d DB_NAME -i base --stop-after-init
    • Installs base module
    • Creates default admin user
    • Sets up initial database schema
  • For migrated databases: Skips init if migration_restore_completed is true
    • Prevents data loss on redeployment
    • Connects to existing database only

Command (new database):

docker exec ENV_ID_odoo odoo-bin -d ENV_ID -i base --stop-after-init

Success Indicator: "Database initialized successfully" Duration: Varies based on modules to install (10-60 seconds)


Step 15: Configuring Traefik (2-3 seconds)

What happens: Update Traefik routing configuration

  • Adds Traefik labels to Odoo container
  • Configures domain routing rules
  • Sets up HTTPS/SSL if enabled
  • Enables WebSocket routing (Odoo 18+)

Traefik Labels:

traefik.enable: true
traefik.http.routers.ENV_ID.rule: Host(`DOMAIN`)
traefik.http.routers.ENV_ID.entrypoints: websecure
traefik.http.routers.ENV_ID.tls.certresolver: letsencrypt
traefik.http.services.ENV_ID.loadbalancer.server.port: 8069

Success Indicator: "Traefik routing configured"


Step 16: Health Check (2-30 seconds)

What happens: Validate deployment by checking Odoo availability

  • Sends HTTP request to http://localhost:PORT/web/
  • Retries up to 30 times (1 second interval)
  • Validates HTTP 200 response

Command:

curl -f http://localhost:PORT/web/

Success Indicator: "Health check passed - Odoo is responding" Potential Error: "Health check failed - Odoo not responding after 30 seconds"


Final Step: Deployment Complete

What happens: Update environment and deployment records

  • Environment status: PENDINGRUNNING
  • Deployment status: DEPLOYINGSUCCESS
  • Record container IDs and names
  • Update last_deployed_at timestamp
  • Send success notification

Total Duration: 2-5 minutes (typical)


Deployment Progress Tracking

Real-Time Progress Display

The Deployment Progress modal shows:

Header:

  • Deployment ID
  • Status badge (Deploying / Success / Failed)
  • Start time
  • Duration (elapsed time)

Progress Bar:

  • Overall percentage (0-100%)
  • Formula: (completed_steps / 16) * 100
  • Updates every 2 seconds

Step List (16 steps): Each step shows:

  • Step number (1-16)
  • Step name (e.g., "Pulling Image")
  • Status icon:
    • ⏳ Pending (gray, waiting)
    • 🔄 In Progress (blue, spinner)
    • ✅ Completed (green, checkmark)
    • ❌ Failed (red, X)
  • Description
  • Logs (expandable)

Logs Section (per step):

  • Timestamp
  • Log level (INFO, WARNING, ERROR)
  • Message
  • Auto-scrolls to latest entry

Progress API

Frontend polls: GET /api/v1/deployments/DEPLOYMENT_ID/progress

Response:

{
  "deployment_id": "uuid",
  "status": "deploying",
  "progress_percent": 45,
  "current_step": "pulling_image",
  "steps": [
    {
      "id": "initializing",
      "name": "Initializing",
      "status": "completed",
      "logs": [
        {
          "timestamp": "2024-12-11T10:30:05Z",
          "level": "info",
          "message": "Configuration loaded successfully"
        }
      ]
    },
    {
      "id": "connecting",
      "name": "Connecting",
      "status": "completed",
      "logs": [...]
    },
    {
      "id": "pulling_image",
      "name": "Pulling Image",
      "status": "in_progress",
      "logs": [
        {
          "timestamp": "2024-12-11T10:31:20Z",
          "level": "info",
          "message": "Pulling odoo:17.0... 45% complete"
        }
      ]
    }
  ],
  "started_at": "2024-12-11T10:30:00Z",
  "completed_at": null,
  "duration_seconds": 85.5,
  "error_message": null
}

Polling Interval: Every 2 seconds Stops When: Status is success or failed


Visual Feedback

During Deployment

  • Deploy Button: Changes to gray with spinner, text: "Deploying..."
  • Deployment Progress Modal: Opens automatically
  • Progress Bar: Animates from 0% to 100%
  • Step Indicators: Update in real-time (pending → in progress → completed)
  • Logs: Append continuously as new messages arrive
  • Duration Timer: Shows elapsed time (updates every second)

Upon Success

  • Status Badge: Changes to green "SUCCESS"
  • Progress Bar: Full (100%)
  • All Steps: Green checkmarks
  • Success Message: "Deployment completed successfully in DURATION"
  • Environment URL: Becomes clickable link
  • Toast Notification: "Environment deployed successfully" (green)
  • Deploy Button: Changes to yellow "Redeploy" (for next time)

Upon Failure

  • Status Badge: Changes to red "FAILED"
  • Progress Bar: Stops at last completed step percentage
  • Failed Step: Shows red X icon
  • Error Message: Displayed in red banner with details
  • Error Logs: Highlighted in red in logs section
  • Actions Available:
    • Retry button (try deployment again)
    • View Full Logs link (detailed error info)
  • Toast Notification: "Deployment failed - ERROR_MESSAGE" (red)

Common Errors and Solutions

Problem: "Server not found or offline"

Symptoms:

  • Deployment fails at Step 2: Connecting
  • Error: "Failed to connect to server"

Causes:

  • Server is offline or in provisioning state
  • SSH connection blocked by firewall
  • SSH credentials invalid or expired

Solution:

  1. Navigate to SettingsServers
  2. Find the target server
  3. Check Status column:
    • If Offline: Restart server, wait for status to become Running
    • If Provisioning: Wait for provisioning to complete
  4. Click Test Connection button
  5. If test fails:
    • Verify server IP address is correct
    • Check firewall allows SSH (port 22) from OEC.SH
    • Verify SSH credentials are valid
  6. Retry deployment

Problem: "Git repository not found"

Symptoms:

  • Deployment fails at Step 8: Cloning Project Repository
  • Error: "Repository not accessible" or "Authentication failed"

Causes:

  • Git repository URL is incorrect
  • Repository is private and no OAuth token configured
  • Branch doesn't exist
  • Git connection expired

Solution:

  1. Navigate to SettingsGit Connections
  2. Verify Git connection status (should be green "Connected")
  3. If disconnected:
    • Click Reconnect button
    • Re-authorize OEC.SH with GitHub/GitLab/Bitbucket
  4. Navigate to environment → SettingsRepositories tab
  5. Verify Git Branch exists in repository
  6. If branch recently created, refresh Git connection:
    • Go to SettingsGit Connections
    • Click Sync to fetch latest branches
  7. Retry deployment

Problem: "Docker image pull timeout"

Symptoms:

  • Deployment fails at Step 10: Pulling Image
  • Error: "Timeout pulling odoo image"
  • Progress stuck at image download

Causes:

  • Slow internet connection on server
  • Docker Hub rate limiting
  • Network firewall blocking Docker Hub

Solution:

  1. Wait and Retry:
    • Docker Hub can be slow during peak hours
    • Retry deployment after 5-10 minutes
  2. Check Server Network:
    • SSH into server
    • Test: curl https://hub.docker.com
    • If fails: Firewall or network issue
  3. Use Cached Image:
    • If image was previously pulled, deploy should succeed
    • Cached images skip download (completes in less than 5 seconds)
  4. Contact Support:
    • If issue persists, check Docker Hub status
    • May need to configure private registry

Problem: "Database initialization failed"

Symptoms:

  • Deployment fails at Step 14: Initializing Database
  • Error: "Failed to initialize Odoo database"

Causes:

  • PostgreSQL container not healthy
  • Insufficient disk space
  • Custom module has syntax errors
  • Required Python dependencies missing

Solution:

  1. Check PostgreSQL Health:
    • Go to environment detail page
    • Check container logs (PostgreSQL container)
    • Look for errors like "out of disk space"
  2. Free Up Disk Space (if needed):
    • Navigate to SettingsServers
    • Check server disk usage
    • Stop unused environments
    • Or scale up server disk
  3. Check Custom Module Syntax:
    • Review recent Git commits
    • Look for Python syntax errors in __init__.py or __manifest__.py
    • Fix errors and push to Git
    • Retry deployment
  4. Verify Dependencies:
    • Check requirements.txt in your repository
    • Ensure all packages are valid and available on PyPI
    • Test locally: pip install -r requirements.txt
  5. Retry deployment

Problem: "Health check failed"

Symptoms:

  • Deployment fails at Step 16: Health Check
  • Error: "Odoo not responding after 30 seconds"
  • All previous steps completed successfully

Causes:

  • Odoo crashed during startup
  • Port conflict (another service using the port)
  • Insufficient memory (Odoo killed by OOM)
  • Module dependency errors

Solution:

  1. Check Odoo Container Logs:
    • Go to environment detail page → Logs tab
    • Select "Odoo Container" from dropdown
    • Look for errors:
      • MemoryError → Increase RAM allocation
      • ModuleNotFoundError → Missing Python dependency
      • DatabaseError → Database connection issue
  2. Verify Port Availability:
    • SSH into server
    • Check: sudo lsof -i :PORT
    • If port in use: Change environment port in settings
  3. Increase Memory (if OOM):
    • Environment → SettingsServer Resources tab
    • Increase RAM to at least 2 GB (4 GB recommended)
    • Save changes
    • Retry deployment
  4. Check Module Dependencies:
    • Review __manifest__.py in custom modules
    • Ensure all depends modules exist
    • Fix dependencies and push to Git
    • Retry deployment

Redeployment

When to Redeploy

Redeploy is required after these changes:

  • Resource Scaling: CPU, RAM, or disk changes
  • Server Reassignment: Moving to different server
  • Git Branch Change: Switching branches
  • Addon Repository Changes: Adding or removing addon repos
  • Odoo Configuration Updates: Changes to odoo.conf parameters
  • PostgreSQL Optimization: Enabling/disabling PGTune or PgBouncer
  • Custom Domain: DNS or SSL configuration updates
  • Environment Variables: Docker environment variable changes

How to Redeploy

  1. Navigate to environment page
  2. Click Redeploy button (yellow button, replaces "Deploy")
  3. Confirmation Dialog appears:
    • "This will restart the environment. Active sessions will be disconnected."
    • Force Redeploy checkbox (optional):
      • Enabled: Redeploys even if status is already "Running"
      • Disabled: Only redeploys if changes detected
  4. Click Confirm Redeploy
  5. Deployment Progress modal opens (same as initial deployment)

Downtime: 2-5 minutes (containers are recreated)

Note: Database is preserved unless explicitly destroyed.


Auto-Deploy

Enable Auto-Deploy

Automatically redeploy when code is pushed to Git:

  1. Navigate to environment → SettingsRepositories tab
  2. Toggle Auto-Deploy to ON
  3. Click Save Changes

What happens:

  • OEC.SH creates webhook in Git repository
  • On push to git_branch, webhook triggers
  • Deployment starts automatically
  • Notification sent to project members

Recommendation:

  • ✅ Enable: Development environments (fast iteration)
  • ⚠️ Consider: Staging environments (automated testing)
  • ❌ Disable: Production environments (manual control)

Disable Auto-Deploy

  1. Navigate to environment → SettingsRepositories tab
  2. Toggle Auto-Deploy to OFF
  3. Click Save Changes

Manual Deployments Only: Push to Git will not trigger deployment.


API Reference

Deploy Environment Endpoint

POST /api/v1/projects/{project_id}/environments/{env_id}/deploy
Content-Type: application/json
Authorization: Bearer {jwt_token}

Path Parameters:

  • project_id (UUID, required) - The project UUID
  • env_id (UUID, required) - The environment UUID

Query Parameters:

  • force (boolean, optional, default: false) - Force redeploy even if already running
  • force_restore (boolean, optional, default: false) - Force re-restore migration backup (requires confirmation)

Request Body: None

Response (202 Accepted):

{
  "deployment_id": "deployment-uuid",
  "environment_id": "env-uuid",
  "status": "pending",
  "trigger": "manual",
  "started_at": "2024-12-11T10:30:00Z",
  "message": "Deployment started successfully"
}

Error Responses:

StatusError CodeDescription
400DEPLOYMENT_IN_PROGRESSAnother deployment is already running
400NO_SERVER_ASSIGNEDEnvironment doesn't have vm_id set
400SERVER_OFFLINETarget server is not in RUNNING status
403PERMISSION_DENIEDMissing project.environments.deploy permission
404ENVIRONMENT_NOT_FOUNDEnvironment doesn't exist

Get Deployment Progress

GET /api/v1/deployments/{deployment_id}/progress
Authorization: Bearer {jwt_token}

Response (200 OK):

{
  "deployment_id": "uuid",
  "status": "deploying|success|failed",
  "progress_percent": 45,
  "current_step": "pulling_image",
  "steps": [...],
  "started_at": "2024-12-11T10:30:00Z",
  "completed_at": null,
  "duration_seconds": 85.5,
  "error_message": null
}

Full API Documentation: See Deployment API Reference


Related Features


Best Practices

Pre-Deployment Checklist

Before deploying, verify:

  • ✅ Server is in RUNNING status
  • ✅ Server has sufficient capacity (CPU, RAM, disk)
  • ✅ Organization quota available
  • ✅ Git branch exists (if using Git integration)
  • ✅ Custom domain DNS configured (if using custom domain)
  • ✅ No concurrent deployments in progress

Development Workflow

Recommended Flow:

  1. Create environment (staging or development)
  2. Deploy with default settings
  3. Test functionality
  4. Make configuration changes as needed
  5. Redeploy to apply changes
  6. Once stable, clone to production

Production Deployment

Best Practices:

  • Deploy during low-traffic hours (minimize disruption)
  • Test in staging first (validate changes work)
  • Disable auto-deploy (manual control)
  • Monitor deployment logs (catch errors early)
  • Create backup before redeploying (safety net)
  • Notify users of planned downtime

Error Recovery

If deployment fails:

  1. Read Error Message: Understand what went wrong
  2. Check Logs: Review detailed logs for step that failed
  3. Fix Root Cause: Address the underlying issue
  4. Retry Deployment: Use Retry button or redeploy
  5. Contact Support: If issue persists, get help

Deployment Performance

Typical Durations

ScenarioDurationNotes
First Deployment3-5 minutesFull image pull + database init
Redeployment (cached image)2-3 minutesImage cached, database exists
Auto-Deploy (code change)2-3 minutesSame as redeploy
Large Repositories4-6 minutesMultiple repos with many dependencies
Slow Network5-10 minutesSlow Docker image download

Performance Optimization

To speed up deployments:

  • Use Cached Images: Don't change Odoo version frequently
  • Minimize Dependencies: Keep requirements.txt lean
  • Small Repositories: Avoid large binary files in Git
  • Fast Network: Ensure server has good internet connection
  • SSD Storage: Use SSDs for Docker volumes (faster I/O)

Next Steps

After successful deployment:

  1. Access your environment - Click the environment URL
  2. Login to Odoo - Use auto-generated admin credentials
  3. Configure Odoo - Install modules, set up users
  4. Create backup - See Create Manual Backup
  5. Monitor performance - Check Monitoring tab for metrics
  6. View logs - See View Deployment Logs

Last Updated: December 11, 2025 Applies to: OEC.SH v2.0+ Related Sprint: Sprint 2E41 - Documentation System