Skip to content

redrathnure/joplin

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14,739 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fork Info

A staging repository for Joplin improvements. A repository with improvement for a Joplin project which author cannot merge to origin repo. Mostly around security concerns for server images. A following changes were done here:

  1. Docker image is run with node:node user(default user for official nodejs images). By default it's 1000:1000 however it may be adjusted using PUID and PGID args.
  2. It's possible to run contained with -u UID:GID params. Please note it is not the same as PUID:PGID args and it is not recommended at all (see description below)
  3. Images are build using Docker BuildX toolset, which means: 4.1. Caching mount points to speed up image build/rebuild process 4.2. It's possible to build multiplatform images (ARM images in TODO list)
  4. A few additional configuration properties. Mostly for better control of stored data (see description below)
  5. Docker images will be published only to ghcr.io/redrathnure/joplin repository

Some of the Issues Addressed

Rootless Container

While original joplin-server images already are rootless, there are some problems here:

  1. It is not easy to specify UID:GID for internal node:node user. It's especially painful for configuration with shared/mounted volumes.
  2. It is not possible to run container with custom UID:GUI (-u UID:GID command line args). Container is not able to start due to file permissions.

The new image accept PUID and PGID args to specify ids for the internal node:node user. All files will be created with required (for the host machine) permissions. Container run all processes from specified PUID:GUIDE, otherwise predefined 1000:1000 are used.

While it's possible to run container with -u UID:GID command line args, it is not recommended and may lead to file permissions problems.

So a docker compose may be built with following snippet:

services:
  joplin:
    image: ghcr.io/redrathnure/joplin:3.3-beta
    ...
    environment:
      ...
	    - PUID=${UID}
	    - PGID=${GID}

	# user: "${UID}:${GID}" # Do NOT do this! Use PUID:PGID instead 

Data Location

Service tries to modify following container locations:

  • /data - default location for all data, log etc
  • /data/pm2 - files generated by PM2 runner. Mostly logs (yeah, file logs inside container...)
  • /app/server source code location AND default data location for service itself, means:
    • by default SQLite DB will be created here. Please use SQLITE_DATABASE env to select different place (e.g. SQLITE_DATABASE=/data/db.sqlite)
    • application logs... which seems to be redirected to PM2 -> /data/pm2/logs
    • joplin logs and temp files redirected to /data/logs and /data/tmp dirs
    • default location for records data if you use FS storage. It's better to configure it to /data/storage location

If for some reason you need to store these files between container recreation, please use persistence volumes or host mounted volumes.

Image Building Customization

A new version uses Docker BuildX toolset to produce images. There are some additional command line arguments to customise produced images (e.g. specifying platform, taking image tag from git tag and so on). Please see yarn buildServerDocker .... --dryRun output and packages\tools\buildServerDocker.ts file for more details.

Image Tags/Versions

