TrueNAS Scale Joplin

Last Edit: 2025.01.20

Overview

Setup Joplin on TrueNAS Scale.

Assumptions

Storage Configuration

Create a new dataset for Joplin to use for Postgres storage. This dataset needs to be read and writable by the netdata user. The default ixVolume could be used for Joplin storage, but this is unideal for most TrueNAS setups (especially for users using a dedicated applications SSD).

Create Dataset

Navigate to the Datasets tab in the TrueNAS dashboard.

Select the dataset or pool that the new joplin dataset should be stored in.

Select Add Dataset within Dataset Details. Configure the new dataset using the wizard.

SettingValueDescription
Parent pathpool01Will be the name of the parent dataset.
NamejoplinName of the dataset to create.
CommentsOptional comments for your memory.
SyncInherit (standard)Determines when to wait for data writes to complete.
Compression levelInherit (lz4)Set compression level, LZ4 recommended.
Enable AtimeInherit (off)Update file access time when read.
Encryption OptionsInheritInherit unless the dataset being created needs to have a different key.
ZFS DeduplicationInherit (off)Deduplicate data when stored. Do not use if on a resource-light system.
Case SensitivitySensitiveChoose filename case sensitivity.
Share TypeGenericChange to SMB if required for your application.

Select Save to create the new dataset.

Dataset Permissions

For the Joplin app to utilize the created dataset, the permissions for the dataset need to be modified.

Select the created joplin dataset and find the Permissions details section.

Edit the permissions to achieve the following. This will grant Postgres access to the dataset.

SettingValueDescription
Owner
UsernetdataMay be replaced by 999, the netdata UID, this is acceptable.
Apply UsertrueApply user changes.
GroupdockerMay be replaced by 999, the docker GID, this is acceptable.
Apply GrouptrueApply group changes.
Access
UserRead - Write - ExecuteAllow apps user to read, write, and execute (7).
GroupNoneOnly user should be granted permissions (0).
OtherNoneDon’t allow any other users to access the dataset. (0).
Advanced
Apply permissions recursivelytrueApply permissions to all dataset files.
Apply permissions to child datasetstrueApply permissions to all child-dataset files.

Select Save to apply the configured permissions.

Install Joplin

Navigate to the Applications page in the TrueNAS Scale dashboard, Apps on the main navigation.

Switch to the Available Applications tab in the Applications page.

Using the search tool, find the joplin application. Verify Joplin is from the TrueNAS catalog and is on the Community train.

Select Install to begin configuration and installation of the application. Configuration options not mentioned in this section can be left as default.

Application Name

SettingValueDescription
Application NamejoplinName for the application.
Version Number#.#.#Version to use, latest by default.

Joplin Configuration

SettingValueDescription
Postgres ImagePostgres 17On new installations, use Postgres 17. If importing an existing Postgres 15 database, use Postgres 15 until ready to upgrade. Database upgrades are one-way.
Database PasswordGenerated-Secure-PasswordGenerate a secure database password.
Base URLhttps://joplin.truenas.example.comURL that will be used by clients to access Joplin. If there will not be a proxy infront of Joplin, or if the proxy uses non-standard ports, include the port number.

Network Configuration

SettingValueDescription
WebUI Port30027Port Joplin service will be exposed on. Include this port in the Base URL if not using a proxy.

Storage Configuration

The following configuration assumes the previously created Joplin dataset is used. To continue with an ixVolume, just leave the values as default.

SettingValueDescription
Joplin Postgres Data Storage
TypeHost PathUse ixVolume for data storage.
Enable ACLfalseEnable to configure Access Control List.
Host Path/mnt/pool01/joplinSelect the created joplin dataset from the storage pool.
Automatic PermissionsfalsePermissions were previously assigned for the netdata user. Enable this if permission issues persist.

Resources Configuration

SettingValueDescription
CPU Limit1Configure a CPU thread limit for the application. 1 should be adequate for small deployments.
Memory Limit2048Memery limit in megabytes. 2 gigabytes should be adequate for small deployments.

Install

Verify you have checked the TrueNAS documentation for Joplin and Install. The application will complete installation and deploy. Navigate to the Applications tab to monitor the status.

Nginx Proxy Host

Add a Nginx Proxy Manager proxy host for the Joplin service.

From the Nginx Proxy Manager dashboard, select Proxy Hosts under Hosts.

Select Add Proxy Host from the Proxy Hosts dashboard.

Proxy Host Details

Configure the new proxy host details.

SettingValueDescription
Domain Namesjoplin.truenas.example.comHostname used to access Joplin, must have a matching DNS record.
Forward Hostname / IP172.16.13.13Use the IP addess of the TrueNAS server. The loopback address will not work.
Forward Port30027Use the mapped service port, not the internal Docker port.
Cache Assetsfalse
Block Common Exploitstrue
Websockets Supportfalse
Access ListlocalOptionally, use the configured access list to limit devices that can connect.

Proxy Host SSL

Switch to the SSL tab for the new proxy host and configure it to use the generated certificate.

SettingValueDescription
SSL Certificate*.truenas.example.comUse the generated certificate.
Force SSLtrue
HTTP/2 Supporttrue
HSTS Enabledtrue
HSTS Subdomainstrue

Nginx proxy host SSL.

Proxy Host Connect

Save the new proxy host and view the added host in the proxy hosts list.

If a local DNS server is setup, verify there is a wildcard entry for the TrueNAS server or create one specifially for Joplin.

If there is no local DNS server yet, add a custom host entry to /etc/hosts.

sudo nano /etc/hosts

Add the required domain(s) and point them to the TrueNAS IP address.

172.16.13.13 truenas.example.com
172.16.13.13 npm.truenas.example.com
172.16.13.13 joplin.truenas.example.com

Navigate to the Joplin service with the configured domain, no port required if Nginx Proxy Manager was assigned port 80/443.

https://joplin.truenas.example.com/

Connect

Connect to the Joplin service in a browser at the configured domain, https://joplin.truenas.example.com/. A login page will be presented.

The default Joplin login credentials are:

  • Email: admin@localhost
  • Password: admin

After logging in, follow the prompts to change the login credentials.

Joplin login page.

Errors

Postgres Upgrade Failure

Initial installation or upgrades may fail if the Postgres dataset has incorrect permissions. Configure the permissions manually, or enable Automatic Permissions, for the Joplin dataset.

Container ix-joplin-postgres_upgrade-1  service "postgres_upgrade" didn't complete successfully: exit 1
service "postgres_upgrade" didn't complete successfully: exit 1

References

1 2 3 4 5 6 7 8


  1. iXsystems. “TrueNAS Documentation.” 2025. ↩︎

  2. iXsystems. “TrueNAS Joplin Documentation.” 2025. ↩︎

  3. Laurent Cozic. “Joplin Documentation.” 2025. ↩︎

  4. Laurent Cozic. “Joplin GitHub.” 2025. ↩︎

  5. iXsystems. “TrueNAS Nginx Proxy Manager Documentation.” 2025. ↩︎

  6. Nginx Proxy Manager. Nginx Proxy Manager Documentation. 2024. ↩︎

  7. Nginx Proxy Manager. “Nginx Proxy Manager GitHub.” 2024. ↩︎

  8. TrueNAS Community Forums. “SOLVED: Home-Assistant - new App install - Scale 24.10 - service “postgres_upgrade” fails.” 2024. ↩︎