Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PC×
Skip to content
World desk11 min

How to Self-Host OroCRM on a Linux VPS (Current Requirements and Setup)

A practical, release-aware guide to self-hosting OroCRM on a Linux VPS, covering sizing, supported packages, Docker Compose, native Nginx/PHP-FPM, PostgreSQL, HTTPS, workers, backups and troubleshooting.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

You can self-host OroCRM on a Linux VPS with either the release’s Docker Compose stack or a native Nginx/Apache and PHP-FPM deployment. Start with a supported Linux distribution, SSD storage, at least 2 CPU cores and 2 GB RAM for a small single-server installation, then size upward for users, imports, integrations, and Enterprise services. Use the exact PHP, PostgreSQL, Node.js and PNPM versions required by your OroCRM release; put DNS and HTTPS in place before making the CRM public; and run workers under Supervisor or an equivalent process manager.

What a production OroCRM VPS must provide

Oro’s current system requirements describe a typical single-server starting point of 2 CPU cores, 2 GB RAM and a fast disk, preferably SSD. That is a minimum starting point, not a universal production size. Active users, data volume, imports, integrations, background jobs and search services all increase consumption. A busy installation may need more memory and separate database, search or queue hosts.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Area Current requirement or recommendation Planning note
Operating system Linux distributions such as Red Hat, Ubuntu, Debian or Oracle Linux Use the distribution and package versions supported by the exact Oro release.
CPU and memory Minimum typical setup: 2 CPU cores and 2 GB RAM Add headroom for users, integrations, imports and Enterprise services.
Storage Fast disk; SSD recommended Leave room for PostgreSQL growth, uploaded files, logs, backups and temporary build files.
Web server Current stable or mainline Nginx, or Apache Terminate TLS at the web server or an upstream proxy.
PHP PHP 8.5 or newer; CLI and web server must use the same version Set memory_limit to at least 1 GB and configure date.timezone.
Database PostgreSQL 17.6 or newer Enterprise documentation also lists Enterprise PostgreSQL/EnterpriseDB 18.3 or newer for Enterprise edition.
JavaScript tooling Node.js 24.11.0 or newer but below 25; PNPM 10.7.0 or newer Pin these versions during asset builds and upgrades.
Process control Supervisor or another process controller Use it for workers and scheduled/background processes.

PHP must provide ctype, curl, fileinfo, gd, intl, json, mbstring, sodium, openssl, pgsql, pcre, simplexml, tokenizer, xml, zip, imap, soap, bcmath and ldap. MongoDB 2.0 or newer is optional when you use OroGridFSConfigBundle. Redis 8.4 or newer can improve caching; Tidy supports HTML-to-text conversion; pngquant and jpegoptim reduce stored image sizes; and Gotenberg 8.5.x or newer supports PDF generation.

Choose the deployment model before installing

Docker Compose

The Compose workflow gives you release-matched service definitions and a repeatable way to run PostgreSQL and, depending on the edition, Elasticsearch, RabbitMQ, Redis and MailCatcher. It is usually the quickest route for a new administrator because application and supporting-service versions are described together. Always use the Compose file shipped with the target Oro release rather than copying one from an older article.

Oro’s Docker/Symfony instructions use the Symfony Local Web Server for convenience. That server is explicitly not intended for production. In production, place Nginx or Apache in front of PHP-FPM, use the application’s public document root, and configure a real hostname and certificate.

Native Nginx or Apache with PHP-FPM

A native deployment gives direct control over system packages, service accounts, filesystem permissions, TLS, Supervisor and operating-system monitoring. It also makes patching and version compatibility your responsibility. Older Community Edition instructions show the general shape of this method but contain obsolete CentOS, PHP and database versions; treat them as historical concepts only and substitute the current requirements above.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Decision factor Docker Compose Native services
Reproducibility High when the release’s Compose file is kept with the deployment. Depends on your package and configuration management.
Isolation Each service has a defined container and network boundary. Services share the VPS operating system unless separately isolated.
Upgrade control Pin image tags and review the release’s migration notes. Pin OS packages and PHP extensions individually.
Backups Back up database volumes and uploaded-file volumes, not just container definitions. Back up PostgreSQL and application files directly.
Operational familiarity Best if your team already operates Compose. Best if you already manage Nginx, PHP-FPM, PostgreSQL and Supervisor on Linux.

