在群暉上搭建基于 PostgreSQL 的 Joplin Server

前言

筆者一直想找一款能代替 MWeb 的跨平臺(tái)工具蟀俊,由于工作的變更扎附,很多 Mac 上好用的軟件在 Windows 平臺(tái)直接無(wú)法使用……反正探索了一圈感覺 Joplin 看起來(lái)是不錯(cuò)的挠铲,筆記功能和 MWeb 很像西雀,跨平臺(tái)磺送,并且筆記數(shù)據(jù)可以本地保存。恰好筆者近日購(gòu)買了一臺(tái)群暉的 NAS谋减,一起剛剛好牡彻,如同量身定制美滋滋。

Joplin Server 介紹

既然決定將筆記存在本地自己的 NAS 上面逃顶,Joplin 提供的 Joplin Cloud, Dropbox 自然不在考慮范圍內(nèi)讨便。看了一下官方的 Joplin Server 廣告以政,Joplin Server 比 WebDAV 或者 Nextcloud 牛逼多了霸褒。所以也沒什么好說(shuō)的,選就對(duì)了盈蛮!

你最好整個(gè)域名

為什么說(shuō)要有個(gè)域名呢废菱,其實(shí)筆者半年前就想搭建 Joplin Server 了,那為什么現(xiàn)在才發(fā)文呢抖誉?是因?yàn)榘肽昵按钍×税⑹庵幔嚵税胩煊?IP:端口號(hào) 沒成功,查官網(wǎng)的說(shuō)法是支持的袒炉,但是筆者堅(jiān)信官方是在放屁旁理!

順便說(shuō)一下這玩意兒筆者認(rèn)為極不靠譜,坑賊多……如果讀者還有興趣的話且聽筆者慢慢道來(lái)……

部署 Joplin Server

  • 選擇 PostgreSQL 作為數(shù)據(jù)庫(kù)我磁,Joplin Server 還提供了 SQLite 的支持孽文,但是介紹是作為開發(fā)、測(cè)試用的夺艰,并且筆者是斥巨資購(gòu)入的高端群暉 NAS芋哭,性能杠杠的,使用 PostgreSQL 毫無(wú)壓力郁副!
  • 推薦使用 Docker 部署 Joplin Server减牺,由于 Joplin Server 是部署在 NAS 上的,如果把 NAS 當(dāng)成普通的 Linux 服務(wù)器直接懟服務(wù)上去存谎,難免會(huì)出事拔疚。
  • 由于同時(shí)用到 postgresjoplin/server 兩個(gè)映像,推薦使用 Docker Compose

SSH 進(jìn)群暉后切換為 root既荚,在喜歡的路徑創(chuàng)建 .envdocker-compose.yml 兩個(gè)文件草雕。

推薦還是整一個(gè) .env,當(dāng)然沒有也行固以,這樣數(shù)據(jù)庫(kù)的賬號(hào)密碼就得多復(fù)雜粘貼幾次

.env

POSTGRES_PASSWORD=極其復(fù)雜的密碼
POSTGRES_DATABASE=取個(gè)能分辨的數(shù)據(jù)庫(kù)名字
POSTGRES_USER=取個(gè)能分辨的用戶名字

docker-compose.yml

version: "3"

services:
    db:
        image: postgres:latest
        volumes:
            - ./data/postgres:/var/lib/postgresql/data
        ports:
            - "5432:5432"
        restart: unless-stopped
        environment:
            - 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_PORT=22300
            - APP_BASE_URL=帥氣的域名
            - DB_CLIENT=pg
            - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
            - POSTGRES_DATABASE=${POSTGRES_DATABASE}
            - POSTGRES_USER=${POSTGRES_USER}
            - POSTGRES_PORT=5432
            - POSTGRES_HOST=db

稍微說(shuō)明一下幾個(gè)參數(shù):

Parameter Function
APP_BASE_URL 后續(xù)訪問 Joplin Server 的域名,如果沒有域名就用不了這玩意兒
-v /var/lib/postgresql/data 掛載 PostgreSQL 數(shù)據(jù)庫(kù)持久化的路徑,不設(shè)置這個(gè)每次重啟映像數(shù)據(jù)就寄了
DB_CLIENT pg
POSTGRES_PORT 設(shè)置成 PostgreSQL 的端口憨琳,這里 PostgreSQL 映射的 5432

