joplock/docker-compose.example-full.yml
igor 9fe3409b1c
Some checks are pending
Build and push Joplock image / build-and-push (push) Waiting to run
feat(editor): dual-mode editor — CodeMirror 6 markdown + TinyMCE 8 rendered
Squash-merge of the `tinymce` branch: replaces the previous editor with a
dual-mode setup backed by the hidden #note-body textarea.

- Rendered mode = TinyMCE 8 (persistent singleton over #tinymce-slot),
  markdown round-trip via Turndown (tinymceToMarkdown).
- Markdown mode = CodeMirror 6 mounted in #cm-host (initCM/getCM/
  cmSyncToTA/cmSetVal/mountMarkdownEditor); codemirror.min.js loaded
  before app.js. Full-screen CM6 code modal + language picker.
- Code highlighting: hljs in preview/markdown, Prism (codesample) in
  rendered mode.

Text expander + AI prose completion wired for both modes:
- Text triggers expand in CM6 and in TinyMCE.
- AI-action triggers and Ctrl/Cmd-Space run prose completion; in rendered
  mode the completion is offered in the same accept/dismiss popup as
  markdown mode (Enter/Tab insert, Esc discard), positioned at the iframe
  caret, inserted as DOM text nodes and synced to #note-body.

Uploads: upload modal + direct drag/paste into TinyMCE and CM6, admin
maxUploadMb limit with fast 413 pre-check, dropped images get a trailing
blank line, upload-reload sync.

Also included: per-user spellcheck toggle, runtime-toggleable debug
logging, settings-page Esc dismiss, separate render/markdown font sizes,
persisted editor mode, blank-line/image-spacing fixes across mode
switches.

Tests: cm6MarkdownMode, expanderRuntime, appRuntime, markdownToolbarClicks
unit suites (558 total, all passing) + playwright specs (desktop,
ai-rendered live provider E2E, upload-reload, resource-lifecycle).
2026-07-06 17:00:57 +12:00

96 lines
3.4 KiB
YAML

# Full-stack example: Postgres + Joplin Server + Joplock
#
# Zero-setup rollout for users who don't have an existing Joplin Server.
# Pulls pre-built images — no source checkout required.
#
# Usage:
# 1. Set JOPLOCK_PUBLIC_BASE_URL to the actual reachable URL for this host, such
# as a hostname served from a reverse proxy.
# (e.g. http://myhost:5444 or a Tailscale DNS name)
# 2. Set JOPLOCK_ADMIN_EMAIL and JOPLOCK_ADMIN_PASSWORD for the admin account
# 3. docker compose -f docker-compose.example-full.yml up -d
#
# Joplock UI: http://localhost:5444
# Joplin Server: internal only (not exposed to host by default)
#
# Note: On WSL2, the raw WSL IP may not be reliably reachable from browsers.
# A Windows host port proxy or a Tailscale DNS name can work better.
#
# To connect desktop/mobile Joplin clients, use the Joplin Server URL if exposed
services:
db:
image: postgres:18
restart: unless-stopped
environment:
POSTGRES_USER: joplin
POSTGRES_PASSWORD: joplin
POSTGRES_DB: joplin
volumes:
- db_data:/var/lib/postgresql
server:
image: joplin/server:latest
restart: unless-stopped
depends_on:
- db
environment:
APP_PORT: 22300
# Internal base URL — Joplin Server is not exposed to the host.
# Joplock proxies writes to it over the internal Docker network.
APP_BASE_URL: http://server:22300
# Set to false to disable new user self-registration
SIGNUP_ENABLED: 'true'
DB_CLIENT: pg
POSTGRES_HOST: db
POSTGRES_PORT: 5432
POSTGRES_DATABASE: joplin
POSTGRES_USER: joplin
POSTGRES_PASSWORD: joplin
joplock:
image: ghcr.io/abort-retry-ignore/joplock:latest
pull_policy: always
restart: unless-stopped
depends_on:
- server
ports:
- '5444:3001'
environment:
HOST: 0.0.0.0
PORT: 3001
# Public URL where Joplock is reachable.
# Use the real browser-reachable host here, such as a LAN hostname,
# reverse-proxy URL, or Tailscale DNS name.
JOPLOCK_PUBLIC_BASE_URL: http://localhost:5444
# Internal URL Joplock uses to talk to Joplin Server
JOPLIN_SERVER_ORIGIN: http://server:22300
# Joplin Server is not publicly exposed in this example.
# Desktop/mobile sync clients cannot connect directly — Joplock is the only UI.
# To expose Joplin Server for sync clients, add a ports mapping to the server
# service and set this to its public URL (e.g. http://10.0.1.14:22300).
JOPLIN_SERVER_PUBLIC_URL: http://server:22300
POSTGRES_HOST: db
POSTGRES_PORT: 5432
POSTGRES_DATABASE: joplin
POSTGRES_USER: joplin
POSTGRES_PASSWORD: joplin
# Admin account — set both to enable the admin panel
JOPLOCK_ADMIN_EMAIL: ''
JOPLOCK_ADMIN_PASSWORD: ''
# Set to true to skip MFA check for the admin account defined above
IGNORE_ADMIN_MFA: 'false'
# Full database backup storage inside the container
JOPLOCK_BACKUP_DIR: /backups
# Optional break-glass recovery mode for backup/restore
JOPLOCK_RECOVERY_ENABLED: 'false'
JOPLOCK_RECOVERY_PASSWORD: ''
# Startup default for debug logging (server + browser console). Admins can
# override this at runtime via Settings > Admin > "Enable debug logging".
DEBUG: 'false'
volumes:
- backup_data:/backups
volumes:
db_data:
backup_data: