Installing Joplin in kubernetes for free evernote like notetaking.

May 03, 2023
Hi,
I was doing this competitive strategy building for my technology consulting firm. And I needed to document a lot of notes with grate support for attaching screenshots and images. Was going over ken bruke's guide to competitive strategy building.  I could not find a nice binder to document all of my competiton to build a competitive analysis sheet. So decided to go digital, Now I have used various tools before for notetaking. (evernote, apple notes, mkdocs, Markdown systems .. etc ) .  But one of my current goals is to move away from apple products and services and host my own data. I decided to search for a free and open source self hosted options. Also was playing around with k3s and traefik.
Quick google led me to joplin, which seemed like a nice alternative and quite mature too.  I wanted to see if there were any pre-built helm charts.   Came across a nice well maintained chart here

Let's add above repo into our repo list in our local machine with following commands.
helm repo add qjoly https://qjoly.github.io/helm-charts/ 

Now I want to look at the values. 
helm show values qjoly/joplin >> values.yaml

Here was the values.yaml . 
replicaCount: 1

image:
  repository: joplin/server
  pullPolicy: IfNotPresent
  tag: "2.10.9-beta"

database:
  dbname: joplindb
  dbuser: joplinuser
  dbpassword: veryhugepasswordhere
  image:
    repository: postgres
    pullPolicy: IfNotPresent
    tag: 15

joplin:
  base_url: http://ur-domain.tld:22300

mailer:
  enabled: false
  host: mailserver
  noreplymail: noreply@mailserver
  noreplyname: noreplyname@mailserver
  port: 25
  user: usermail
  password: password
  security: none #  none / TLS / STARTLS



imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""


podAnnotations: {}

podSecurityContext:
  fsGroup: 2000

securityContext:
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  #  runAsUser: 1000

service:
  joplin:
    type: ClusterIP
    port: 22300
  database:
    type: ClusterIP
    port: 5432


persistence:
  storageClassName: "" # leave empty if you want to use default
  enabled: true
  size: "1Gi" # We recommend to allocate a minimum of 1GB if you do not use attachments
# Uncomment if you want to use an existing PVC
#  pvcClaim: ur_pvc

ingress:
  isIngressRoute: false
  enabled: true
  className: "" # Only if you use ingress
  annotations: {}
  domain: ur-domain.tld
  entrypoint: websecure # Useless if you use ingressroute
  certresolver: letsencrypt

resources: {}
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

nodeSelector: {}

tolerations: []

affinity: {}

Since I mostly use sslip.io for keeping track of my apps instead of remembering specific ports. ( I Know i should host heimdall, Perhaps someday ) . I needed to change a few configurations there. 

Let's change the base_url for our joplin_app first. and I hate to have ports in my cluster 
joplin:
  base_url: http://joplin.100.111.59.19.sslip.io

I do not use Nginx reverse proxy but use traefik
So I quickly wrote up an ingressroute. 
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: joplin-ingress-route
spec:
  entryPoints:
  - web
  - websecure
  routes:
  - kind: Rule
    match: Host("joplin.100.111.59.19.sslip.io")
    services:
    - name: joplin-app
      port: 22300

Now I need to apply this ingress route 
kubectl apply -f ingressroute.yaml
and tada .
Going over to the url and using default username and password (i.e : admin@localhost and admin ) .
Screenshot 2023-05-03 at 13.40.08.png 292 KB

Now I Needed a client . I downloaded a client in my 2018 macbook pro. and followed instructions as shown above, Quite happy with results so far.
Screenshot 2023-05-03 at 13.42.16.png 755 KB

There you go , Have a free version of evernote like notetaking capabilities forever,  If you need help or have opinions regarding this. Feel free to reach out.