Requirements
Hardware, software, and network requirements for self-hosting oCore.
Before deploying oCore, review these requirements to ensure your infrastructure is ready.
Hardware Requirements
oCore resource usage scales with the number of managed Odoo instances and concurrent users.
Minimum (Small Team)
For teams managing fewer than 10 Odoo instances:
| Resource | Specification |
|---|---|
| CPU | 2 vCPU |
| RAM | 4 GB |
| Storage | 40 GB SSD |
| Network | 100 Mbps |
This configuration is suitable for small agencies or internal teams with modest workloads.
Recommended (Medium Team)
For teams managing up to 50 Odoo instances:
| Resource | Specification |
|---|---|
| CPU | 4 vCPU |
| RAM | 8 GB |
| Storage | 100 GB SSD |
| Network | 500 Mbps |
This is the recommended starting point for most production deployments.
Large (Agency Scale)
For organizations managing 50+ Odoo instances:
| Resource | Specification |
|---|---|
| CPU | 8+ vCPU |
| RAM | 16+ GB |
| Storage | 500 GB SSD (NVMe recommended) |
| Network | 1 Gbps |
At this scale, consider separating the PostgreSQL database onto its own server. See the Scaling guide for details.
Software Requirements
Docker
oCore runs entirely in Docker containers. You need:
- Docker Engine 24.0 or later
- Docker Compose v2 (included with Docker Desktop, or install the
docker-compose-plugin)
Verify your installation:
docker --version
# Docker version 24.0+
docker compose version
# Docker Compose version v2.x.xOperating System
oCore is tested on:
- Ubuntu 22.04 LTS, 24.04 LTS (recommended)
- Debian 12 (Bookworm)
- Rocky Linux 9
- Amazon Linux 2023
Any Linux distribution with Docker 24+ support will work. macOS and Windows via Docker Desktop are suitable for development but not recommended for production.
PostgreSQL
The included Docker Compose file runs PostgreSQL 16 Alpine. If you prefer to use an external database:
- PostgreSQL 15 or 16
- Extensions:
uuid-ossp(typically included by default) - SSL connections recommended for external databases
Network Requirements
Ports
The following ports must be accessible:
| Port | Protocol | Service | Purpose |
|---|---|---|---|
| 80 | TCP | Reverse proxy | HTTP (redirect to HTTPS) |
| 443 | TCP | Reverse proxy | HTTPS (dashboard and API) |
| 2222 | TCP | Backend | SSH gateway for Odoo instance access |
The backend API server listens on port 8080 internally but should not be exposed directly. Route traffic through a reverse proxy instead.
DNS
Configure DNS records pointing to your server's public IP:
| Record Type | Name | Value |
|---|---|---|
| A | ocore.example.com | Your server IP |
| A (optional) | docs.ocore.example.com | Your server IP |
If using Caddy or Certbot for TLS certificates, DNS must resolve before starting the stack.
Firewall
Example firewall configuration using ufw:
# Allow SSH (management)
sudo ufw allow 22/tcp
# Allow HTTP/HTTPS (reverse proxy)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Allow SSH gateway (Odoo instance access)
sudo ufw allow 2222/tcp
# Enable firewall
sudo ufw enableEnvironment Variables
oCore requires several environment variables for production operation. At minimum:
| Variable | Required | Description |
|---|---|---|
DATABASE_URL | Yes | PostgreSQL connection string |
JWT_SECRET | Yes | Secret key for JWT tokens (min 32 characters) |
APP_URL | Yes | Public URL of your oCore dashboard |
SMTP_HOST | Yes | Mail server for transactional emails |
SSH_ENCRYPTION_KEY | Production | Encryption key for stored SSH credentials (min 32 chars) |
See the Environment Variables reference for the complete list.
Pre-deployment Checklist
Before proceeding to the Docker Compose setup:
- Server meets minimum hardware requirements
- Docker 24+ and Docker Compose v2 installed
- DNS records configured and propagated
- Firewall rules applied (ports 80, 443, 2222)
- Generated strong secrets for
JWT_SECRETandSSH_ENCRYPTION_KEY:
# Generate a 64-character random secret
openssl rand -base64 48- SMTP credentials ready for transactional email delivery