Prepare the VPS securely

  1. Create a non-root administrator. Add a named account with sudo access. Reserve root for emergency recovery and initial provider tasks.
  2. Apply operating-system security updates. Reboot when the kernel or core libraries require it, then confirm the expected distribution release.
  3. Configure a restrictive firewall. Allow SSH only from trusted networks where practical, and allow HTTP (80) and HTTPS (443) for the public web service. Do not expose PostgreSQL, RabbitMQ, Elasticsearch or Redis directly to the internet.
  4. Choose SSD-backed storage. Monitor free space as uploaded documents, logs, database tables and backups grow.
  5. Set time and hostname correctly. Consistent system time is important for logs, certificates, scheduled jobs and session behavior.
  6. Create separate identities. Use one administrative account for installation and updates and a least-privilege runtime account for the web and worker processes. Do not run the application as root.

Record the target Oro release and edition before installing any package. Requirements can change between releases, so do not mix a current application with package pins copied from the retired Oro 4.2 documentation.

Install the exact runtime versions

PHP and extensions

Install PHP 8.5 or the newer version explicitly supported by your release. Verify both interpreters independently:

php -v
php --ini
php -m

The command-line PHP used by Composer and Oro console commands must match the PHP-FPM version serving web requests. Check the FPM pool and web-server configuration rather than assuming the distribution’s default PHP is correct.

Set these values in the active PHP configuration:

  • memory_limit = 1G or higher
  • date.timezone to the region used by your organization
  • Disable the obsolete detect_unicode setting where it still exists in a configuration template.

Confirm every required extension is loaded in both CLI and FPM contexts. A frequent failure is installing an extension for one PHP version while the web server uses another.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

PostgreSQL

Use PostgreSQL 17.6 or newer. For Enterprise edition, the current requirements also list Enterprise PostgreSQL/EnterpriseDB 18.3 or newer. Create a dedicated database and login, restrict database listening and firewall access to the application network, and store credentials outside publicly readable application files.

Node.js and PNPM

Asset compilation requires Node.js 24.11.0 or newer but less than 25, plus PNPM 10.7.0 or newer. Pin the versions with your normal version-management method, then verify:

node --version
pnpm --version

Do not let an operating-system upgrade silently move Node.js to a major version outside Oro’s supported range.

Supervisor and optional components

Install Supervisor or an equivalent controller before enabling workers. Configure automatic restart, a dedicated runtime user, log destinations and a shutdown policy. Community installations commonly use PostgreSQL and MailCatcher in the documented Compose setup. Enterprise deployments can add Elasticsearch, RabbitMQ and Redis; Redis is also an optional cache in the general requirements. Plan memory and disk for every service you enable.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Install OroCRM with the release’s Docker Compose workflow

Obtain the application source and Compose files for the exact release and edition from Oro’s distribution channel. Keep the files under a controlled directory and protect environment files containing database, mail and application secrets.

  1. Review the Compose definition. Identify application, database, search, queue, cache and mail services. Confirm published ports; bind internal services to the private Docker network rather than a public interface.
  2. Start the services.
docker compose up -d
  1. Install PHP dependencies using the Symfony helper used by the guide.
symfony composer install -n
  1. Run the Oro installer. The documented command uses sample data and a local URL. Replace every example value, especially the password and URL, before execution:
export ORO_ADMIN_PASSWORD='use-a-long-random-secret'
symfony console oro:install -vvv 
  --sample-data=n 
  --application-url=https://crm.example.com 
  --user-name=admin 
  [email protected] 
  --user-firstname=CRM 
  --user-lastname=Administrator 
  --user-password="$ORO_ADMIN_PASSWORD" 
  --organization-name=Example 
  --timeout=0 
  --env=prod -n

