Docker - Nextcloud 設定



Nextcloud 是一個免費、開源且自託管的雲端儲存平臺,允許使用者在多個裝置上儲存、共享和同步他們的檔案、聯絡人等。

與 Google Drive 和 Dropbox 類似,它支援檔案共享和協作,但額外的好處是完全控制資料和基礎設施。然而,為不同的環境設定 Nextcloud 在管理和可擴充套件性方面都可能帶來真正的挑戰。

Docker 應運而生,您可以將 Nextcloud 例項容器化,使其在所有生產環境中的行為方式相同,而無需為每個環境單獨部署它。本章將引導您完成 Nextcloud 的 Docker 化過程,以便您可以輕鬆地在多個環境中管理它。

Nextcloud Docker 化的先決條件

在開始本指南之前,請確保您擁有以下內容:

  • Docker - 確保您的本地機器上已安裝 Docker。如果您具備 Docker 的基本知識,將更有幫助。
  • Docker Compose - 如果您想透過 Docker Compose 使用 Docker 設定 Nextcloud,請確保您的機器上已安裝 Docker Compose。
  • 命令列介面 (CLI) - 對命令列介面或 CLI 及其命令的基本瞭解將幫助您更好地理解本指南。
  • 文字編輯器 - 將需要一個文字編輯器,例如 VSCode 或 Sublime Text,用於編寫配置檔案。

設定 Nextcloud 專案

在 Docker 上安裝 Nextcloud 之前,您可以在本地機器上建立一個 Nextcloud 專案。這將用作 Nextcloud 的 Docker 映象。

步驟 1:建立專案目錄

建立一個專案資料夾或目錄,用於儲存與 Nextcloud 相關的所有檔案。在 CLI 上使用以下命令建立目錄。

# This command will create a folder named nextcloud-docker
$ mkdir nextcloud-docker

# This command will take you inside the folder
$ cd nextcloud-docker
Setting up Nextcloud Project 1

步驟 2:建立一個基本的 Dockerfile

接下來,您需要建立一個基本的 docker 檔案,稍後將填充該檔案。Dockerfile 是一個包含一組指令的指令碼,用作 Docker 映象。

# Create a Dockerfile in your project directory 

$ touch Dockerfile
Setting up Nextcloud Project 2

在任何文字編輯器中開啟您的 Dockerfile,並將以下內容新增到其中:

# Base image for Nextcloud
FROM nextcloud:latest

# Install any additional dependencies (optional)
RUN apt-get update && apt-get install -y \
   vim \
   curl \
   && apt-get clean

# Copy your custom configuration files (if any)
# COPY config/ /var/www/html/config/

# Expose the default Nextcloud port
EXPOSE 80

此 Dockerfile 公開了埠 80 並將基本映象設定為 Nextcloud 映象。

步驟 3:構建自定義 Docker 映象

建立 Dockerfile 後,您可以使用以下命令建立您自己的自定義 Docker 映象:

# Build the custom Nextcloud Docker image named nextcloud

$ docker build -t my-nextcloud .
Build Custom Nextcloud Docker image

步驟 4:執行 Nextcloud 容器

$ docker run -d --name nextcloud -p 8080:80 my-nextcloud
Run Nextcloud Container 1

其中:

  • -d - 表示分離模式
  • --name nextcloud - 表示容器的名稱
  • -p 8000:80 - 將您的本地主機埠 (8000) 對映到 Nextcloud 容器的埠 (80)。訪問 https://:8080 時,您正在訪問 Nextcloud 的容器
  • my-nextcloud - 用於建立容器的 docker 映象的名稱
Run Nextcloud Container 2

使用預構建的 Docker 映象

您可以使用官方的 Nextcloud Docker 映象(預構建並可立即使用),而不是建立自定義專案和 docker 映象來在 Docker 中安裝 Nextcloud。

步驟 1. 拉取 Nextcloud 映象

在執行 Nextcloud 容器之前,您需要拉取預構建的官方 Docker 映象。

$ docker pull nextcloud
Using pre-built Nextcloud Docker Image 1

步驟 2:執行 Nextcloud 容器

拉取 Docker 映象後,就可以執行 Nextcloud 容器了。

$ docker run -d --name nextcloud -p 8080:80 nextcloud
Using pre-built Nextcloud Docker Image 2

這將在本地主機埠 8000 上執行 Nextcloud 容器,該埠已對映到 Docker 容器埠 80。

