How to configure Joplin Server

개요

Joplin은 오픈소스 메모 작성 응용프로그램입니다.

마크다운으로 글을 작성하고, 작성된 노트는 HTML 형식으로 출력됩니다.

Joplin 응용프로그램

이미지는 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.

댓글 남기기