Solved Baserow Cloudron app - Airtable alternative
My name is Bram Wiepjes and I am the founder of Baserow (https://baserow.io) which is an open source no-code database tool and Airtable alternative.
First of all I wanted to tell that Cloudron is an amazing platform! This is the first time that I worked with it, but it is just great! The ease of use, stability, addons and low learning curve make it a fantastic product and I have become a fan.
As a fun weekend side-project I decided to make a Baserow Cloudron app. My initial version can be found here https://gitlab.com/bramw/baserow/-/merge_requests/154 and I would love for people to test it out and review the code. All feedback is welcome and would be much appreciated.
Even though this version works, tested it on Cloudron 6.1.2, there are a couple of issues that I ran into. Baserow depends on Redis version 5 because it uses Django Channels 3. The Cloudron documentation mentioned that the Redis addon installs version 5, but it was always version 4 for me. I solved this by installing Redis 5 locally in the Docker image which is fine for now because the state doesn't necessarily needs to be persistent.
Baserow exists of a backend and web-frontend which communicates only via a REST API and Web Socket with each other. Is there a possibility to to split the backend and web-frontend into two different images? Right now I've combined them into one image. If that is not possible, is it possible to do two health checks? One for the backend and one for the web-frontend?
Lastly, it would be great to get listed in the App Store once this version is stable.
@bram nice to see some app developers porting their own apps to cloudron
The Cloudron documentation mentioned that the Redis addon installs version 5, but it was always version 4 for me. I solved this by installing Redis 5 locally in the Docker image which is fine for now because the state doesn't necessarily needs to be persistent.
I'm not sure, I have never written a Cloudron app that needed to use Redis. I'll let the Cloudron devs answer you on this one.
Installing redis locally in the meantime is a good work-around for the moment.
Is there a possibility to to split the backend and web-frontend into two different images? Right now I've combined them into one image
Nope, no way to do that on Cloudron. Sorry, you indeed have to package them together, and start both with something like supervisor, which should already be available in the base image.
If that is not possible, is it possible to do two health checks? One for the backend and one for the web-frontend?
Not at the moment, but I think the devs were talking about ditching the current http request way of doing health-checks, in favor of using the native HEALTHCHECK dockerfile instruction (https://docs.docker.com/engine/reference/builder/#healthcheck). Not sure if work has started on this yet.
this is huge! welcome @bram - big fan of your app!!!!
Hi @bram and welcome to our forum!
This is indeed great news and awesome how much progress you already made for the packaging.
I will give it a try later today and hopefully we can get this into the app library soon
Regarding redis version, I can confirm that the addon has version 4.9.0 installed, however we are currently preparing a new base image for apps and addons, which is based on Ubuntu 20.04 and then redis is updated. I see that @girish just already updated the docs
For healthcheck one option is to add a small daemon which provides for example a
/healthcheckroute and internally then pings the corresponding services for health. That way the app package only has one route but that one will indicate if all components are healthy.
I hope I can give more feedback once I've tested it. Just a heads up, we also require selenium tests for all app packages, but we are happy to provide them for Baserow then.
marcusquinn last edited by marcusquinn
@bram Great stuff - looking forward to giving it a good test and helping with feedback.
Personal opinion but maybe shared. Something I've found, and I think others do too, is making open-source a sustainable business, and for users, avoiding gotchyas, lock-ins or usage taxes.
The business models I've found the happiest are with EspoCRM and Freescout.
Essentially, the FOSS is unlimited in usage, and the Premium is too.
Premium revenue coming from selling extra setup "Packs" that are typically only needed by businesses, and also effectively fast-track best-practice template setups.
So FOSS users get the full benefit of the framework to use, test,, feedback on and help evolve.
And those using the app to save or make time or money will happily pay for the premium packs as they get them setup with templates that would otherwise take a longer time to recreate.
I understand per-user licensing for vendor-managed SaaS because users numbers tend to correlate to support requests or expectations.
However, for self-hosted, I hope to encourage you to consider unlimited users and, instead look to premium packs, templates, setups, perhaps with an annual license.
So you have good and repeat income but businesses that have low margins and high user count needs aren't looking at prohibitive scaling costs because if they are self-hosting, they also tend to be self-supporting for 1st-line requests. Consider it support work-sharing
Keep up the great work, I love anything that encourages understanding database design and record-keeping and communications best-practice. I'm sure the world will thank and reward you for your innovation!
Thanks everyone for the warm welcome and for the info.
For now it is okay if Redis doesn't keep the persistent state, so we can use the one that is installed within the Basero app image. Would be nice to use the Cloudron addon in the future once Redis 5 is fully supported. Once the Docker healthcheck is supported we can use that.
Looking forward to your feedback!
I have a quick follow up question. Is it possible for Cloudron to generate a unique secret key and provide that as environment variable? Baserow depends on a secret key to create password reset and invite tokens, but this needs to be unique value for each installation. Otherwise if everyone uses the same key, it will become possible to create password reset tokens which is a security issue.
Something on the lines of (just some pseudo bash here):
if [[ ! -f /app/data/.secret ]]; then echo "SECRET_ENV=$(some way to generate a secret)" > /app/data/.secret fi source /app/data/.secret
Very much depends on how the app consumes this. Sometime like gitlab they have a secrets file like: https://git.cloudron.io/cloudron/gitlab-app/-/blob/master/start.sh#L92
@bram an example here : https://git.cloudron.io/mehdi/river/-/blob/master/start.sh#L64
if [ ! -f /app/data/session.secret ]; then dd if=/dev/urandom bs=256 count=1 | base64 > /app/data/session.secret fi
This will work for my use case. Thanks!
ianhyzy last edited by
This looks like a fantastic tool, can't wait to try it out on Cloudron!
Is the status of this known ? Coming to a cloudron near me soon ??
@timconsidine It's available now, just not in the store. Just follow instructions above and you'll be up and running in no time.
@doodlemania2 Cheers !
This post is deleted!
@doodlemania2 Having trouble with this :
Repeat errors like
App installation error: Installation failed: Unable to pull image tcmbp132021/baserow:1:3:0. Please check the network or if the image needs authentication. statusCode: 400
I can build locally and I can push docker image.
But interestingly docker for desktop reports 3.25Gb locally and repository only 1.1Gb
Does the image need authentication ??
Or maybe there is indeed a network error
And when I run the container locally, it starts and immediately fails
http://ocalhost:3000 doesn't respond and docker for desktop reports not started
I think there is a build problem
Maybe there was some network glitch going on
I did do
docker trustjust in case
But had to delete images multiple times and try again
Anyway now deployed to and working on cloudron - yay !
Thank you @bram !!
@staff any thoughts on publishing Baserow as unstable? I've been using it on and off and it's quite smooth. Not sure what else is needed from a packaging perspective though.
@timconsidine Glad to hear that it now works for you!
@girish Apologies for my super late response. I don't check the Cloudron forum that often, but luckily @tomershivani reached out to me via email notifying me about your question. I would love to have Baserow in the Cloudron app store. I am not sure which steps I exactly need to make. Is there a documentation page about this? Or is it just a matter of creating a new repo on git.cloudron.io containing the files that now live here https://gitlab.com/bramw/baserow/-/tree/develop/deploy/cloudron, add automated tests and you will do the rest? Would love to learn a bit more about this process and help with the automated tests would be much appreciated.
robi last edited by robi
@girish I just created an account on git.cloudron.io, but it seems like I can't create a new repository. When creating a new project I get the error "Namespace is not valid". All the other repo's are in the cloudron project https://git.cloudron.io/cloudron, but it seems like I can't create a new repo there. Am I missing something?
Alternatively, you can find the deploy code in our own public repo and copy it from there https://gitlab.com/bramw/baserow/-/tree/master/deploy/cloudron. It already has an MIT license there.
How would it work in the future if we release a new version of Baserow? Can we deploy the latest version to the app store?
jdaviescoates last edited by
@jdaviescoates That makes sense. I'll await his response.
@bram awesome, I will take it from here! Give me a day or two to look into this.
zagzoog last edited by
I just installed Baseerow on Cloudron. Is perfect for my use case. running beautifully. my question is regarding the web socket. I am not sure how to access it. Baserow is accessible through a sub-domain. what would be the url for the web socket api?
@zagzoog The web socket URL would be on
wss://api.baserow.io/ws/core/?jwt_token=YOUR_JWT_TOKENwhere you would replace api.baserow.io with your self hosted domain. So, if your Baserow copy runs on baserow.example.com, you should replace it with that. Both the backend and the web-frontend run on the same domain in Cloudron. More information about the web sockets and also some examples how to connect directly can be found here https://baserow.io/docs/getting-started%2Fweb-socket-api.
@girish Could you share any progress on having Baserow in the Cloudron App Store?
@bram Not yet, sorry been backlogged a lot. I will get to this soonish. Hopefully next week.
humptydumpty last edited by
@girish just want to remind you about Baserow
@girish Baserow 1.6 just released
@girish have you had any chance to check on that since?
It feels that adding baserow shall be quick and easy - I follow up the instruction from the site and installed it on Cloudron without any problems (1.6 version it was).
I shall also admin, that the app is of the very nice UI and feels very good, having as well a solid roadmap for futher development.
If there is anything I can do to speed up that process (I don't know - upvote something or whatever) - please, let me know!
@jeau , thanks for packing this! It's awesome!
Not yet, we have to start looking into apps next week. This week we are working on the Cloudron release (almost there!).
@girish have a good one!
yusf last edited by
Ante up https://www.nocodb.com/
jdaviescoates last edited by
jdaviescoates last edited by jdaviescoates
@bram hopefully once @staff have got the 7.0 release rolled out they'll start to prioritise getting some of the already packaged app contributions into the app store ASAP, and IMHO apps that have kindly been packaged by their developers (like Baserow and Chatwoot, and I think possibly some others too. EDIT Appsmith is another) should get priority. Very important to maintain good will of contributors.
I am very interested to test your "unofficiel" package to have Baserow in my Cloudron.
Could you share your tips or link to install it, please ?
timconsidine last edited by timconsidine
That has a tutorial on installing to Cloudron
I think I did it slightly different, but as that comes from @bram, best to start with that.
In general, installing a custom app package that someone else has made (still beyond me to make one myself) is fairly simple. Article above covers it.
- ensure you have Docker Desktop installed LOCALLY (not server)
- ensure you have a docker repo (I use docker hub free account)
- ensure you have Cloudron CLI installed LOCALLY
- clone the repo (which should have all files needed)
cdto the directory
docker build -t <yourreponame>/<appname>:<tag>
docker push <yourreponame>/<appname>:<tag>
cloudron install --image <yourreponame>/<appname>:<tag>
Follow the instruction.
Generally fairly easy.
Shout if you face any issues
robi last edited by
@timconsidine since you've already built it, it may be a good idea to connect with @atridad who has an unofficial repository of packaged apps before they're published in the App store.
Sharing the docker hub repo makes it easier for others to try, and there is a feature in Cloudron now to set a custom repo.
@robi sure will do
although my build seems old now : V1.3
Must update it
I think I recall that someone here said
CloudronManifest.jsonmust be in the same directory when attempting to use cloudron cli, so probably still worth following @bram guide
@timconsidine Many thanks!
@bram Sorry, this is blocked totally by us. We have already started updating some of the long standing apps and will also start publishing many of the already available apps this week and the next.
Hi everyone, I was finally able to pickup the package, to get this forward into our app library.
@bram already did a wonderful job and for the moment I only had to do some cleanup of the package, not because it was wrong, but really only so the package is consistent with our other packages. This is less about the functionality but merely so it is easier for us to deal with them.
Also since we tend to update our tests and the test dependencies quite often, I also moved @bram's original files into a repo in our own gitlab next to all the other apps: https://git.cloudron.io/cloudron/baserow-app
@bram you should also have push rights to that repo by now.
To give some outlook, I think I will only have to now add the e2e tests for it and I will publish this in the next few days as unstable for everyone interested to test.
@nebulon It's great to hear that you've added Baserow. I saw an email notifying me that I have developer permissions to the project . Let me know if there is anything that I can help you with in the meantime.
How would it work if we we're releasing a new version in the future? Should we then create a merge request in GitLab with the necessary changes?
@bram usually we track upstream releases and then adjust the package repo accordingly, then build a new app package from that and run the tests. Once done we issue a new package release. So unless there are specific data migration steps to be made on a new release, I think you don't have to do anything from your side as we will maintain the package.
You have developer rights mainly, since you know your app better and possibly there might be useful adjustments to be made for the package in future versions, so feel free to push those directly into the app repo then.
@nebulon great, thank you for hearing and picking this up!
I will lock this topic since the app is published by now and the forum section is https://forum.cloudron.io/category/136/baserow