bolt Valebyte VPS from $4/mo — NVMe, 60s deploy.

Get a VPS arrow_forward

Windmill on VPS: Installation, Configuration, and Maintenance

calendar_month June 17, 2026 schedule 17 min read visibility 162 views
person
Valebyte Team
Windmill on VPS: Installation, Configuration, and Maintenance

Windmill is a powerful open-source platform for rapidly building internal tools, automating workflows, executing scripts in various languages (Python, TypeScript, Go, Bash), and managing APIs. It can be efficiently installed and configured on a VPS for complete flexibility, scalability, and data control. This approach allows full ownership of the infrastructure, adapting it to unique project needs, and ensuring a high level of security unattainable with cloud-based SaaS solutions.

What is Windmill and Why Use It on a VPS?

Windmill is a versatile platform designed to simplify and accelerate the development of internal applications, automate routine tasks, and create complex workflows. At its core, Windmill embraces the concept of "scripts as services," allowing code written in Python, TypeScript, Go, or Bash to be transformed into ready-to-use API endpoints, web interfaces, or automation components.

Key Windmill features include:

  • Script Execution: Support for multiple programming languages with the ability to run on a schedule, by event, or via API.
  • Workflow Creation: A visual builder for constructing complex chains of operations, including conditional logic, parallel execution, and error handling.
  • UI Generation: Automatic creation of user interfaces for scripts and workflows, allowing non-technical users to easily interact with the created tools.
  • Resource Management: Integration with databases, third-party APIs, and other services through configurable resources.
  • Access Control: A flexible system of roles and permissions for managing access to scripts, workflows, and data.
  • Monitoring and Logging: Detailed tracking of task execution and log collection.

Choosing Windmill on a VPS for deploying this platform is driven by several significant advantages, especially when dealing with commercial projects or sensitive data:

  • Full Data Control: All your data remains on your server, which is critical for compliance with GDPR, HIPAA, and other regulatory requirements. This is particularly relevant for companies requiring maximum confidentiality and security.
  • Flexibility and Customization: The ability to fine-tune the operating system, network parameters, and use any third-party tools that may be required for integration with Windmill. You are not limited by pre-installed packages or cloud provider configurations.
  • Cost-Effectiveness: In the long run, Windmill self-hosted on your own VPS often proves cheaper than subscribing to similar SaaS solutions, especially as usage grows. You only pay for the resources you use, without hidden fees for the number of users, tasks, or integrations.
  • Performance: Dedicated VPS resources guarantee predictable performance, independent of "noisy neighbors" on the server. You can scale VPS resources as the load grows, ensuring stable Windmill operation.
  • Security: You have full control over server security, can configure firewalls, intrusion detection systems, use your own certificates, and implement corporate security policies.

Thus, installing Windmill on a VPS is a strategic decision for companies aiming for independence, security, and cost optimization when creating powerful internal tools and automation.

Examples of Windmill Usage in Real-World Scenarios

Windmill can significantly simplify many tasks in various areas:

  • IT Operations: Automation of deployment, monitoring, user management, incident handling. For example, a script for automatically resetting a user's password in Active Directory or creating a virtual machine on demand.
  • Marketing: Automation of social media content publishing, data collection from analytics systems, report generation, email campaign management.
  • Sales: Updating CRM systems, generating commercial proposals, integration with e-commerce systems.
  • HR: Automation of new employee onboarding, leave management, feedback collection.
  • Development: Running tests, deploying microservices, dependency management, automatic documentation generation.

Thanks to its flexibility and support for various languages, Windmill becomes a central hub for automating virtually any business aspect that requires programmable logic and interaction with external systems.

System Requirements for Windmill on VPS: Which Config to Choose?

Choosing the right VPS configuration is critical for stable and efficient Windmill operation. While Windmill is lightweight enough for basic tasks, its requirements can significantly increase depending on the volume and complexity of scripts executed, the number of concurrent users, and the intensity of workflows.

Basic Requirements and Recommendations

For a minimal Windmill installation, suitable for testing or a small number of concurrent tasks, the following resources are required:

  • Operating System: Ubuntu 20.04+, Debian 11+, CentOS 7+, or any other modern 64-bit Linux system with Docker support.
  • Processor (CPU): 1-2 vCPU. This will be sufficient for most tasks.
  • Random Access Memory (RAM): 2 GB. This is the minimum for Windmill Docker containers and PostgreSQL to operate.
  • Disk Space: 20-30 GB NVMe/SSD. Windmill stores its data, logs, and script-related files. An NVMe or SSD disk will significantly improve database performance and I/O operations.
  • Network Connection: Stable internet connection.

