Hydrus in a container (HiC),打個嗝先。
Hydrus Network是一款開源圖片管理軟體,適合想用標籤管理大量混雜的圖片、影片、文件的用戶。Hydrus Network桌面版支援Linux、Windows、macOS,並有許多輔助工具。
基礎用法請看此篇:Hydrus Network:以標籤分類的圖片管理軟體,數位囤積症救星
本文Ivon著重探討如何遠端存取Hydrus Network的圖庫。
Hydrus Network有提供「client api」讓第三方程式存取圖庫。
例如使用floogulinc開發的Hydrus Web網頁程式檢視,能夠遠端編輯Hydrus Network圖庫的標籤。它的界面會隨螢幕大小自動變化,適合電腦和手機使用。
還有NO-ob開發的「綁架小蘿莉」手機APP,能用來看booru系的圖站,同時也可以連線至Hydrus,用手機檢視Hydrus Network圖庫。
但有個問題要解決,Hydrus Network本體無法以headless模式執行,不能單純開著server端。這代表要用client api遠端存取,電腦必須啟動圖形界面,並開啟Hydrus Network主程式,之後client api服務才會跑起來。
萬一主機沒有螢幕呢?如何在伺服器headless執行Hydrus Network?開發者給出的解法:使用Docker跑Alpine Linux系統,在裡面啟動FVWM視窗管理器與Hydrus Network,使其24小時待在線上,這樣就可以透過網頁noVNC,遠端存取Hydrus Network主程式。電腦不用啟動X視窗系統也可以headless的跑client api服務。
如此一來,便能存取Hydrus Network主程式,也可以用Hydrus Web簡單管理圖庫內容了!
本文討論的就是以Docker設定Hydrus Network,與其相關服務的作法。後面會在討論如何遠端上傳圖片。
1. 遠端存取Hydrus Network的網路設定#
解決外網連內網的問題。
請參考內網穿透軟體:開源內網穿透軟體比較
或是使用Port forwarding + DDNS,讓本機的容器服務能從外部存取。
別忘記在設定好下一節的服務後,開放對應的防火牆通訊埠。
2. 撰寫docker-compose#
這一節,我們要讓Hydrus Network在Docker裡跑起來。
Docker版的Hydrus資料庫可以跟桌面版Hydrus Network共用,但注意容器裡面跑的Hydrus Network版本,請確認您先前安裝的Hydrus Network得是跟Docker一樣的版本。或是索性只用Docker版Hydrus Network,才不會發生資料庫毀損。
Hydrus Network官方的docker-compose範本太複雜了,我將其簡化到只跑三個服務,也就是Hydrus Client、Hydrus Server、Hydrus Web。
安裝Docker
從Github拉取等會要的映像檔
sudo docker pull ghcr.io/hydrusnetwork/hydrus
sudo docker pull ghcr.io/hydrusnetwork/hydrus:server
sudo docker pull ghcr.io/floogulinc/hydrus-web
- 新增docker-compose.yml
mkdir ~/hydrus-docker
cd ~/hydrus-docker
vim docker-compose.yml
- 新增以下內容。
services:
hydrusclient:
image: ghcr.io/hydrusnetwork/hydrus:latest
container_name: hydrusclient
restart: unless-stopped
environment:
- UID=1000 # 使用一般使用者執行
- GID=1000
- TZ=Asia/Taipei # 設定時區
volumes:
- /home/user/.local/share/hydrus/db:/opt/hydrus/db # 填入Hydrus Network資料庫所在路徑
- /home/user/Downloads/:/mnt/inbox # (選擇性)把檔案放到宿主機/home/user/Download目錄,Hydrus Network容器才可以看到並匯入
tmpfs: # 提昇快取速度
- /tmp
ports:
- 5800:5800 # 網頁noVNC通訊埠
- 45869:45869 # client api通訊埠
hydrusserver:
image: ghcr.io/hydrusnetwork/hydrus:server
container_name: hydrusserver
restart: unless-stopped
volumes:
- /home/user/.local/share/hydrus/db/:/opt/hydrus/db # 填入Hydrus Network資料庫所在路徑
hydrus-web:
image: ghcr.io/floogulinc/hydrus-web:latest
container_name: hydrus-web
restart: always
ports:
- 8080:80 # Hydrus Web的網頁界面通訊埠
- 啟動容器服務
sudo docker compose up -d
瀏覽器開啟
http://localhost:5800
即可進入Hydrus Network界面,用法跟一般Hydrus Network無異。點選services → manage services,對client api點二下,按apply。
按services → review services,點選client api的頁籤,再點選add → manually。此頁面會產生一組金鑰(access key),將其保存下來。接著所有管理權限都打勾,按appy。
用瀏覽器開啟
http://localhost:45869
,應會看到Hydrus Network client api顯示正在運作的訊息。
3. 設定Hydrus Web網頁界面#
Hydrus Web功能比Hydrus Network少,只能搜尋Hydrus圖庫標籤、檢視圖片、編輯圖片標籤,界面比較簡潔幹練。足夠遠端管理圖片了。
上一節的docker-compose已經包含Hydrus Web,自己跑的跟hydrus web官網的比較起來,差別在自己跑的允許HTTP連線。
用網頁瀏覽器開啟Hydrus Web:
https://localhost:8080
在Settings裡面填入Hydrus Network的IP和client api金鑰。如果Hydrus Network是透過Docker跑,可能要填寫容器內部IP,這個可以用
docker inspect hydrusclient | grep "IPAddress"
指令查看。點選Test,確認下面顯示權限相關訊息才算連線成功。
回到首頁,就可以用Hydrus Network的標籤語法搜尋圖片了。
點選圖片可直接編輯標籤。
Hydrus Web的Pages頁面能檢視Hydrus Network上個工作階段所開啟的分頁,但是不能新增或關閉。
Hydrus Web尚能管理收件匣的圖片(搜尋
system:inbox
標籤),決定是否要進入封存(system:archived
標籤)。鑑於Hydrus Web無法手動進行選取匯入圖片的操作,所以有賴Hydrus Network的自動化匯入功能(import folder)發起。
4. 設定「綁架小蘿莉」手機APP#
綁架小蘿莉,原名叫做LoliSnatcher,指的是從網路下載各種圖片,不是犯罪喔。有趣的是明明沒露點,Github卻顯示該儲存庫含有敏感內容XDD 大概是APP名字取得很危險吧…
LoliSnatcher只有Android版,iOS用戶請改用閉源的Anime Boxes
從Github下載APK
安裝後點選Add New Booru,Booru Type選取Hydrus,並填入Hydrus的IP和client API的金鑰
點選最上方Test Booru,確認能連線(綠燈)後才按Save Booru
在這裡就可以搜尋Hydrus圖庫的圖片了,LoliSnatcher還支援儲存搜尋紀錄、多重分頁、編輯圖片標籤。
5. 遠端上傳檔案到Hydrus Network的步驟#
從手機或者其他客戶端,上傳圖片到Hydrus Network,並進行標籤管理。
覺得Hydrus Network在VNC裡面的界面不好操作,就用Hydrus Web吧。
上面的
docker-compose.yml
範例裡面,已經有一個收件匣的目錄範例,那麼,我只要從遠端,利用SFTP的方式將檔案丟到該目錄就行了。開啟Hydrus Network,勾選file → import and export folders → manage import folders,設定監視inbox目錄。這樣只要偵測到圖片,就會自動進行匯入作業。
然後就可以用Hydrus Web頁面管理標籤為
system:inbox
的檔案了。
參考資料#
- Docker - hydrus network
- floogulinc/hydrus-web: Web client for Hydrus - GitHub
- NO-ob/LoliSnatcher_Droid - GitHub
- funmaker/Hybooru:類似Hydrus Web,界面做得跟Danbooru一樣,但是開發者沒有提供預先建置的Docker映像檔。
- thatfuckingbird/hydownloader:基於gallery-dl的自動抓圖程式,可以下載Pixiv與E-hentai的圖片。
- Hydrus IPFS:使用IFPS協定傳輸檔案。
- TOR:用加密網路分享檔案。