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
randyjcR

randyjc

@randyjc
About
Posts
60
Topics
18
Shares
0
Groups
0
Followers
0
Following
2

Posts

Recent Best Controversial

  • Memos - A privacy-first, lightweight note-taking service.
    randyjcR randyjc

    Features

    • Privacy first
      Keep your own data by yourself. All data generated at runtime is saved in the SQLite database file.
    • Plain text with Markdown
      All content will be saved as plain text, not HTML. And lots of useful markdown syntax are supported.
    • Lightweight but Powerful
      Using Go + React.js + SQLite architecture, the overall package is very lightweight.
    • Customizable
      You can customize the server name, icon, description, custom system style and execution script, etc.
    • Open Source Completely
      memos believes that open source is the future, and all code is already open source in GitHub.
    • Free Forever
      All features are free forever and will never be charged in any form or content.

    Github
    Demo

    I want to learn how to package, so this will be my first attempt. somewhere over the weekend.

    Don't expect a working package from me over time. But I thought it's worth mentioning this app here.

    App Wishlist

  • [Guide] Auto Deploy of Hugo via Gitea + Drone CI
    randyjcR randyjc

    I was searching for a way to install Hugo together with Gitea and came across @fbartels excellent software to make this happen.

    I ran into some bumps getting everything working properly, so I wanted to share my experience with this great community in hopes it will help others.

    PS: As I mentioned on my site, if you find fbartels package useful, please consider making a donation to show your appreciation.

    You can find the full guide at: https://cloudbasis.nl the guide below is without the extra added info of what what is per software.
    Below is a condensed version of the guide without the extra background info per software:

    Step-by-Step Guide

    Let's get started with deploying Surfer and Gitea on your Cloudron server. Once complete, we'll set up the Drone CI solution to automate content deployment to your website via Drone > Gitea > Surfer.

    Note: Never perform these steps on your Cloudron Server itself. Utilize any Linux-compatible device, like WSL for Windows, or any other Linux device. Please be aware that Windows support for this setup has not been tested by me; I use WSL as a recommended option.

    Preparation

    Choose a Linux-compatible device for this setup. In my case, I utilize a Docker LXC (Proxmox) from tteck to enjoy a fully dockerized environment available 24/7 when needed.

    On the Docker LXC, install the following packages using apt:

    docker-compose-plugin
    git
    jq
    make
    npm
    hugo
    

    Ensure that npm is updated to the latest version to avoid errors with Cloudron CLI:

    npm install -g n
    n stable
    

    The Cloudron CLI can be installed on Linux using the following command:

    sudo npm install -g cloudron
    

    Docker Hub

    Create yourself an account on Docker Hub. Remember your username as you will need that later in this guide.

    Installation

    Drone CI

    1. Go to your desired folder on your Linux machine.

    2. Login to your own Cloudron Instance via Cloudron CLI:

      cloudron login my.yourowndomain.nl
      
    3. Clone the repo and cd into it:

      git clone https://github.com/fbartels/cloudron-drone-app && cd cloudron-drone-app
      
    4. Do the magic with the following command:

      DOCKER_REPO=your-docker-hub-user make install
      

      Info: Because you used cloudron login, your Drone custom app will be deployed on your Cloudron server. The URL will be https://drone.yourowndomain.nl

    5. Create an OAuth at your own Gitea environment.
      See this for more information.

    6. Back on your Linux machine (with this command, you go into the bash of your Drone instance at Cloudron):

      make exec
      
    7. Edit the following file:

      nano .env
      
    8. Fill in your URL, Client ID, and Secret from Gitea.

      DRONE_GITEA_SERVER=https://git.yourowndomain.nl
      DRONE_GITEA_CLIENT_ID=<see step 5>
      DRONE_GITEA_CLIENT_SECRET=<see step 5>
      

      The rest is already pre-filled; just don't touch it.

    9. When you've successfully made your edits, you'll have to restart your Drone application. You can do this by executing:

      cloudron restart
      

    Runner

    We have to make some edits to the original script start.sh to make it work.

    1. nano runner/start.sh
      
      #!/bin/sh
      
      set -x
      
      random_string() {
              LC_CTYPE=C tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c32
      }
      
      update_env_file () {
          varname="$1"
          varvalue="$2"
          if ! grep -q "$varname" ./.env; then
              echo "$varname=$varvalue" >> ./.env
          else
              sed -i "/$varname/c $varname=$varvalue" ./.env
          fi
      }
      
      cloudron pull /app/data/.env .env
      
      . ./.env
      
      update_env_file DRONE_RPC_SERVER "https://$DRONE_SERVER_HOST"
      update_env_file DRONE_RPC_HOST "$DRONE_SERVER_HOST"
      update_env_file DRONE_RUNNER_CAPACITY "$(nproc)"
      update_env_file DRONE_RUNNER_NAME "$(hostname)"
      
      docker compose up -d
      

      The above is a bit different from the original script; I've added the following line:

      update_env_file DRONE_RPC_HOST "$DRONE_SERVER_HOST"
      

      and I've replaced docker-compose with docker compose.

    2. Save that; we will return to this later.

    Surfer

    1. Navigate to your Cloudron app: Surfer (example: https://blog.yourowndomain.nl).
    2. Click on the link 'Manage your files in your browser'; this will redirect you to the admin panel of Surfer.
      You can log in using the same credentials you use for your Cloudron environment.
    3. On the top right, click on the three dots to open the menu. From there, click on 'Access Tokens'.
      Click on the button 'Create Access Token' and save that somewhere in your notes because you'll need that in the next steps.

    Gitea

    If you haven't created any repo yet for your Gitea environment, I recommend you to do that now.
    Once you've done that, you can use that repo to host your code from Hugo.

    Example: randyjc/example_hugo - example_hugo - Gitea (cloudbasis.nl)

    Drone CI

    1. Go back to your Drone instance and activate the repository that you have just created on your Gitea environment.

      Info: If you don't see your repo, click on SYNC (top right button).

    2. Once it's activated, you'll be presented with the settings page.

    3. Go to Secrets (not under Organization) and click on the button '+ NEW SECRET'.

    4. Fill in the following:

      • Name: surftoken
      • Value: <see step 3 under surfnet>
      • Make sure that 'Allow Pull Requests' is unchecked.
    5. Click 'Create'.

    Runner

    1. Go back to your terminal and run the following command:

      cd runner/ && ./start.sh
      

      Info: When executing the script outside this folder, you'll get the error that it cannot find any configuration file.

      Output should look like this:

      + cloudron pull /app/data/.env .env
      + . ./.env
      + DRONE_GITEA_SERVER=https://git.yourowndomain.nl
      + DRONE_GITEA_CLIENT_ID=<DELETED-FOR-SECURITY-REASONS>
      + DRONE_GITEA_CLIENT_SECRET=<DELETED-FOR-SECURITY-REASONS>
      + DRONE_RPC_SECRET=<DELETED-FOR-SECURITY-REASONS>
      + DRONE_DATABASE_SECRET=<DELETED-FOR-SECURITY-REASONS>
      + DRONE_SERVER_HOST=drone.yourowndomain.nl
      + DRONE_DATABASE_DATASOURCE=postgres://<DELETED-FOR-SECURITY-REASONS>?sslmode=disable
      + update_env_file DRONE_RPC_SERVER https://drone.yourowndomain.nl
      + varname=DRONE_RPC_SERVER
      + varvalue=https://drone.yourowndomain.nl
      + grep -q DRONE_RPC_SERVER ./.env
      + echo DRONE_RPC_SERVER=https://drone.yourowndomain.nl
      + update_env_file DRONE_RPC_HOST drone.yourowndomain.nl
      + varname=DRONE_RPC_HOST
      + varvalue=drone.yourowndomain.nl
      + grep -q DRONE_RPC_HOST ./.env
      + echo DRONE_RPC_HOST=drone.yourowndomain.nl
      + nproc
      + update_env_file DRONE_RUNNER_CAPACITY 2
      + varname=DRONE_RUNNER_CAPACITY
      + varvalue=2
      + grep -q DRONE_RUNNER_CAPACITY ./.env
      + echo DRONE_RUNNER_CAPACITY=2
      + hostname
      + update_env_file DRONE_RUNNER_NAME drone-ci
      + varname=DRONE_RUNNER_NAME
      + varvalue=drone-ci
      + grep -q DRONE_RUNNER_NAME ./.env
      + echo DRONE_RUNNER_NAME=drone-ci
      + docker compose up -d
      [+] Running 1/0
       ✔ Container drone-agent  Running 
      
    2. If you run docker ps, you can see the container is running:

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3c7518132092 drone/drone-runner-docker:1.8 "/bin/drone-runner-d…" 1 minute ago Up 1 minute 3000/tcp drone-agent

    Hugo

    You can run Hugo on any machine you like, as long as you have git and Hugo installed.
    For simplicity of this guide, I just use the exact same machine where I have the runner running as well.

    1. Go to your terminal where you have Hugo and git available and cd to your desired location for your git repo.

    2. Once there, follow these simple commands:

      hugo new site mywebsitename && cd mywebsitename
      git init
      git remote add origin https://git.yourowndomain.nl/<user>/<your-git-repo>.git
      git submodule add https://github.com/budparr/gohugo-theme-ananke.git themes/ananke
      echo theme = '"ananke"' >> config.toml
      hugo new posts/hello-world.md
      hugo -D
      
    3. You'll now have to create the config file for your Drone CI instance so that the runner knows what to do with it:

      nano .drone.yml
      
    4. Paste the following inside that file:

      ---
      kind: pipeline
      name: blog_website
      concurrency:
        limit: 1
      steps:
        - name: submodules
          image: alpine/git
          commands:
            - git submodule update --init --recursive --remote
        - name: build
          image: plugins/hugo
          settings:
            hugo_version: 0.79.0
            extended: true
            validate: true
        - name: deploy
          image: 'fbartels/cloudron-surfer:5.12.2'
          environment:
            SURFTOKEN:
              from_secret: surftoken
          commands:
            - surfer --version
            - touch public/ # touch folder to avoid problems with timestamps
            - surfer put --token $SURFTOKEN --server blog.yourowndomain.nl ./public/* / 
          when:
            branch:
              - main
            event:
              exclude:
                - pull_request
      

      Save & exit the file.

    5. Follow these commands:

      git add .
      git commit -m "first push to Gitea"
      git push origin main
      

    If everything went well, you have now pushed all the files to your Gitea, and your Drone runner is probably already busy working on deploying it.

    Success!

    Navigate to your domain where you have deployed your Surfer instance, and you'll see that your Hugo website is now successfully deployed.

    Sources
    • Github: fbartels
    • Cloudron Community User: Girish
    • Cloudron Community User: vjvanjungg
    • Cloudron Community User: fbartels
    • Drone Docs
    • Surfer Docs
    Discuss

  • Hoarder - Mymind alternative - The Ultimate All-In-One Bookmark and Note Taking App
    randyjcR randyjc

    I’ve been testing this app on PikaPods, and I immediately fell in love with it. It’s super easy to use, and the variety of things you can do is amazing. It’s basically an ‘app hoarder’ you can store bookmarks, take notes, save images and quotes, and even archive stuff via HTML or screenshots. Plus, you can create lists and track everything with RSS feeds, making it a damn useful all-in-one solution. If I could host it on my own Cloudron environment, it would definitely be my main go-to.

    Example:
    I wanted to use a smart list that automatically includes anything tagged with music, but smart lists don’t allow wildcards or partial tag matching. To solve this, I added a custom AI prompt to ensure music-related content is always tagged correctly:

    If the content is about music (songs, artists, albums, concerts, or playlists), always add the tag "music".  
    If it's specifically a music video, also add "music video".  
    Include relevant genres like "rock", "pop", or "jazz" when identifiable.  
    Do not tag unrelated content.  
    Ensure all tags are in English.
    

    And voilà problem solved! Now, my smart list works exactly as I wanted, making the app even more powerful for organizing content.

    App Wishlist

  • Access Control
    randyjcR randyjc

    IT-Tools is currently only usable for Cloudron users, but I would like it to be accessible to anyone who visits my URL.

    Therefore, the option "Leave user management to the app" actually means that this app is open for use by anyone.

    IT-Tools

  • Homebox - the inventory and organization system built for the Home User
    randyjcR randyjc

    I installed this via tipi for testing, and I'm really amazed by it. I was first looking into SnipeIT but that was way to advanced for home usage.

    I vote for this to have it on Cloudron 🙂

    App Wishlist

  • Read-Only file system
    randyjcR randyjc

    Ah right thanks for helping 🙂

    I also see, that there is already an topic about this.
    https://forum.cloudron.io/topic/8301/move-bridges-to-app-data-bridges/6

    My bad..

    RSS-Bridge

  • Internal Server Error: profile.firstname / profile.lastname / profile.birthday
    randyjcR randyjc

    I've reproduced it over here:
    https://files.cloudbasis.nl/yAhu8/TImiNulo31.gif

    https://files.cloudbasis.nl/yAhu8/VayuVuDe71.gif

    Humhub

  • Hardware transcoding is not working
    randyjcR randyjc

    Fixed it:
    Create:

    /etc/udev/rules.d/99-dri.rules

    paste:

    KERNEL=="card[0-9]*", GROUP="video", MODE="0666"
    KERNEL=="renderD*", GROUP="video", MODE="0666"
    

    source:

    https://emby.media/community/index.php?/topic/67576-omv-docker-emby-problem-with-vaapi/&do=findComment&comment=1002606

    Emby

  • Reducing backup costs / Backup to pCloud
    randyjcR randyjc

    You could try/experiment with using rclone.
    create a config for your desired mount, for example google drive.
    Mount that via systemd and then point your backups to that location.

    For example:
    d39b4f53-a684-4ef5-a73c-d211fed3c4e6-image.png

    5763fb36-5be4-40f8-89e4-1c69e8a87378-image.png

    [Unit]
    Description=rclone Service Google Drive Mount
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    Type=notify
    Environment=RCLONE_CONFIG=/root/.config/rclone/rclone.conf
    RestartSec=5
    ExecStart=/usr/bin/rclone mount google:cloudron /mnt/google \
    # This is for allowing users other than the user running rclone access to the mount
    --allow-other \
    # Dropbox is a polling remote so this value can be set very high and any changes are detected via polling.
    --dir-cache-time 9999h \
    # Log file location
    --log-file /root/.config/rclone/logs/rclone-google.log \
    # Set the log level
    --log-level INFO \
    # This is setting the file permission on the mount to user and group have the same access and other can read
    --umask 002 \
    # This sets up the remote control daemon so you can issue rc commands locally
    --rc \
    # This is the default port it runs on
    --rc-addr 127.0.0.1:5574 \
    # no-auth is used as no one else uses my server
    --rc-no-auth \
    # The local disk used for caching
    --cache-dir=/cache/google \
    # This is used for caching files to local disk for streaming
    --vfs-cache-mode full \
    # This limits the cache size to the value below
    --vfs-cache-max-size 50G \
    # Speed up the reading: Use fast (less accurate) fingerprints for change detection
    --vfs-fast-fingerprint \
    # Wait before uploading
    --vfs-write-back 1m \
    # This limits the age in the cache if the size is reached and it removes the oldest files first
    --vfs-cache-max-age 9999h \
    # Disable HTTP2
    #--disable-http2 \
    # Set the tpslimit
    --tpslimit 12 \
    # Set the tpslimit-burst
    --tpslimit-burst 0
    ExecStop=/bin/fusermount3 -uz /mnt/google
    ExecStartPost=/usr/bin/rclone rc vfs/refresh recursive=true --url 127.0.0.1:5574 _async=true
    Restart=on-failure
    User=root
    Group=root
    
    [Install]
    WantedBy=multi-user.target
    # https://github.com/animosity22/homescripts/blob/master/systemd/rclone-drive.service
    
    Discuss backups backblaze

  • LibrePhotos
    randyjcR randyjc

    https://docs.librephotos.com/docs/user-guide/first-steps#how-to-import-photos-from-an-external-nextcloud-instance

    I think this is an awesome feature to combine with your photo management software. I'm currently testing different kinds of photo apps to find a workflow for uploading all my photos to a separate photo app for sharing. However, this feature makes it really easy for me, as it will simply copy the data over to your LibrePhotos app.

    App Wishlist

  • How to setup object storage for your applications on Cloudron
    randyjcR randyjc

    You could also use rclone together with mergerfs to create some kind of layer.
    like
    /mnt/remote
    /mnt/local
    /mnt/mergerfs

    You then write stuff locally, and it'll upload stuff in the background to your remote storage.

    You can look for inspiration @ https://github.com/l3uddz/cloudplow

    Discuss object storage storage idrivee2

  • Password protected stream
    randyjcR randyjc

    App Proxy does work with OIDC. But then the owncast original URI stays public.

    I could give it some random long hash as subdomain but that doesn’t feel secure enough.

    Owncast

  • Fresh installed but fail to start
    randyjcR randyjc

    Got the exact same, I think it needs some extra love from the Devs haha

    Jun 27 10:23:31 box:tasks update 371: {"percent":100,"message":"Done"}
    Jun 27 10:23:31 box:tasks setCompleted - 371: {"result":null,"error":null}
    Jun 27 10:23:31 box:tasks update 371: {"percent":100,"result":null,"error":null}
    Jun 27 10:23:31 box:taskworker Task took 44.469 seconds
    Jun 27 10:23:32 ==> Starting Sterling-PDF
    Jun 27 10:23:32 error: exec: "exec": executable file not found in $PATH
    Jun 27 10:23:33 ==> Starting Sterling-PDF
    Jun 27 10:23:33 error: exec: "exec": executable file not found in $PATH
    Jun 27 10:23:35 ==> Starting Sterling-PDF
    Jun 27 10:23:35 error: exec: "exec": executable file not found in $PATH
    Jun 27 10:23:39 ==> Starting Sterling-PDF
    Jun 27 10:23:39 error: exec: "exec": executable file not found in $PATH
    Jun 27 10:23:43 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    Jun 27 10:23:46 ==> Starting Sterling-PDF
    Jun 27 10:23:46 error: exec: "exec": executable file not found in $PATH
    Jun 27 10:23:53 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    Jun 27 10:23:59 ==> Starting Sterling-PDF
    Jun 27 10:23:59 error: exec: "exec": executable file not found in $PATH
    Jun 27 10:24:03 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    Jun 27 10:24:13 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    Jun 27 10:24:23 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    Jun 27 10:24:25 ==> Starting Sterling-PDF
    Jun 27 10:24:25 error: exec: "exec": executable file not found in $PATH
    Jun 27 10:24:33 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    Jun 27 10:24:43 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    Jun 27 10:25:03 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    Jun 27 10:25:13 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    Jun 27 10:25:17 ==> Starting Sterling-PDF
    Jun 27 10:25:17 error: exec: "exec": executable file not found in $PATH
    localstorage undefined
    Jun 27 10:25:23 => Healtheck error: Error: connect EHOSTUNREACH 172.18.20.202:8080
    
    Stirling-PDF

  • Internal Server Error: profile.firstname / profile.lastname / profile.birthday
    randyjcR randyjc

    Confirmed fix btw I’ll close the upstream ticket.

    Humhub

  • Logo for unregistered user (public) does not change
    randyjcR randyjc

    Hi there,

    Thank you for adding Memos to Cloudron! I noticed that the ‘server name’ and ‘icon’ do not update for unregistered users.

    When navigating to the login/auth page, the server name and icon appear to update correctly.

    I also saw a GitHub bug related to this issue, but it looks like it was resolved there:
    GitHub Issue

    Could this be an issue on Cloudron’s end?

    8adf66a2-1645-45fa-bb20-8b8b827994fa-image.png

    Memos

  • Plugins disabled?
    randyjcR randyjc

    Hello,

    I'm using Uptime Kuma within my department to test certain robots. I was also planning to use the Cloudflare Tunnel, but to my surprise, the plugin isn't enabled. I also wanted to make use of the Apprise notification method, and that one isn't enabled, either.

    Does anyone know how to enable those on my Cloudron instance? Additionally, in the Uptime Kuma docs, I don't see the path for the Chrome/Chromium Executable. Does anyone know that?

    Thank you 🙂

    BR,
    Randy

    Uptime Kuma

  • DoH and DoT unsigned on iOS
    randyjcR randyjc

    Hello,

    Yesterday, I was in contact with support (@girish), and I'm trying to get DoH and DoT to work on my device. It does work, but when importing the configuration file, it complains that it is unsigned. Despite the complaint, the DNS requests are coming through. However, the fact that it is unsigned makes me a bit uneasy about the security of the data.

    We have checked the certificates for the wildcard domain, and they are properly set, so it should work as designed. However, I was wondering if more people are experiencing this issue, or if it's happening only to me.

    07038bcd-f824-44c5-8b45-5d97c919b3ad-image.png
    4785e5a7-a49f-48e4-a5e0-2ce98aa18779-image.png
    2d146d26-0e0f-4e66-b400-71e23fa32d12-image.png

    AdGuard Home

  • Since update css broken?
    randyjcR randyjc

    @robi was looking exactly for this info. Thank you 🙂

    Teddit

  • PhotoPrism - Personal Photo Management powered by Go and Google TensorFlow
    randyjcR randyjc

    @nebulon if multi-user won’t be supported, will this app be skipped in cloudron?

    App Wishlist

  • Anytype (finally) released for public beta
    randyjcR randyjc

    Wow…. How can we make this work for Cloudron.. this is exactly what I need 🔥🔥

    App Wishlist
  • Login

  • Don't have an account? Register

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