前言
隨著移動互聯網的發展,越來越多的人使用云網盤存儲他們的文檔、照片、視頻等文件。不知從什么時候起,我們不知不覺開始為享受云存儲的服務付費買單。一次上傳,隨處訪問,越來越成為人們的日常需求。隨之而來的是各云網盤每月的定期收費,以及強制將用戶分為免費用戶、普通會員、中級會員、高級會員的殘酷現實; 同時,隨著越來越嚴苛的網絡文明環境的建設。一部分音視頻資源被和諧。比如,巨某國、某松奇談、生活某爆炸等。這些資源放到某云網盤上可能會被刪掉。而一些AI算法的過分識別也給用戶造成了一定的損失。 相比云網盤,私人網盤,具有其明顯的優勢:免費、容量大(自己買硬盤就好)、安全性、穩定性。 本文將介紹私人云網盤的搭建流程。 因為我家里有一臺臺式機閑置在書房,最近決定把它連上互聯網,做成個人云服務器。剛好可以拿來做私人云網盤服務。 本教程主要講解:家用個人臺式電腦 + Ubuntu 22.04.1 LTS + Docker + Nextcloud + Mysql + 花生殼內網穿透
一、Nextcloud是什么?
Nextcloud是一套用于創建網絡硬盤的客戶端-服務器軟件。其功能與Dropbox相近,但Nextcloud是自由及開放原始碼軟件,每個人都可以在私人服務器上安裝并執行它。 與Dropbox等專有服務相比,Nextcloud的開放架構讓用戶可以利用應用程序的方式在服務器上新增額外的功能,并讓用戶可以完全掌控自己的資料。 Nextcloud的優勢:
- 安全性:敏感重要的個人隱私數據。你不用擔心隱私數據被別人泄漏、甚至販賣兜售。比方說我家里裝了監控,我是不放心把監控視頻放到某云網盤上的hh。
- 多客戶端支持:IOS、Android、Windows、MacOS、Linux、Web瀏覽器
- 滿足一般離線下載需求
- 支持基本的在線影音播放功能
- 多應用支持:在線辦公、note、同步聯系人、日歷、在線協作、語音視頻通話、郵箱
- 事實上,Nextcloud 更適合企業內部使用。
二、安裝步驟
我家里電腦操作系統是 ubuntu。 Docker 可以極大地簡化應用軟件安裝和配置,相比直接在Linux下安裝軟件,使用Docker容器可以減少您的安裝和配置的時間成本。本文我們在Dokcer中安裝Nextcloud 和 Mysql 容器。 軟件安裝配置好之后,我們需要通過內網穿透技術,使得互聯網(外網)上的設備能夠訪問家里電腦上的Nextcloud服務。
1. 安裝 docker
1.1 更新apt
sudo apt-get update

1.2 允許apt通過HTTPS使用存儲庫
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

1.3 添加Docker的官方GPG密鑰
curl -fsSL https://download./linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
 設置穩定的存儲庫(此處為x86_64 / amd64) echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download./linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

1.4 安裝docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
1.5 驗證docker是否安裝成功
sudo docker run hello-world

2.docker 安裝 nextcloud容器
2.1 拉取nextcloud
sudo docker pull nextcloud

2.2 docker 運行 nextcloud
sudo docker run --name nextcloud -p 9001:80 -v /home/workSpace/nextcloud/data:/var/www/html/data -d nextcloud
 –name:設置容器名稱為nextcloud -p 9001:80 :端口映射,將宿主機9001端口映射到容器中的80端口 -v /home/workSpace/nextcloud/data:/var/www/html/data 將容器中項目的data目錄映射到本地/home/workSpace/nextcloud/data目錄下方便配置 -d nextcloud,拉取的鏡像名
2.3 查看運行中的容器
sudo docker ps

2.4 首次進入nextcloud
瀏覽器中輸入IP地址+9001端口(9001是我們上面配置好的端口) 第一次進入nextcloud會要求創建管理員賬號 【存儲與數據庫選項】數據庫默認選擇SQLlite。如果您使用文件同步客戶端,強烈不建議使用SQLite。這里我選擇Mysql   mysql還沒裝,需要再安裝mysql
2.5 docker 設置 nextcloud容器 開機自啟動
sudo docker update --restart=always nextcloud

3 docker 安裝 mysql 容器
3.1 docker 拉取 mysql 容器
sudo docker pull mysql:latest

3.2 配置mysql容器
3.2.1 mysql初始配置
sudo docker run -itd --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

3.2.2 進入mysql容器
sudo docker exec -it mysql bash
-
-it 提供交互式環境 -
bash 進入實例后啟動bash程序

3.2.3 登錄mysql
mysql -u root -p
Enter password:123456

3.2.4 為 nextcloud 創建數據庫
create database nextcloud charset=utf8;

3.3 docker 設置 mysql容器 開機自啟動
sudo docker update --restart=always mysql

4 配置nextcloud連接mysql數據庫
瀏覽器回到nextcloud配置頁面,數據庫選擇mysql 主機名一定要填寫ip:端口(據說如果是localhost+端口,會報錯,原因未知) 配置好后點擊安裝
 選擇安裝推薦的應用。  
到此Nextcloud已經安裝成功
5 內網訪問nextcloud
5.1 局域網環境下,內網ip訪問nextcloud
nextcloud安裝好后,我們就可以在局域網內通過內網ip訪問nextcloud 
5.2 設置nextcloud添加信任域名(白名單)
所有用于訪問 Nextcloud 服務器的 URL 都必須在您的 config.php 文件中的trusted_domains 設置下列入白名單。 僅當用戶將瀏覽器指向trusted_domains 設置中列出的URL 時,才允許用戶登錄Nextcloud。
ps:下面的方法主要描述在圖形用戶界面情況下給nextcloud添加域名的方法。 在終端下通過vim操作可以參考文章:【Docker】搭建nextcloud私有網盤并映射外網
5.2.1 ubuntu全局搜索nextcloud配置文件config.php
因為不知道config.php存放在哪,我們通過搜索命令在電腦上搜索config.php文件
sudo find / -name "config.php"
 初步判斷,這個路徑應該是對的 /var/lib/docker/volumes/58fa050d3863d3128837d86707d0b1f92050f7bf40bfdbf3fa38cbfc3350e2cc/_data/config
5.2.2 使用root權限通過圖形用戶界面打開文件管理器進入docker安裝目錄
在圖形用戶界面下通過文件管理器進入/var/lib/docker,發現docker文件夾右下角有個紅叉,說明當前賬號沒有root權限無法查看。  我們使用root權限賬號打開文件管理器
在終端通過root賬號打開文件管理器
sudo nautilus

好了,現在可以在彈出的文件管理器進入
/var/lib/docker/volumes/58fa050d3863d3128837d86707d0b1f92050f7bf40bfdbf3fa38cbfc3350e2cc/_data/config
 右鍵config.php - 用文本編輯器打開,就可以編輯  可以看到,trusted_domains這里添加了“localhost:9001”。說明這個config.php文件就是我們要找到的文件。我們往trusted_domains下面添加nextcloud的內網地址(我的是192.168.31.31:9001)。
 添加成功之后,我們再次在局域網(內網)內通過瀏覽器訪問nextcloud。  內網訪問成功!
6.內網穿透
軟件安裝配置好后,我們只能再局域網(內網)內使用Nextcloud,而我們需要將家里的電腦聯上互聯網(外網),就需要使用到內網穿透技術。內網穿透可以通過三種方式來實現:
6.1 ubuntu 安裝花生殼
詳細使用教程可以參考:花生殼5.0 for Linux使用教程
6.1.1 安裝weget
更新軟件列表
sudo apt-get update

下載wget工具
sudo apt-get install wget
 查看下載安裝成功wget版本
wget --version

6.1.2 下載花生殼安裝包
下載地址:花生殼客戶端官方下載 
wget "https://down.oray.com/hsk/linux/phddns_5.2.0_amd64.deb" -O phddns_5.2.0_amd64.deb
  可以看到安裝包已經下載到【主目錄】下面。
