快轉到主要內容

架設Nextcloud個人雲端硬碟 + 網頁版LibreOffice教學 (docker-compose + ZeroTier內網穿透)

Linux系統 Self-hosting自架 Nextcloud LibreOffice Media Server
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

Nextcloud,一款開源的自架雲端硬碟解決方案。可讓您於自己的電腦與伺服器架設類似Google Drive的雲端硬碟,擁有上傳、共享文件的能力,還可以安裝行事曆、筆記本、LibreOffice等擴充功能,提昇Nextcloud的生產力。

如果要將Nextcloud架在自己的電腦,那麼使用Docker可以說是最簡單的方式,Nextcloud容器將資料庫、Apache等依賴服務都包在一塊,使用者只要用幾行指令便能讓Nextcloud上線。Nextcloud服務架起來之後,其他維護管理的工作都可以用網頁圖形界面完成,外部網路再透過ZeroTier存取。

1. Nextcloud特色功能
#

  • 自由開源的雲端硬碟,透過網頁、電腦、手機客戶端存取檔案
  • 撰寫markdown筆記
  • 上傳相片,建立相簿
  • 天氣、行事曆、電子郵件、線上聊天
  • 網頁共同編輯Office文件
  • 建立多個帳號並限制使用額度
  • 分享檔案並設定存取權限
  • 可視需求啟用檔案加密

本文採用的方案為NextCloud官方提供的基本款 Dcoker映像檔

為什麼不採用功能更多的 Nextcloud All-in-One呢?因為本文用的是ZeroTier的解決方案,不需要用到加密憑證和域名,且Nextcloud AIO需要擁有域名才可以架設。

2. 以Docker架設Nextcloud
#

  1. 首先,在您的電腦安裝 Docker

  2. 參考 Nextcloud官方說明,建立docker-compose。

vim docker-compose.yaml
  1. 填入以下內容,務必事先填入密碼。伺服器使用Apache,資料庫後端使用MariaDB,再另外跑一個Collabora Office服務。
version: '2'

# 將Nextcloud的資料庫和設定檔放到docker volume (/var/lib/docker/volumes/ )
volumes:
  nextcloud:
  db:

services:

# 使用MariaDB當資料庫
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
	# 冒號左邊的是資料庫路徑,這裡使用Docker volumes
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=請於此處設定密碼
      - MYSQL_PASSWORD=請於此處設定密碼
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

# 使用最新版Nextcloud + Apache映像檔
  app:
    image: nextcloud
    restart: always
	# 預設通訊埠是8080
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=請於此處設定密碼
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

# 額外跑Collabora Office線上文件編輯服務
  collabora:
    image: collabora/code
    restart: always
    ports:
      - 9980:9980
    environment:
      - extra_params=--o:ssl.enable=false
    cap_add:
      - SYS_ADMIN
  1. 啟動容器:
sudo docker compose up -d
  1. 用瀏覽器開啟http://localhost:8080,開始設定NextCloud。

此方案的資料庫和設定檔放到docker volume,系統路徑為/var/lib/docker/volumes

若要關閉容器,於docker-compose所在目錄執行:

sudo docker compose down

2. 初始化Nextcloud
#

  1. 首先您要建立一個管理員帳號。

  2. 點選安裝全部應用程式

  3. 完成,你可以開始使用Nextcloud了。點選左上角「檔案」進入雲端硬碟。

  4. 在這裡可以上傳檔案、寫markdown筆記、使用日曆、收發Email。

  5. 點選右上角大頭貼→ 使用者,新增其他一般權限的帳號,並個別設定容量限制。

  6. 您可以點選右上角大頭貼 → 管理設定 → 個人資訊,設定電子郵件。再到「通知」,設定雲端硬碟檔案一有變更就發電子郵件通知自己。

3. 設定Nextcloud Office
#

Nextcloud提供多種線上Office方案。ZeroTier IP分配請看下一節。

3.1. 使用Collabora Office網頁編輯
#

  1. 登出Nextcloud。改用ZeroTier分配的虛擬區域IP開啟Nextcloud,例如http://172.30.212.199:8080,不要用http://localhost:8080

  2. 點選管理設定 → 個人資訊 → Nextcloud Office,設定「使用自己的Collabora Office伺服器」,IP填入ZeroTier虛擬區域IP:9980

  3. 這樣就可以在Nextcloud的網頁界面編輯Office文件了。

3.2. 使用本機LibreOffice編輯
#

請先 安裝LibreOffice至您的電腦。

  1. 點選右上角大頭貼 → 應用程式,安裝Edit files with LibreOffice

  2. 這樣文件的選單即會有用本機LibreOffice編輯的選項。

  3. 開啟後輸入Nextcloud密碼,便可用LibreOffice應用程式編輯文件,然後自動存檔回Nextcloud。

4. 用內網穿透軟體從外網存取Nextcloud
#

Nextcloud的界面可以用網頁存取,Nextcloud官方也有推出手機APP和桌面同步 客戶端

  1. 於手機和電腦安裝 內網穿透軟體,例如ZeroTier,將裝置加入ZeroTier網路

  2. Nextcloud預設封鎖其他域名存取,因此要將電腦所分配到的ZeroTier虛擬IP加入至Nextcloud的白名單。Docker compose請直接修改位於Docker volume的config.php

su
vim /var/lib/docker/volumes/nextcloud_nextcloud/_data/config/config.php
  1. 找到trusted_domains這一行,將ZeroTier的虛擬區域IP加到陣列,例如172.30.252.204。您也可以用wildcard來允許IP開頭一樣的IP連線:
'trusted_domains' =>
  array (
    0 => 'localhost:8080',
    1 => '172.30.252.204',
	2 => '172.30.*'
  ),
  1. 開啟以下防火牆通訊埠。注意Nextcloud的資料庫後台界面可能會因為Docker暴露到外網,UFW擋不住,您可能需要啟用 ufw-docker方案。
# Nextcloud
sudo ufw allow 8080/tcp
# Nextcloud Talk
sudo ufw allow 3478/tcp
sudo ufw allow 3478/tcp
sudo ufw reload
  1. 重新啟動Docker
sudo systemctl restart docker
  1. 現在您可以用手機瀏覽器輸入:http://電腦的ZeroTier IP:8080連線至Nextcloud雲端了。

參考資料
#

相關文章

Linux系統用Docker跑ZeroTier One,進行內網穿透
Linux系統 Self-hosting自架 ZeroTier Docker
Linux如何安裝 & 使用ZeroTier建立虛擬區網
Linux系統 Self-hosting自架 Linux ZeroTier
Sunshine:Linux版Moonlight教學,自架免費雲端串流遊戲服務+遠端桌面
Linux系統 Self-hosting自架 Cloud Gaming Remote Desktop Steam Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。