然后創(chuàng)建 當(dāng)前路徑/data/postgres 文件夾诫钓,使用 docker-compose up -d 命令

cing!大功告成……才怪篙螟。

Creating network "joplin_test_default" with the default driver
Creating joplin_test_db_1 ...
Creating joplin_test_db_1 ... error

ERROR: for joplin_test_db_1  Cannot start service db: driver failed programming external connectivity on endpoint joplin_test_db_1 (785aa7860ddfe145a4b72dd8f88dc516b8bf7af28cacaad96cf5d0f9df719ac7): Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use

ERROR: for db  Cannot start service db: driver failed programming external connectivity on endpoint joplin_test_db_1 (785aa7860ddfe145a4b72dd8f88dc516b8bf7af28cacaad96cf5d0f9df719ac7): Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use
ERROR: Encountered errors while bringing up the project.

通過報(bào)錯(cuò)得知端口 5432 已經(jīng)被占用菌湃,查了一下是群暉 NAS 自己在 5432 開了個(gè) PostgreSQL 服務(wù)。所以講道理的話我們是可以不用再在 Docker 中啟動(dòng)一個(gè) PostgreSQL 服務(wù)遍略,直接用 NAS 自己?jiǎn)?dòng)的原生就好了(注意這樣要設(shè)置 Docker 網(wǎng)絡(luò)模式為 Host)惧所。不過這背離了我們不把 NAS 當(dāng)普通 Linux 服務(wù)器的初衷,所以只能換一個(gè)給 PostgreSQL 換一個(gè)端口號(hào)

修改一下 docker-compose.yml绪杏,筆者這里就讓 PostgreSQL 映射的端口號(hào)為 12345

version: "3"

services:
    db:
        image: postgres:latest
        volumes:
            - ./data/postgres:/var/lib/postgresql/data
        ports:
            - "12345:5432"
        restart: unless-stopped
        environment:
            - 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_PORT=22300
            - APP_BASE_URL=帥氣的域名
            - DB_CLIENT=pg
            - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
            - POSTGRES_DATABASE=${POSTGRES_DATABASE}
            - POSTGRES_USER=${POSTGRES_USER}
            - POSTGRES_PORT=12345
            - POSTGRES_HOST=db

然后docker-compose up -d

cing下愈!大功告成……才怪。

看著屏幕上打印的 done, done 仿佛一切盡在掌握之中蕾久,但實(shí)際上訪問 22300 發(fā)現(xiàn)什么也沒有势似,進(jìn)入 Docker 查 Joplin Server 的日志,會(huì)發(fā)現(xiàn)瘋狂報(bào)錯(cuò):

db: Could not connect. Will try again. connect ECONNREFUSED 172.18.0.2:12345
db: Could not connect. Will try again. connect ECONNREFUSED 172.18.0.2:12345
db: Could not connect. Will try again. connect ECONNREFUSED 172.18.0.2:12345
[error] db: Timeout trying to connect to database: Error: connect ECONNREFUSED 172.18.0.2:12345
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '172.18.0.2',
  port: 12345
}
Error: Timeout trying to connect to database. Last error was: connect ECONNREFUSED 172.18.0.2:12345
    at Object.<anonymous> (/home/joplin/packages/server/src/db.ts:113:10)
    at Generator.next (<anonymous>)
    at fulfilled (/home/joplin/packages/server/dist/db.js:5:58)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

壞起來(lái)了僧著,怎會(huì)如此履因。筆者在檢查了半小時(shí)配置,github issues 模塊沖浪多個(gè)小時(shí)之后盹愚,總算在這個(gè)貼子找到了解決的辦法:

手動(dòng)使用-p指定 PostgreSQL 的端口栅迄。再次修改 docker-compose.yml

version: "3"

