How to deploy Windmill Enterprise via Helm Chart with Qovery

Hello,
We are looking to use Windmill as a data integration tool. We have heard that it’s relatively easy to get up and running on Qovery, but would love to know any configuration tips and tricks to assist us with a scalable implementation.

Does anyone have a good example configuration of using Windmill (Enterprise or Open Source) with Qovery?

Thanks,
Dale

Hi @dalemccrory :wave: ,

I’ll provide you my configuration this weekend since I need to make some cleanup :slight_smile:

1 Like

Hello, @rophilogene . Any updates on the configuration documentation?

No specific rush, but sometime in Jan 2024 would be great.

Thanks,
Dale

1 Like

Hi @dalemccrory :wave:, we plan to release the easy support of helm chart deployment and windmill recommend this approach. So once it’s ready (before January), I’ll show you how to do this.

1 Like

@rophilogene I noticed that this public repo exists… GitHub - Qovery/windmill: WIndmill repository

Would you recommend using this approach or the windmill helm charts? Has your team moved over to using the helm charts for windmill?

With the new capability for helm charts in Qovery, I can see how that would be the preferred approach. What I don’t know is if there are changes to the helm chart recommended before running on Qovery.

Thanks,
Dale

Hi @dalemccrory (happy new year) , indeed you now have the possibility to deploy the official Windmill Helm Chart with Qovery. And It’s much much much simpler. One of the Windmill team is going to provide a tutorial on how to properly install Windmill on Qovery with the Helm Chart within the next week. He will respond to this thread.

Hi @dalemccrory , good news. I’ve set up the perfect working setup with Qovery (Thanks to the Windmill team). So here is how you can leverage Windmill with Qovery.

Create Postgres DB

With Qovery, create a Postgres database.

  1. Inside your environment, click on New service > Create datasbase.
  2. Select Postgres, give a name and pick Managed mode if it’s for production purposes.
  3. Postgres Version 15 or latest
  4. Accessibility → Private
  5. Click on Continue and Create

Deploy Windmill Helm Chart

Here, we will use the official Windmill Helm Chart.

  1. Add windmill helm repository to Qovery

  1. Create a new Helm service inside your environment

  1. Specify the general config and click Continue

  1. Click on Raw YAML file source (or use Git if you want) to specify your Helm values file.

Here is the yaml content you can copy paste :slight_smile:

postgres:
  enabled: false

windmill:
  databaseUrl: qovery.env.DATABASE_URL
  # -- domain as shown in browser, this variable and `baseProtocol` are used as part of the BASE_URL environment variable in app and worker container and in the ingress resource, if enabled
  baseDomain: qovery.env.BASE_DOMAIN
  # -- protocol as shown in browser, change to https etc based on your endpoint/ingress configuration, this variable and `baseDomain` are used as part of the BASE_URL environment variable in app and worker container
  baseProtocol: http

  # extra worker groups
  workerGroups:
    # workers configuration
    # The default worker group
    - name: "default"
      replicas: 3
      # -- Annotations to apply to the pods
      annotations:
        qovery.annotations.service

      # -- Labels to apply to the pods
      labels: 
        qovery.labels.service

    - name: "native"
      replicas: 4
      # -- Annotations to apply to the pods
      annotations:
        qovery.annotations.service

      # -- Labels to apply to the pods
      labels: 
        qovery.labels.service

  # app configuration
  app:
    # -- Annotations to apply to the pods
    annotations:
      qovery.annotations.service

    # -- Labels to apply to the pods
    labels: 
      qovery.labels.service

  # lsp configuration
  lsp:
    # -- Annotations to apply to the pods
    annotations:
      qovery.annotations.service

    # -- Labels to apply to the pods
    labels: 
      qovery.labels.service

  # multiplayer configuration
  multiplayer:
    # -- Annotations to apply to the pods
    annotations:
      qovery.annotations.service

    # -- Labels to apply to the pods
    labels: 
      qovery.labels.service

ingress:
  enabled: false

serviceAccount:
  # Specifies whether a ServiceAccount should be created
  create: true
  # The name of the ServiceAccount to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""
  annotations:
    qovery.annotations.service

You should get something like this

Then click on Continue.

  1. Then click on Continue until you can create your Helm Chart

Congrats, your helm chart is created inside Qovery (but not deployed yet).

Reverse proxy with Caddy

Windmill uses 2 services that must be exposed to the same domain to work properly. That’s why we will not use the Qovery Helm Networking part, but we will expose a Caddy container image with the appropriate configuration.

LSP is useful to provide auto-completion into the web windmill IDE - it’s not a mandatory component, but it’s more convenient for the end user.

Caddy Deployment

  1. Go back to your Qovery environment where Windmill helm chart is, and click on New Service and Create Application.

CleanShot 2024-01-08 at 8 .34.15

  1. Complete the general information. Pick the Docker Hub container registry and specify the caddy image and the version 2.5.2-alpine

  1. Click Continue and leave the default Resources values (you can change them afterward if needed).

  2. Add a port 80 and expose it publicly. Then click on Create and Continue.

  1. Then click on Continue (or properly configure the healthcheck - recommend).

  2. And click on Create

Well done; your proxy is now ready to be deployed. But before, we need to configure the environment variables now to interconnect our services.

Env Vars configuration

We must configure some environment variables we defined inside our helm values file. Like:

  • DATABASE_URL → to connect to the Postgres database
  • BASE_DOMAIN → to provide Windmill with the public domain that will be used.
  • CADDY_CONFIG → to provide the reverse proxy configuration to properly route the traffic between the Windmill app and Windmill LSP

DATABASE_URL

  1. Click on your Windmill Variables tab.
  2. Create an Alias DATABASE_URL on QOVERY_POSTGRES_Z..._DATABASE_URL_INTERNAL. Set the scope to service.
  3. Create it.

You should see something like this:

BASE_DOMAIN

  1. Click on your Windmill Variables tab.
  2. Create an Alias BASE_DOMAIN on QOVERY_CONTAINER_Z..._HOST_EXTERNAL. Set the scope to environment.
  3. Create it.

You should see something like this:

CADDY_CONFIG

  1. Click on your Proxy Variables tab.
  2. Create a New Variable as a File.

  1. Complete the fields:
    3.1 Variable → CADDY_CONFIG
    3.2 Path → /etc/caddy/Caddyfile
    3.3 Value →
http:// {
        bind 0.0.0.0
        reverse_proxy /ws/* http://windmill-lsp:3001
        reverse_proxy /* http://windmill-app:8000
}

3.4 Scope → Service

Well done, you’re ready to deploy your environment now.

Deployment

Deploy your environment with Windmill

Once your environment is deployed, you must be able to access the public URL provided by the proxy to access your windmill instance :sunglasses:


Hope it helps :slight_smile: