No description
  • Shell 60.9%
  • Makefile 22.5%
  • Dockerfile 16.6%
Find a file
Ricardo a8f4c6f3c6 Add CI/CD workflow for automated Docker image builds
GitHub Actions workflow builds and pushes to Docker Hub and GHCR on
every push to main and on manual trigger (workflow_dispatch with
optional version override). Tags: latest, version, sha-<commit>.

Update README to document pre-built image install flow so users
can skip the local Docker build step entirely.
2026-02-17 16:37:36 +01:00
.github/workflows Add CI/CD workflow for automated Docker image builds 2026-02-17 16:37:36 +01:00
.dockerignore Initial FeedLand Cloudron package 2026-02-17 15:06:10 +01:00
.gitignore Initial FeedLand Cloudron package 2026-02-17 15:06:10 +01:00
CLAUDE.md Add CI/CD workflow for automated Docker image builds 2026-02-17 16:37:36 +01:00
CloudronManifest.json Initial FeedLand Cloudron package 2026-02-17 15:06:10 +01:00
Dockerfile Initial FeedLand Cloudron package 2026-02-17 15:06:10 +01:00
logo.png Fix schema import and add app icon 2026-02-17 15:22:17 +01:00
Makefile Initial FeedLand Cloudron package 2026-02-17 15:06:10 +01:00
nginx.conf Initial FeedLand Cloudron package 2026-02-17 15:06:10 +01:00
README.md Add CI/CD workflow for automated Docker image builds 2026-02-17 16:37:36 +01:00
start.sh Fix schema import and add app icon 2026-02-17 15:22:17 +01:00

FeedLand for Cloudron

Cloudron app package for FeedLand — Dave Winer's social feed reading environment.

FeedLand brings social features to RSS. Subscribe to feeds, see what others are reading, discover new content together, and share interesting items with a community of readers.

Prerequisites

Install

Pre-built images are published to Docker Hub and GitHub Container Registry on every push to main. No local Docker build required.

# 1. Login to your Cloudron
cloudron login my.cloudron.example

# 2. Install using the pre-built image
cloudron install --image rmdes/feedland-cloudron:latest --location feedland.example.com

On first install, Cloudron will:

  • Provision a MySQL database
  • Configure SMTP for outbound email
  • Set up HTTPS with automatic certificates
  • Import the FeedLand database schema

Once installed, open https://feedland.example.com and create your first account.

Update

cloudron update --image rmdes/feedland-cloudron:latest --app feedland.example.com

Or pin to a specific version:

cloudron update --image rmdes/feedland-cloudron:1.0.0 --app feedland.example.com

Available Image Tags

Images are available from both registries:

  • rmdes/feedland-cloudron (Docker Hub)
  • ghcr.io/rmdes/feedland-cloudron (GitHub Container Registry)
Tag Description
latest Most recent build from main
1.0.0 Version from CloudronManifest.json
sha-abc1234 Pinned to a specific git commit

Building Locally

If you prefer to build from source:

# Requires Docker installed locally
cloudron build --local --no-cache
cloudron install --location feedland.example.com

What Cloudron Handles

If you're coming from the Docker Compose setup, here's what Cloudron replaces:

Docker Compose Cloudron
MySQL container + passwords mysql addon — managed, backed up, credentials rotated
SMTP placeholder config sendmail addon — outbound email, configured automatically
Caddy reverse proxy + HTTPS Cloudron reverse proxy — automatic TLS, domain management
FEEDLAND_DOMAIN env var CLOUDRON_APP_DOMAIN — always correct, even after domain changes
Docker volumes localstorage addon — persistent /app/data, included in backups
docker-compose.yml (5 services) Single container with managed addons

Configuration

Automatic

These are provided by Cloudron on every startup — no manual configuration needed:

  • Database — host, port, username, password, database name
  • Email — SMTP server, port, credentials, sender address
  • Domain — app domain, origin URL, WebSocket URL

Customizable Settings

To change FeedLand settings, edit /app/data/env.sh inside the container:

# Open a shell in the container
cloudron exec --app feedland.example.com

# Edit the settings file
vi /app/data/env.sh

Available settings:

# Allow/disallow new user registration (default: true)
export FEEDLAND_ENABLE_NEW_USERS=true

# Product name shown in UI and emails (default: FeedLand)
export FEEDLAND_PRODUCT_NAME="FeedLand"

# Email confirmation expiry in seconds (default: 86400 = 24 hours)
export FEEDLAND_CONFIRMATION_EXPIRES=86400

# Home page source URL
export FEEDLAND_HOME_PAGE_SOURCE="http://scripting.com/code/feedland/home/index.html"

After editing, restart the app:

cloudron restart --app feedland.example.com

Creating Your First User

  1. Open your FeedLand instance in a browser
  2. Click to create a new account
  3. FeedLand sends a confirmation email

If Email Isn't Working

If Cloudron's email delivery isn't configured yet, you can confirm users manually:

# Open a shell in the container
cloudron exec --app feedland.example.com

# Find the confirmation code
mysql -h "$CLOUDRON_MYSQL_HOST" -P "$CLOUDRON_MYSQL_PORT" \
  -u "$CLOUDRON_MYSQL_USERNAME" -p"$CLOUDRON_MYSQL_PASSWORD" \
  "$CLOUDRON_MYSQL_DATABASE" \
  -e "SELECT * FROM pendingConfirmations\G"

Then visit https://feedland.example.com/userconfirms?emailConfirmCode=THE_CODE_FROM_ABOVE in your browser.

Architecture

Internet -> Cloudron proxy (HTTPS) -> nginx (:8000) -> FeedLand HTTP (:1452)
                                                     -> FeedLand WebSocket (:1462)

nginx listens on port 8000 and routes traffic based on the WebSocket Upgrade header:

  • WebSocket upgrade requests go to FeedLand's WebSocket server on port 1462
  • All other HTTP requests go to FeedLand's HTTP server on port 1452

File Layout

Path Purpose Backed up?
/app/code/ FeedLand application No (rebuilt on update)
/app/code/config.json Symlink to /run/config.json No (regenerated on startup)
/app/code/privateFiles Symlink to /app/data/privateFiles Yes
/app/data/privateFiles/ Session tokens, user data Yes
/app/data/env.sh Your custom settings Yes
/app/data/.db_initialized First-run marker Yes

Maintenance

# View logs
cloudron logs -f --app feedland.example.com

# Open a shell
cloudron exec --app feedland.example.com

# Restart
cloudron restart --app feedland.example.com

Database Schema Changes

The database schema is only imported on first install. If a FeedLand update requires schema changes, you can re-import:

cloudron exec --app feedland.example.com

# Remove the initialization marker
rm /app/data/.db_initialized

# Exit and restart — schema will be re-imported
exit
cloudron restart --app feedland.example.com

Makefile Shortcuts

If you clone this repo for development, the Makefile provides shortcuts:

make build                              # Build Docker image (no cache)
make build-cached                       # Build Docker image (with cache)
make install                            # Build and install (first time)
make deploy APP=feedland.example.com    # Build and update existing install
make update APP=feedland.example.com    # Update without rebuild
make logs APP=feedland.example.com      # Stream logs
make shell APP=feedland.example.com     # Open a shell
make restart APP=feedland.example.com   # Restart the app