services:
    db:
        image: postgres:latest
        volumes:
            - ./data/postgres:/var/lib/postgresql/data
        ports:
            - "12345:12345"
        restart: unless-stopped
        environment:
            - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
            - POSTGRES_USER=${POSTGRES_USER}
            - POSTGRES_DB=${POSTGRES_DATABASE}
        command: -p 12345
    app:
        image: joplin/server:latest
        depends_on:
            - db
        ports:
            - "22300:22300"
        restart: unless-stopped
        environment:
            - APP_PORT=22300
            - APP_BASE_URL=https://joplin.0x11901.top/
            - DB_CLIENT=pg
            - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
            - POSTGRES_DATABASE=${POSTGRES_DATABASE}
            - POSTGRES_USER=${POSTGRES_USER}
            - POSTGRES_PORT=12345
            - POSTGRES_HOST=db

鍵入docker-compose up -d 回車

cing!大功告成皆怕!

這次這玩意兒是真的跑起來(lái)了毅舆,順便說(shuō)一下 PostgreSQL 的端口你通過 Docker 網(wǎng)絡(luò) bridge 橋接到哪個(gè)端口,只要 POSTGRES_PORTcommand: -p 的端口對(duì)應(yīng)上了端逼,這玩意兒它都能啟動(dòng)起來(lái)朗兵,你說(shuō)離譜不離譜?難怪貼子里的大哥表示:

Don't know why

我嚴(yán)重懷疑 Joplin Server 用了什么 DEEP♂DARK♂FANTASY 連接 PostgreSQL 數(shù)據(jù)庫(kù)吧6ヌ病S嘁础!

結(jié)尾

Joplin Server 服務(wù)啟動(dòng)好了之后礁鲁,記得使用你高超的技巧讓它能通過你配置在 APP_BASE_URL 中的帥氣的域名可以訪問到盐欺,不要嘗使用 IP:端口號(hào) 的方式來(lái)訪問使用,節(jié)約一下寶貴的時(shí)間吧(
默認(rèn)賬戶 admin@localhost 密碼 admin 登錄仅醇,進(jìn)去后盡快修改郵箱和密碼冗美。配合它家的各種 app 即可跨平臺(tái)使用,用起來(lái)感覺還可以析二。

但我內(nèi)心中最真切的感受

天天搞邪道連接數(shù)據(jù)庫(kù)是不是哪天就給我崩了7弁荨=谠ぁ!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末属韧,一起剝皮案震驚了整個(gè)濱河市安拟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宵喂,老刑警劉巖否淤,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荐吵,死亡現(xiàn)場(chǎng)離奇詭異题翰,居然都是意外死亡荆烈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門裸燎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)顾瞻,“玉大人,你說(shuō)我怎么就攤上這事顺少∨笃洌” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵脆炎,是天一觀的道長(zhǎng)梅猿。 經(jīng)常有香客問我,道長(zhǎng)秒裕,這世上最難降的妖魔是什么袱蚓? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮几蜻,結(jié)果婚禮上喇潘,老公的妹妹穿的比我還像新娘。我一直安慰自己梭稚,他們只是感情好颖低,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弧烤,像睡著了一般忱屑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暇昂,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天莺戒,我揣著相機(jī)與錄音,去河邊找鬼急波。 笑死从铲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澄暮。 我是一名探鬼主播名段,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼阱扬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了伸辟?” 一聲冷哼從身側(cè)響起价认,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎自娩,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渠退,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忙迁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碎乃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姊扔。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梅誓,靈堂內(nèi)的尸體忽然破棺而出恰梢,到底是詐尸還是另有隱情,我是刑警寧澤梗掰,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布嵌言,位于F島的核電站,受9級(jí)特大地震影響及穗,放射性物質(zhì)發(fā)生泄漏摧茴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一埂陆、第九天 我趴在偏房一處隱蔽的房頂上張望苛白。 院中可真熱鬧,春花似錦焚虱、人聲如沸购裙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)躏率。三九已至,卻和暖如春谍咆,著一層夾襖步出監(jiān)牢的瞬間禾锤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工摹察, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恩掷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓供嚎,卻偏偏與公主長(zhǎng)得像黄娘,于是被迫代替她去往敵國(guó)和親峭状。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容