Skip to content

How to setup Joplin Cloud (with Docker & Caddy)

Untested

Description

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.

Joplin Cloud allows you to synchronise your notes across devices. It also lets you publish notes, and collaborate on notebooks with your friends, family or colleagues.

Create a DNS record

Go to cPanel and add a new record (e.g. notes.akdscloud.eu).

Caddy

notes.akdscloud.eu:443 {
    header Strict-Transport-Security max-age=31536000;
    reverse_proxy localhost:22300

    # Increase upload limits for note attachments
    request_body {
        max_size 100MB
    }
}

Files and Folders

cd ~/services
mkdir -p joplin/{data,db}
touch joplin/{docker-compose.yml,.env}

Docker

  1. Create and configure docker-compose.yml

    Add this to docker-compose.yml:

    services:
      joplin:
        image: joplin/server:latest
        container_name: joplin
        restart: unless-stopped
        environment:
          - APP_PORT=${APP_PORT}
          - APP_BASE_URL=${APP_BASE_URL}
          - DB_CLIENT=${DB_CLIENT}
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
          - POSTGRES_DATABASE=${POSTGRES_DATABASE}
          - POSTGRES_USER=${POSTGRES_USER}
          - POSTGRES_PORT=${POSTGRES_PORT}
          - POSTGRES_HOST=joplin-db
        ports:
          - 22300:22300
        volumes:
          - ./data:/data
        depends_on:
          - joplin-db
    
      joplin-db:
        image: postgres:17.5
        container_name: joplin-db
        restart: unless-stopped
        environment:
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
          - POSTGRES_USER=${POSTGRES_USER}
          - POSTGRES_DB=${POSTGRES_DATABASE}
        volumes:
          - ./db:/var/lib/postgresql/data
    

    Generate a strong password:

    openssl rand -hex 20
    

    Add this to .env:

    # Backend Configuration
    APP_BASE_URL=https://notes.akdscloud.eu
    APP_PORT=22300
    DB_CLIENT=pg
    
    # Database Configuration
    POSTGRES_HOST=joplin-db
    POSTGRES_PORT=5432
    POSTGRES_DATABASE=joplin
    POSTGRES_DB=joplin
    POSTGRES_USER=joplin
    POSTGRES_PASSWORD=your-strong-password
    
  2. Download and start joplin:

    docker compose up -d joplin joplin-db
    
  3. Restart Caddy to get an SSL certificate (details here)

Try it out

See if you can access the joplin web interface.

Troubleshooting

If it doesn't work, see the troubleshooting guide.

Configuration

Update the admin user credentials

By default, Joplin Server will be setup with an admin user with email admin@localhost and password admin. For security purposes, the admin user's credentials should be changed. On the Admin Page, login as the admin user. In the upper right, select the Profile button update the admin password.

Create a user for sync

While the admin user can be used for synchronization, it is recommended to create a separate non-admin user for it. To do so, navigate to the Users page - from there you can create a new user. Once this is done, you can use the email and password you specified to sync this user account with your Joplin clients.

Clients

Configure your Joplin clients (desktop/mobile) to sync with the server.

Official site

Github page

presentation on discourse

setup from git

better setup request

reddit post with docker configs

tutorial on vcloud9

reddit post

tutorial on noted.lol

https://github.com/laurent22/joplin/blob/dev/packages/server/README.md

https://raw.githubusercontent.com/laurent22/joplin/dev/docker-compose.server.yml