However, if you plan to use Windmill for more serious tasks, such as:

  • Running resource-intensive scripts (e.g., processing large datasets, machine learning).
  • Simultaneous execution of dozens or hundreds of tasks.
  • Using Windmill with a large team (10+ users).
  • Active use of workflows with many steps.

In these cases, the recommended system requirements significantly increase:

  • Processor (CPU): 4-8 vCPU or more. The more parallel tasks, the more cores will be needed.
  • Random Access Memory (RAM): 8-16 GB or more. Especially important for scripts that load data into memory.
  • Disk Space: 100-200 GB NVMe/SSD. For storing large volumes of logs, data, and cache.
  • Network Bandwidth: 1 Gbps.

It's important to remember that Windmill uses PostgreSQL as its database, and the performance of the disk subsystem (especially NVMe) will significantly impact the overall speed of the platform, particularly during frequent write operations or metadata reads.

VPS Configuration Comparison Table for Windmill

When choosing a VPS for Windmill on Valebyte.com, consider the following approximate configurations:

Usage Scenario vCPU RAM Disk (NVMe/SSD) Bandwidth Estimated Cost ($/month) Notes
Testing / Development 2 2 GB 50 GB NVMe 500 Mbps $5 - $10 Suitable for one to two users, non-intensive tasks.
Small Team / Infrequent Tasks 4 4 GB 100 GB NVMe 1 Gbps $15 - $25 Optimal for a team of up to 5 people, moderate load.
Medium Load / Active Use 6-8 8-16 GB 200 GB NVMe 1 Gbps $30 - $60 For teams of up to 15 people, regular resource-intensive scripts.
High Load / Production 8+ 16-32 GB 400 GB NVMe 1 Gbps+ $70+ For large teams, critical workflows, high parallelism.

On Valebyte.com, you will find VPS plans ideally suited for any of these scenarios, with fast NVMe storage and stable communication channels, ensuring optimal performance for your Windmill VPS installation.

Looking for a reliable server for your projects?

VPS from $10/month and dedicated servers from $9/month with NVMe, DDoS protection, and 24/7 support.

View Offers →

Step-by-Step Windmill Installation on VPS Using Docker/Compose

The simplest and recommended way to install Windmill on your own server is by using Docker and Docker Compose. This approach ensures application isolation, simplifies deployment and dependency management, and facilitates future updates. We will show you how to deploy Windmill Docker on your VPS.

Preparing the VPS for Installation

Before proceeding with the Windmill installation, you need to perform a few preliminary steps on your VPS. For this example, we will use Ubuntu 22.04 LTS, but the steps are similar for other Debian-like systems.

  1. System Update:

    Always start by updating the package manager and installed packages.

    sudo apt update && sudo apt upgrade -y
  2. Create a Non-Root User (Recommended):

    Operating as root is insecure. Create a new user and add them to the sudo group.

    sudo adduser windmill
    sudo usermod -aG sudo windmill
    su - windmill

    You are now logged in as the `windmill` user. All subsequent commands requiring root privileges will be executed with `sudo`.

  3. Firewall Configuration (UFW):

    For security, you need to configure a firewall. Allow SSH, HTTP, and HTTPS.

    sudo ufw allow OpenSSH
    sudo ufw allow http
    sudo ufw allow https
    sudo ufw enable

    Confirm UFW activation if prompted by the system.

Installing Docker and Docker Compose

Windmill operates as a set of Docker containers, making Docker and Docker Compose essential components.

  1. Install Docker Engine:

    Install Docker by following the official documentation. This ensures you get the most up-to-date version.

    # Remove old Docker versions (if any)
    for pkg in docker.io docker-doc docker-compose docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras; do sudo apt remove $pkg; done
    
    # Install dependencies
    sudo apt update
    sudo apt install ca-certificates curl gnupg lsb-release -y
    
    # Add Docker GPG key
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    
    # Add Docker repository
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    # Install Docker Engine
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
  2. Add User to Docker Group:

    To avoid using `sudo` every time you work with Docker, add your user to the `docker` group.

    sudo usermod -aG docker $USER
    newgrp docker

    Logging out and back in, or running `newgrp docker`, will activate the changes.

  3. Verify Docker Installation:

    Run a test container to ensure Docker is working correctly.

    docker run hello-world

    You should see the message "Hello from Docker!".

Deploying Windmill via Docker Compose

