Dokploy

Markup

Markup is a fast, keyboard-first markdown workspace with live preview, graph view, whiteboards, mind maps, and PostgreSQL-powered cloud sync.

Markup logo

Configuration

version: "3.8"

services:
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    volumes:
      - markup-postgres-data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: markup
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: markup
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U markup -d markup"]
      interval: 10s
      timeout: 5s
      retries: 5

  markup:
    image: ghcr.io/pphilfre/markup:main
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    environment:
      DATABASE_URL: ${DATABASE_URL}
      NEXT_PUBLIC_DB_PROVIDER: postgres
      NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL}
      # WorkOS AuthKit (optional): required only for user accounts and cloud sync.
      # Placeholders keep the app running; replace them with real credentials
      # from https://dashboard.workos.com to enable sign-in.
      WORKOS_CLIENT_ID: ${WORKOS_CLIENT_ID}
      WORKOS_API_KEY: ${WORKOS_API_KEY}
      WORKOS_COOKIE_PASSWORD: ${WORKOS_COOKIE_PASSWORD}
      NEXT_PUBLIC_WORKOS_REDIRECT_URI: ${NEXT_PUBLIC_WORKOS_REDIRECT_URI}
      NODE_ENV: production

volumes:
  markup-postgres-data:
[variables]
main_domain = "${domain}"
postgres_password = "${password:32}"
cookie_password = "${password:32}"

[config]
env = [
  "POSTGRES_PASSWORD=${postgres_password}",
  "DATABASE_URL=postgresql://markup:${postgres_password}@db:5432/markup",
  "NEXT_PUBLIC_SITE_URL=https://${main_domain}",
  "# WorkOS AuthKit is optional: it powers user accounts and cloud sync.",
  "# The app works without it (local, in-browser storage). To enable sign-in,",
  "# create an app at https://dashboard.workos.com, set the redirect URI below",
  "# in the WorkOS dashboard, and replace the placeholder credentials.",
  "WORKOS_CLIENT_ID=client_id_change_me",
  "WORKOS_API_KEY=sk_change_me",
  "WORKOS_COOKIE_PASSWORD=${cookie_password}",
  "NEXT_PUBLIC_WORKOS_REDIRECT_URI=https://${main_domain}/callback",
]
mounts = []

[[config.domains]]
serviceName = "markup"
port = 3000
host = "${main_domain}"

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxuc2VydmljZXM6XG4gIGRiOlxuICAgIGltYWdlOiBwb3N0Z3JlczoxNi1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIG1hcmt1cC1wb3N0Z3Jlcy1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YVxuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfVVNFUjogbWFya3VwXG4gICAgICBQT1NUR1JFU19QQVNTV09SRDogJHtQT1NUR1JFU19QQVNTV09SRH1cbiAgICAgIFBPU1RHUkVTX0RCOiBtYXJrdXBcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcInBnX2lzcmVhZHkgLVUgbWFya3VwIC1kIG1hcmt1cFwiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDVcblxuICBtYXJrdXA6XG4gICAgaW1hZ2U6IGdoY3IuaW8vcHBoaWxmcmUvbWFya3VwOm1haW5cbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICBkYjpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIERBVEFCQVNFX1VSTDogJHtEQVRBQkFTRV9VUkx9XG4gICAgICBORVhUX1BVQkxJQ19EQl9QUk9WSURFUjogcG9zdGdyZXNcbiAgICAgIE5FWFRfUFVCTElDX1NJVEVfVVJMOiAke05FWFRfUFVCTElDX1NJVEVfVVJMfVxuICAgICAgIyBXb3JrT1MgQXV0aEtpdCAob3B0aW9uYWwpOiByZXF1aXJlZCBvbmx5IGZvciB1c2VyIGFjY291bnRzIGFuZCBjbG91ZCBzeW5jLlxuICAgICAgIyBQbGFjZWhvbGRlcnMga2VlcCB0aGUgYXBwIHJ1bm5pbmc7IHJlcGxhY2UgdGhlbSB3aXRoIHJlYWwgY3JlZGVudGlhbHNcbiAgICAgICMgZnJvbSBodHRwczovL2Rhc2hib2FyZC53b3Jrb3MuY29tIHRvIGVuYWJsZSBzaWduLWluLlxuICAgICAgV09SS09TX0NMSUVOVF9JRDogJHtXT1JLT1NfQ0xJRU5UX0lEfVxuICAgICAgV09SS09TX0FQSV9LRVk6ICR7V09SS09TX0FQSV9LRVl9XG4gICAgICBXT1JLT1NfQ09PS0lFX1BBU1NXT1JEOiAke1dPUktPU19DT09LSUVfUEFTU1dPUkR9XG4gICAgICBORVhUX1BVQkxJQ19XT1JLT1NfUkVESVJFQ1RfVVJJOiAke05FWFRfUFVCTElDX1dPUktPU19SRURJUkVDVF9VUkl9XG4gICAgICBOT0RFX0VOVjogcHJvZHVjdGlvblxuXG52b2x1bWVzOlxuICBtYXJrdXAtcG9zdGdyZXMtZGF0YTpcbiIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5wb3N0Z3Jlc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuY29va2llX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5cbltjb25maWddXG5lbnYgPSBbXG4gIFwiUE9TVEdSRVNfUEFTU1dPUkQ9JHtwb3N0Z3Jlc19wYXNzd29yZH1cIixcbiAgXCJEQVRBQkFTRV9VUkw9cG9zdGdyZXNxbDovL21hcmt1cDoke3Bvc3RncmVzX3Bhc3N3b3JkfUBkYjo1NDMyL21hcmt1cFwiLFxuICBcIk5FWFRfUFVCTElDX1NJVEVfVVJMPWh0dHBzOi8vJHttYWluX2RvbWFpbn1cIixcbiAgXCIjIFdvcmtPUyBBdXRoS2l0IGlzIG9wdGlvbmFsOiBpdCBwb3dlcnMgdXNlciBhY2NvdW50cyBhbmQgY2xvdWQgc3luYy5cIixcbiAgXCIjIFRoZSBhcHAgd29ya3Mgd2l0aG91dCBpdCAobG9jYWwsIGluLWJyb3dzZXIgc3RvcmFnZSkuIFRvIGVuYWJsZSBzaWduLWluLFwiLFxuICBcIiMgY3JlYXRlIGFuIGFwcCBhdCBodHRwczovL2Rhc2hib2FyZC53b3Jrb3MuY29tLCBzZXQgdGhlIHJlZGlyZWN0IFVSSSBiZWxvd1wiLFxuICBcIiMgaW4gdGhlIFdvcmtPUyBkYXNoYm9hcmQsIGFuZCByZXBsYWNlIHRoZSBwbGFjZWhvbGRlciBjcmVkZW50aWFscy5cIixcbiAgXCJXT1JLT1NfQ0xJRU5UX0lEPWNsaWVudF9pZF9jaGFuZ2VfbWVcIixcbiAgXCJXT1JLT1NfQVBJX0tFWT1za19jaGFuZ2VfbWVcIixcbiAgXCJXT1JLT1NfQ09PS0lFX1BBU1NXT1JEPSR7Y29va2llX3Bhc3N3b3JkfVwiLFxuICBcIk5FWFRfUFVCTElDX1dPUktPU19SRURJUkVDVF9VUkk9aHR0cHM6Ly8ke21haW5fZG9tYWlufS9jYWxsYmFja1wiLFxuXVxubW91bnRzID0gW11cblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwibWFya3VwXCJcbnBvcnQgPSAzMDAwXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiXG4iCn0=

Tags

markdown, notes, editor, self-hosted


Version: main

On this page