Technik: Joplin mit proxmox, tailscale

Und wer mag:

Unten die Variante mit docker und ohne Joplin LXC-Container (Variante2) - meine Wahl

Das Rezept

  • proxmox
  • tailscale
  • und Spaß an Joplin als eigenständigen LXC-Container

Joplin Server als proxmox LXC-Container mit Community Script und das dann über tailscale ansprechen

  • Proxmox helper scripts Community Scipt für Joplin Server in der PVE Console starten.
  • neuen LXC-Container überprüfen

Bei mir:

joplin-server.fritz.box:22300
Erste default Mailadresse:  admin@localhost
Erstes default password: admin

LXC-Container anpassen für tailscale

/dev/net/tun durchreichen

Console auf dem PVE

/etc/pve/lxc/109.conf editieren (mit Deiner Nummer natürlich)
folgende 2 Zeilen einfügen. Speichern und schließen.

* lxc.cgroup2.devices.allow: c 10:200 rwm
* lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

Neustart

Tailscale installieren

curl -fsSL https://tailscale.com/install.sh | sh

Folgende Datei editieren

APP_BASE_URL anpassen mit dem Tailscale-Ziel-Namen der Maschine

 GNU nano 8.4                 /opt/joplin-server/.env         

PM2_HOME=/opt/pm2
NODE_ENV=production
APP_BASE_URL=http://joplin-server.DeinTailscaleName.ts.net:22300
APP_PORT=22300
DB_CLIENT=pg
POSTGRES_PASSWORD=*** Dein Password ***
POSTGRES_DATABASE=joplin
POSTGRES_USER=joplin
POSTGRES_PORT=5432
POSTGRES_HOST=localhost

Tailscale up

===> MAGIC happens

... und jetzt im Client bei Replication die Adresse

http://joplin-server.DeinTailscaleName.ts.net:22300

user Mailadresse und user Kennwort eingeben und los geht es.

Variante 2

Rezept

  • proxmox docker LXC-Container
  • tailscale
  • docktail docker container (um tailscale mit docker zu kuppeln)
  • joplin-server docker container

tailscale mit docker verheiraten

docktail docker container

ja, ich nutze auch noch traefik... aber für diese container kann das docker netzwerk auch ein Anderes sein.
außerdem nutze ich Arcane und Portainer gemischt. Daher die environment-Dateien mit expliziter Benennung. Das kann bei Dir anders sein.

services:
  docktail:
    image: ghcr.io/marvinvr/docktail:latest
    restart: unless-stopped
    container_name: docktail
    hostname: docktail
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /var/run/tailscale:/var/run/tailscale
    environment:
      # Optional but recommended - enables auto-service-creation
      - TAILSCALE_OAUTH_CLIENT_ID=${TAILSCALE_OAUTH_CLIENT_ID}
      - TAILSCALE_OAUTH_CLIENT_SECRET=${TAILSCALE_OAUTH_CLIENT_SECRET}
    networks:
      - traefik
    env_file:
      - ./.env
      - ../.env.global
# -----------------------------------------------------------------
networks:
  traefik:
    external: true

Joplin als docker container aufsetzen

services:
  joplin-server:
    image: ghcr.io/etechonomy/joplin-server:latest
    container_name: joplin-server
    hostname: joplin-server                    
    environment:
        - APP_BASE_URL={APP_BASE_URL}
        - APP_PORT=22300
        - DB_CLIENT=pg
        - POSTGRES_PASSWORD={POSTGRES_PASSWORD}
        - POSTGRES_DATABASE={POSTGRES_DATABASE}
        - POSTGRES_USER={POSTGRES_USER}
        - POSTGRES_PORT=5432 
        - POSTGRES_HOST=joplin-db
    #restart: "no"
    restart: unless-stopped
    ports:
      - 22300:22300
    volumes:
      - ${XHOME_DOCKER}/joplin/data/logs:/home/joplin/packages/server/logs
    networks:
      - traefik
    env_file:
      - ./.env
      - ../.env.global      
    labels:
      - "docktail.service.enable=true"
      - "docktail.service.name=joplin"
      - "docktail.service.port=22300"
      - "docktail.service.service-port=80"
      
  joplin-db:
    image: postgres:16
    container_name: joplin-db
    hostname: joplin-db
    #restart: "no"
    restart: unless-stopped
    ports:
      - 5433:5432
    volumes:
      - ${XHOME_DOCKER}/joplin/db:/var/lib/postgresql/data
    networks:
      - traefik
    environment:
      - POSTGRES_PASSWORD={POSTGRES_PASSWORD}
      - POSTGRES_DB={POSTGRES_DATABASE}
      - POSTGRES_USER={POSTGRES_USER}
    env_file:
      - ./.env
      - ../.env.global
# ---------------------------------------------------------------------
networks:
  traefik:
    external: true

Jetzt kann man im Client, die tailscale Adresse des Services eingeben und braucht KEINEN Port am Ende.

Ich nehm Variante 2

Na denn man tau! Viel Spaß!

This article was updated on 30 März 2026

Ich bin Christina Worf aka Happy Klara, und auch Lucky2See Tausendschönchen und DoggiesErdbeere. Du wirst Bilder mit diesen Wasserzeichen hier sehen. Alle Bilder dieser Webseite sind meine Bilder, Copyright liegt bei mir.