Now that Docker is installed, you can deploy Windmill on the server. Windmill provides a ready-to-use `docker-compose.yaml` file for easy deployment.

  1. Create a Directory for Windmill:
    mkdir ~/windmill
    cd ~/windmill
  2. Download the docker-compose.yaml file:

    Download the official Docker Compose file for Windmill. The latest version can always be found in the official Windmill GitHub repository.

    curl -L https://raw.githubusercontent.com/windmill-labs/windmill/main/docker-compose.yaml -o docker-compose.yaml

    Open the `docker-compose.yaml` file in a text editor (e.g., `nano` or `vim`) to review and potentially make changes. You can configure ports, volume paths, and environment variables.

    nano docker-compose.yaml

    Pay special attention to environment variables for PostgreSQL (passwords) and ports if they conflict with other services on your VPS. For example, change database passwords:

    services:
      app:
        # ...
        environment:
          # ...
          - DATABASE_URL=postgresql://windmill:YOUR_STRONG_PASSWORD@db:5432/windmill
          # ...
      db:
        # ...
        environment:
          POSTGRES_PASSWORD: YOUR_STRONG_PASSWORD
          # ...

    Important: Replace `YOUR_STRONG_PASSWORD` with a strong, unique password.

  3. Start Windmill:

    After saving changes to `docker-compose.yaml`, start the Windmill containers.

    docker compose up -d

    The `-d` option runs containers in detached mode (in the background).

  4. Check Container Status:

    Ensure all containers are running and operational.

    docker compose ps

    You should see `Up` status for all services.

  5. Access Windmill:

    By default, Windmill is accessible on port `8000` of your VPS. Open a web browser and navigate to `http://YOUR_VPS_IP_ADDRESS:8000`.

    Upon first access, you will be prompted to create an administrator account. Fill out the form using a strong password. After that, you will enter the Windmill control panel.

Congratulations! You have successfully completed the Windmill installation on your VPS.

rocket_launch Quick pick

Need a dedicated server?

Compare prices from top providers. Configure and order in minutes.

Browse dedicated servers arrow_forward

Configuring Reverse Proxy (Nginx/Caddy) and HTTPS for Windmill

Direct access to Windmill on port `8000` is not a secure or convenient solution for a production environment. To ensure security, use a domain name, and encrypt traffic (HTTPS), you need to configure a reverse proxy and issue an SSL certificate. In this section, we will cover Nginx and Caddy configuration.

Configuring Nginx as a Reverse Proxy with Let's Encrypt

Nginx is a popular and high-performance web server that excels as a reverse proxy.

  1. Install Nginx:
    sudo apt install nginx -y
  2. Configure Domain Name:

    Ensure your domain (e.g., `windmill.yourdomain.com`) points to your VPS's IP address in DNS records.

  3. Create Nginx Configuration File:

    Create a new configuration file for your domain.

    sudo nano /etc/nginx/sites-available/windmill.yourdomain.com

    Insert the following configuration, replacing `windmill.yourdomain.com` with your actual domain:

    server {
        listen 80;
        server_name windmill.yourdomain.com;
    
        location / {
            proxy_pass http://localhost:8000; # Port on which Windmill listens inside the container
            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;
            proxy_redirect off;
        }
    }

    Save and close the file.

  4. Activate Configuration:

    Create a symbolic link to the configuration file in `sites-enabled` and test the Nginx syntax.

    sudo ln -s /etc/nginx/sites-available/windmill.yourdomain.com /etc/nginx/sites-enabled/
    sudo nginx -t

    If the syntax is okay, reload Nginx.

    sudo systemctl restart nginx

    You should now be able to access Windmill at `http://windmill.yourdomain.com`.

  5. Install Certbot for HTTPS:

    Certbot is a tool for automatically obtaining and installing SSL certificates from Let's Encrypt.

    sudo snap install core
    sudo snap refresh core
    sudo snap install --classic certbot
    sudo ln -s /snap/bin/certbot /usr/bin/certbot
  6. Obtain and Install SSL Certificate:
    sudo certbot --nginx -d windmill.yourdomain.com

    Follow Certbot's instructions. It will automatically modify the Nginx configuration to use HTTPS and set up automatic certificate renewal. You may need to enter an email address and agree to the terms.

  7. Verify HTTPS:

    After the Certbot process is complete, try opening `https://windmill.yourdomain.com` in your browser. You should see Windmill with a secure connection.

Configuring Caddy as a Reverse Proxy with Automatic HTTPS

Caddy is a modern web server that automatically manages Let's Encrypt SSL certificates, making it very simple to configure for HTTPS.

  1. Install Caddy:

    Install Caddy by following the official documentation:

    sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
    curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
    curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
    sudo apt update
    sudo apt install caddy -y
  2. Configure Domain Name:

    Ensure your domain (e.g., `windmill.yourdomain.com`) points to your VPS's IP address in DNS records.

  3. Create Caddyfile:

    Create or edit the default Caddy configuration file.

    sudo nano /etc/caddy/Caddyfile

    Remove existing content and insert the following, replacing `windmill.yourdomain.com` with your actual domain:

    windmill.yourdomain.com {
        reverse_proxy localhost:8000
    }

    Save and close the file. Caddy will automatically obtain and renew the SSL certificate for the specified domain.

  4. Restart Caddy:

    Validate the configuration and restart Caddy.

    sudo caddy validate
    sudo systemctl reload caddy
  5. Verify HTTPS:

    Open `https://windmill.yourdomain.com` in your browser. Caddy should automatically redirect HTTP requests to HTTPS and provide a secure connection.

Both options (Nginx and Caddy) are excellent for providing secure access to Windmill on the server. The choice depends on your preferences and experience with each.

Windmill Maintenance: Backups, Updates, and Monitoring

Keeping Windmill up-to-date and operational requires regular maintenance, including creating backups, timely updates, and continuous monitoring. These measures are critical for ensuring the reliability and security of your platform.

Backup Strategy

Windmill data includes configuration, scripts, workflows, logs, and user data, primarily stored in the PostgreSQL database and on disk. It is important to regularly create backups of this data.

  1. PostgreSQL Database Backup:

    The main volume of critical Windmill data is stored in PostgreSQL. Use `pg_dump` to create a database dump.

    # Go to the Windmill directory
    cd ~/windmill
    
    # Execute the backup command inside the db container
    docker compose exec db pg_dump -U windmill windmill > /path/to/backup/directory/windmill_db_$(date +%Y%m%d_%H%M%S).sql

    Replace `/path/to/backup/directory/` with an actual path, for example, `/var/backups/windmill/`. Ensure that the user running the command has write permissions to this directory.

  2. Windmill Disk Data Backup:

    Some data, such as uploaded files or cache, may be stored in Docker volumes. If you are using the standard `docker-compose.yaml` configuration, volumes will be managed by Docker. You can use utilities like `tar` for their backup.

    Determine which volumes Windmill uses:

    docker volume ls | grep windmill

    Then create an archive:

    sudo tar -czvf /path/to/backup/directory/windmill_volumes_$(date +%Y%m%d_%H%M%S).tar.gz /var/lib/docker/volumes/windmill_app_data/_data /var/lib/docker/volumes/windmill_db_data/_data

    Note: Docker volume paths may vary depending on your system. Ensure you back up all important volumes.

  3. Automating Backups:

    Use `cron` for regular automatic execution of backup commands. For example, for a daily backup at 3 AM:

    sudo crontab -e

    Add the following line:

    0 3 * * * /bin/bash -c "cd /home/windmill/windmill && docker compose exec db pg_dump -U windmill windmill > /var/backups/windmill/windmill_db_$(date +\%Y\%m\%d_\%H\%M\%S).sql"

    Consider using more advanced backup tools, such as Restic on VPS: Installation, Configuration, and Maintenance, which allows creating incremental and encrypted backups, sending them to cloud storage or a remote server.

  4. Backup Storage:

    Store backups on a separate medium or in cloud storage, distinct from your VPS. This will protect your data in case of a server disk failure.

Updating Windmill

Regular Windmill updates not only bring new features but also include security fixes and performance improvements. Thanks to Docker Compose, the update process is significantly simplified.

  1. Check for New Versions:

    Monitor the official Windmill GitHub repository or their announcements to stay informed about new releases.

  2. Stop Windmill:
    cd ~/windmill
    docker compose down
  3. Update docker-compose.yaml file (if necessary):

    Sometimes, with new Windmill versions, the `docker-compose.yaml` structure is also updated. It is recommended to compare your current file with the latest version from the official repository and make any necessary changes.

    curl -L https://raw.githubusercontent.com/windmill-labs/windmill/main/docker-compose.yaml -o docker-compose.yaml.new
    diff docker-compose.yaml docker-compose.yaml.new # Compare files
    # After comparing and manually transferring changes (if any)
    mv docker-compose.yaml.new docker-compose.yaml
  4. Pull New Images and Start:

    The `pull` command will download the latest Docker image versions, and `up -d` will start them, applying the changes.

    docker compose pull
    docker compose up -d
  5. Verify Operation:

    After the update, ensure that Windmill is working correctly and all your scripts and workflows are accessible.

Monitoring Windmill Status

