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 文件来控制权限。

广告
© . All rights reserved.