joplock/docker-compose.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

52 lines
2 KiB
YAML

# Sidecar deployment example: Joplock alongside an existing Joplin Server + Postgres
#
# Usage:
# 1. Edit the environment values below to match your existing setup
# 2. docker compose up -d
#
# ALTERNATELY you can just paste the joplock section into your existing joplin server
# compose file.
#
# On Linux, host.docker.internal is mapped to the host gateway so Joplock
# can reach services running on the host by default.
services:
joplock:
image: ghcr.io/abort-retry-ignore/joplock:latest
pull_policy: always
ports:
# Host port : container port
- '5444:3001'
environment:
HOST: 0.0.0.0
PORT: 3001
# Public URL where Joplock is reachable from a browser
JOPLOCK_PUBLIC_BASE_URL: http://localhost:5444
# Internal URL Joplock uses to call Joplin Server API
JOPLIN_SERVER_ORIGIN: http://host.docker.internal:22300
# Public URL users already use for Joplin Server (for sync clients)
JOPLIN_SERVER_PUBLIC_URL: http://localhost:22300
# Base path prefix if Joplin Server sits behind a reverse proxy subpath
JOPLIN_PUBLIC_BASE_PATH: ''
# Postgres connection — must be the same database used by Joplin Server
POSTGRES_HOST: host.docker.internal
POSTGRES_PORT: 5432
POSTGRES_DATABASE: joplin
POSTGRES_USER: joplin
POSTGRES_PASSWORD: joplin
# Admin account — set both to enable the admin panel in Joplock
JOPLOCK_ADMIN_EMAIL: ''
JOPLOCK_ADMIN_PASSWORD: ''
# Set to true to skip MFA for the admin account defined above
IGNORE_ADMIN_MFA: 'false'
# Full database backup storage inside the container
JOPLOCK_BACKUP_DIR: /backups
# Break-glass recovery mode for backup/restore when normal login is unavailable
JOPLOCK_RECOVERY_ENABLED: 'false'
JOPLOCK_RECOVERY_PASSWORD: ''
# Startup default for debug logging; admins can override at runtime in Settings.
DEBUG: 'false'
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- ./data/backups:/backups