Monitoring allows you to track server and application performance, identifying issues before they become critical.

  • VPS Resource Monitoring:

    Use tools like `htop`, `free -h`, `df -h` for a quick overview of CPU, RAM, and disk usage. For more in-depth monitoring, you can install Netdata on VPS: Installation, Configuration, and Maintenance, which provides detailed real-time metrics.

  • Docker Container Monitoring:

    The `docker stats` command will show resource usage by individual Windmill containers. The `docker compose logs -f` command will allow you to monitor logs of all services in real time.

  • Built-in Windmill Monitoring:

    Windmill provides its own interface for viewing the execution history of scripts and workflows, their statuses, and logs. Regularly check it for errors or stuck tasks.

Choosing the Optimal VPS for Windmill: Configurations for Real-World Load

Choosing the right VPS for Windmill on VPS is a key factor in ensuring its stability, performance, and scalability. Valebyte.com offers a range of configurations that are ideally suited for various Windmill usage scenarios.

VPS Selection Recommendations from Valebyte.com

When choosing a VPS plan, consider the following aspects:

  1. Disk Type: NVMe SSD.

    This is non-negotiable. Windmill actively uses the PostgreSQL database, and the speed of the disk subsystem directly impacts the overall performance of the platform. NVMe SSDs provide significantly higher read/write speeds compared to regular SSDs or, even more so, HDDs.

  2. Number of vCPUs.

    For Windmill, it's important to have a sufficient number of processor cores, especially if you plan to run many parallel scripts or resource-intensive computations. Even for a small installation, a minimum of 2 vCPUs is recommended, and for a production environment, 4-8 vCPUs will be an optimal choice. Intel Xeon E3/E5 or AMD EPYC processors provide excellent performance.

  3. RAM Size.

    Random Access Memory is necessary for Windmill Docker containers, PostgreSQL, and the execution of the scripts themselves. If your scripts process large amounts of data in memory, more RAM will be required. Start with 4 GB for a basic installation and consider 8-16 GB for medium to high loads.

  4. Channel Bandwidth.

    Although Windmill is not a service that heavily uses network traffic, a stable and fast connection (minimum 500 Mbps, preferably 1 Gbps) ensures quick access to the web interface and prompt interaction with external APIs.

  5. Server Location.

    Choose a server location that is geographically closer to your primary users or integrated services. This will reduce latency and improve the user experience.

Examples of Valebyte.com VPS Configurations for Windmill

Let's look at a few examples of Valebyte.com VPS plans that are well-suited for Windmill VPS:

  • For Development and Testing (Entry Level):
    • vCPU: 2 cores
    • RAM: 4 GB
    • Disk: 100 GB NVMe SSD
    • Bandwidth: 1 Gbps
    • Ideal for: Getting acquainted with Windmill, script development and testing, small personal projects. Will allow one to two developers to work comfortably.
  • For Small Teams and Moderate Load (Mid-Level):
    • vCPU: 4 cores
    • RAM: 8 GB
    • Disk: 200 GB NVMe SSD
    • Bandwidth: 1 Gbps
    • Ideal for: Small teams (up to 5-7 people), regular execution of dozens of moderately resource-intensive tasks, using Windmill as a central automation hub for several departments.
  • For Production Environments and High Load (Advanced Level):
    • vCPU: 8 cores
    • RAM: 16 GB
    • Disk: 400 GB NVMe SSD
    • Bandwidth: 1 Gbps
    • Ideal for: Large teams, critically important workflows, running hundreds of parallel scripts, processing large volumes of data. Will ensure high performance and fault tolerance.

We recommend starting with a configuration that slightly exceeds your current needs to have room for growth. With Valebyte.com, you can always easily scale your VPS resources as the load on Windmill increases, without interrupting service operation. Quality hosting, such as Valebyte.com, with fast NVMe disks, stable channels, and 24/7 support, is the foundation for successful deployment and operation of Windmill self-hosted.

If you are also interested in other self-hosting solutions, check out our articles on Home Assistant on VPS or Authentik on VPS, which also require reliable infrastructure.

rocket_launch Quick pick

Need a dedicated server?

Compare prices from top providers. Configure and order in minutes.

Browse dedicated servers arrow_forward

Conclusion

Installing Windmill on a VPS is an optimal solution for companies and developers who need a powerful, flexible, and secure platform for automation and building internal tools with full control over infrastructure and data. By choosing reliable VPS hosting, such as Valebyte.com, with fast NVMe disks and sufficient resources, you ensure stable Windmill operation, scalability, and high performance for the most demanding tasks.

Ready to choose a server?

VPS and dedicated servers in 72+ countries with instant activation and full root access.

Get Started Now →
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.