[VPS] 使用 Docker 架設 Nextcloud 搭配 AWS S3 建立雲端 NAS 的做法

本篇文章更新時間:2020/12/30
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~


前天跟同事吃飯時,聊到因為遠端工作的關係,設計師檔案空間各自使用自己的硬碟備份不是辦法,到底要買台 NAS 當檔案伺服器,還是要乾脆用雲端解決方案?

看標題就知道最後選了雲端解決方案,不自建硬體環境了。完全是風險考量,反而成本過小可以直接忽略XD

這類型需求自從我打算關閉 Flickr Pro 方案後就有研究,剛好派上用場。

由於完全不打算使用到 VPS 虛擬主機的空間且使用人數不多,所以 VPS 完全不需要很高等級,Linode 5 USD 每個月的就可以了。(Linode 主機連結為推廣連結)

軟體面的選擇也因為太多元,並不是純設計圖檔而已,所以尋找方向就是「雲端儲存管理」。

建置流程

以下流程都是使用最高管理員 root 進行指令操作。

  1. 開一台全新 VPS 主機,安裝 Ubuntu 20.04 以上版本作業系統(主機至少要能支援使用 Docker 容器技術)

    apt update && apt upgrade -y && apt remove -y && apt autoremove -y && apt clean -y && apt autoclean -y && apt update && apt install screen htop -y && reboot
  2. 安裝 Docker 軟體

    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
  3. 安裝並啟用 Nextcloud 的 Docker 容器

    這部分有分兩種使用情境,一個是預設使用 AWS S3 作為雲端儲存的主空間。另一個是以 VPS 的空間為主,再搭配 AWS S3 為外部空間支援。

    • 預設 AWS S3 主空間:
    docker run -d -p 8080:80 --restart=always --name=MXPNAS -e OBJECTSTORE_S3_BUCKET=BUCKETNAME -e OBJECTSTORE_S3_KEY=AWS_S3_KEY -e OBJECTSTORE_S3_SECRET=AWS_S3_SECRET -e OBJECTSTORE_S3_REGION=ap-northeast-1 -v /root/nextcloud:/var/www/html nextcloud
    • VPS 主,AWS S3 延伸空間支援:
    docker run -d -p 8080:80 --restart=always --name=MXPNAS -v /root/nextcloud:/var/www/html nextcloud

以上三個步驟就能很快速的架設好 Nextcloud 的環境。架設好後還要到 http : // VPS_IP:8080 / 下完成安裝等設定。

但是「VPS 主,AWS S3 延伸空間支援」這個還沒結束。

需要再到 應用程式 設定裡確認有無啟用 External storage support 這項服務。啟用後就可以使用介面的方式設定 AWS S3 的金鑰授權資訊,完成連結空間。

更改預設上傳大小設定

預設上傳大小記得是 512MB,應用設計師隨便都幾 GB 來說肯定不夠。這邊的修改會需要動到系統設定,也就是 Docker。

主要使用的指令如下:

  • 查看容器: docker container ls -a
  • 停用容器: docker kill 容器名
  • 刪除容器: docker rm 容器名
  • 進入容器: docker exec -it 容器名 bash
  • 複製容器內資料: docker cp 容器名:容器內路徑 本地儲存路徑
  • 重開容器: docker restart 容器名

為了保持容器彈性,我都會把任何有需要客製化修改的檔案移出容器外管理,像是這專案裡的 Apache2 與 PHP 設定檔案和 Nextcloud 程式儲存檔案。

除了預設上述安裝架設指令能把 Nextcloud 資料取出外,還要先把這容器內的 Apache2/PHP 目錄設定資料複製出來:

docker cp MXPNAS:/usr/local/etc/php nextcloud-php
docker cp MXPNAS:/etc/apache2 /root/nextcloud-apache2

然後指令修改設定檔案:

vi /root/nextcloud-php/conf.d/zzz-custom.ini

補上下方設定:

upload_max_filesize=5G
post_max_size=5G
memory_limit=5G
max_input_time=7200
max_execution_time=7200

改好後要把容器重新開過,這會需要先停用、刪除後才來重開。

docker kill MXPNAS
docker container rm MXPNAS

重開的指令要記得掛載設定檔案(也要記得自己當初是用哪個指令建立容器,以下示範為 VPS 主,AWS S3 延伸空間支援 類型的容器):

docker run -d -p 8080:80 --restart=always --name=MXPNAS -v /root/nextcloud:/var/www/html -v /root/nextcloud-php:/usr/local/etc/php -v /root/nextcloud-apache2:/etc/apache2 nextcloud

日後要調整其他設定就直接改 cp 出來的兩個資料夾內設定檔案,然後重新啟動 Docker 容器就可以套用了。

後記

這樣其實就是把環境獨立出來,很乾淨的拿 VPS 做跳板連線主雲端儲存空間使用。

運用容器技術來管理服務也是可以很無腦,整個很快速方便~

本篇沒有特別提到 AWS S3 IAM 申請,網路資源有不少參考,倒是安全性部分能搭配 IAM 條件限制請求,來強化虛擬主機 VPS 到 AWS S3 這邊的使用安全性。

參考資料:

  1. Nextcloud Docker repo
  2. DOCKER 移除 CONTAINERS、IMAGES、VOLUMES 與 NETWORKS 的方法
  3. Nextcloud Uploading big files > 512MB
  4. Nextcloud Configuring Object Storage as Primary Storage


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *