Nextcloud零基础搭建教程

介绍

Nextcloud是一款开源的自托管云存储和协作平台,它提供了文件同步、共享、版本控制、日历、联系人等功能。Nextcloud是一个安全的数据存储平台,您可以在任何设备上访问和共享文件、日历、联系人、邮件等,并完全掌控数据。

Nextcloud.com

这个Docker微服务镜像由Nextcloud社区开发和维护。Nextcloud GmbH不提供对该Docker镜像的支持。如果您需要专业支持,可以成为企业客户或使用AIO。通过Nextcloud,你可以方便地在个人电脑、手机和其他设备之间同步和共享文件,同时还能够与他人进行协作。

应用场景

Nextcloud适用于各种场景,比如个人使用、团队协作、企业内部文件管理等。无论你是需要在不同设备之间同步文件,还是需要与他人共享大型文件,Nextcloud都能满足你的需求。而且,由于Nextcloud是开源的,你可以根据自己的需求进行定制和扩展。

快速上手

步骤1:安装Dk8s

首先,你需要在你的机器上安装Dk8s。具体的安装方法可以进入【首页】-【探索】-【快速上手】查阅官方文档。

步骤2:安装Nextcloud

进入【首页】-【商店】搜索‘Nextcloud’程序,点击安装。

步骤3:运行Nextcloud

安装后,点击【我的】-【‘Nextcloud’程序】-【更多】-【设置】,检查各项参数是否需要修改,

其中,‘本地目录’指示的值为共享文件夹的二级目录路径,一级目录需进入【首页】-【设置】-【存储】-‘存储位置’进行修改,所有程序仅支持存储于同一个一级目录中,二级目录默认隶属于一级目录。

设置参数检查后,如无需修改,即可点击运行,程序会自动拉取镜像并完成安装。

步骤4:访问Nextcloud

现在,你可以进入【我的】-【‘Nextcloud’程序】,点击打开程序,可在【设置】中修改默认密码。

常用特性

如何使用这个镜像

这个镜像设计用于微服务环境。有两个版本的镜像可供选择。

apache标签包含了一个完整的Nextcloud安装,包括一个Apache Web服务器。它易于使用,能够快速启动。这也是最新标签和未进一步指定版本标签的默认选项。

第二个选项是fpm容器。它基于php-fpm镜像,并运行一个FastCGI进程来提供Nextcloud页面。要使用这个镜像,必须与能够将HTTP请求代理到容器的FastCGI端口的任何Web服务器结合使用。

使用apache镜像

apache镜像包含一个Web服务器,并暴露端口80。要启动容器,请输入以下命令:

$ docker run -d -p 8080:80 nextcloud

现在,您可以从主机系统上的http://localhost:8080/访问Nextcloud。

使用fpm镜像

要使用fpm镜像,您需要一个额外的Web服务器,例如nginx,它可以将http请求代理到容器的fpm端口。对于fpm连接,此容器公开端口9000。在大多数情况下,您可能希望使用另一个容器或主机作为代理。如果使用主机,您可以直接在端口9000上访问Nextcloud容器。如果使用另一个容器,请确保将它们添加到相同的Docker网络中(通过docker run --network …或docker-compose文件)。在这两种情况下,您都不希望将fpm端口映射到主机。

$ docker run -d nextcloud:fpm

由于fastCGI进程无法提供静态文件(样式表、图像等),Web服务器需要访问这些文件。可以使用volumes-from选项来实现此目的。您可以在docker-compose部分找到更多信息。

使用外部数据库

默认情况下,此容器使用SQLite进行数据存储,但Nextcloud设置向导(在首次运行时出现)允许连接到现有的MySQL/MariaDB或PostgreSQL数据库。您还可以链接一个数据库容器,例如–link my-mysql:mysql,然后在设置中使用mysql作为数据库主机。更多信息请参阅docker-compose部分。

持久化数据

Nextcloud安装和除了数据库中的数据(文件上传等)之外的所有数据都存储在未命名的Docker卷/var/www/html中。Docker守护进程将在Docker目录/var/lib/docker/volumes/…中存储该数据。这意味着即使容器崩溃、停止或删除,您的数据也会被保存。

升级和备份应使用命名的Docker卷或挂载的主机目录。为此,您需要一个用于数据库容器的卷和一个用于Nextcloud的卷。

Nextcloud:

  • /var/www/html/文件夹,存储所有Nextcloud数据: $ docker run -d -v nextcloud:/var/www/html nextcloud

数据库:

  • /var/lib/mysql MySQL / MariaDB数据
  • /var/lib/postgresql/data PostgreSQL数据 $ docker run -d -v db:/var/lib/mysql mariadb:10.6

如果您想对个别文件进行细粒度访问,可以为数据、配置、主题和自定义应用程序挂载附加卷。数据、配置文件存储在/var/www/html/的相应子文件夹中。应用程序分为核心应用程序(与Nextcloud一起提供,无需关注)和custom_apps文件夹。如果使用自定义主题,则应放入themes子文件夹中。 可以作为卷挂载的文件夹概述:

  • /var/www/html 主文件夹,用于更新
  • /var/www/html/custom_apps 安装/修改的应用程序
  • /var/www/html/config 本地配置
  • /var/www/html/data 您的Nextcloud实际数据
  • /var/www/html/themes/ 主题/品牌化

如果要为所有这些使用命名卷,可以这样做:

$ docker run -d -v nextcloud:/var/www/html -v apps:/var/www/html/custom_apps -v config:/var/www/html/config -v data:/var/www/html/data -v theme:/var/www/html/themes/ nextcloud

使用Nextcloud命令行界面

要使用Nextcloud命令行界面(也称为occ命令): docker exec --user www-data CONTAINER_ID php occ 或者对于docker-compose: $ docker-compose exec --user www-data app php occ

自动配置通过环境变量

Nextcloud镜像支持通过环境变量进行自动配置。您可以在首次运行时预先配置安装页面上要求的所有内容。要启用自动配置,请使用以下环境变量设置数据库连接。对于给定的数据库,您必须指定所有环境变量,否则数据库环境变量将默认为SQLITE。仅使用一种数据库类型!

SQLite:

  • SQLITE_DATABASE 使用sqlite的数据库名称

MYSQL/MariaDB:

  • MYSQL_DATABASE 使用mysql/mariadb的数据库名称。
  • MYSQL_USER 使用mysql/mariadb的数据库用户名。
  • MYSQL_PASSWORD 使用mysql/mariadb的数据库用户密码。
  • MYSQL_HOST 使用mysql/mariadb的数据库服务器主机名。

PostgreSQL:

  • POSTGRES_DB 使用postgres的数据库名称。
  • POSTGRES_USER 使用postgres的数据库用户名。
  • POSTGRES_PASSWORD 使用postgres的数据库用户密码。
  • POSTGRES_HOST 使用postgres的数据库服务器主机名。 作为通过环境变量传递敏感信息的替代方法,可以在先前列出的环境变量后附加_FILE,这将导致初始化脚本从容器中存在的文件中加载这些变量的值。请参阅下面的Docker secrets部分。

如果设置了任何一组值(即MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD、MYSQL_HOST的所有值),它们将不会在首次运行时在安装页面上询问。通过使用所有与数据库类型相关的变量进行完整配置,还可以通过设置管理员用户和密码来配置Nextcloud实例(仅在同时设置两者时有效):

  • NEXTCLOUD_ADMIN_USER Nextcloud管理员用户的名称。

  • NEXTCLOUD_ADMIN_PASSWORD Nextcloud管理员用户的密码。 如果需要,可以设置数据目录,否则将使用默认值。

  • NEXTCLOUD_DATA_DIR(默认值:/var/www/html/data)配置Nextcloud存储所有用户文件的数据目录。 还可以通过环境变量设置一个或多个受信任的域。它们将在安装后添加到配置中。

  • NEXTCLOUD_TRUSTED_DOMAINS(默认情况下未设置)可选的以空格分隔的域列表

只有在使用默认命令(apache-foreground或php-fpm)时才会触发安装和更新脚本。如果使用自定义命令,您必须使用以下方式启用安装/更新

  • NEXTCLOUD_UPDATE(默认值:0) 如果将html文件夹与多个Docker容器共享,您可能希望避免多个进程更新相同的共享卷

  • NEXTCLOUD_INIT_LOCK(默认情况下未设置)将其设置为true以启用初始化锁定。其他容器将等待当前进程完成更新html卷后继续。 您可能还希望确保每次容器更新后htaccess是最新的。特别是在多个群集节点上,任何差异都会使服务器无法使用。

  • NEXTCLOUD_INIT_HTACCESS(默认情况下未设置)将其设置为true以在容器初始化后运行occ maintenance:update:htaccess。 如果要使用Redis,必须在设置/ docker-compose文件中创建一个单独的Redis容器。要通知Nextcloud有关Redis容器,请传递以下参数:

  • REDIS_HOST(默认情况下未设置)Redis容器的名称

  • REDIS_HOST_PORT(默认值:6379)Redis的可选端口,仅用于运行在非标准端口上的外部Redis服务器。

  • REDIS_HOST_PASSWORD(默认情况下未设置)Redis密码

建议使用Redis以防止文件锁定问题。有关更多说明,请参见示例。

要使用外部SMTP服务器,您必须提供连接详细信息。要配置Nextcloud使用SMTP,请添加:

  • SMTP_HOST(默认情况下未设置):SMTP服务器的主机名。
  • SMTP_SECURE(默认为空):设置为ssl以使用SSL,或设置为tls以使用STARTTLS。
  • SMTP_PORT(默认值:SSL为465,非安全连接为25):SMTP连接的可选端口。对于STARTTLS的替代端口,请使用587。
  • SMTP_AUTHTYPE(默认值:LOGIN):用于身份验证的方法。如果不需要身份验证,请使用PLAIN。
  • SMTP_NAME(默认为空):用于身份验证的用户名。
  • SMTP_PASSWORD(默认为空):用于身份验证的密码。
  • MAIL_FROM_ADDRESS(默认情况下未设置):在Nextcloud发送的电子邮件中使用此地址作为“发件人”字段。
  • MAIL_DOMAIN(默认情况下未设置):为电子邮件设置一个与安装Nextcloud的域不同的域。 请查看Nextcloud文档以获取其他配置SMTP的值。

要将外部S3兼容对象存储用作主要存储,请设置以下变量:

  • OBJECTSTORE_S3_HOST:对象存储服务器的主机名
  • OBJECTSTORE_S3_BUCKET:Nextcloud应将数据存储在其中的存储桶的名称
  • OBJECTSTORE_S3_KEY:AWS样式访问密钥
  • OBJECTSTORE_S3_SECRET:AWS样式的秘密访问密钥
  • OBJECTSTORE_S3_PORT:对象存储服务器提供服务的端口
  • OBJECTSTORE_S3_SSL(默认值:true):是否使用SSL/TLS与对象存储服务器通信
  • OBJECTSTORE_S3_REGION:S3存储桶所在的区域。
  • OBJECTSTORE_S3_USEPATH_STYLE(默认值:false):对于AWS S3不需要
  • OBJECTSTORE_S3_LEGACYAUTH(默认值:false):对于AWS S3不需要
  • OBJECTSTORE_S3_OBJECT_PREFIX(默认值:urn:oid:):要添加到文件ID前面的前缀
  • OBJECTSTORE_S3_AUTOCREATE(默认值:true):如果容器不存在,则创建容器

请查看Nextcloud文档以获取更多信息。

要将外部OpenStack Swift对象存储用作主要存储,请设置以下变量:

  • OBJECTSTORE_SWIFT_URL:Swift标识(Keystone)终端点
  • OBJECTSTORE_SWIFT_AUTOCREATE(默认值:false):Nextcloud是否应自动创建Swift容器
  • OBJECTSTORE_SWIFT_USER_NAME:Swift用户名
  • OBJECTSTORE_SWIFT_USER_PASSWORD:Swift用户密码
  • OBJECTSTORE_SWIFT_USER_DOMAIN(默认值:Default):Swift用户域
  • OBJECTSTORE_SWIFT_PROJECT_NAME:OpenStack项目名称
  • OBJECTSTORE_SWIFT_PROJECT_DOMAIN(默认值:Default):OpenStack项目域
  • OBJECTSTORE_SWIFT_SERVICE_NAME(默认值:swift):Swift服务名称
  • OBJECTSTORE_SWIFT_REGION:Swift终端点区域
  • OBJECTSTORE_SWIFT_CONTAINER_NAME:Nextcloud应将数据存储在其中的Swift容器(存储桶) 请查看Nextcloud文档以获取更多信息。

要自定义其他PHP限制,只需更改以下变量:

  • PHP_MEMORY_LIMIT(默认值512M):设置脚本允许分配的最大内存量(以字节为单位)。这旨在帮助防止编写不良脚本占用所有可用内存,但如果设置过紧,可能会阻止正常操作。
  • PHP_UPLOAD_LIMIT(默认值512M):设置大文件的上传限制(post_max_size和upload_max_filesize)。请注意,根据客户端、Web服务器或操作系统的不同,您可能需要更改其他限制。有关更多信息,请查看Nextcloud文档。

在反向代理后使用Apache镜像并自动配置服务器主机和协议

默认情况下,如果请求来自10.0.0.0/8、172.16.0.0/12或192.168.0.0/16的代理,则Apache镜像将使用X-Real-IP中的IP地址替换Nextcloud可见的远程地址(IP地址)。如果您希望Nextcloud从受信任的代理中获取服务器主机(HTTP_X_FORWARDED_HOST)、协议(HTTP_X_FORWARDED_PROTO)和客户端IP(HTTP_X_FORWARDED_FOR),则禁用重写IP并将反向代理的IP地址添加到TRUSTED_PROXIES。

APACHE_DISABLE_REWRITE_IP(默认未设置):设置为1以禁用重写IP。 TRUSTED_PROXIES(默认为空):以空格分隔的受信任代理列表。IPv4支持CIDR表示法。 如果TRUSTED_PROXIES方法对您不起作用,请尝试使用固定值来覆盖参数。