6.1.3 安裝
我們運行一下安裝包。
sudo dpkg -i phddns_5.2.0_amd64.deb
 安裝成功。
6.2 設置花生殼開機自啟
sudo phddns enable

6.3 設置花生殼內網穿透
ubuntu 瀏覽器訪問花生殼網站 http://b.oray.com  選擇【SN登錄】;輸入花生殼Linux 在安裝時產生SN碼與默認登錄密碼admin登錄。  首次登錄,需先激活。提供掃碼激活和密碼激活兩種方式,可靈活選擇。這類我選擇掃碼激活。  手機端使用花生殼APP 掃碼,進行激活。
激活成功后,進入花生殼管理平臺。若綁定SN碼的帳號只有動態域名解析功能,需使用內網穿透功能時,可點擊“免費開通”,或直接將帳號升級到帶內網穿透功能的服務版本。
 加內網穿透映射時,點擊頁面上的“增加映射”按鈕。  根據頁面提示填寫映射所需的信息,這里以映射Ubuntu系統的SSH服務(22端口)為例:
①應用名稱:自定義
②應用圖標:自行選擇
③映射類型:選擇TCP
④映射模板:暫不選擇模板
⑤外網域名:選擇用作外網訪問的域名(這里的域名需要購買) 購買鏈接:https://hsk.oray.com/parts-center/domain.html
⑥外網端口:選擇動態端口
⑦內網主機:映射的Ubuntu系統內網IP地址
⑧內網端口:映射的服務類型對應端口22
⑨帶寬:購買映射帶寬后,可支持給映射分配額外帶寬,這里保存默認。
確認映射內容無誤后,點擊“確定”。
 點擊【確定】后,內網穿透成功。 
我們在外網電腦上。打開瀏覽器通過域名訪問Nextcloud。可以看到:  進入這個頁面說明我們內網穿透已經成功。域名已經成功指向家庭電腦。 但需要給Nextcloud 添加訪問域名白名單,允許當前設備所對應的ip訪問家庭電腦上的Nexcloud服務。
6.4 設置nextcloud添加信任外網域名(白名單)
設置nextcloud添加信任域名的方法,參考5.2 即可,這里不再贅述。  docker 重啟nextcoud
sudo docker restart nextcloud
 設置完成之后,瀏覽器輸入域名,打開后頁面如下。  說句心里話,但我走到這一步的時候,內心是崩潰的。  隨即想到,可能是花生殼購買的域名的問題。然后查了一下,發現域名用的是https協議,而nextcoud默認并不允許https。需要再設置一下nectcoud。
6.5 設置nextcloud允許https域名
參考步驟5.2 進入 /var/lib/docker/volumes/58fa050d3863d3128837d86707d0b1f92050f7bf40bfdbf3fa38cbfc3350e2cc/_data/config 打開文件config.php 添加一句話:
'overwriteprotocol' => 'https',
 docker 重啟nextcoud
sudo docker restart nextcloud
 重新打開外網域名,就能正常訪問了~  
7.使用 nextcloud
各客戶端app下載網址:https:///install/#install-clients 具體怎么使用,可以參考nextcoud官網,這里就不再詳細展開。
總結
至此我們就可以方便地使用nextcloud的云存儲服務了。 當然nextcloud還有其他云服務比如:云筆記、郵箱等。也都可以通過配置進行使用。 由于我對linux不太熟悉,這篇文章我斷斷續續整理了3個禮拜,覺得好用的話,請各位帥哥美女給個一鍵三連。哈哈~ 寫作不易,轉載請注明出處~。 
參考文章:
ubuntu20.04安裝docker docker安裝nextcloud
docker創建mysql 安裝nextcloud
教你如何修改運行中的docker容器的端口映射的三種方式
【Docker】搭建nextcloud私有網盤并映射外網
花生殼5.0 for Linux使用教程
查看Docker里的鏡像信息
https://github.com/nextcloud/server/issues
|