The example intentionally disables sample data. Choose --sample-data=y only for a non-production evaluation. Remove the exported secret from your shell history and environment after installation, and create a normal administrator account with a unique password.

  1. Build and deploy assets. Use the release’s documented PNPM and Node.js commands, then check that compiled CSS and JavaScript are readable by the runtime account.
  2. Replace the development listener. Do not publish Symfony Local Web Server. Configure Nginx or Apache and PHP-FPM as the only public application path.

Build a native Nginx/PHP-FPM installation

  1. Install the supported Linux packages. Add the exact PHP version, all required extensions, PostgreSQL client tools, Nginx or Apache, Supervisor, Node.js and PNPM.
  2. Create application directories. Keep releases, writable cache, logs, uploaded files and secrets in deliberate locations. The web server should expose only Oro’s public document root, never the project’s configuration or vendor directories.
  3. Configure PHP-FPM. Select the supported PHP socket or port, set a suitable worker count for available memory, and apply the 1 GB-or-more memory limit and timezone. Ensure the pool runs as the runtime user.
  4. Configure Nginx or Apache routing. Forward PHP requests to FPM, serve static assets directly, preserve the original HTTPS scheme behind any proxy, and deny access to hidden files and configuration artifacts.
  5. Install dependencies and run Oro’s console installer. Use the same release-specific command and database credentials as the Compose deployment, but point the application URL at the real hostname.
  6. Register workers with Supervisor. Use separate programs where the release requires them, set autorestart behavior, and verify that the runtime account can write only where Oro needs it.

Do not copy an old Apache virtual host or PHP configuration unchanged. The legacy guide’s package versions are not a safe baseline for a current release.

Configure DNS and HTTPS before public access

  1. Create an A record for the CRM hostname pointing to the VPS public IPv4 address. Add an AAAA record only when IPv6 is configured and firewalled correctly.
  2. Wait for DNS propagation and verify that the hostname resolves to the intended server from outside your VPS network.
  3. Install a certificate from a trusted certificate authority and configure the web server for TLS.
  4. Redirect HTTP to HTTPS and set the application URL to the HTTPS hostname used by customers and integrations.
  5. Confirm that generated links, login redirects, cookies and webhook endpoints all use HTTPS.

Oro’s Community Edition environment guidance strongly recommends HTTPS for production public websites and requires DNS pointing to the server for remote access. Do not expose the installation using an IP address or a self-signed certificate for normal users.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Configure background jobs and edition-specific services

Community edition footprint

A minimal Community setup generally consists of the Oro application, PostgreSQL and a mail-capture service such as MailCatcher for development or testing. For production mail delivery, configure the supported SMTP service for your organization rather than leaving a development catcher exposed.

Enterprise edition footprint

Enterprise deployments may require Elasticsearch for search, RabbitMQ for messaging and queues, Redis for cache or session-related services, and MailCatcher in the supplied Compose environment. These components can dominate RAM and disk usage on a small VPS. If the 2 GB baseline cannot keep the database, PHP-FPM, workers and search service healthy, move services to larger or separate hosts instead of tuning below the documented requirements.

Worker verification

  • Check Supervisor status after every reboot.
  • Run a controlled background task and confirm completion in Oro’s logs.
  • Watch for repeated restarts, memory exhaustion and growing queue depth.
  • Keep worker logs separate from web logs so a noisy integration cannot fill the root filesystem unnoticed.

File ownership, secrets and routine operations

The web and worker processes should run as the dedicated runtime user. Installation, dependency updates and migrations should be executed by the separate administrative account with narrowly scoped sudo rights. This separation limits the damage from a compromised web process and prevents update artifacts from becoming runtime-writable.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Store database passwords, SMTP credentials, encryption keys and API tokens in protected environment or secret-management facilities.
  • Use restrictive permissions on application configuration and uploaded files.
  • Rotate credentials when staff or automation changes.
  • Keep operating-system, PHP, database, container and Oro release updates on a documented maintenance schedule.
  • Review release-specific migration and licensing requirements before upgrading; public pages do not establish a universal entitlement model for every edition.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Backups and recovery you can actually test

Back up at least two independent data classes: PostgreSQL and Oro’s uploaded/application files. In Docker, database and file volumes need explicit backup jobs; recreating containers does not restore data. In a native installation, include the PostgreSQL cluster or logical dumps, uploaded documents, configuration secrets and any search or queue data that your recovery plan requires.

  1. Take encrypted, versioned backups on a schedule matched to acceptable data loss.
  2. Keep a copy outside the VPS so disk failure or account compromise cannot erase every copy.
  3. Record the Oro release, PHP version, database version and deployment files with each backup set.
  4. Restore to an isolated test host, apply the documented connection settings, and log in with a recovery administrator.
  5. Measure how long the restore takes and correct missing files, permissions or extensions before a real incident.

Troubleshooting the common first-install failures

The installer reports missing PHP extensions

Compare php -m with the FPM module list and confirm that the extension package belongs to the active PHP version. Restart PHP-FPM after changing its configuration, then retest through the web server.

CLI commands work but the browser fails

This usually indicates different PHP versions, FPM permissions, an incorrect document root or a web server rule that does not pass the HTTPS scheme. Check the FPM socket, service user, error log and the hostname used in --application-url.

Assets are missing or unstyled

Verify Node.js and PNPM versions, rerun the release’s asset build, and ensure the generated public files are readable by the runtime account. A reverse proxy or CDN must point to the same public asset path as the origin.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Workers stop after reboot

Inspect Supervisor’s program status and logs, confirm that the service is enabled at boot, and check that the runtime user can read application configuration and write required cache or log directories.

Search, queues or cache fail in Enterprise

Check service health, network names and credentials inside the Compose network or private VPS network. Confirm that Elasticsearch, RabbitMQ and Redis versions match the release’s Compose definition and that the host has enough memory for all enabled services.

Users see redirects to an IP address or HTTP

Correct DNS, set the canonical HTTPS application URL, configure the proxy’s forwarded-protocol headers, and enforce the HTTP-to-HTTPS redirect at the edge web server.

Production readiness checklist

  • Supported Linux distribution selected for the exact Oro release.
  • SSD-backed VPS sized above the 2-core/2-GB starting point when workload or Enterprise services require it.
  • Nginx or Apache configured with the public document root and PHP-FPM on the supported PHP version.
  • All required PHP extensions installed in CLI and FPM; memory_limit at least 1 GB; timezone set.
  • PostgreSQL 17.6 or newer, or the Enterprise database version documented for your edition.
  • Node.js 24.11.0–24.x and PNPM 10.7.0 or newer pinned for asset builds.
  • Supervisor or an equivalent controller managing workers and scheduled tasks.
  • Enterprise search, queue and cache services deployed only when required and sized accordingly.
  • DNS A/AAAA records resolve correctly; trusted HTTPS certificate installed; HTTP redirects to HTTPS.
  • Non-root administrator and separate runtime account in use.
  • Secrets protected, firewall restrictive, logs rotated and disk/RAM monitored.
  • Encrypted PostgreSQL and file backups stored off-host and restored successfully in a test.

Frequently Asked Questions

Is 2 GB of RAM enough for every OroCRM installation?

No. Oro documents 2 GB as a minimum typical single-server starting point. Add memory for active users, imports, integrations and Enterprise search, queue and cache services.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can I expose Symfony Local Web Server to customers?

No. Oro’s Docker/Symfony guide states that this server is not intended for production. Use Nginx or Apache in front of PHP-FPM with HTTPS.

Should PostgreSQL, Elasticsearch and RabbitMQ share one VPS?

They can on a small evaluation system when resources allow, but Enterprise services may require a larger VPS or separate hosts. Base the decision on measured memory, CPU, disk and queue/search load.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.