Cloudron makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server. Find out more or install now.


Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Bookmarks
  • Search
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

Cloudron Forum

Apps | Demo | Docs | Install
DidierMalenfantD

DidierMalenfant

@DidierMalenfant
About
Posts
33
Topics
5
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • Trying to package Agate - A Gemini server
    DidierMalenfantD DidierMalenfant

    Oh man... I found the bonehead mistake causing this... The gemini port is 1965 not 1950 🤦

    After letting everything happily propagate, I now have a gemini server running on my test Cloudron at gemini://test.malenfant.dev... YAY!

    I'm going to play with it for a bit. If someone with more experience than me could sanity check the Dockerfile, CloudronManifest.json and start.sh to make sure I'm not doing anything stupid then I can make this a 1.0.0 version.

    App Packaging & Development

  • Restoring a psql dump from another instance
    DidierMalenfantD DidierMalenfant

    I think I may have found the solution. I can drop everything in the old database by logging in to the psql database and doing:

    DROP OWNED BY userXXXXXX CASCADE;
    

    (obviously replacing the XXXX by the random number generated for the peertube app) and then recreating an empty schema ready form import:

    CREATE SCHEMA public;
    CREATE EXTENSION unaccent;
    CREATE EXTENSION pg_trgm;
    

    (unaccent and pg_trgm are needed for restoring the peer tube db dump).

    Then the restore works without error or warnings:

    PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} pg_restore -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} --format=custom --schema=public --no-owner --role=${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} peertube_prod-dump.db
    

    and my app seems to come back up correctly as my old peertube server.

    I'll keep an eye on it in the next couple of days to see if I notice anything odd.

    PeerTube

  • Agate - A simple gemini server
    DidierMalenfantD DidierMalenfant

    • Title: Agate on Cloudron - A simple gemini server

    • Main Page: https://github.com/mbrubeck/agate
    • Git: https://code.malenfant.net/didier/agate-app
    • Licence: MIT
    • Docker: didiermalenfant/net.malenfant.agate:20250709-011124-02250deeb
    • Demo: https://gemini.malenfant.net

    • Summary: Allows users to install a gemini server on cloudron in one-click.

    • Notes: I use Gemini for some different kind of content than I do on my regular blog. The crowd reading gemini 'capsules' (as they are known) is also very different from the main 'big' web. Kinda like Mastodon vs Twitter.
      This is my first cloudron app. I welcome all comments and help with fixes for things I got wrong.

    App Wishlist

  • Trying to package Agate - A Gemini server
    DidierMalenfantD DidierMalenfant

    Just updated the app to 0.2.0.

    • added some user-modifiable information about gemini when the app is accessed on the HTTP port
    • user can now set a different port for the gemini server if they want
    • removed an unnecessary mkdir in the Dockerfile

    I'm going to dogfood it on my own server for a bit and then if everything looks good I will look into posting it to the App Store here.

    App Packaging & Development

  • Agate - A simple gemini server
    DidierMalenfantD DidierMalenfant

    @LoudLemur said in Agate - A simple gemini server:

    What is the procedure to try and install this on Cloudron?

    • Make sure your Cloudron backups are up to date
    • Clone the app's repo from https://code.malenfant.net/didier/agate-app.git
    • Install the cloudron CLI
    • Login to your cloudron server
    • CD into the cloned repo's folder
    • Type cloudron install --image:didiermalenfant/net.malenfant.agate:latest
    • Enter the subdomain you want to install the app at.

    Let me know if you encounter any issues. This is pre-release software but it would be good to get feedback from other people too.

    App Wishlist

  • Mastodon migration
    DidierMalenfantD DidierMalenfant

    It looks like the migration went smoothly. I'll put together a blog post to details the steps I took.

    Thank you again for all the help!

    Mastodon

  • Trying to package Agate - A Gemini server
    DidierMalenfantD DidierMalenfant

    This is my first foray into Cloudron app packaging, please be kind 😂

    I decided to try and package Agate which is a simple Gemini server.

    I've published the repo and the image online.

    Agate listens on port 1950 which is a standard Gemini port so I used Caddy to respond to Cloudron's health check and I added a tcpPort in the manifest for port 1950.

    Running the docker imager locally (without Cloudron) seems to work ok. I map /app/data to a local folder, define CLOUDRON_APP_DOMAIN to 'localhost' and map ports 80 and 1950 to my local host. I can then see the response on port 80 and the Gemini page when browsing localhost with Lagrange.

    When installing the image on my test server the http port works fine and serves the http response but port 1950 doesn't seem to be forwarded to the container when browsing with Lagrange.

    Anything obvious I'm getting wrong here?

    App Packaging & Development

  • Agate - A simple gemini server
    DidierMalenfantD DidierMalenfant

    @LoudLemur said in Agate - A simple gemini server:

    I think Agate supports multiple users, so that might end up with some confusion, too.

    The way the app is setup in my case is just to serve files located in /app/data/public. You can see the default index.gmi in there after you install; the app. Editing this and setting up the folder structure is left to the user as it's basically gemini stuff and not specific to the app itself.

    I'm going to update the README in the repo to mirror @timconsidine's great step by step instructions on installing the image.

    App Wishlist

  • Agate - A simple gemini server
    DidierMalenfantD DidierMalenfant

    Nice one!

    App Wishlist

  • Agate+ (dual protocol server to serve gemini/http from one source)
    DidierMalenfantD DidierMalenfant

    Testing it now...

    • You need a chmod +x cld.sh in the repo.
    • The installation never completes for me. It gets stuck at Waiting for propagation of newsite.malenfant.dev even though the DNS is updated. The app doesn't seem to launch.

    Could be something with the DNS on cloudflare... Log shows:

    Jul 16 17:28:25 box:dns/waitfordns resolveIp: Checking A for newsite.malenfant.dev at 162.159.38.40
    Jul 16 17:28:25 box:dns/waitfordns resolveIp: No A. Checking CNAME for newsite.malenfant.dev at 162.159.38.40
    Jul 16 17:28:25 box:dns/waitfordns isChangeSynced: NS davina.ns.cloudflare.com (162.159.38.40) errored when resolve newsite.malenfant.dev (A): Error: queryCname ENODATA newsite.malenfant.dev
    

    but if I ping newsite.malenfant.dev from the command line it gets resolved correctly... odd.

    Could it be that the domain is hardcoded in cld.sh?

    # Generate self-signed wildcard certificate for all subdomains
    echo "Generating self-signed wildcard certificate for *.appx.uk..."
    # Extract the base domain (appx.uk) from CLOUDRON_APP_DOMAIN
    BASE_DOMAIN="appx.uk"
    WILDCARD_DOMAIN="*.${BASE_DOMAIN}"
    
    App Wishlist

  • Agate+ (dual protocol server to serve gemini/http from one source)
    DidierMalenfantD DidierMalenfant

    Latest update works! Thanks for the fixes.

    I'm going to play with it for a bit but I'll leave a few more things I noticed in case you want to address those too:

    • If you do git add --chmod=+x cld.sh locally you can then commit the executable flag with your repo and skip a step in the README.
    • The cld.sh script should probably have a set -e line at the top (after the #!/bin/bash) to make sure the script stop executing if something goes wrong with one of the commands.
    • Currently everything in /app/data is owned by root and I believe agate itself is launched as a root owned app. It's probably safer to make all the files in in /app/data owned by cloudron:cloudron and launch programs with /usr/local/bin/gosu cloudron:cloudron to run as the cloudron user. I might be off here but that was my understanding of recommended behavior looking at the documentation. Someone else can deny or confirm.

    Great job on the app!

    App Wishlist

  • Restoring a psql dump from another instance
    DidierMalenfantD DidierMalenfant

    I'm moving my peer tube instance over to my Cloudron server and I'm trying to follow their instructions on how to to migrate it.

    I have a dump of the database but trying to restore it on the Cloudron instance is difficult because I seem to lack privileges in order to delete and/or recreate the database.

    This is what I'm currently trying:

    PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} pg_restore -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} --data-only --format=custom --schema=public --no-owner --role=${CLOUDRON_POS
    TGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} peertube_prod-dump.db
    

    which fails because of the existing data in the database:

    ...
    DETAIL:  Key (id)=(1) already exists.
    CONTEXT:  COPY account, line 1
    pg_restore: error: COPY failed for table "actor": ERROR:  duplicate key value violates unique constraint "actor_pkey"
    ...
    

    Trying to delete the db and recreate it with:

    PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} pg_restore -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} --clean --create --format=custom --schema=public --no-owner --role=${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} peertube_prod-dump.db
    

    also fails with:

    pg_restore: error: could not execute query: ERROR:  database "peertube_prod" does not exist
    Command was: DROP DATABASE peertube_prod;
    pg_restore: error: could not execute query: ERROR:  permission denied to create database
    Command was: CREATE DATABASE peertube_prod WITH TEMPLATE = template0 ENCODING = 'UTF8' LOCALE_PROVIDER = libc LOCALE = 'C.UTF-8';
    pg_restore: error: reconnection failed: connection to server at "postgresql" (xxxxx), port 5432 failed: FATAL:  no pg_hba.conf entry for host "xxxxx", user "userXXXXXX", database "peertube_prod", no encryption
    

    which seems to be because it's trying to recreate the original db and not the one that the Cloudron server expects.

    PeerTube

  • Mastodon migration
    DidierMalenfantD DidierMalenfant

    First post here. I'm about to do exactly this. I've setup a test mastodon app to play with it and simulate the steps of the migration. There are a few things that I can't do (I'm a developer but not a great web expert).

    Migration requires stopping the mastodon server. On the Cloudron app I can't seem to use systemctl stop 'mastodon-*.service' as is says the server wasn't launched with systemd.

    There are also a few tootctl commands I need to perform. Currently when I try to do even a simple /app/code/bin/tootctl --version I get the following warning:

    /root is not writable.
    Bundler will use `/tmp/bundler20250615-xxxx-xxxxxxxx' as your home directory temporarily.
    

    Is this something I should worry about?

    Thank for the help in advance. I can report my progress on here when I start doing the actual migration probably next week.

    Mastodon

  • Mastodon migration
    DidierMalenfantD DidierMalenfant

    Ok it seems like 'Enable Recovery Mode' is the way to do this on Cloudron. I should then be able to replace the posgresql database with the one that is dumped from my masto.host server.

    On the masto.host side I can generate a new backup from live data after stopping the server from the control panel and that will give me an option to also download the remote media cache and restore that too.

    I'm told that I can generate the REDIS database from the PostgreSQL database after importing it over.

    I also have to set a short TTL on my domain a couple of days before doing this so that the new IP gets picked up rapidly.

    Is the folder organisation for the Mastodon app on Cloudron pretty much standard (for things like the cache, emojis, etc...)?

    Mastodon

  • Trying to package Agate - A Gemini server
    DidierMalenfantD DidierMalenfant

    I use Lagrange too. My main capsule (as they are known) is at gemini://gemini.malenfant.net

    To answer your question, it's a bit of a throwback to simpler times. I post different things on my gemini site sometimes, the crowd reading it is different too. A bit like Twitter vs Mastodon kinda thing.

    App Packaging & Development

  • Is it possible to build an app/container that you can just ssh into?
    DidierMalenfantD DidierMalenfant

    I use containers for FPGA development, mainly to use Intel Quartus on macOS.

    If I ended up having a pretty beefy server to power my Cloudron, I was wondering if it was possible/feasible to build an app/container that contains an install of Quartus (similar to the one linked to above) but that wouldn't have any other purpose than for me to be able to ssh into and remote build projects.

    Would that be do-able?

    Support

  • Agate - A simple gemini server
    DidierMalenfantD DidierMalenfant

    @timconsidine said in Agate - A simple gemini server:

    If it were built into your agate deployment, would that deliver an app which effectively serves both gemini and http ?

    It looks like it could work. What I'm not sure is:

    • How do we make it an option so that people who don't want http can have it off.
    • It doesn't seem to return when launched so how do we run both this and agate side by side?
    • How safe is the http server for this? The one I use for the health check, Caddy, is pretty well supported and widely used. I don't know about this one.
    App Wishlist

  • Trying to package Agate - A Gemini server
    DidierMalenfantD DidierMalenfant

    @robi said in Trying to package Agate - A Gemini server:

    Are there any HTTP browsers that have added gemini support?

    The problem is when you search for gemini plugin you get results for Google's AI stuff instead...

    App Packaging & Development

  • Agate - A simple gemini server
    DidierMalenfantD DidierMalenfant

    I think as an option it's a really good idea. I'll look into it if I get a chance.

    App Wishlist

  • Trying to package Agate - A Gemini server
    DidierMalenfantD DidierMalenfant

    Little 0.3.1 update:

    • docker image is now tagged by cloudron build
    • info page for http requests now has a clickable link to the gemini site itself

    I'm having trouble pushing the docker image to my repository when it's tagged with something like 20250708-205348-96303b94f. It does push the image but it doesn't show in the list of tags for the repo.

    Wonder if I'm doing something wrong...

    App Packaging & Development
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • Categories
  • Recent
  • Tags
  • Popular
  • Bookmarks
  • Search