6 lines
11 KiB
JavaScript
6 lines
11 KiB
JavaScript
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
|
|
export default {
|
|
167:({a,pre})=>p('이 문서는 설치된 버전에 포함된 Docker 설치 안내입니다. 예제의 버전과 네트워크 주소는 환경에 맞게 바꿔야 합니다. AMD64와 ARMv7 및 ARM64/v8용 이미지는 '+a(0,'Docker Hub')+'에서 확인할 수 있습니다.')+'<h2>준비</h2>'+p('Docker를 먼저 설치합니다. '+a(1,'Docker 설치 안내')+'를 참고하세요. 일반 이미지는 초기 실행에 루트 권한이 필요합니다. SMB/CIFS 공유를 데이터 폴더로 사용하는 경우에는 '+a(2,'관련 문제 해결 안내')+'에 따라 <code>nobrl</code>과 <code>noperm</code> 마운트 옵션이 필요할 수 있습니다.')+'<h2>Docker Compose로 실행</h2>'+p('Compose 파일을 받습니다.')+pre(0)+p('<code>docker-compose.yml</code>을 열어 설정을 확인합니다. 원문 예제의 기본 데이터 경로는 <code>~/trilium-data</code>이며 포트는 8080입니다. 다음 명령으로 백그라운드에서 시작합니다.')+pre(1)+'<h2>Docker 명령으로 실행</h2>'+p(a(3,'배포된 태그 목록')+'에서 원하는 버전을 선택합니다. 아래 버전은 원문의 예제입니다.')+pre(2)+p('<code>latest</code>는 나중에 새 이미지를 받을 때 버전이 달라질 수 있습니다. 동기화하는 인스턴스의 호환성을 유지하려면 버전을 고정하는 편이 좋습니다. 호스트에 데이터 폴더를 만들고 컨테이너에서 쓸 수 있도록 마운트합니다.')+'<h3>같은 컴퓨터에서만 접속</h3>'+p('<code>[VERSION]</code>을 실제 태그로 바꿉니다. 테스트나 리버스 프록시 뒤에서 운영할 때 사용할 수 있습니다.')+pre(3)+p('<code>docker ps</code>로 상태를 확인하고 브라우저에서 <code>127.0.0.1:8080</code>을 엽니다.')+'<h3>로컬 네트워크 연결 예제</h3>'+p('다음 macvlan 예제의 인터페이스와 주소 범위는 실제 네트워크에 맞춰야 합니다.')+pre(4)+pre(5).replace('triliumnext/notes:-latest','triliumnext/notes:[VERSION]')+p('일반 이미지에서 데이터의 사용자와 그룹 ID는 <code>USER_UID</code>와 <code>USER_GID</code>로 지정합니다.')+pre(6).replace('triliumnext/notes:-latest','triliumnext/notes:[VERSION]')+p('컨테이너 주소를 확인한 뒤 로컬 네트워크에서 접속합니다.')+pre(7)+'<h3>모든 인터페이스에서 접속</h3>'+p('다음 예제는 호스트의 모든 인터페이스에 포트를 엽니다. 외부 공개 범위는 방화벽과 프록시 설정도 함께 확인해야 합니다.')+pre(8)+p('<code>docker ps</code>에서 ID를 확인하고 <code>docker stop <CONTAINER ID></code>로 중지합니다.')+'<h3>데이터 경로 변경</h3>'+pre(9)+p('콜론 앞은 호스트의 경로이고 뒤는 컨테이너 안의 경로입니다. '+a(4,'Docker 볼륨 개요')+'와 '+a(5,'볼륨 사용 안내')+'를 참고하세요.')+'<h2>리버스 프록시</h2>'+p(a(6,'Nginx')+' 또는 '+a(7,'Apache')+' 안내를 참고하세요.')+'<h3>실행 사용자와 시간대</h3>'+p('일반 이미지는 <code>--user</code> 대신 <code>USER_UID</code>와 <code>USER_GID</code>를 사용합니다. 시간대가 맞지 않으면 <code>TZ</code>에 '+a(8,'시간대 식별자')+'를 지정합니다. 한국은 <code>Asia/Seoul</code>입니다.')+'<h2>일반 사용자로 실행하는 이미지</h2>'+p('<code>rootless</code> 계열은 컨테이너 안에서 루트가 아닌 <code>trilium</code> 사용자로 앱을 실행합니다. 데이터 경로는 일반 이미지와 다른 <code>/home/trilium/trilium-data</code>입니다. Debian과 Alpine 기반 변형을 제공합니다.')+pre(10).replace('For Debian-based image','Debian 기반 이미지').replace('For Alpine-based image','Alpine 기반 이미지')+p('일반 사용자로 실행하면 앱 프로세스의 권한을 줄일 수 있습니다. 호스트에서 Docker 데몬 자체를 비루트로 실행하는 설정과는 구분해야 합니다. 이미지 빌드 시 사용자를 만들고 별도 진입 스크립트 없이 실행합니다. 이 이미지에서는 <code>--user</code>로 UID와 GID를 지정할 수 있습니다.')+'<h3>Compose 예제</h3>'+pre(11).replace('Run with default UID/GID (1000:1000)','기본 UID/GID로 실행 (1000:1000)').replace('Run with custom UID/GID (e.g., match your host user)','호스트 사용자에 맞춘 UID/GID로 실행').replace('Specify a custom data directory','데이터 폴더 지정')+'<h3>Docker 명령 예제</h3>'+pre(12).replace('Build the image','이미지 빌드').replace('Run with default UID/GID (1000:1000)','기본 UID/GID로 실행 (1000:1000)').replace('Run with custom UID/GID','지정한 UID/GID로 실행')+'<h3>환경 변수와 권한</h3>'+p('<code>TRILIUM_UID</code>와 <code>TRILIUM_GID</code>는 Compose 설정을 통해 프로세스 ID를 지정하는 데 사용합니다. <code>TRILIUM_DATA_DIR</code>의 적용 위치는 사용한 Compose 파일을 확인하세요. 위 예제에서는 데이터 경로를 지정하는 변수로 사용합니다. 호스트 데이터 폴더의 소유권과 쓰기 권한이 실행 사용자에 맞아야 합니다.')+pre(13).replace('For example, if your data directory is owned by UID 1001 and GID 1001:','데이터 폴더의 소유자가 UID 1001과 GID 1001인 예제:')+p('프로세스는 시작할 때 지정한 UID/GID로 실행합니다. 기존 방식의 <code>usermod</code>나 <code>groupmod</code> 진입 스크립트를 사용하지 않으며 실행 중 스스로 사용자 ID를 바꾸지 않습니다.')+'<h3>이미지 종류</h3>'+p('원문의 Debian 변형은 Bullseye Slim을 기반으로 하며 <code>apps/server/Dockerfile.rootless</code>를 사용합니다. Alpine 변형은 크기가 작지만 환경에 따라 호환성 차이가 있을 수 있으며 <code>apps/server/Dockerfile.alpine.rootless</code>를 사용합니다.')+'<h3>사용자 지정 이미지 빌드</h3>'+pre(14).replace('For Debian-based image with custom UID/GID','UID/GID를 지정한 Debian 기반 이미지').replace('For Alpine-based image with custom UID/GID','UID/GID를 지정한 Alpine 기반 이미지')+p('빌드 인수 <code>USER</code>의 기본값은 <code>trilium</code>입니다. <code>UID</code>와 <code>GID</code>의 기본값은 각각 1000입니다.'),
|
|
168:({a,img})=>p(img(0,'지리 지도 예제'))+p('하위 노트의 위치 속성을 바탕으로 지도에 표시합니다. 지도에서 위치를 선택해 새 노트를 만들 수도 있습니다.')+'<h2>지도 만들기</h2>'+p('노트 트리에서 마우스 오른쪽 메뉴의 하위 노트 삽입 → 지리 지도를 선택합니다.')+p(img(1,'지리 지도 만들기'))+p('처음에는 전 세계가 보이는 빈 지도가 열립니다.')+p(img(2,'새 지도'))+'<h2>이동과 확대</h2>'+p('지도를 끌어 이동합니다. 마우스 휠이나 터치패드 두 손가락 동작 또는 왼쪽 위의 더하기·빼기 버튼으로 확대 비율을 바꿉니다. 위치와 확대 비율은 노트에 저장되어 다음에 열 때 복원됩니다.')+'<h2>지도에서 표시점 추가</h2>'+p('원하는 위치로 이동한 뒤 오른쪽 위 '+a(0,'떠 있는 버튼')+' 영역의 '+img(3,'표시점 추가 버튼')+' 버튼을 누릅니다. 보이지 않으면 '+img(4,'버튼 영역 펼치기')+' 버튼으로 펼칩니다.')+p(img(5,'표시점 삽입 모드'))+p('지도에서 위치를 누릅니다. 취소하려면 Esc를 누르세요.')+p(img(6,'표시점 이름 입력'))+p('이름을 입력하고 확인하면 표시점과 하위 노트가 만들어집니다.')+p(img(7,'표시점과 하위 노트 생성'))+'<h2>위치 저장 방식</h2>'+p('하위 노트의 <code>#geolocation</code> 속성에 위도와 경도를 쉼표로 구분해 저장합니다. 직접 입력할 수도 있습니다.')+p(img(8,'위치 속성'))+'<h2>표시점 이동</h2>'+p('표시점을 끌어서 옮기면 마우스를 놓는 즉시 저장됩니다. 이 버전에서는 이동을 실행 취소할 수 없습니다. 아직 마우스를 놓지 않았다면 Ctrl+R로 새로고침해 취소할 수 있습니다.')+'<h2>표시점 사용</h2>'+p('마우스를 올리면 노트 내용이 보이고 제목을 누르면 현재 화면에서 엽니다. 마우스 가운데 버튼은 새 탭에서 엽니다. 오른쪽 메뉴에서는 새 탭·분할 화면·창으로 열거나 지원되는 외부 지도 앱으로 위치를 열 수 있습니다. 지도에서 제거는 <code>#geolocation</code> 속성을 지웁니다. 다시 표시하려면 좌표를 입력해야 합니다.')+'<h2>아이콘과 색상</h2>'+p(img(9,'표시점의 아이콘과 색상'))+p('노트와 같은 아이콘을 사용합니다. <code>#color=green</code>처럼 색상 속성을 지정할 수도 있습니다.')+'<h2>좌표 직접 추가</h2>'+p('지도 아래에 노트를 만들고 <code>#geolocation</code>에 쉼표로 구분한 위도와 경도를 넣습니다.')+'<h3>Google 지도</h3>'+p('원하는 위치를 마우스 오른쪽 버튼으로 누르고 첫 항목의 좌표를 복사합니다.')+p(img(10,'Google 지도에서 좌표 복사'))+p('Trilium 지도 아래에 노트를 만듭니다.')+p(img(11,'하위 노트 만들기'))+p('소유한 속성에 <code>#geolocation="</code>을 입력한 뒤 좌표를 붙이고 닫는 따옴표를 입력합니다. Enter로 확정합니다.')+p(img(12,'복사한 좌표를 속성에 입력'))+'<h3>OpenStreetMap</h3>'+p('원하는 위치의 오른쪽 메뉴에서 주소 표시를 선택합니다.')+p(img(13,'OpenStreetMap 주소 표시'))+p('왼쪽 위에 표시되는 좌표를 선택해 복사합니다.')+p(img(14,'좌표 복사'))+p('지도 하위 노트의 <code>#geolocation</code> 값에 넣으면 표시됩니다.')+p(img(15,'위치 속성에 붙여넣기'))+'<h2>GPS 경로 파일</h2>'+p('기본적인 GPX 경로 표시를 지원합니다. 노트 트리의 지도 노트 안으로 <code>.gpx</code> 파일을 끌어 놓습니다.')+p(img(16,'GPX 파일 가져오기'))+p('파일 유형이 <code>application/gpx+xml</code>인지 확인합니다.')+p(img(17,'GPX 파일 유형'))+p('지도에 경로와 시작·끝 표시점이 나타납니다.')+p(img(18,'지도에 표시된 경로'))+p('시작 표시점은 노트 제목과 아이콘 및 색상을 사용합니다. 끝 표시점은 다른 아이콘으로 구분합니다. GPX에 경유지가 있으면 함께 표시하며 이름이 있는 경유지는 마우스를 올렸을 때 이름이 나옵니다.')+'<h2>문제 해결</h2>'+p(img(19,'지도에 격자 선이 나타나는 현상'))+p('앱 확대 비율이 100%가 아니면 소수점 배율 때문에 지도 조각 사이에 선이 보일 수 있습니다. Ctrl+0으로 화면 확대를 100%로 되돌리세요.')
|
|
};
|