Unfortunately laurent22 from Joplin decided to kill all custom repositories from DockerHub, pehaps he has the special alternative understanding of open source... and do not spend a time to address security concerns (e.g. see history of the laurent22#11581 and related PRs).

Anyway, the custom images will be published to the ghcr.io/redrathnure/joplin repo only. You need just replace image: redrathnure/joplin or image: laurent22/joplin by image: ghcr.io/redrathnure/joplin in the compose files.

This repository applies changes on top of original code and release tags, this is why all custom images have -beta suffixes.

Available tags:

  • latest - latest published image
  • latest-beta - latest pre release image. For now the same as latest one.
  • 3-beta
  • 3.3-beta
  • 3.3.12-beta
  • 3.3.12-beta.13.g15da68da8 where the 13.g15da68da8 part points to the git commit where images was built.
  • *-alpine - Linux Alpine based images (smaller size but may have compatibility issues). (!) Have not tested yet!

Image Env

Joplin server should be configured via image ENV args. Please note SQLite based configuration is not recommended and should be for development or evaluation purposes only.

Parameter Description Example
APP_BASE_URL This is the base public URL where the service will be running. https://example.com/joplin, http://[hostname]:22300, http://joplin.example.com
APP_PORT The local port on which the Docker container will listen. 80, 433, 22300
DB_CLIENT Database client pg, sqlite3
POSTGRES_HOST Postgres DB host db
POSTGRES_PORT Postgres DB port 5432
POSTGRES_DATABASE Postgres DB database joplin
POSTGRES_USER Postgres DB user joplin
POSTGRES_PASSWORD Postgres DB password generate unique secrete here
SQLITE_DATABASE Location of local DB file /data/db.sqlite
PUID UID of internal node user 1000 or result of id joplin -u
PGID GID of internal node user 1000 or result of id joplin -g
LOGS_DIR location of joplin logs. By default it has /data/logs value /some/other/logs/dir
TEMP_DIR location of joplin temp files. By default it has /data/temp value /some/other/tmp/dir

Please note:

  • APP_BASE_URL:
    • If Joplin Server needs to be accessible over the internet, configure APP_BASE_URL as follows: https://example.com/joplin
    • If Joplin Server does not need to be accessible over the internet, set the APP_BASE_URL to your server's hostname
    • For Example: http://[hostname]:22300. The base URL can include the port
  • APP_PORT:
    • This would typically be mapped to port to 443 (TLS) with a reverse proxy
    • If Joplin Server does not need to be accessible over the internet, the port can be mapped to 22300
  • Please specify PUID/PGID values only if you need to override default ids of internal node:node user (e.g. to solve organise permissions for shared host volumes)

Please refer docker-compose.server.yml for more details.

Future Plans

  • linux/arm64 images
  • linux/armhf images
  • ☐ container health check/readiness probes
  • ✓ full separation data from code (/app should be read only, all logs, data files and other should be stored in /data)
  • ☐ clean up images (3+ GBytes size looks too match for this images). Perhaps try alpine images. Perhaps having 2 images: dev with full toolset and prod ready with only required files.
  • ✓ more docker compose examples
  • ☐ disabling file logging. Introduce option to run with stdout logging only

Hopefully one day all these changes will be part of the original project.

Original Project Readme

Donate using PayPal Sponsor on GitHub Become a patron Donate using IBAN

Joplin is a free, open source note taking and to-do application, which can handle a large number of notes organised into notebooks. The notes are searchable, can be copied, tagged and modified either from the applications directly or from your own text editor. The notes are in Markdown format.

Notes exported from Evernote can be imported into Joplin, including the formatted content (which is converted to Markdown), resources (images, attachments, etc.) and complete metadata (geolocation, updated time, created time, etc.). Plain Markdown files can also be imported.

Joplin is "offline first", which means you always have all your data on your phone or computer. This ensures that your notes are always accessible, whether you have an internet connection or not.

The notes can be securely synchronised using end-to-end encryption with various cloud services including Nextcloud, Dropbox, OneDrive and Joplin Cloud.

Full text search is available on all platforms to quickly find the information you need. The app can be customised using plugins and themes, and you can also easily create your own.

The application is available for Windows, Linux, macOS, Android and iOS. A Web Clipper, to save web pages and screenshots from your browser, is also available for Firefox and Chrome.

Help and documentation

For more information about the applications, see the full Joplin documentation

Donations

Donations to Joplin support the development of the project. Developing quality applications mostly takes time, but there are also some expenses, such as digital certificates to sign the applications, app store fees, hosting, etc. Most of all, your donation will make it possible to keep up the current development standard.

Please see the donation page for information on how to support the development of Joplin.

Sponsors

topagency EssayShark - essay writers for hire Australian Real Money Pokies Australian Real Money Pokies Boost your reach and buy real followers For those in need of immediate academic assistance, EssayService offers a fast and reliable service to write my essay for me now, ensuring high-quality results within tight deadlines casino en ligne le plus payant



andypiper

avanderberg

chr15m

felixstorm

Galliver7

GPrimola

Hegghammer

marcdw1289

ugoertz

Community

Name Description
Support Forum This is the main place for general discussion about Joplin, user support, software development questions, and to discuss new features. Also where the latest beta versions are released and discussed.
Patreon page The latest news are often posted there
Bluesky feed Follow us on Bluesky
Mastodon feed Follow us on Mastodon
YouTube Discover information and tutorials on how to use the apps
Discord server Our chat server
LinkedIn Our LinkedIn page
Lemmy Community Also a good place to get help

Contributing

Please see the guide for information on how to contribute to the development of Joplin: https://github.com/laurent22/joplin/blob/dev/readme/dev/index.md

Warrant Canary Signing Key

Fingerprint:

F820 F830 6DD0 05A1 02D1 8CD5 946A E9FA 5915 EF53

Public key: https://github.com/laurent22/joplin/raw/dev/Assets/keys/joplin-canary-signing-key.asc

Contributors

Thank you to everyone who've contributed to Joplin's source code!


laurent22

personalizedrefrigerator

tessus

CalebJohn

pedr

roman-r-m

miciasto

ken1kob

genneko

wh201906

Ardakilic

Daeraxa

NickWick13

tanrax

j-krl

JackGruber

naviji

PackElend

julien-me

AliceHincu

potatogim

Mr-Kanister

milotype

asrient

rtmkrlv

fmrtn

hubertfilho

devonzuegel

ScriptInfra

matsest

palerdot

abonte

rnbastos

Abijeet

jd1378

ishantgupta777

coderrsid

rabeehrz

mablin7

jackytsu

mak2002

ERYpTION

XarisA

CptMeetKat

foxmask

innocuo

Rahulm2310

Ahmad45123

jonath92

qx100

xavivars

readingsnail

krotesk

zblesk

findrakecil

vsimkus

Vaso3

petrz12

mrkaato0

marcosvega91

Tolu-Mals

shinglyu

Runo-saduwa

nishantwrp

marph91

Mannivu

Elaborendum

alexdevero

RedDocMD

wljince007

RenatoXSR

leematos

amandamcg

ylc395

yaozeye

zuphilip

kna

Retr0ve

maxpatiiuk

Rishabh-malhotraa

metbril

SFulpius

TaoK

WhiredPlanck

ProgramFan

moltenform

cagnusmarlsen

cedecode

piotrb

nathanleiby

marcushill

adarsh-sgh

RaphaelKimmig

tfinnberg

mrkaato

jcgurango

bradmcl

archont00

anihm136

amitsin6h

Atalanttore

t1011

hieuthi

martonpaulo

mmahmoudian

mimeyn

bobchao

rc2dev

Rishabhraghwendra18

sinkuu

Sidd-R

stweil

Subhra264

conyx

fstanis

axq

alexchee

kowalskidev

jyuvaraj03

Shoatally

Wartijn

HahaBill

tmclo

TobiasDev

SubodhDahal

StarFang208

LEVIII007

sealch

sebastienjust

criticic

rt-oliveira

thearchivalone

ikunya

ShuiHuo

paventyang

tiberiusteng

sensor-freak

kornava

s1nceri7y

ruuti

pf-siedler

mrjo118

majsterkovic

lscolombo

stingray-11

kik0220

jduar

ihan1004

eresytter

barbowza

balmag

daniellandau

djunho

idcristi

chrmoritz

chrisb86

cas--

brttbndr

mrwulf

betty-alagwu

BartBucknill

entrymaster

infinity052

antontkv

andypiper

k33pn3xtlvl

serenitatis

akirataguchi115

ab-elhaddad

xUser5000

PiotrNarel

Philipp91

RadCod3

popovoleksandr

mjjzf

Mohamad-Shiro

maicki

itzTheMeow

solariz

ethan42411

JOJ0

jalajcodes

jblunck

jdrobertso

Jesssullivan

jmontane

johanhammar

krishna8421

Linkosred

kirtanprht

xuhcc

kkoyung

khuongduy354

Kevin-vdberg

kevinshu1995

y-usuzumi

kaustubhsh

KaneGreen

Juvecu

dodog

joybinchen

joserebelo

joesfer

joschaschmiedt

K0UR05H

kklas

xmlangel

Letty

troilus

LightTreasure

Longhao-Chen

diogocaveiro

lboullo0

mrlpm

MHolkamp

mshibanami

marc-bouvier

mvonmaltitz

nicholas-10

Vistaus

beonma

gtlsgamr

horaceyoung

ianjs

iahmedbacha

eltociear

caseycs

IrvinDominin

ishammahajan

ffadilaputra

Oriwantgreencard

j0hn-mc-clane

JRaiden16

jacobherrington

jamesadjinwa

jrwrigh

analogist

JanhaviAlekar

jaredcrowe

jasonwilliams

J-U-B

imsardine

volatilevar

innkuika

Jia35

JoelRSimpson

joeltaylor

thejohnfreeman

exic

JonathanPlasse

nickhobbs94

Frichetten

nicolas-suzuki

Nicryc

nightknighto

nik-gautam

nitingururajk

noah-nash

vulpivia

OmGole

Ouvill

shorty2380

dist3r

BCSharp

rakleed

idle-code

Oaklight

Perkolator

petzi53

phavekes

phitsc

KowalskiPiotr98

Polaris66

Diadlo

pranavmodx

DarkFalc0n

psy-q

R3dError

rajprakash00

rahil1304

marcorombach

mlkood

plextoriano

Marmo

mcejp

freaktechnik

martinkorelic

Petemir

matsair

MattDemers

mgroth0

silentmatt

moorage

maxs-test

MichBoi

msorens

MikkCZ

MichipX

Elleo

phucbm

maholmlund

MovingEarth

MrTraduttore

ZhReimu

sanjarcode

Mustafa-ALD

LeMyst

matmolni

NJannasch

njmulsqb

zomglings

hexclover

adrynov

andrewperry

tekdel

fobo66

andzs

pandeymangg

Shaxine

antonio-ramadas

aprvsh

archisman-panigrahi

aynp

assimd

Atrate

austindoupnik

azurelunatic

BeeverTeeth

be-we

ei8fdb

bimlas

bishoy-magdy

brad

brenobaptista

cuihaoleo

CandleCandle

carlbordum

carlosngo

carlosedp

chaifeng

charles-e

cyy53589

2jaeyeol

thackeraaron

AIbnuHIbban

asalthobaity

awesome-pro

abhi-bhatra

iamabhi222

waditos

AdrienPoupa

sandstone991

aksh-konda

alanfortlink

alecmaly

alessandroberna

adw2019

afischer211

bablecopherye

a13xk

apankratov

teterkin

avanderberg

lex111

Alkindi42

Jumanjii

AlphaJack

captain-aman-11

aminvakil

richtwin567

andrejilderda

deining

Chillu1

eduebernal

eduardokimmel

ei-ke

einverne

etho201

eodeluga

Fabien-jrt

fabiogvdneto

fathyar

Fejby

fernandonagase

ferk6a

fpindado

FleischKarussel

easyteacher

glemco

halkeye

gmaubach

gmag11

Jackymancs4

gitstart

Glandos

ggteixeira

gusbemacbe

HOLLYwyh

Fvbor

hamishmb

bennetthanna

graueneko

harshitkathuria

ckant

Techwolf12

christopher-o-toole

cloudtrends

cicerotcv

CoolCu

CyrusYip

damienmascre

da2x

danielb2

danimnunes

danil-tolkachev

darshani28

dhgoldberg

DavidBeale

NeverMendel

deeepsig

DG0lden

deunlee

diego-betto

erdody

diragb

domgoodwin

b4mboo

donbowman

DeeJayLSP

sirnacnud

dflock

drobilica

educbraga

About

Joplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors

Languages

  • TypeScript 73.1%
  • JavaScript 17.1%
  • Rust 4.1%
  • HTML 1.8%
  • CSS 1.0%
  • Java 0.9%
  • Other 2.0%