OVERWRITEHOST(默认为空):设置代理的主机名。也可以指定端口。 OVERWRITEPROTOCOL(默认为空):设置代理的协议,http或https。 OVERWRITECLIURL(默认为空):设置代理的cli url(例如https://mydnsname.example.com)。 OVERWRITEWEBROOT(默认为空):设置代理的绝对路径。 OVERWRITECONDADDR(默认为空):用于根据远程地址覆盖值的正则表达式。 请查阅Nexcloud文档以获取更多详细信息。

请记住,一旦设置,删除这些环境变量不会从配置文件中删除这些值,因为Nextcloud如何合并配置文件。

使用docker-compose运行此镜像

最简单的获取完全功能和可用的设置的方法是使用docker-compose文件。有太多不同的可能性来设置您的系统,所以这里只列举了一些您需要注意的事项。 首先,请确保您选择了正确的基础镜像(fpm或apache)并添加了您想要的功能(见下文)。在每种情况下,您都希望添加一个数据库容器和Docker卷,以便轻松访问持久数据。如果您希望从互联网上访问您的服务器,则必须添加HTTPS加密!有关更多信息,请参阅下文。

基础版本 - Apache

此版本将使用Apache镜像并添加一个MariaDB容器。卷设置为保持数据持久性。此设置不提供SSL加密,旨在在代理后运行。 在运行此设置之前,请确保传入MYSQL_ROOT_PASSWORD和MYSQL_PASSWORD变量的值。 version: ‘2’

volumes: nextcloud: db:

services: db: image: mariadb:10.6 restart: always command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW volumes:

  • db:/var/lib/mysql environment:
  • MYSQL_ROOT_PASSWORD=
  • MYSQL_PASSWORD=
  • MYSQL_DATABASE=nextcloud
  • MYSQL_USER=nextcloud

app: image: nextcloud restart: always ports:

  • 8080:80 links:
  • db volumes:
  • nextcloud:/var/www/html environment:
  • MYSQL_PASSWORD=
  • MYSQL_DATABASE=nextcloud
  • MYSQL_USER=nextcloud
  • MYSQL_HOST=db 然后运行docker-compose up -d,现在你可以从主机系统访问Nextcloud,网址是http://localhost:8080/。

基础版本 - FPM

使用FPM镜像时,您需要另一个容器作为Web服务器在端口80上,并将请求代理到Nextcloud容器。在这个例子中,一个简单的nginx容器与Nextcloud-fpm镜像和MariaDB数据库容器结合在一起。数据存储在Docker卷中。nginx容器还需要访问您的Nextcloud安装中的静态文件。它通过volumes_from选项访问所有挂载到Nextcloud的卷。nginx的配置存储在名为nginx.conf的配置文件中,该文件被挂载到容器中。可以在此处的示例部分找到一个示例。 由于此设置不包括加密,请确保在运行此设置之前传递MYSQL_ROOT_PASSWORD和MYSQL_PASSWORD变量的值。 version: ‘2’

volumes: nextcloud: db:

services: db: image: mariadb:10.6 restart: always command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW volumes:

  • db:/var/lib/mysql environment:
  • MYSQL_ROOT_PASSWORD=
  • MYSQL_PASSWORD=
  • MYSQL_DATABASE=nextcloud
  • MYSQL_USER=nextcloud

app: image: nextcloud:fpm restart: always links:

  • db volumes:
  • nextcloud:/var/www/html environment:
  • MYSQL_PASSWORD=
  • MYSQL_DATABASE=nextcloud
  • MYSQL_USER=nextcloud
  • MYSQL_HOST=db

web: image: nginx restart: always ports:

  • 8080:80 links:
  • app volumes:
  • ./nginx.conf:/etc/nginx/nginx.conf:ro volumes_from:
  • app 然后运行docker-compose up -d,现在你可以从主机系统访问Nextcloud,网址是http://localhost:8080/。

Docker Secrets

作为将敏感信息通过环境变量传递的替代方法,可以在先前列出的环境变量后附加"_FILE",这样初始化脚本就会从容器中存在的文件中加载这些变量的值。特别是,可以使用此方法从存储在/run/secrets/文件中的Docker secrets中加载密码。例如: version: ‘3.2’

services: db: image: postgres restart: always volumes:

  • db:/var/lib/postgresql/data environment:
  • POSTGRES_DB_FILE=/run/secrets/postgres_db
  • POSTGRES_USER_FILE=/run/secrets/postgres_user
  • POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password secrets:
  • postgres_db
  • postgres_password
  • postgres_user

app: image: nextcloud restart: always ports:

  • 8080:80 volumes:
  • nextcloud:/var/www/html environment:
  • POSTGRES_HOST=db
  • POSTGRES_DB_FILE=/run/secrets/postgres_db
  • POSTGRES_USER_FILE=/run/secrets/postgres_user
  • POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
  • NEXTCLOUD_ADMIN_PASSWORD_FILE=/run/secrets/nextcloud_admin_password
  • NEXTCLOUD_ADMIN_USER_FILE=/run/secrets/nextcloud_admin_user depends_on:
  • db secrets:
  • nextcloud_admin_password
  • nextcloud_admin_user
  • postgres_db
  • postgres_password
  • postgres_user

volumes: db: nextcloud:

Note: the description for this image is longer than the Hub length limit of 25000, so has been trimmed. The full description can be found at https://github.com/docker-library/docs/tree/master/nextcloud/README.md. See also docker/hub-feedback#238 and docker/roadmap#475. Recent Tags

Copyright © 2023-2023  深圳市南山区殷悦软件中心  版权所有  粤ICP备2023068705号