Published: Aug 22, 2024 by Isaac Johnson
Today we’ll do a quick look at a couple of Open-Source tools that have been on my list to check out; Commafeed and TiddlyWiki. The first, Commafeed is a simple container-based RSS/Feed reader that can run as a single container. I take a moment to convert that to a Kubernetes manifest and host it showing how it works and how to add users.
With TiddlyWiki, it has a desktop client we’ll look at in WSL as well as Windows and compare the look and feel. I didn’t understand this tool at first, but now I find it really clever. It’s building a self-contained HTML wiki (single HTML file) that can be updated in the client or just in a browser (albeit you have to save it yourself).
Let’s dig in.
CommaFeed
I saw an article on MariusHosting on adding CommaFeed to a NAS
From the Docker hub docs we can see a one-liner:
$ docker run --name commafeed --detach --publish 8082:8082 --restart unless-stopped --volume /path/to/commafeed/db:/commafeed/data --memory 256M athou/commafeed:latest-h2
Or Docker-compose
services:
  commafeed:
    image: athou/commafeed:latest-h2
    restart: unless-stopped
    volumes:
      - /path/to/commafeed/db:/commafeed/data
    deploy:
      resources:
        limits:
          memory: 256M
    ports:
      - 8082:8082
That can be turned into a Kubernetes YAML manifest
apiVersion: apps/v1
kind: Deployment
metadata:
  name: commafeed
spec:
  replicas: 1
  selector:
    matchLabels:
      app: commafeed
  template:
    metadata:
      labels:
        app: commafeed
    spec:
      containers:
      - name: commafeed
        image: athou/commafeed:latest-h2
        ports:
        - containerPort: 8082
        volumeMounts:
        - name: commafeed-data
          mountPath: /commafeed/data
      volumes:
      - name: commafeed-data
        persistentVolumeClaim:
          claimName: commafeed-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: commafeed-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi  # Adjust storage size as needed
---
apiVersion: v1
kind: Service
metadata:
  name: commafeed-service
spec:
  selector:
    app: commafeed
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8082
  type: ClusterIP
I’ll now install it
isaac.johnson@WS-P262MXQFLV 2024-08-miscapps % kubectl apply -f ./commafeed.yaml -n commafeed
deployment.apps/commafeed created
persistentvolumeclaim/commafeed-pvc unchanged
service/commafeed-service unchanged
Which came up
isaac.johnson@WS-P262MXQFLV 2024-08-miscapps % kubectl get pods -n commafeed
NAME                         READY   STATUS    RESTARTS   AGE
commafeed-7797fddbf4-6w55g   1/1     Running   0          10m
I can then port-forward to test
isaac.johnson@WS-P262MXQFLV 2024-08-miscapps % kubectl port-forward svc/commafeed-service -n commafeed 8888:80
Forwarding from 127.0.0.1:8888 -> 8082
Forwarding from [::1]:8888 -> 8082
Handling connection for 8888
Handling connection for 8888
Handling connection for 8888
We can login with the default admin login and admin for password
I’ll want to change that password. To do so, go to our settings
There we can go to the profile tab and change our email and password
Next, I’ll subscribe to a feed. Why not our own? We can click the “+” to add a feed and type in the URL
I can then change the name and click subscribe
I can now see the feeds with the last 10 blog posts
I can then just click the heading and read the blog post inline
Users
If we wish to use something other than admin, or add more users, we can go to “Manage users” under the admin user profile, then click “+” to add a user
I’ll make an isaac user this time
When I log back in with that user, we can see the username in the upper right and that I still have admin powers
Ingress
This seems like a pretty solid app. Let’s expose it with a TLS ingress
I need to make an A Record. Today I’ll use GCP CloudDNS
$ gcloud dns --project=myanthosproject2 record-sets create commafeed.steeped.space --zone="steepedspace" --type="A" --ttl="300" --rrdatas="75.73.224.240"
NAME                      TYPE  TTL  DATA
commafeed.steeped.space.  A     300  75.73.224.240
I can then create the Ingress YAML with the CloudDNS Cluster Issuer and apply it
$ cat commafeedingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: gcpleprod2
    ingress.kubernetes.io/proxy-body-size: "0"
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.org/client-max-body-size: "0"
    nginx.org/proxy-connect-timeout: "3600"
    nginx.org/proxy-read-timeout: "3600"
    nginx.org/websocket-services: commafeed-service
  name: commafeedingress
  namespace: commafeed
spec:
  rules:
  - host: commafeed.steeped.space
    http:
      paths:
      - backend:
          service:
            name: commafeed-service
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - commafeed.steeped.space
    secretName: commafeed-tls
    
$ kubectl apply -f ./commafeedingress.yaml
ingress.networking.k8s.io/commafeedingress created
Soon I see the cert issued
builder@LuiGi:~/Workspaces/jekyll-blog$ kubectl get cert -n commafeed
NAME            READY   SECRET          AGE
commafeed-tls   False   commafeed-tls   45s
builder@LuiGi:~/Workspaces/jekyll-blog$ kubectl get cert -n commafeed
NAME            READY   SECRET          AGE
commafeed-tls   True    commafeed-tls   3m8s
I can now login to commafeed.steeped.space and access my feeds
Tiddly Wiki
I saw a post on the NewStack about TiddlyWiki
I was interested in checking out the Desktop client in both WSL and Windows.
We can go to releases and download a client. Here I’ll use the 20th release and download it to WSL
I can then unzip it
builder@LuiGi:~/Workspaces/TiddlyWiki$ unzip tiddlydesktop-linux64-v0.0.20.zip
Archive:  tiddlydesktop-linux64-v0.0.20.zip
   creating: TiddlyDesktop-linux64-v0.0.20/
   creating: TiddlyDesktop-linux64-v0.0.20/pnacl/
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_pnacl_sz_nexe
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_libpnacl_irt_shim_a
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_crtbegin_o
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_pnacl_json
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_crtend_o
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_pnacl_llc_nexe
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_crtbegin_for_eh_o
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_libcrt_platform_a
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_libgcc_a
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_ld_nexe
  inflating: TiddlyDesktop-linux64-v0.0.20/pnacl/pnacl_public_x86_64_libpnacl_irt_shim_dummy_a
  inflating: TiddlyDesktop-linux64-v0.0.20/credits.html
... snip ...
In order to run, I needed some missing packages install, like libnss3
$ sudo apt update && sudo apt install libnss3-dev libgdk-pixbuf2.0-dev libgtk-3-dev libxss-dev
I could then run it (./nw)
I’ll start by creating a new wiki
This prompts me to save a file which I’ll do so back in Windows space
I then had two windows up for this Wiki
I’m going to pivot to a Windows client which I installed to see how it compares
Windows was quite suspicious of the file
I opened the saved TiddlyWiki I had made earlier. It looked very HTML 1.0
I decided to create a new one (this time picking Pre-release)
This looks much better
I’ll create a new Tiddler and add some Wiki code to it
And I can see it rendered when I click the checkbox to save
What is really nice is that the HTML file it is saving is completed readable in a browser
The difference is that if you edit things then “save” just downloads a fresh HTML file which would be up to you to save somewhere
Summary
We took a quick look at two good OS tools: commafeed and tiddlywiki. They are both quite nice for what they do. I’ll likely use my Commafeed like a self-hosted Google Reader and I’ll want more time to play with TiddlyWiki to see if I keep it over some of my other Wiki tooling.
























