Chevereto
-
I make chevereto, there's an open source edition https://github.com/chevereto/chevereto-free
Let me know what I can do to help in the process.
-
@rodber great to have you here then. Any reason you suggest the free version over your main supported one? Would be awesome to have the full version also available for interested users.
We will be happy to work with you to get a package done, usually it is easier when we have a contact within the upstream app team.
-
@nebulon Thanks for the welcome, I don't have any reason besides that the Open Source edition doesn't have the paywall so it feels like a more straightforward approach for the new user. Both editions run on the exact same stack, I've some live demo right here: https://github.com/chevereto/docker as I've been optimizing support for containers lately.
What I'm trying to do is to provide servicing using container layers and sit the application as a project folder. That way the application manages itself its updating and the user can carry their modifications, I will be happy to review alternatives and share different strategies.
-
@rodber I just tried to install it in our LAMP app package to see how much effort it might be to create a proper pre-installed package, but for some reason the instructions at https://v3-docs.chevereto.com/get-started/installation.html#installer-recommended are not working as expected. Not sure if this is due to our LAMP package or otherwise. It is not clear to me if I should visit /install or /installer or /installer.php after running the two installer.php commands in the terminal.
Whatever I open in the browser, I get the following message:
"Chevereto can't create the app/settings.php file. You must manually create this file."Do you have any hint how to overcome this?
-
@nebulon I was able to play a litte bit, it seems that it will be trivial to get it running: https://chevereto-lamp.demo.cloudron.io/
Running these from app/data/public folder:
wget -O installer.php https://chevereto.com/download/file/installer
php installer.php -a download -s chevereto-free
php installer.php -a extract -s chevereto-free -f chevereto-pkg-*.zip -p .
php installer.php -a createSettings \ -h=${CLOUDRON_MYSQL_HOST} \ -p 3306 \ -n=${CLOUDRON_MYSQL_DATABASE} \ -u=${CLOUDRON_MYSQL_USERNAME} \ -x=${CLOUDRON_MYSQL_PASSWORD} \ -f app/settings.php
php installer.php -a submitInstallForm \ -w http://localhost/ \ -u user -e user@hostname.loc \ -x password \ -f from@hostname.loc \ -i inbox@hostname.loc \ -m community
rm -rf installer.php
My installer has a CLI API, I've updated the documentation today.
-
I've created a installer shell script, this will ease the provisioning a lot.
cd ../data/public
curl -sSL https://raw.githubusercontent.com/chevereto/shell/main/chevereto-free.sh | sudo bash -s -- \ -h ${CLOUDRON_MYSQL_HOST} \ -p ${CLOUDRON_MYSQL_PORT} \ -n ${CLOUDRON_MYSQL_DATABASE} \ -u ${CLOUDRON_MYSQL_USERNAME} \ -x ${CLOUDRON_MYSQL_PASSWORD} \ -w http://localhost/ \ -A admin \ -E admin@localhost.loc \ -X password \ -f ${CLOUDRON_MAIL_FROM} \ -i inbox@localhost.loc \ -m community
^^^ You need to customize the -A -E -X and -i options.
The repo is here: https://github.com/chevereto/shell
-
@rodber thanks, but actually I think this is a bit over the top for us here. At package building time, we don't have a dynamic data directory yet, nor do we have database connection.
Usually we build the package with the immutable bits/code into a docker image (those parts are further on read-only), then on app instance startup, we detect first run and do things like initial user creation. So I think what you previously posted is what we need.
To further explain like we handle things like
app/settings.php
in your case, the read-only package will contain a symlink which will only resolve once the app container is run. That then will resolve into a read-write mounted folder, which, alongside with the database dump, will be backed up and restored if need be.Let me know if you have any questions around that, since it may be a bit unusual. We do this mainly to ensure proper ability for updates and security (one cannot tamper with the code php bits by design here)
-
@nebulon sure, I understand. I have been updating things to make it compatible with the immutable realm. I need to tweak my installer to support tagged releases which at this time it only works with latest, I will work on that.
Most work is on the actual application code, my goal is 12-factor. Regarding the settings file I'm now using env, I've updated that recently https://v3-docs.chevereto.com/setup/system/settings-file.html
You can check the images here https://github.com/chevereto/docker is a live wip atm.
-
Dear all,
I have crafted the official Docker provisioning for Chevereto. The images are available here: https://hub.docker.com/r/chevereto/chevereto
These provide httpd-php and php-fpm images with a bootstrap script that runs on container creation, so it installs the software once and just spawn services from there.
Let me know if this helps to get Chevereto on Cloudron.
-
@rodber I've just finished the very basic initial Cloudron app package for it. It still does not pre-provision an admin account and it has to symlink a few folders into the writeable directories, this is based purely on what the app complained about, I dont' really know if, why and when they have to be written by the app https://git.cloudron.io/cloudron/cheveretofree-app/-/blob/master/Dockerfile#L32
If you want to test this, just clone that repo and run
cloudron build && cloudron install
essentially. Well of course only if you have the cloudron cli setupSince in Cloudron the database only becomes active when the app is initialized but we still want all static assets to be part of the image, I wasn't quite sure how to use the installer.php script only for the initial admin setup.
-
@nebulon my bootstrap script gets you until the install form where the user will be prompt under HTTP to submit account details to proceed with the installation. It doesn't carry the installation as that process has account limitations (password length enforcement, forbidden usernames) but if you want to automate that bit you could simply detect the first run based on the container placeholder and execute the submitInstall installer command.
The installation at that step is just build the database, it doesn't touch the filesystem. As you may noticed, I left the installer.php available to use it as tooling on top of the images look at /chevereto folder in the container.
I suggest you to implement Chevereto on Cloudron using/forking my Docker images as I will constantly maintaining it, specially in regards to the PHP provisioning. That's why I provide separately Apache and PHP-FPM images, so you stop worrying about PHP regardless which flavor you like better. Use
php-fpm
if you want to handle the server, simply plug the process. Use Apache HTTP if you want to rely inmod_php
.Regarding your implementation, I can't recommend to use linking for the
app/settings.php
file, I recommend you to use env variables for that purpose. If user needs to sneak a setting it should be made by overriding the env variables, not working on the same file used for app/settings.php dist. If the user needs to add something at "settings level" it should be made with a file made for that sole purpose. -
Hey there, I've some great news.
We now have a container builder repository, here: https://github.com/chevereto/container-builder
What it does is that it uses github infra to build your own Chevereto paid edition image and upload it to the container registry of your choice. From there you can run your Chevereto image anywhere.
Does Cloudron allow users to provide their own container images? If that's feasible our paid users could use your panel
Let me know if you want more details about this.
-
@rodber thanks for sharing this. Cloudron does support to install custom images, but this is currently more targeted at app developers during package development and testing. So the flow is not ideal for regular users.
I haven't looked in more detail what is involved to get the paid version, is the paid version a different code-base or just a matter of supplying a license in a specific file?
If it is the latter, then we can likely build the package in a way that the user can provide a purchased license, which would also allow for easier migration from free to paid without having to migrate previously added pictures. -
@nebulon paid version is a different code base but it works with the same system requirements. One way to provide it is by each user creating its own image.
The alternative is this, the bootstrap version: https://github.com/chevereto/docker which you can upgrade, the application is just mapped to a local bind dir.
-
I think that I will just write a guide on my docs on how to deploy the custom Chevereto image. I feel that my intervention here is going nowhere... I just noticed that I went from bootstrap to container registry and now again we are talking about bootstrap.
I've the code and will, you know where to reach me. I'm always available.
Thanks anyway.
-
@rodber sorry for this taking so long, but I feel we are a bit talking past each other.
To take a step back, on Cloudron all apps run in a read-only filesystem, the app code has to be provided in an immutable image. So an app package must contain all the code already and cannot download or install itself during first run. There is however a read/write folder provided at /app/data mount point if the app needs this. Sometimes those are config files, data or also plugins installed later.
Since you mentioned that both free and paid versions are a different code base, then they also would have to be different app packages currently.
It is not quite clear to me unfortunately what the implications of the various mentioned methods bootstrap/container-builder/custom image/container registry mean in this context. Packages for our users, once published would reside in our company namespace at docker.io to ensure consistency and availability for as long as we support an app.
I will take another look at where we stand currently for the free version as a start residing at https://git.cloudron.io/cloudron/cheveretofree-app