...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

作者:生火人

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

警告:本教程是本人打磨近兩年沉澱下的精華,乾貨過多,請自行配水食用。

本教程可以讓你在一臺ubuntu機器上原地搭建一整套照片管理及同步系統,如果你暫時沒有折騰的時間(兩三小時足夠),可以先看末尾整套系統的使用效果,點個收藏,等認真折騰的時候拿出來參考。

需求

在NAS的使用場景中,照片同步及備份可以說是最重要的應用場景之一。在沒有NAS的情況下,各個手機廠商會使用自己的XX雲服務來為你儲存一部分照片,這種服務通常能在一個由“不收費”、“速度快”、“空間大”的不可能三角中找到自己的位置。阿里雲盤目前看起來不錯,但是我很難相信他會長期保持這種水準。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

所以你要麼付費享受高質量服務,要麼忍受速度或儲存空間上的瓶頸。在幾年前我曾經想把小米雲服務上的圖片下載到本地,但那種只支援單張照片操作的反人類設計讓我耗費了大量時間,下載下來後才發現,雲上存的並不是原圖,而是壓縮後的圖。有時候我會想,這種雲服務可能並不是為我服務的,這只是一個好用的工具,讓我快速成為大資料的一部分,而且還要找我收錢。這應該也是眾多NAS使用者使用NAS的原因之一。

成品NAS方案 VS 開源方案

照片同步工具在成品NAS中有很多方案,比如群暉的QuickConnect+DS-photo+DS-file+photos+Moments,QC負責用內網穿透的方式解決網路連線問題,DS photo/file負責將照片從終端裝置同步到nas,Photos可以基於檔案結構檢視圖片,是傳統的相簿,Moments負責使用AI演算法歸納照片,是智慧相簿。成品NAS的方案在使用上很方便,檔案同步可以自動進行,而Moments的AI分析能力也有種近似蘋果系圖片管理的體驗。優點說完說說不足,首先QuickConnect服務需要你使用群暉的帳號,並且走群暉伺服器的流量,那麼群暉服務端如果想把你的資料考下來留一份,就跟從自己兜裡拿東西一樣簡單,費盡心思還花了錢終究沒逃過大資料的法網,這不是很不甘心?DS-photo與DS-file兩個工具很不錯,但是閉源的app裝在手機上,並且擁有你的相簿許可權,總感覺家裡進了外人一樣。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

實際上在開源世界中,其中的上面的每一款軟體都有與之對應的優秀專案。使用Syncthing+NextCloud+Rsync+AquarHome+Photoprism可以達到同樣的效果。這些開源軟體都是社群中質量極高的專案,不僅品質上成,專案本身的更新也非常活躍,而開源本身就消除了所有我們對隱私的顧慮。Syncthing可以不依賴單獨的內網穿透服務直接進行遠端檔案同步,雖然中間要依賴公共的服務節點,但Syncthing公開的原始碼證明了它不會偷窺你的資訊。NextCloud可以替代群暉的Photos作為傳統相簿使用。而Photoprism與Moments一樣具有強大的圖片分析能力。AquarHome作為幾個服務的控制檯,可以在同一個頁面上直觀的看到檔案同步情況,並集成了rsync,可以按照自己的習慣完成一鍵備份。這套方案其實對於其他形式的檔案同樣有效,如果你有檔案同步的需求,這套方案也完全適用。

在此宣告一下,我是AquarHome開源個人home頁專案的開發者,這個專案對標Heimdall,針對DIY NAS場景開發了大量實用的元件,最近更新了搜尋引擎的搜尋聯想功能以及transmission全功能元件,更多功能在快速更新中。專案docker安裝,值得一試。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

方案部署

下面介紹如何搭建這套系統。由於整套方案涉及很多軟體,本來想寫一個綱領性的教程,但越寫越發現還是應該把完整的搭建過程展現出來,所以寫到最後變成了“保姆級”教程。但由於是DIY NAS的教程,所以即使是保姆級,也需要你有基礎的linux使用經驗,對docker的基本理解,以及對家庭網路有基本概念。這篇教程可以讓你在一臺ubuntu上原地搭建一整套好用的檔案管理及同步系統,如果你覺得教程對你有幫助,可以先收藏,等想認真折騰的時候拿出來參考。

本教程使用docker-compose部署軟體。docker-compose是對docker的簡單封裝,使用命令列進行互動。與它類似的工具還有Portainer,它具有web介面,更加友好一些。但我本人更加習慣基於配置檔案與命令列的docker-compose,簡潔透明,易於自動化。

搭建基礎環境

我搭建這套系統是以ubuntu20為基礎的,系統安裝就不介紹了。系統安裝完以後需要安裝一些基礎的環境,這套系統需要python3、docker、docker-compose三個基礎工具。我寫了一個自動化指令碼來適配我自己的需要,但是指令碼不一定適合所有人,所以我把指令碼通用的部分提供出來供參考。你可以根據需要一行一行地執行,這樣便於排查問題。

### 使用root身份

sudo -i

### 安裝python3及python虛擬環境

apt install curl -y

apt install python3-pip -y

pip3 install virtualenv

pip3 install virtualenvwrapper

### 配置pyhton虛擬環境

cp /root/。bashrc /root/。bashrc。bak

cat >> /root/。bashrc <

export WORKON_HOME=$HOME/。virtualenvs

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

source /usr/local/bin/virtualenvwrapper。sh

EOF

source /root/。bashrc

### 生成一個指令碼,用來方便地啟停整套docker-compose系統使用方式是:aqserv start|stop|restart|pscat > /usr/local/bin/aqserv <

#!/bin/bash

cmd=$1

if [ “$cmd” != “start” ] && [ “$cmd” != “stop” ] && [ “$cmd” != “restart” ] && [ “$cmd” != “ps” ]; then

echo “error: input parameter only accept ‘start’,‘stop’,‘restart’ or‘ps’”

exit 0

fi

source /root/。bashrc

source /usr/local/bin/virtualenvwrapper。sh

workon aquar

cd /opt/aquar/src/docker-compose/

if [ “$cmd” == “start” ]; then

echo “aquar docker services starting”

docker-compose up -d

elif [ “$cmd” == “stop” ]; then

echo “aquar docker services stoping”

docker-compose stop

elif [ “$cmd” == “restart” ]; then

echo “aquar docker services restarting”

docker-compose restart

else

docker-compose ps

fi

EOF

chmod +x /usr/local/bin/aqserv

### 安裝docker

curl -fsSL https://download。docker。com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository “deb [arch=amd64] https://download。docker。com/linux/ubuntu $(lsb_release -cs)

stable”apt-get update

apt-get install docker-ce docker-ce-cli containerd。io -y

### 建立一個python虛擬環境aquar並安裝docker-compose

source /root/。bashrcsource /usr/local/bin/virtualenvwrapper。sh

cat >> /root/。bashrc <

source /usr/local/bin/virtualenvwrapper。sh

mkvirtualenv aquar

workon aquar

pip3 install docker-compose

### 設定開機自啟動docker-compose********‘

cat >  /lib/systemd/system/aquar。service <

[Unit]

Description=Aquar service

After=docker。service

Requires=docker。service

[Service]

Type=simple

User=root

Group=root

TimeoutStartSec=0

ExecStart=/usr/local/bin/aqserv start

SyslogIdentifier=aqserv

[Install]

WantedBy=multi-user。target

EOF

systemctl enable aquar

這個指令碼會建立一個命令,你可以在root使用者下使用aqserv start | stop | restart | ps來方便的實現整套系統的啟動、關閉、重啟及檢視狀態操作。

配置docker-compose

1。搭建完基礎環境後,你需要有一個目錄來存放docker-compose。yml檔案,因為這個組合中Photoprism需要用到資料庫,所以我們還需要在這個目錄下新建一個mariadb。init。d資料夾,在這個資料夾裡面,新建一個init。sql檔案用來作為資料庫的初始化指令碼。目錄結構如下:

docker-compose。yml

mariadb。init。d

init。sql

2。 在init。sql檔案中寫入如下內容,意思是新建一個名為“photoprism”的資料庫,並新建一個“root”資料庫使用者,密碼是“root”,然後給予來自外部連線時的root使用者所有許可權:

CREATE DATABASE IF NOT EXISTS nextcloud;

CREATE DATABASE IF NOT EXISTS photoprism;

CREATE USER ’root‘@’localhost‘ IDENTIFIED BY ’root‘;

GRANT ALL PRIVILEGES ON 。 TO ’root‘@’%‘;

3。 在docker-compose。yml檔案中寫入如下內容,其中中文標註的部分需要你改成自己的對應路徑

version: “3”services:

syncthing:

image: ghcr。io/linuxserver/syncthing

container_name: syncthing

# hostname: syncthing #optional

environment:

- PUID=1000

- PGID=1000

- TZ=“Asia/Shanghai”

volumes:

- /你的/docker/應用資料/路徑/syncthing/config:/config

- /你的/儲存池/路徑:/opt/aquarpool

# - /path/to/data1:/data1

ports:

- 8384:8384

- 22000:22000

- 21027:21027/udp

restart: unless-stopped

nextcloud:

image: nextcloud

volumes:

# 掛載配置檔案

- /你的/docker/應用資料/路徑/nextcloud:/var/www/html

- /你的/docker/應用資料/路徑/nextcloud/apps:/var/www/html/custom_apps

- /你的/docker/應用資料/路徑/nextcloud/config:/var/www/html/config

- /你的/docker/應用資料/路徑/nextcloud/data:/var/www/html/data

- /你的/儲存池/路徑:/opt/aquarpool

ports:

- “8081:80”

depends_on:

- “mariadb”

restart: unless-stopped

photoprism:

image: photoprism/photoprism:latest

depends_on:

- “mariadb”

# restart: unless-stopped

security_opt:

- seccomp:unconfined

- apparmor:unconfined

ports:

- 8042:2342 # [local port]:[container port]

environment:

PHOTOPRISM_ADMIN_PASSWORD: “使用者登入密碼”

PHOTOPRISM_HTTP_PORT: 2342

PHOTOPRISM_HTTP_COMPRESSION: “gzip”

PHOTOPRISM_DEBUG: “false”

PHOTOPRISM_PUBLIC: “false”

PHOTOPRISM_READONLY: “false”

PHOTOPRISM_EXPERIMENTAL: “false”

PHOTOPRISM_DISABLE_WEBDAV: “false”

PHOTOPRISM_DISABLE_SETTINGS: “false”

PHOTOPRISM_DISABLE_TENSORFLOW: “false”

PHOTOPRISM_DARKTABLE_PRESETS: “false”

PHOTOPRISM_DETECT_NSFW: “false”

PHOTOPRISM_UPLOAD_NSFW: “true”

PHOTOPRISM_DATABASE_DRIVER: “mysql”

PHOTOPRISM_DATABASE_SERVER: “mariadb:3306”

PHOTOPRISM_DATABASE_NAME: “photoprism”

PHOTOPRISM_DATABASE_USER: “root”

PHOTOPRISM_DATABASE_PASSWORD: “root”

PHOTOPRISM_SITE_URL: “http://公網IP或區域網IP:埠號/”

PHOTOPRISM_SITE_TITLE: “PhotoPrism”

PHOTOPRISM_SITE_CAPTION: “Browse Your Life”

PHOTOPRISM_SITE_DESCRIPTION: “”

PHOTOPRISM_SITE_AUTHOR: “”

volumes:

- “/你/儲存池中/存放照片/的路徑:/photoprism/originals”

# Multiple folders can be indexed by mounting them as sub-folders of /photoprism/originals:

# - “/mnt/Family:/photoprism/originals/Family”    # [folder_1]:/photoprism/originals/[folder_1]

# - “/mnt/Friends:/photoprism/originals/Friends”  # [folder_2]:/photoprism/originals/[folder_2]

# Mounting an import folder is optional (see docs):

# - “~/Import:/photoprism/import”

# Permanent storage for settings, index & sidecar files (DON’T REMOVE):

- “/你的/docker/應用資料/路徑/photoprism/storage:/photoprism/storage”

mariadb:

image: mariadb:10。4

volumes:

- /你的/docker/應用資料/路徑/mariadb:/var/lib/mysql

- 你存放本docker-compose。yml檔案的路徑/mariadb。init。d:/docker-entrypoint-initdb。d

environment:

MYSQL_DATABASE: nextcloud

MYSQL_ROOT_PASSWORD: root

TZ: “Asia/Shanghai”

command:

[      “——character-set-server=utf8mb4”,      “——collation-server=utf8mb4_unicode_ci”,      “——default-time-zone=+8:00”,

]    ports:

- “3306:3306”

restart: unless-stopped

aquarhome:

image: finetu/aquarhome:latest

container_name: aquarhome

environment:

- PUID=1000

- PGID=1000

- TZ=Asia/Shanghai

volumes:

- /你的/docker/應用資料/路徑/aquarhome/data:/var/aquardata

- /你的/docker/應用資料/路徑/aquarpool:/opt/aquarpool

- /你的/docker/應用資料/路徑/aquarhome/logs:/root/。pm2/logs

ports:

- 8172:8172

restart: unless-stopped

解釋一下上面的配置就是:這套配置部署了五個服務——Syncthing、Photoprism、AquarHome以及Photoprism所依賴的資料庫mariadb,每個服務有自己的app資料儲存路徑以及連線到儲存池的使用者資料路徑。

4。 配置檔案寫好後,我們cd到配置檔案所在的目錄下執行docker-compose up -d,如果看到類似下面的輸出,就說明服務正常啟動了,稍等幾分鐘,等服務初始化完成,就可以訪問各個服務了。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

方案整體配置

配置和使用這套方案前,先來設定一個使用場景。假設我要去冰島旅遊,我希望自己用手機拍照後,照片可以自動上傳到自己的NAS伺服器並直接被相簿收錄。旅遊回來以後我可以把最近幾天的照片放在一個“冰島遊記”的資料夾下進行備份(歸檔)。

Syncthing配置

1。配置服務端Syncthing。Syncthing是一個跨平臺的檔案同步方案,它可以安裝在安卓手機、PC、linux伺服器上,Syncthing沒有IOS端,但可以透過macOS端迂迴達到目的。另外Syncthing是去中心化的,所以每個端對於Syncthing來說並沒什麼區別。上一節介紹的安裝過程就是將Syncthing安裝到了我們的Linux伺服器上,下一步是對Syncthing進行簡單地配置。在瀏覽器中開啟Syncthing的web介面如果你是按照我上面給出的配置進行部署,那麼應該開啟http://伺服器地址:8384,一切正常的話,頁面會讓你輸入使用者名稱密碼,輸入正確後你會看到Syncthing的管理頁面。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

在我的伺服器上,圖片集中在儲存池的images資料夾中,其中有來自手機的照片(finetu_phone),有網上收藏的圖片(finetu_meme),有老婆iCloud上同步下來的照片(icloud_images)。

finetu_meme

finetu_phone

icloud_image

根據我們的使用場景,我們需要讓手機中的圖同步到finetu_phone資料夾下面,所以我們在Syncthing的伺服器端設定finetu_phone資料夾的同步,第一次進來的時候左邊的資料夾列表只有一個Default Folder。現在我們點選“+新增資料夾”,在設定中填寫如下資訊,填寫後點擊儲存。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

2。伺服器端做好第一階段配置後,我們需要在手機上也安裝一個Syncthing。

Syncthing官網下載頁面:https://syncthing。net/downloads/

Syncthing安卓包官方下載地址:https://f-droid。org/packages/com。nutomic。syncthingandroid/

3。下載安裝完成後,開啟app,可以看到Syncthing的安卓端介面,在介面上建立一個同步任務。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

在表單中填入同步的名字,資料夾ID(各個端靠這個名字來識別要同步的資料夾),以及手機上需要同步的照片目錄。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

4。配置伺服器端的連線。開啟伺服器端的web頁面,點選右上角的“操作”按鈕,選擇“顯示ID”,把裝置ID複製下來,傳送到手機上,你也可以直接拿手機端掃碼新增,這裡介紹最傳統的方式。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

切換到“裝置”標籤頁,點選右上方的“+”號,新增裝置,在表單中填寫上一步考過來的裝置ID,然後給裝置起個名字,點右上方對號確定。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

這時候如果網路情況良好,你就已經能在web端上看到一個裝置請求連線的提示了,直接接收就可以不用在web端設定對手機端的連線了,在教程裡還是費事走一遍流程。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

5。對裝置指定需要同步的資料夾。在web端點選新新增的裝置,點選“選項”,在子頁面中進入“共享”標籤頁,然後點選在第1步裡面配置的同步資料夾。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

如果你的網路良好,應該就已經能看到有檔案開始同步了,如果你沒有在wifi下使用,可能會耗費大量的流量,所以你可以先將裝置暫停,在wifi下再進行第一次同步。Syncthing的app端可以設定為”在WIFI下執行”甚至在指定wifi下執行。你可以根據自己的需求進行調整,設定位置在“設定”->“執行狀況”中。

NextCloud配置

NextCloud是目前功能最強且開發者活躍的開原始檔管理器。另一個有競爭力的方案是FileRun,它甚至比NextCloud還要強,但FileRun不開源,所以忍痛捨棄了。下面介紹NextCloud初始化配置步驟。

1。部署好docker-compose的應用後,需要等幾分鐘才能正常得看到NextCloud的web介面。如果你是按照我給出的配置部署的,那麼服務地址是http://你機器所在的內網地址:8081。開啟web頁面後它會要求你進行初始化設定。不要著急提交,因為我們需要把資料庫指定為mariadb。

可能沒有軟體開發經驗的朋友見到資料庫就比較反感。在此簡單介紹一下mariadb資料庫,它是目前IT業界最流行資料庫 Mysql被Oracle公司收購後,Mysql開發者建立的新的Mysql開源版本,其用法與介面規範與Mysql完全相同,現在可以說是開源方案中預設的關係性資料庫選型,例如如果你在ubuntu上安裝mysql,你會發現安裝的實際上是mariadb。在本套方案中就有兩個專案(NextCloud與Photoprism)依賴這個資料庫。為什麼資料庫這麼重要呢?因為對於任何稍微複雜一點的專案來說,使用資料庫都是最高效穩定的資料儲存方案,雖然會引入一個額外的服務,但它給專案在功能和效能上帶來提升相比成本是完全值得的。就好比你做幾塊錢的小本生意不需要開車,齊個三輪就行,但生意做大了就必需得有輛車了。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

2。點選頁面上這個“Stroage & database”,可以看到選擇資料庫的頁面,選擇第二種“MySQL/MariaDB”,按下圖把資訊配置好。資料庫帳戶名(“root”)及密碼(“root”)都是在“方案部署”那節中的docker-compose。yml配置檔案中配置的,如果你改了配置,請注意在這裡也修改掉,資料庫名稱nextcloud同樣是在“方案部署”章節中寫在init。sql檔案中專門為nextcloud建立的資料庫。

最下面的資料庫地址需要詳細解釋一下,因為NextCloud與mariadb都部署在docker中,所以他們之間的互相通訊需要靠docker-compose建立的虛擬網路來進行,他們同屬一個虛擬子網,而docker-compose很貼心的將每個容器的名稱與它在虛擬子網中的IP地址進行了關聯,所以你在一個容器中只需要直接輸入容器名稱就等同於輸入了這個容器的IP地址。當然你也可以透過docker network命令查詢這個容器在內網中的IP地址加埠號,比如說我查到的mariadb IP地址是172。18。0。4,命令如下。

root@aquartest:/opt/aquar/storages/apps# docker network ls

NETWORK ID     NAME                     DRIVER    SCOPE

6006ea79c811   bridge                   bridge    local

4ab482238fb7   docker-compose_default   bridge    local

7ee6aab252bc   host                     host      local

7be1d436c680   none                     null      local

root@aquartest:/opt/aquar/storages/apps# docker network inspect 4ab482238fb7

{

“Name”: “docker-compose_default”,

“Id”: “4ab482238fb75bb8f0c9e693cbd326c98635c7fd26a1dacdd28fce57e6f495ca”,

“Created”: “2021-11-12T15:59:42。853686056Z”,

。。。

“Containers”: {

。。。

“d4224b36f58170b6daa6c5a89b0c2358fbe3fdd2f7d53a9d73c644d6bc551b19”: {

“Name”: “mariadb”,

“EndpointID”: “e3cbb68aaa763f4672a802d1f264d10fc4501165ff9e79185ff931857daede41”,

“MacAddress”: “02:42:ac:12:00:04”,

“IPv4Address”: “172。18。0。4/16”,

“IPv6Address”: “”

}

。。。

},

。。。

}

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

3。按照上面的方式設定好以後,點選“Finish setup”。就會看到NextCloud在一項項安裝外掛,等待一會兒,就進入了NextCloud的歡迎頁面。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

4。NextCloud終於完成安裝了,但是我們的路還很長,下一步是為NextCloud新增外部目錄。首先點選右上角的頭像,然後點選+Apps選項,然後在下面的擴充套件功能列表上找到External storage support,點選Enable把它開啟。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

5。再點選頭像選擇Settings,在左側的選單中**的AdminiStration下,**選擇External stroage。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

6。在右側表單中點選Add Storage下拉框,選擇Local掛載本地路徑,因為在docker-compose。yml中,我們把自己的儲存池對映到了容器的/opt/aquarpool下,所直接寫這個路徑,點選右側的對號,我們就把自己的儲存池掛載到了NextCloud上,如果一切正常的話,左側會有一個綠色的對號。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

7。在左側選單中找到Personal下面的External Stroage,點選進入後,點選右側對勾。這裡nextcloud有bug,點選後會顯示一個紅歎號,滑鼠再點選紅歎號就有變成了綠色的對勾。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

8。回到檔案介面上就可以看到名叫aquarpool的檔案夾了,點開以後就是自己的儲存池內容。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

OK,你終於有了一個自己的網盤系統,並且可以自動把你手機的照片同步到網盤上。然而這還沒完,你還需要一個專業的智慧相簿。

Photoprism配置

Photoprism應該是目前最活躍同時也是功能最強大的相簿管理系統。使用高效可靠的go語言編寫,內建業界兩大AI框架之一的Tensorflow,給人無限的想象空間。開源相簿系統其實有很多,比較著名的是Piwigo,這套方案一開始選型的就是Piwigo,但是Piwigo不支援外掛目錄,它強制你把圖片放置在它指定的目錄下,這讓人無法接收。而Photoprism的設計哲學就非常友好,它允許你指定多個原始目錄,並且Photoprism不會對原始目錄進行任何修改這種非侵入式的系統才是真正友好易整合的。

1。如果你按照與我一樣的docker-compose。yml內容配置,你的Photoprism埠就是8042,所以在瀏覽器中輸入http://部署機器所在的內網地址:8042就可以看到Photoprism的Web頁面了。首先需要登入,初始使用者是admin,密碼是在docker-compose。yml中配置的。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

2。輸入正確的帳戶資訊後就進入了Photoprism的管理頁面,點選左側Library下的Originals就是原始資料目錄,檢視是否包含了你需要的資料夾,這些資料夾的路徑是在docker-compose。yml中配置的,如果你發現這個地方有問題,就需要先執行aqserv stop把整個系統停掉,然後修改docker-compose。yml中的對應的Photoprism路徑配置,例如我集中存放照片的目錄是/opt/aquar/aquarpool/images,那麼我的配置就是“- /opt/aquar/aquarpool/images:/photoprism/originals”,修改完正確的地址後再執行aqserv start啟動整套系統。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

3。Originals目錄配置無誤後,點選Library本身,然後在右側的介面中點選START按鈕,Photoprism就開始分析你的原始資料並進行自動整理。分析時間會比較長,由你的照片總量及格式大小共同決定,這時候就可以先離開了,等待Photoprism完成分析。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

4。等到Photoprism完成分析後,你就可以看到自己所有的照片被Photoprism納入其中,並且它幫你歸納出很多標籤。你可以透過各種維度來檢視自己的照片庫。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

AquarHome配置

到此,你已經擁有了一個強大的圖片庫管理工具,從照片同步到可靠儲存,再到檢視與管理的整個功能閉環已經打通了。如果你想嚐嚐鮮,體驗一下,到這一步就可以了,但我們這個系列介紹的系統是要長期執行的,隨著時間的流逝,各種意外狀況就會出現,比如停電、硬碟損壞、磁碟空間耗盡、某個系統出現bug等等。比意外更可怕的是,由於整套系統是自動化的,也許意外發生後我們無法立刻察覺,等到很久以後才被發現,這時候除了要恢復系統本身,還掉進了恢復資料的深淵,如果意志力不夠強大,那這套系統多半就無疾而終了。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

為了避免這種情況出現,我們就需要一種手段來方便地監控各個服務的狀態,如果出現了問題能及時發現,第一時間進行處理。服務狀態監控以及業務指標面板在企業級系統中是常見的功能,Zabbix配合grafana就是這樣一套基礎方案。但是在需求雜亂又沒有利潤的家用領域並沒有對應的產品可用。所以我自己動手開發了開源專案AquarHome(GitHub地址:https://github。com/firemakergk/aquar-home)個人Home頁,這個專案的詳細介紹我在之前的文章中介紹過,想要了解專案細節可以看這兩篇文章。

Heimdall不合胃口,於是我開源了適合diy nas的AquarHome系統

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

AquarHome開源個人主頁使用教程

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

AquarHome的配置方式也很簡單,在官方的說明文件中有細緻的介紹,我們需要用到的有NextCloud元件、Docker元件、增量備份元件、Syncthing元件,可以根據官方文件的介紹進行配置。

配置好以後AquarHome的介面是這樣的因為我使用了TrueNas和Transmission,所以頁面上還有這兩個元件。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

從上面可以看到,所有系統的核心狀態資訊都展示在一起,在NextCloud元件中你可以看到與NextCloud頁面中完全一樣的內容,你甚至可以直接把檔案下載到本地,在transmission元件中你可以直接在元件中完成下載任務的新增、啟停、刪除。AquarHome同樣考慮了安全性,使用的資料介面都是經過授權後的token方式,不會直接暴露你的使用者名稱密碼。

功能測試

是騾子是馬拉出來溜溜,折騰了這麼一大堆東西,總得能解決我們的問題才行。

照片同步

首先在保持手機端Syncthing後臺執行的狀態下,用手機拍照。拍完照以後等待幾秒就能看到Syncthing元件的同步狀態發生了改變,等待同步完成後,NextCloud元件對應目錄中也出現了剛剛拍攝的照片。所以這套系統已經擁有了秒級同步的能力。本來拍了一個30秒的短影片想做成gif傳上來,但是體積太大了,只能用錄屏代替,錄屏提現不了手機的操作,但是也可以作為參考了。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

照片歸檔

由於同步服務既同步新增操作也同步刪除操作,對於目錄同步的場景而言這是很合理的。但是如果你誤刪了手機的圖片,那麼在服務儲存端也會把圖片刪除這還是比較鬱悶的,而且很多時候我們需要階段性的對照片進行歸檔,比如我們開頭提到的場景:從冰島回來後(並去不起)我想把一路上拍的照片都存在一個叫“冰島遊記”的資料夾中,這應該如何實現呢?

當然你可以直接登入到主機上用命令列完成操作,或者使用其他管理工具完成這些操作,但是都不夠方便。所以我為了這個場景開發了“增量備份元件”,它基於Linux最強檔案同步工具Rsync,詳細用法在官方文件中可以找到。我們只需要在出發前進行一次歸檔操作,然後在回來後,再進行一次歸檔操作即可。整個過程直接在元件上完成,算上設定資料夾名稱,一共點選5次滑鼠。

...篇五:【全棧開源·保姆級】打磨兩年的精華——從零開始,教你搭建...

到了這裡,你終於原地搭建出了一套完全由自己控制的照片同步及管理系統。且整個系統是純正的開源血統,沒有plus會員,無需隱私協議,無數活躍的開發者為你帶來持續的更新。優秀的開源系統都有開放的API如果你有能力,還可以在這個基礎上擁有無限的擴充套件可能。這就是我理想中的開源NAS方案。

結語

這篇文章的內容是自從我萌生自建開源NAS方案的想法兩年多來沉澱下的精華。中間的專案選型、整合除錯、指令碼開發、專案開發無不需要大量的精力,好在最終的結果令人滿,總算沒有做無用功。這套系統還會繼續升級,未來會探索針對家庭多媒體場景的功能,針對網路攝像頭及遠端對講的功能,以及結合智慧家居和人工智慧的功能。我希望透過一個個優秀的開源專案搭建起一套安全、穩定、易擴充套件的全方位家庭IT系統。路還很長,希望自己能走得好,走得遠。

本來以為寫這篇文章需要兩天,沒想到寫了兩週,寫的時候曾經想拆分成幾篇文章來控制篇幅。這樣也可以收到更多的贊及熱度,但是權衡再三還是選擇了保持教程的完整性。如果你看到了這裡,覺得教程對你有幫助或者啟發,請不要吝嗇點贊,希望更多的朋友能從開源方案中收益,希望DIY NAS玩家可以擁有更好的體驗。

頂部