Back to articles
Technology Insight

Self-Hosting Privacy-First Web Analytics: A Guide to Shynet and PostgreSQL on a VPS

May 26, 2026

Introduction: The Shift Toward Privacy-First Web Analytics

In the modern digital landscape, data privacy has transitioned from a compliance checklist to a core business requirement. Organizations worldwide face stricter regulations like GDPR and CCPA, alongside growing user skepticism toward invasive tracking mechanisms. For years, major corporations relied heavily on third-party tracking tools like Google Analytics. However, these platforms often introduce significant compliance burdens, heavy script overhead, and reliance on tracking cookies that modern browsers are actively phasing out.

The alternative is clear: Privacy-First Web Analytics. By utilizing lightweight, open-source tracking tools that operate entirely without cookies, businesses can collect actionable insights while respecting user data rights. This comprehensive guide walks you through self-hosting Shynet paired with PostgreSQL on a Virtual Private Server (VPS). This setup guarantees complete data ownership, excellent performance, and zero compliance friction.

---

Why Choose Shynet and PostgreSQL?

Among the various privacy-focused analytics tools available today, Shynet stands out for its unique architectural decisions and lightweight footprint. Unlike solutions that merely anonymize cookie data, Shynet is built from the ground up to operate without cookies entirely. It relies on advanced, non-invasive cryptographic hashing to differentiate unique visits without storing persistent identifiers on the user's device.

Key Advantages of Shynet:

  • Zero Cookies: No cookie banners required, eliminating user friction and improving conversion tracking rates.
  • Complete Data Sovereignty: Your data never leaves your VPS. No third-party network has access to your visitors' behavioral patterns.
  • Lightweight Scripting: Shynet's tracking script is microscopic compared to traditional trackers, drastically accelerating page load times and boosting your SEO Core Web Vitals.
  • PostgreSQL Backend: Utilizing PostgreSQL ensures enterprise-grade data integrity, rapid querying capabilities, and seamless vertical scaling as your traffic grows.
---

Prerequisites and Infrastructure Setup

Before launching your privacy-first analytics pipeline, ensure your infrastructure meets the fundamental hardware and software requirements. Shynet is designed to run efficiently via Docker, making deployment uniform across various hosting providers.

Minimum Hardware Requirements:

  • CPU: 1 vCPU (2 vCPUs recommended for traffic exceeding 50,000 daily pageviews).
  • RAM: 1 GB RAM minimum (2 GB or higher recommended to allow comfortable breathing room for the PostgreSQL buffer pool).
  • Storage: 20 GB SSD/NVMe storage (scaled according to data retention policies).
  • OS: Ubuntu 22.04 LTS or Ubuntu 24.04 LTS.

Initial Server Preparation:

Connect to your VPS via SSH and update the system packages to their latest versions to patch potential security vulnerabilities:

sudo apt update && sudo apt upgrade -y

Next, install Docker and Docker Compose, which will serve as the runtime environment for Shynet and your PostgreSQL database instance:

sudo apt install docker.io docker-compose -y
sudo systemctl enable --now docker
---

Step-by-Step Deployment Configuration

We will configure Shynet and PostgreSQL using a unified docker-compose.yml file. This ensures isolated network communication between the web application and the database backend, isolating them from external unauthorized access.

1. Structuring the Project Directory

Create a dedicated directory to store your configuration files and persistent database volumes:

mkdir -p ~/shynet-analytics && cd ~/shynet-analytics

2. Creating the Docker Compose Configuration

Create a file named docker-compose.yml and populate it with the services definition outlined below:

version: '3.8'

services:
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: shynet
      POSTGRES_USER: shynet_admin
      POSTGRES_PASSWORD: YourSecureDatabasePassword Here
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - shynet-net
    restart: unless-stopped

  shynet:
    image: icholy/shynet:latest
    environment:
      - DB_ENGINE=django.db.backends.postgresql
      - DB_NAME=shynet
      - DB_USER=shynet_admin
      - DB_PASSWORD=YourSecureDatabasePassword Here
      - DB_HOST=db
      - DB_PORT=5432
      - SECRET_KEY=GenerateALongRandomStringForSecurity
      - ALLOWED_HOSTS=analytics.yourdomain.com
      - TIME_ZONE=UTC
      - REGISTER_ENDPOINTS_ENABLED=False
    ports:
      - "8080:8080"
    depends_on:
      - db
    networks:
      - shynet-net
    restart: unless-stopped

networks:
  shynet-net:
    driver: bridge

volumes:
  pgdata:
Security Note: Always replace placeholders like YourSecureDatabasePasswordHere and GenerateALongRandomStringForSecurity with robust, cryptographically secure keys before deploying to production environments.
---

Securing the Setup with Reverse Proxy and SSL

Exposing raw backend HTTP ports directly to the internet compromises infrastructure integrity. To secure your data pipelines, configure Nginx as a reverse proxy coupled with Let's Encrypt to enforce strict HTTPS communication.

Installing Nginx and Certbot

Execute the following command to install the web server and the automated SSL management tool:

sudo apt install nginx certbot python3-certbot-nginx -y

Configuring Nginx Blocks

Create an external routing configuration file at /etc/nginx/sites-available/shynet:

server {
    listen 80;
    server_name analytics.yourdomain.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $$host;
        proxy_set_header X-Real-IP $$remote_addr;
        proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $$scheme;
    }
}

Link the configuration file to enable the site, test for configuration syntax validity, and reload Nginx:

sudo ln -s /etc/nginx/sites-available/shynet /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Obtaining an SSL Certificate

Secure the setup using Certbot to automatically fetch and configure an SSL certificate:

sudo certbot --nginx -d analytics.yourdomain.com
---

Initialization and Production Launch

With infrastructure layers and encryption blocks securely configured, you can launch your containers and initialize your administrator credentials.

Execute the following command within your project directory to run the application container stack in detached mode:

docker-compose up -d

Shynet automatically executes internal migrations against your PostgreSQL instance during its initial boot sequence. Once initialized, create your primary administrative account using the following interactive configuration command:

docker-compose exec shynet ./manage.py createsuperuser

Follow the terminal prompts to input your administrative username, email address, and strong account password. You can now access your control center by navigating to [https://analytics.yourdomain.com](https://analytics.yourdomain.com).

---

Integrating Cookie-Free Tracking on Your Websites

Once logged into your dashboard, create a new 'Service' object representing the application or website you wish to track. Shynet will instantly generate a clean tracking snippet to paste into your target website's HTML source code.

Integration Code Structure:

Embed the tracking script inside the element or right before the closing tag of your web pages:


This snippet provides an elegant fallback approach. If a user blocks JavaScript entirely, the

---

Conclusion and Maintenance Strategy

By hosting Shynet on a private PostgreSQL-powered architecture, you achieve an exceptional, privacy-compliant tracking environment without sacrificing core metrics like unique visitor counts, session lengths, referrers, or device breakdowns.

To guarantee long-term stability, implement a consistent backup policy for your PostgreSQL instance. Run automated crontabs utilizing pg_dump to secure database states daily. This configuration guarantees complete ownership of your web performance data, ensuring transparency, system speed, and data privacy compliance.

Self-Hosting Privacy-First Web Analytics: A Guide to Shynet and PostgreSQL on a VPS | DPTCloud