I have reached the limit of my 1000 executions on the free plan: how to self-host on free services?
I started experimenting with Windmill on Saturday just to explore possibilities.
And I was surprised by the power of the tool and very excited.
So, I continued experimenting for a few hours per day from Saturday until yesterday, and my 1000 executions have run out.
This made me think of self-hosting: but here I have several challenges.
a) I don't have the technical knowledge for it.
Is there any possibility of having "click and install" options available, without the need for additional technical configurations?
b) Why don't I try running it on localhost: I don't have a powerful machine to run it locally (I use a Chromebook with penguin Linux to develop my products).
c) I would love to know about any hosting service that is easy to host Windmill, with affordable prices (preferably with a free plan, not just a trial) and with a defined cap when I need a paid plan.
There is a huge list of services that could possibly host Windmill (https://github.com/cloudcommunity/Cloud-Free-Tier-Comparison), but most of them do not have a completely free plan. Since I am from Brazil and the currency Real is devalued against the dollar, it would be great to have a free plan for my first experiments and even for certain side projects.
It seems that the following services would have that.
1) Could someone please confirm if these plans would run Windmill? I do not have technical knowledge about Docker and Kubernetes to evaluate.
2) And assist me by providing a step-by-step guide on how to set up Windmill on any of them? Or any other free service. 🙏
Services:
- render (Individual plan)
- scaleway (Containers - Kubernetes Kapsule plan)
- IBM Cloud (always free plan)
49 Replies
While it could technically run anywhere (that's software after all) I believe the primary focus for self hosted environments is indeed docker and kubernetes.
If you want to be able to control the cost and manage it using docker you could rent a VPS for like 5 or 10 bucks a month and run the windmill stack on it. Of course you'll be limited in terms of computing power RAM and all but that's what I'd go for.
Understandable that you want to find something free, a lot of people is strugggeling to get the ends to meet. I will try to help. But remember that most free plan comes with some kind of disadvantage. Like IBM cloud delete it after 30 days with no use. (https://www.ibm.com/cloud/free#FAQs)
1) you need to find a service that gives you a machine you can log into, like aws ec2, in general it's called IaaS. If you have that it can run docker or kubernetes. If you do not have a lot of experience I would use docker. it's simpler. I do believe that most servers you get your hands on will be strong enough to run windmill, but do remember that the server you are getting is crap. so if you do have problems it could be that. I would also try to find a free DB and not host the db on the same server so that the server is doing as little as possible.
2) There is no step-by-step instruction created yet. I suggest that you start with finding a provider that you want to use. And start a server on that cloud provider, then try to follow the docker instructions.
There are also discord message about setting up windmill on cloud providers, so search for that also.
Depending on your use case you may want to change docker-compose and caddyfile (like setting up https and remove the db).
Just report back and I will help you. but you need to do most of the work yourself. but will help you when you get stuck.
Just report back and I will help you. but you need to do most of the work yourself. but will help you when you get stuck.
IBM Cloud Free Tier
Create your free IBM Cloud account to access over 40 always-free products without time limits. Use your USD 200 credit on any product in the IBM Cloud catalog.
Hi Cali, I'm also from BR, nice to meet you. I'm running it on the always free plan from Oracle. They give a 4 CPU arm64 machine with 24GB of RAM. You'll have to google how to set up the basic machine (Oracle's interface is a mess) and then setup Caprover with the Windmill's one-click install.
How are they even giving 24GB RAM for free ? It must be shared stuff isn't it ?
It's not shared, they are ARM CPUs that they're trying to promote pretty aggressively, I guess.
definitely something to consider then!
@aurelienbrabant
Thank you for the suggestion. I did see some VPS options, but I was interested in something free, at least initially.
However, thinking about VPS, what is the minimum amount of RAM would you suggest running windmill without any issues?
@sindresvendby, I appreciate the context and tips. Due to my lack of understanding about Docker and Kubernetes, any technical step in that is a big challenge for me. If I manage to progress on my own and have any doubts, I will ask for your help.
@tserafim, nice to meet you! 🇧🇷
Thanks for sharing this alternative. In this Oracle plan, is there an automatic limit to stay in the free tier, or does it start charging automatically if it exceeds?
My challenge would be to understand how to configure these technical aspects. I am looking forward to a future recipe that simplifies the process, like "click-and-install". 🙂
I think the oracle + caprover from @tserafim is the best tip so far. Try that
Yeah you should try this one. Just FYI I believe 2GB is enough for 2 workers or so.
If you stick to the free tier limits (up to 4 Ampere CPUs and 24GB of RAM and 100GB of disk), they do not charge and you don't need to convert to a paid account. You must, however, use the machines, they cannot sit idle or you can convert to a paid plan and they you'll let you keep it idle if you want but won't charge if you keep within the limits.
Before installing Windmill, I run (IIRC) Yet-Another-Bench-Script, and the performance was better than the Intel CPUs from Digital Ocean. So it's definitely something to try out if you don't want to spend money. Beware that I do not run production stuff on that machine yet, so try for yourself if it fits your needs.
great to know.
- any tips on automated ways to prevent the machine from idling?
- if it goes into idle mode, does it automatically switch to a paid plan or is there any confirmation? I confess that I have a great fear of services that start charging and I only notice it later. I have had challenges with Amazon and Google, for example. And that's why I avoid services like that nowadays haha. They used to be difficult to manage the costs.
There are some tips online, such as running a bench script in the night. With Windmill you can do that easily, just run a fibonacci script at 3am.
Thanks!
After trying several times to get Oracle account and having an error with my card, I finally managed to register with the same card 🤷♂️ and configured a large part of what I found about self-hosting Windmill. I also installed CapRover.
I ran the 4 curls I found here (https://www.windmill.dev/docs/advanced/self_host), and then successfully ran "docker compose up -d".
However, I have some questions:
- What is the purpose of CapRover and how do I use it? Does it have any relation to Caddy mentioned in the material I followed (*https://www.windmill.dev/docs/advanced/self_host) ?
- How can I access the public IP outside the Oracle machine, from my computer? Is this dangerous in terms of vulnerability?
- How could I access Windmill from inside the Oracle machine? Could I install something like Ubuntu and run it from there? But how would I run the services in parallel?
I haven't figured out a way to run Windmill yet.
so caprover is a PaaS that focus on easily install other services. If you use it, you do not need to install windmill with trought the curl commands, you just select windmill and click install. see https://caprover.com/docs/one-click-apps.html
if you have run
docker compose up -d
then try doing curl http://localhost
to see if you got something up and running.
But it may be easierer to see if you can get up caprover and install it from there.Go to the Caprover admin, and choose the Windmill from the one click apps. You don't have to deal with Caddy or manually set up Windmill. It's ideal for your use case since you only care about running Windmill, not learning how to maintain and glue together everything.
You'll have to set up a domain to connect to your Oracle machine, and Caprover will update its nginx config to map a domain/subdomain to a specific app.
You can hide your public IP if you use Cloudflare, but I'd go with this easy install first.
You either use Caprover to manage your apps OR use the provided docker-compose from Windmill
Thanks! So, I tried these steps without success:
1. docker compose stop
2.
sudo docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover
(I'm not sure about these commands, but it's what I found to try out.)
But I got errors with the ports.
E.g.: Bind for 0.0.0.0:3000 failed: port is already allocated.
And I also had problems with ports 80 and 443.
3. I thought it was a problem with Docker using these ports, and I tried some commands.
For example:
docker container ls
docker rm -f <container-name>
But without success. Because the ports become occupied again shortly after.
4. Then I checked the Ingress Rules of the Oracle instance.
Previously, I had specified the ports because I believed that I had to open them due to other errors I had.
But now, to test, I also removed those rules.
---
Since I don't understand much of what I'm doing and I'm following scattered tips from these services, it's probably a failure due to my lack of knowledge about the steps and what I should do.@tserafim i do not have any experience with caprover. Are you able to help? If not i can help you on the docker approach @cali.renato
Hi! You need to open a number of ports using the ingress rules, those ports are required by Caprover https://caprover.com/docs/firewall.html
But the error you're getting about ports 80, 443 and 3000 being used are weird. When creating the machine, did you choose Ubuntu? Because the default is some weird Oracle distro.
@sindresvendby I'm really not sure how to help from here, as a new machine should have those ports unused. In my installs, I just copy and paste the command from Caprover's docs on a new machine and it works.
My instance was actually with Oracle system. I didn't know it could be changed.
So I deleted the instance and created one with Ubuntu.
I ran the ufw commands and the rules were added correctly:
sudo ufw allow 80,443,3000,996,7946,4789,2377/tcp; sudo ufw allow 7946,4789,2377/udp;
However, when I run the command sudo docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover
, it gives the error:
Installation failed. Error: Port timed out: 80 at Timeout._onTimeout (/usr/src/app/built/utils/CaptainInstaller.js:137:20)
I have already tried some things about it, but without success.
I know this may be outside the scope of your help. So, anyway, I greatly appreciate your help so far. ❤️
Unfortunately, I don't know how to proceed yet, but I will explore a little more.
If I discover something, I will let you know.
Otherwise, I will give up and think of another alternative for my needs.I put
-e BY_PASS_PROXY_CHECK='TRUE'
in the command and it seems to have worked:
sudo docker run -e BY_PASS_PROXY_CHECK='TRUE' -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock dockersaturn/captainduckduck
So I moved on to the next step and ran the command sudo caprover serversetup, but when I entered the IP address of the server, it returned 'You may have specified a wrong IP address or not already started CapRover container on your server! Error: RequestError: Error: connect ETIMEDOUT XXX.XXX.XX.XX:3000'
However, when I run the command sudo docker container ls
, it seems that the CapRover is running.Hi Cali, I noticed that in this command you're using
dockersaturn/captainduckduck
instead of caprover/caprover
, any reason?
I'm not really sure why you're experiencing these errors, sorry I couldn't help you with a precise reason. But, maybe you installed docker from Snap? Caprover mention on its docs to not use that because it's buggy.Oops! I probably copied and pasted this part from a tutorial mistakenly.
I will try to redo the command.
I need to find how I can stop all Docker containers
I used apt-get install
great. I'll try that
Hi @cali.renato, did it work?
After many attempts, I finally managed to install caprover. Thank you for your support.
The issue with ports was quite a challenge.
Additionally, I'm using Cloudflare, which could also cause problems at some point, from what I've seen.
I just asked to install Windmill and encountered an error. Do you know what the issue was?
Deploying windmill-lsp (might take up to a minute)
Failed: Error: Request failed with status code 504
And how can I configure WM Base URL (Server fully qualified url of the user-facing URL)?
Do I need to set up any DNS configurations on my server beforehand for this?
Out of curiosity, another issue was the configuration of the machine in Oracle. To stay in the always free tier, the configuration had to be set to:
Shape: VM.Standard.E2.1.Micro
OCPU count: 1
Network bandwidth (Gbps): 0.48
Memory (GB): 1
Local disk: Block storage onlyThat might be because you asked for a specific version of
windmill
that doesn't have the windmill-lsp
image published or because the GH image hosted errored.That is the error
When seting up using the one click, you must choose a domain e.g, wm.example.com, and then on Cloudflare you set that
wm
to point to your Oracle machine IP. You can always change this in the ENV variables
It seems like you chose the x86 machine, but the good thing about Oracle's offer is the arm64 version which you can use up to 4vCPUs and 24GB of ramNow I see! Great to know.
I left the pre-filled version
That's weird, this version exists and I tested before submitting the one-click yaml
I deleted the app and reinstalled. Now it worked.🥳
nowN the only issue is that it does not have https in the subdomain.
and I think that has to do with cloudflare and the levels of subdomains it offers ssl.
problem for another time. haha.
I've already made a lot of progress with your help.
thanks!
👉 How can I upgrade the Windmill version over time using CapRover?
--
I tried to log in for the first time on Windmill self-hosted, but I encountered these errors in the console and got stuck on the screen.
UNAUTHORIZED URL {origin: 'http://windmill.XXXXXX', protocol: 'http:', username: '', password: '', host: 'windmill.XXXXXX', …} /user/login
he URL and password are not being passed or displayed in the console error message, even though they were inputted on the screen.
(I replaced the full url with XXXXXX)You must click on each app inside Caprover, for instance
wm
, wm-lsp
, wm-worker
and wm-worker-native
, go the Deployment tab, scroll to the bottom (Method 6) and change the image to a valid version (See here https://github.com/windmill-labs/windmill/pkgs/container/windmill ) So, to update to the latest version: ghcr.io/windmill-labs/windmill:1.154
and ghcr.io/windmill-labs/windmill-lsp:1.154
GitHub
Build software better, together
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 330 million projects.
That's very weird and I don't know what might be causing this issue
Fixed. It was my mistake. I hadn't been able to follow the post-installation instructions yet because I didn't understand where I had to edit the settings. Now that I've found out and done what was written there, I managed to log in.
great!
thanks a lot for the support.
Glad it worked, you're welcome!
@cali.renato Not sure if anyone mentioned it as a low cost but not free option but Elest.io has OOTB hosting for Windmill
Tks @long.jmp . I just checked it out now.
Provider: Hetzner. 2 CPUs + 2GB RAM = $10.
I was reflecting on the cloud version: the issue of limiting it to 1000 executions (single job whose duration is less than 1s), made me use it in just a few days, without actually being able to set up even a small idea. They were only configuration tests, I couldn't even finish making a simple app with scripts.
Do you plan to rethink this model or counting? E.g. if it were possible to consider only executions of published versions, it would ensure that the person was able to complete the entire configuration and creation.
I'm not sure if this makes sense or if there are better alternatives. I'm sure you have already discussed and validated this model. What has been your perception so far?
My question is precisely because I found the tool amazing and wish to use it (congratulations to everyone involved in this conception!).
At the same time, until now, I have had great challenges with self-hosting (mostly due to my lack of experience with servers and configurations). And, in the free plan, to start using it in some side project, I can't even finish configurations without reaching the limit.
Requiring docker and K8s to self-host a low code tool is a high bar. I'll take a look at oracle+caprover
You'll have to understand at least a little bit of docker, as caprover just uses docker underneat
Thanks
Thoughs: I also had a bit of a problem with this since the app can potentially trigger a lot of script executions. Could be it would be better to excludes run done from edit mode in the app (test page in script and flow also?) @rubenf or set that to a separate metric. Or set a limit on 100 pr hour. I got in to a loop, and burned my 1000 in a few min, without understanding that it would be a month to the next time i got 1000 more runs. If you are cut of for a month ppl will find another tool. for 1 hours they will hopefully fix the problems they are having or just code without testing for a while.
Yeah but then most people that don't need apps have always enough free execs to never upgrade
We need a time limited trial with more executions
But then I have to fight fraud
Currently, the way execution counting works can be a hurdle. I exhausted the 1000 executions without even being able to set up what I wanted to try. I believe that within 2 or 4 days it was already used up.
I imagine it has to do with some slow and error-prone attempts to connect to the database.
Perhaps it is possible to discuss other variables to prevent abuses in the free plan while still making conscious use, such as:
- Execution limit per hour or per day, as Sindre mentioned, to prevent credits from being consumed at once.
- Execution time limit for a script node or the entire script (similar to how Vercel limits the execution time of a serverless or edge function).
- Limit on the number of allowed schedules.
- ...
Finally, I managed to get windmill.dev running on a server in a stable manner.
At Oracle, I was only able to get a 1GB RAM machine on the free plan because the others are not available in my region (I tried daily to get a better one but it says it's not available at the moment). I tried running it on Hostinger, but their docker is not compatible with caprover (I tried various ways and even talked to support).
Finally, I created a VPS on Hetzner, on a cheaper 4GB plan, and so far it's running stably.