Back to articles
Technology Insight

Scaling MongoDB Apps with Postgres: A Guide to Deploying FerretDB on a VPS

May 30, 2026

Introduction: The Open-Source Database Dilemma

In the modern enterprise landscape, flexibility and data sovereignty are paramount. For years, document databases like MongoDB have been the go-to choice for rapid application development due to their flexible JSON-like schema and intuitive query language. However, changes in software licensing and the need for rigorous data consistency have forced engineering teams to rethink their backend infrastructure.

Enter FerretDB. FerretDB serves as an open-source, drop-in replacement for MongoDB, translating MongoDB wire protocol queries into SQL. By routing these queries directly to PostgreSQL, enterprises can retain their existing MongoDB application code while enjoying the battle-tested reliability, ACID compliance, and robust ecosystem of Postgres. In this comprehensive guide, we will explore the architectural benefits of FerretDB and provide a step-by-step blueprint for deploying this solution on a Virtual Private Server (VPS).

Why Combine MongoDB Syntax with PostgreSQL Storage?

Before diving into the technical deployment, it is essential to understand the strategic business value of this hybrid approach. Organizations typically face a tradeoff between developer velocity (MongoDB) and operational stability (PostgreSQL). FerretDB eliminates this compromise through several distinct advantages:

  • Licensing Peace of Mind: MongoDB's transition to the Server Side Public License (SSPL) created compliance challenges for many enterprises. FerretDB is built on the Apache 2.0 license, ensuring true open-source freedom.
  • Infrastructure Consolidation: Instead of managing separate database clusters for relational and non-relational data, operations teams can standardize on PostgreSQL as a single unified storage engine.
  • Data Integrity and Ecosystem: By backing your document data with Postgres, you gain access to advanced indexing, reliable backup tools (like pgBackRest), and powerful analytical extensions like PostGIS.
Choosing FerretDB means you do not have to choose between developer productivity and operational excellence. You get the familiar MongoDB API backed by the gold standard of relational databases.

Prerequisites for VPS Deployment

To successfully deploy FerretDB on a Virtual Private Server, ensure your infrastructure meets the following minimum requirements:

  1. A Reliable VPS: At least 2 vCPUs, 4GB RAM, and SSD storage (Ubuntu 24.04 LTS or Debian 12 recommended).
  2. A Fully Qualified Domain Name (FQDN): Configured with A/AAAA records pointing to your VPS IP address for secure SSL communication.
  3. Docker Ecosystem: Docker and Docker Compose installed on the host machine to streamline container management.

Step-by-Step Architecture Guide

Step 1: System Preparation and Security Hardening

Before launching any database services, securing the host VPS is critical. Begin by updating the system packages and configuring a basic firewall configuration using Uncomplicated Firewall (UFW).

sudo apt update && sudo apt upgrade -y
sudo ufw allow ssh
sudo ufw allow 27017/tcp
sudo ufw enable

Note: Port 27017 is the default MongoDB communication port, which FerretDB will use to listen for incoming application connections.

Step 2: Designing the Docker Compose Stack

The most efficient way to run FerretDB along with its PostgreSQL backend is via Docker Compose. Create a dedicated directory and define a docker-compose.yml file that orchestrates the two services seamlessly.

version: '3.8'

services:
  postgres:
    image: postgres:16-alpine
    container_name: ferret_postgres
    environment:
      POSTGRES_USER: ferret_user
      POSTGRES_PASSWORD: SecureSuperPassword2026
      POSTGRES_DB: ferret_database
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - database_net
    restart: always

  ferretdb:
    image: ghcr.io/ferretdb/ferretdb:latest
    container_name: ferretdb_core
    ports:
      - "27017:27017"
    environment:
      FERRETDB_POSTGRESQL_URL: "postgres://ferret_user:SecureSuperPassword2026@postgres:5432/ferret_database?sslmode=disable"
    networks:
      - database_net
    depends_on:
      - postgres
    restart: always

networks:
  database_net:
    driver: bridge

volumes:
  pgdata:
    driver: local

This configuration ensures that your PostgreSQL data persists within a named Docker volume (pgdata) even if the containers are restarted or upgraded.

Step 3: Initializing and Validating the Deployment

With the configuration file in place, initialize your infrastructure stack by executing the following command in your terminal:

docker compose up -d

To verify that FerretDB is running successfully and communicating with the PostgreSQL backend, inspect the container logs:

docker compose logs ferretdbYou should see log entries indicating that the FerretDB proxy proxy is listening on 0.0.0.0:27017 and has successfully established a connection pool to the underlying Postgres instance.

Connecting Your Applications to FerretDB

Because FerretDB perfectly mimics the MongoDB wire protocol, migrating or connecting your existing applications requires zero changes to your application logic. You simply need to adjust your standard MongoDB connection string format.

For instance, a standard Node.js application utilizing Mongoose or the official MongoDB driver would connect using the following URI syntax:

mongodb://ferret_user:SecureSuperPassword2026@your-vps-ip:27017/ferret_database?authMechanism=PLAIN

The inclusion of authMechanism=PLAIN is crucial, as it tells the client driver to pass the authentication credentials directly through to FerretDB for validation against the Postgres backend schema.

Production Considerations and Best Practices

While deploying FerretDB on a VPS is straightforward, running it in a high-availability production environment requires careful attention to optimization and maintenance:

  • Enable SSL/TLS Encryption: Never pass database traffic over the public internet in plain text. Implement an Nginx reverse proxy or utilize Let's Encrypt certificates to wrap your MongoDB traffic in secure TLS wrappers.
  • Automated Backups: Since the source of truth is PostgreSQL, standard document-store backup strategies are replaced with highly reliable relational tools. Schedule regular cron jobs using pg_dump to secure your transactional states.
  • Resource Allocation: Monitor the memory consumption of your VPS. PostgreSQL relies heavily on shared buffers, while FerretDB requires CPU overhead to translate queries on the fly. Ensure a performance monitoring agent like Prometheus is active.

Conclusion: The Future of Document Databases

Deploying FerretDB on a VPS represents a paradigm shift for modern infrastructure planning. By abstracting the storage layer away from proprietary or restrictive ecosystems and anchoring it onto PostgreSQL, businesses achieve a unique competitive edge. You retain the rapid, iterative developer experience of MongoDB while building upon a database foundation designed to last for decades. Assess your current application stack today, and consider transitioning to FerretDB for a more resilient, open-source tomorrow.

Scaling MongoDB Apps with Postgres: A Guide to Deploying FerretDB on a VPS | DPTCloud