개요
Joplin은 오픈소스 메모 작성 응용프로그램입니다.
마크다운으로 글을 작성하고, 작성된 노트는 HTML 형식으로 출력됩니다.
이미지는 joplinapp.org 에서 가져왔습니다.
응용프로그램
글작성을 위한 응용프로그램은 여러 플랫폼으로 제공됩니다.
- Desktop
- Windows
- macOS
- Linux
- Mobile
- Android
- iOS
- Terminal
- macOS
- Linux (Windows via WSL)
joplinapp 페이지의 installation 영역에서 파일 다운로드 링크를 확인할 수 있습니다.
동기화
작성된 글은 지원되는 여러 방법중 하나를 선택해서 동기화할 수 있습니다.
지원되는 동기화 방법:
- Nextcloud
- Dropbox
- OneDrive
- WebDAV
- File system
- Joplin server
Joplin server
동기화 서비스를 내 서버에서 제공하기 위해서 Joplin server 를 실행할 수 있습니다.
서버에 직접 설치할 수도 있지만, 도커 컨테이너로 실행하는 것으로 결정했습니다.
필요한 정보는 GitHub의 Joplin 저장소에서 제공되고 있습니다.
Docker image
도커 이미지를 직접 빌드하거나, 이미 빌드된 이미지를 활용할 수 있습니다.
도커 이미지 빌드를 위한 Dockerfile
은 joplin 저장소의 Dockerfile.server 파일을 참조할 수 있습니다.
빌드된 이미지를 사용해서 docker-compose 로 실행하기 위한 구성 파일은 아래와 같습니다.
Joplin 저장소의 docker-compose.server.yml 파일의 내용:
# This is a sample docker-compose file that can be used to run Joplin Server
# along with a PostgreSQL server.
#
# All environment variables are optional. If you don't set them, you will get a
# warning from docker-compose, however the app should use working defaults.
version: '3'
services:
db:
image: postgres:13.1
ports:
- "5432:5432"
restart: unless-stopped
environment:
- APP_PORT=22300
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_DB=${POSTGRES_DATABASE}
app:
image: joplin/server:latest
depends_on:
- db
ports:
- "22300:22300"
restart: unless-stopped
environment:
- APP_BASE_URL=${APP_BASE_URL}
- DB_CLIENT=pg
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DATABASE=${POSTGRES_DATABASE}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PORT=${POSTGRES_PORT}
- POSTGRES_HOST=db
docker-compose 파일의 내용을 보면, DBMS 로 Postgres 를 사용합니다.
Joplin server 응용프로그램은 postgres 에 의존되어 실행되는 것을 알 수 있습니다.
Joplin server 이미지는 docker: joplin/server 에서 얻을 수 있습니다.
환경변수는 Joplin 저장소의 .env-sample 파일에서 확인할 수 있습니다.
Postgres
Joplin server 응용프로그램이 처음 실행될 때, 데이터베이스 마이그레이션을 진행할 것으로 예상됩니다.
설명이 부족해서 확인은 불가능하지만 보통 데이터베이스와 사용자는 미리 준비해두고 진행하는게 좋을 것 같습니다.
이미 사용중인 Postgres 데이터베이스가 있어, 아래의 명령으로 데이터베이스 사용자와 데이터베이스를 작성합니다.
사용자 작성
사용자 이름은 joplin
이고, 비밀번호는 joplin
을 사용합니다.
/* Create user */
create user joplin WITH ENCRYPTED PASSWORD 'joplin';
데이터베이스 작성
앞서 작성한 joplin
사용자가 소유하는 joplin
데이터베이스를 작성합니다.
/* Create database */
CREATE DATABASE joplin OWNER joplin ENCODING 'utf-8';
데이터베이스를 준비했으므로 이제 응용프로그램을 실행합니다.
Joplin server 시작
저는 이미 사용중인 Postgres 데이터베이스가 있어 Jpolin 저장소의 docker-compose.server.yml 파일의 내용을 편집해서 사용합니다.
컨테이너 실행
docker-compose.yml 파일의 내용:
version: '3'
services:
app:
image: joplin/server:latest
container_name: joplin
# link to postgres container
external_links:
- postgres:postgres
network_mode: bridge
# If run container using specified user
# user: "1000:1000"
ports:
- "22300:22300"
restart: unless-stopped
environment:
- APP_BASE_URL=https://mydomain.com
- DB_CLIENT=pg
- POSTGRES_PASSWORD=joplin
- POSTGRES_DATABASE=joplin
- POSTGRES_USER=joplin
- POSTGRES_PORT=5432
- POSTGRES_HOST=postgres
- TZ=Asia/Seoul
docker-compose 명령으로 컨테이너를 실행합니다.
$ docker-compose up -d
리버스 프록시
22300 포트에서 요청을 대기하므로, 리버스 프록시로 특정 도메인 80 포트에 연결하면, 편리하게 사용할 수 있습니다.
- mydomain.com:80 -> localhost:22300
- mydomain.com:443 -> localhost:22300
사용자 추가
웹 브라우저를 열고, 리버스 프록시로 구성한 도메인으로 탐색합니다.
https://mydomain.com
로그인 페이지로 이동되면, 아래 정보로 로그인합니다.
- 사용자 이름(전자우편주소):
admin@localhost
- 비밀번호:
admin
Joplin server가 처음 실행되면 admin@localhost 계정이 기본적으로 추가됩니다.
누구나 공개된 동일한 계정을 사용하면 안되므로, 비밀번호를 변경합니다.
이후, 내 계정을 추가합니다.
그런데, UI 에서 관리자 여부를 설정할 수 없습니다.
postgres 데이터베이스를 연결해서 Joplin 데이터베이스에 마이그레이션된 테이블을 확인합니다.
select * from pg_tables;
joplin
데이터베이스에 users
테이블이 존재합니다.
users
테이블을 쿼리하면, 현재 사용자 목록을 확인할 수 있습니다.
select * from users;
admin@localhost 계정, 내 계정 두개가 존재합니다.
내 계정 레코드의 is_admin 열의 값을 1로 업데이트하면 내 계정이 관리자가 됩니다.
update users
set is_admin
where id = 'xxxxxxxxxxxxxx'
다시 사용자 테이블 users
을 쿼리해서 is_admin
열의 값이 1
로 업데이트된 것을 확인한 후, 찜짐한 admin@localhost
계정을 제거하면 됩니다.
Joplin app
동기화 구성
Joplin 응용프로그램에서 동기화 원본을 Joplin server 로 지정합니다.
Joplin 응용프로그램의 설정 창을 열고, 동기화 설정으로 이동합니다.
동기화 대상을 Joplin Server 로 변경합니다.
Joplin Server URL 을 입력합니다. 리버스 프록시로 구성된 내 도메인 주소를 입력합니다.
예) https://mydomain.com
Joplin Server Directory 는 내 글의 저장되는 디렉터리 이름을 지정합니다. 빈 값은 동작하지 않았고, 사용자 별로 지정이 가능한 것으로 보이므로 동기화를 사용하는 기기는 모두 동일한 값을 갖게 구성하면 될 것으로 보입니다.
저는 임의의 디렉터리 이름을 사용하고 있습니다.
예) bbon
Joplin Server username 은 Joplin server 에 추가한 계정의 전자우편주소를 작성합니다.
Joplin Server password 는 Joplin server 에 추가한 계정의 비밀번호를 작성합니다.
작성을 마친 후 동기화 설정 확인 버튼을 클릭하면, 동기화 구성 성공 여부를 알 수 있습니다.
이제부터 글을 작성하면 서버에 내용이 전송되고, 다른 Joplin 응용프로그램에서 작성한 내용이 현재 Joplin 응용프로그램에 반영됩니다.
아직 동기화 중 병합 충돌 관련 상황이 발생하지 않아서, 큰 문제없이 사용하고 있습니다.
마침
내가 작성한 글을 내 서버에 저장하고, 기기간 동기화를 제공하기 위해 Joplin server 를 도커 docker 컨테이너로 실행하는 과정을 나중에 찾아보기 위해 기록으로 남겼습니다.
이 글을 보고 따라해보시는 분들의 구성 환경이 다를 수 있으므로 무조건 따라하시기 보다는 먼저 읽어보시고 자신에게 맞는 구성을 준비하신 후 실행하시면 좋겠습니다.
Joplinapp.org 응용프로그램 설명은 잘 되어 있으나, Joplin server 관련 정보가 거의 없어서 GitHub: laurent22/joplin 의 내용으로 유추하고, 진행한 내용이므로 Joplin 에서 의도한 내용과는 다를 수 있습니다.
이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.