使用 Docker Compose 設定 Nextcloud

步驟 1. 建立 .env 檔案

建立一個 .env 檔案來儲存所有資料庫環境變數。您也可以直接在配置檔案中使用它們,但不建議公開您的環境變數,因為這樣不安全。

$ touch db.env

在此檔案中新增以下環境變數。您可以在以後將此檔案的路徑新增到您的配置檔案中。

MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: nextcloudpassword

步驟 2. 建立 docker-compose.yml 檔案

接下來,在您的 nextcloud-docker 目錄中建立 docker-compose.yml 檔案。

$ touch docker-compose.yml
Setting up Nextcloud using Docker Compose 1

您的檔案結構如下所示:

nextcloud-docker/
├── Dockerfile
├── db.env
└── docker-compose.yml

步驟 3:填充 .yml 檔案

將以下配置新增到您的 docker-compose.yml 檔案中。

version: "3"

services:
   db:
      image: mariadb
      restart: unless-stopped
      command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
      volumes:
         - db:/var/lib/mysql
      env_file:
         - db.env

   redis:
      image: redis
      restart: always
      command: redis-server --requirepass your_redis_password

   app:
      image: nextcloud:latest
      restart: unless-stopped
      ports:
         - 8080:80
      links:
         - db
         - redis
      volumes:
         - nextcloud:/var/www/html
      environment:
         - MYSQL_HOST=db
         - REDIS_HOST_PASSWORD=your_redis_password
      env_file:
         - db.env
      depends_on:
         - db
         - redis
volumes:
   db:
   nextcloud:
  • 版本 3 - 這是使用的 docker-compose 的穩定版本。
  • 服務 - 服務代表構成此應用程式的單獨容器
  • db - 這表示服務中使用的資料庫,在本例中為 MariaDB。除非顯式停止,否則資料庫設定為重新啟動。“卷”表示用於永久資料儲存的 docker 卷,以防止容器刪除後資料丟失。“env-file”是 db.env 檔案的位置,其中添加了所有與 db 相關的環境變數。
  • redis - 此服務使用 Redis 伺服器進行快取。
  • app - 這是在埠 80 上執行的 Nextcloud 應用程式映象,並對映到本地主機埠 8000。MariaDB 和 Redis 服務已連結,卷的名稱為 Nextcloud。
  • - 這些是用於永久儲存資料的 docker 卷。兩個名為“db”和“nextcloud”的卷用於儲存 MariaDB 和應用程式資料。

步驟 4:執行 docker-compose.yml 檔案

使用以下命令執行您的 docker-compose.yml 檔案

$ docker-compose up -d
Setting up Nextcloud using Docker Compose 2

結論

您已成功將 Nextcloud 容器 Docker 化,建立了 Docker 映象,並在 Docker 容器內執行它,從而確保在不同環境中的一致性。這種方法允許您透過簡單地拉取更新的映象並重新部署容器來輕鬆更新 Docker 例項。模組化、安全、可移植性和隔離是這種方法提供的關鍵特性。

在 Docker 中設定 Nextcloud 的常見問題

在本節中,我們收集了一組關於在 Docker 中設定 Nextcloud 的常見問題及其答案。

1. 我可以將資料庫從 MariaDB 更改為其他資料庫(如 PostgreSQL)嗎?

是的,您可以將資料庫從 MariaDB 更改為其他資料庫(如 PostgreSQL)。您只需要更改 docker-compose.yml 檔案中的“db”配置即可。

將 db 映象從 MariaDB 更改為 PostgreSQL。您還需要相應地更改 db.env 檔案中的環境變數。

2. 如何診斷和修復 Docker 化 Nextcloud 系統中的效能問題?

首先,使用 docker logs <container_name> 檢查資料庫和 Nextcloud 容器的容器日誌。可以使用 Docker stats 來跟蹤資源消耗並識別任何效能問題。增加可用 RAM 和 CPU 的數量或設定 Redis 以進行更多快取是提高速度的常見方法。

3. 如果 Nextcloud 在 Docker 容器中執行,我該如何管理那裡的檔案許可權?

使用 Docker 執行 Nextcloud 時,主機計算機上的檔案許可權可能需要與容器的使用者和組 ID 匹配。

您可以透過更改 Docker 卷的所有權或透過將 user 指令新增到 Dockerfile 或 docker-compose.yml 檔案來控制權限。

廣告