Trilium으로 지식정보를 수집/정리하자
최근 도커의 매력에 푹 빠져서 유용한 오픈소스를 찾아 사용하고 있습니다. 오늘은 Trilium이라는 오픈소스·자체 호스팅(Self-hosted) 기반의 메모 앱을 Ubuntu VM서버에 설치/사용해 보려고 합니다. Trilium은 자체 모바일 앱을 지원하지 않는 것을 제외하고는 아래와 같은 막강한 장점이 있습니다. 사용법은 Github의 TriliumNext Documentation를 참고하세요.
- 강력한 계층 구조와 노트 클로닝(Note Cloning):
노트 안에 노트를 무한으로 넣을 수 있는 트리 구조입니다. 특히 핵심 기능인 ‘클로닝’을 쓰면 하나의 노트를 여러 폴더(트리)에 동시에 위치시킬 수 있습니다. 한 곳에서 수정하면 모든 클론이 동시에 업데이트되므로 지식 분류할 때 엄청나게 편리합니다. - 개발자를 위한 해커블(Hackable) 환경:
단순한 텍스트 메모를 넘어 노트 내부에 JavaScript를 작성해 앱 자체를 제어할 수 있습니다. 예를 들어, 특정 태그가 붙은 노트를 모아서 자동으로 리스트를 만들거나, 백엔드 API를 호출해 데이터를 긁어오는 자동화 스크립트를 구현할 수 있습니다. - 완벽한 데이터 소유권 및 속도:
모든 데이터는 내 컴퓨터의 단일 SQLite 데이터베이스 파일(.db)에 저장됩니다. 백업과 이관이 매우 직관적이며, 로컬에서 동작하기 때문에 노션처럼 인터넷 속도에 따라 버벅거리는 일이 전혀 없고 수만 개의 노트도 즉시 검색됩니다. - 풍부한 기본 기능:
텍스트 에디터 외에도 코드 하이라이팅, 가상 캔버스(Excalidraw 기반), 다이어그램(Mermaid.js) 등을 플러그인 설치 없이 기본으로 지원합니다.
이 글은 “Caddy,Filebrower로 웹 파일서버 및 webDAV 구축하기“와 연계되어 있으니 먼저 참고하시길 부탁드리며, 아래 절차대로 사용하시면 됩니다. 그리고 사용자별로 독립된 Trilium 노트 환경을 제공하려면, 각 사용자마다 별도의 Trilium 컨테이너를 실행해야 합니다. Trilium은 자체적으로 다중 사용자(Multi-tenancy) 격리 기능을 지원하지 않기 때문에, 컨테이너를 분리하는 것이 가장 안전하고 확실한 방법입니다.
- Let’s Encrypt의 인증서를 발급받기 위해서는 도메인 또는 DNS A 레코드를 등록합니다.(trilium4user1.yourdomain.com, trilium4user2.yourdomain.com)
C:\> nslookup trilium4user1.yourdomain.com 서버: dns.google Address: 8.8.8.8 권한 없는 응답: 이름: trilium4user1.yourdomain.com Address: 168.107.13.218
- OCI에 생성한 VM에 접속합니다. 저는 Filebrowser를 설치한 VM을 함께 사용하겠습니다.
- Trilium 데이터 디렉토리(SQLite DB 및 설정 파일 포함)를 호스트 디렉토리와 바인드하기 위해 볼륨을 설정하는데, 이 때 필요한 호스트 디렉토리를 미리 생성합니다.
mkdir /webdav/trilium/user1 mkdir /webdav/trilium/user2
- CaddyFile에 Trilium에 사용할 도메인을 추가 등록하고 반영합니다. max_size 옵션을 추가해서 payload 크기(업로드 파일 크기)를 제한할 수 있습니다.(nginx의 “client_max_body_size” 지시자와 동일한 효과)
vi /webdav/caddy/Caddyfile # add at the end trilium4user1.yesxyz.kr { reverse_proxy trilium4user1:8080 request_body { max_size 1GB } } trilium4user2.yesxyz.kr { reverse_proxy trilium4user2:8080 request_body { max_size 1GB } } - docker-compose.yml 파일에 Trilium 컨테이터 생성 정보를 추가합니다.
vi /webdav/docker-compose.yml caddy: .... depends_on: - filebrowser - trilium4user1 - trilium4user2 .... # [Trilium] 개인 지식 관리 노트 trilium4user1: image: triliumnext/notes:stable container_name: trilium4user1 restart: always environment: - TRILIUM_DATA_DIR=/home/node/trilium-data volumes: - /webdav/trilium/user1:/home/node/trilium-data expose: - "8080" networks: - webdav-net # [Trilium] 개인 지식 관리 노트 trilium4user2: image: triliumnext/notes:stable container_name: trilium4user2 restart: always environment: - TRILIUM_DATA_DIR=/home/node/trilium-data volumes: - /webdav/trilium/user2:/home/node/trilium-data expose: - "8080" networks: - webdav-net - TriliumNext 컨테이터를 생성하고, Caddyfile 정보도 반영합니다.
sudo docker compose up -d trilium [+] up 14/14 ✔ Image triliumnext/notes:stable Pulled 42.3s ✔ Container trilium4user1 Created 1.2s ✔ Container trilium4user2 Created 1.2s sudo docker compose exec -w /etc/caddy caddy caddy reload 2026/06/18 23:46:31.934 INFO using adjacent Caddyfile 2026/06/18 23:46:31.938 INFO adapted config to JSON {"adapter": "caddyfile"} docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}" NAME STATUS PORTS caddy Up 3 hours 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 443/udp, 2019/tcp filebrowser Up 3 hours (healthy) 80/tcp trilium4user1 Up 3 minutes (healthy) 8080/tcp trilium4user2 Up 3 minutes (healthy) 8080/tcp - trilium4user1.yourdomain.com에 접속하여 접속 비밀번호를 설정한 후 TriliumNext 메인화면에 접속합니다.





- 자체 모바일 앱은 없지만, TriliumDroid와 Pocket Trilium 처럼 별도로 개발된 앱이 있어 소개합니다. 그런데 저는 모두 version 차이로 인해 sync에 실패했습니다.
- TriliumDroid:
Github의 FliegendeWurst/TriliumDroid 프로젝트에서 release된 apk를 다운로드받아 설치하시면 됩니다. 악성코드가 불안하신 분은 VIRUSTOTAL 사이트에서 스캔하신 후 사용하시면 맘이 편안해지실겁니다. - Pocket Trilium:
구글 스토어에 업로드된 Official 버전입니다. 중국 개발자가 개발한 것 같습니다. 설치 후 설정 페이지에 접속하면 중국어로 표시됩니다.
- TriliumDroid:
