安装 Nextcloud 20 Fedora Linux 与 Podman

如今,许多开源项目都提供容器镜像以方便部署。 这在运行家庭服务器或实验室环境时非常方便。 前一个 Fedora 杂志文章介绍了从源包安装 Nextcloud。 这篇文章解释了怎样运行 Nextcloud Fedora 33 作为容器部署与 Podman。

什么是Nextcloud?

下云 始于 2016 年,是Owncloud 的一个分支。 从那时起,它演变成一个成熟的协作软件,提供文件、日历和联系人同步,以及更多功能。 您可以在其中运行一个简单的看板或协作编写文档。 Nextcloud 在 AGPLv3 许可下完全开源,可用于私人或商业用途。

什么是波德曼?

Podman 是一个容器引擎,用于在 Linux 系统上开发、管理和运行 OCI 容器。 它提供了多种功能,例如无根模式、cgroupv2 支持、pod 管理,并且可以无守护进程运行。 此外,您将获得与 Docker 兼容的 API 以进行进一步开发。 它在默认情况下可用 Fedora 工作站并准备使用。

如果您需要安装 podman,请运行:

sudo dnf install podman

设计部署

每个部署都需要一些准备。 当然,您可以简单地启动一个容器并开始使用它,但这不会那么有趣。 一个经过深思熟虑和设计的部署应该易于理解并提供某种灵活性。

容器/图像

首先,您需要为部署选择合适的容器映像。 这对于 Nextcloud 来说非常容易,因为它已经为容器部署提供了一个非常好的文档。 Nextcloud 支持两种变体: Nextcloud Apache httpd(完全独立)和 Nextcloud php-fpm(需要额外的 nginx 容器)。

在这两种情况下,您还需要提供一个数据库,可以是 MariaDB(推荐)或 PostgreSQL(也支持)。 本文使用 Apache httpd + MariaDB 安装。

运行容器不会保留您在运行时创建的数据。 您可以通过重新创建容器来执行更新。 因此,您将需要一些用于数据库和 Nextcloud 文件的卷。 Nextcloud 还建议您将“data”文件夹放在单独的卷中。 所以你最终会得到三卷:

  • nextcloud-app
  • nextcloud-数据
  • nextcloud-db

网络

最后,您需要考虑网络。 容器的好处之一是您可以像在生产中一样重新创建部署。 网络分段 是一种非常普遍的做法,也应该考虑用于容器部署。 本教程不会添加网络负载平衡或安全分段等高级功能。 您只需要一个网络来发布 Nextcloud 的端口。 创建网络还提供了 dnsname 插件,它将允许基于容器名称的容器通信。

图片

现在每一个元素都准备好了,你可以把它们放在一起,对开发的外观有一个很好的理解。

运行,Nextcloud,运行

现在您已准备好所有成分,您可以开始运行命令来部署 Nextcloud。 所有命令均可用于 root 特权或无 root 部署。 本文将坚持无根部署。

从网络开始:

# Creating a new network
$ podman network create nextcloud-net

# Listing all networks
$ podman network ls

# Inspecting a network
$ podman network inspect nextcloud-net

正如您在最后一条命令中看到的,您创建了一个名为“dns.podman”的 DNS 区域。 在这个网络中创建的所有容器都可以通过“CONTAINER_NAME.dns.podman”访问。

接下来,可以选择准备卷。 可以跳过此步骤,因为 Podman 将按需创建命名卷(如果它们不存在)。 Podman 支持在特殊位置创建的命名卷,因此您无需处理 SELinux 或类似问题。

# Creating the volumes
$ podman volume create nextcloud-app
$ podman volume create nextcloud-data
$ podman volume create nextcloud-db

# Listing volumes
$ podman volume ls

# Inspecting volumes (this also provides the full path)
$ podman volume inspect nextcloud-app

网络和卷已完成。 现在提供容器。

首先,您需要数据库。 根据 MariaDB 镜像文档,您需要提供一些额外的环境变量,。 此外,您需要附加创建的卷、连接网络并为容器提供名称。 在接下来的命令中将再次需要大多数值。 (请注意,您应该使用唯一的密码替换 DB_USER_PASSWORD 和 DB_ROOT_PASSWORD。)

# Deploy Mariadb
$ podman run --detach 
  --env MYSQL_DATABASE=nextcloud 
  --env MYSQL_USER=nextcloud 
  --env MYSQL_PASSWORD=DB_USER_PASSWORD 
  --env MYSQL_ROOT_PASSWORD=DB_ROOT_PASSWORD 
  --volume nextcloud-db:/var/lib/mysql 
  --network nextcloud-net 
  --restart on-failure 
  --name nextcloud-db 
  docker.io/library/mariadb:10

# Check running containers
$ podman container ls

成功启动新的 MariaDB 容器后,您可以自行部署 Nextcloud。 (请注意,您应该将 DB_USER_PASSWORD 替换为您在上一步中使用的密码。将 NC_ADMIN 和 NC_PASSWORD 替换为您要用于 Nextcloud 管理员帐户的用户名和密码。)

# Deploy Nextcloud
$ podman run --detach 
  --env MYSQL_HOST=nextcloud-db.dns.podman 
  --env MYSQL_DATABASE=nextcloud 
  --env MYSQL_USER=nextcloud 
  --env MYSQL_PASSWORD=DB_USER_PASSWORD 
  --env NEXTCLOUD_ADMIN_USER=NC_ADMIN 
  --env NEXTCLOUD_ADMIN_PASSWORD=NC_PASSWORD 
  --volume nextcloud-app:/var/www/html 
  --volume nextcloud-data:/var/www/html/data 
  --network nextcloud-net 
  --restart on-failure 
  --name nextcloud 
  --publish 8080:80 
  docker.io/library/nextcloud:20

# Check running containers
$ podman container ls

现在这两个容器正在运行,您可以配置您的容器。 打开浏览器并指向“localhost:8080”(或其他主机名或 IP 地址,如果它在不同的服务器上运行)。

第一次加载可能需要一些时间(30 秒)甚至报告“无法加载”。 这是来自 Nextcloud,它正在准备第一次运行。 在这种情况下,请等待一两分钟。 Nextcloud 将提示输入用户名和密码。

Enter 您之前使用的用户名和密码。

安装 Nextcloud 20 Fedora Linux 与 Podman 1

现在您已准备好体验 Nextcloud 以进行测试、开发或您的家庭服务器。

更新

如果要更新其中一个容器,则需要拉取新映像并重新创建容器。

# Update mariadb
$ podman pull mariadb:10
$ podman stop nextcloud-db
$ podman rm nextcloud-db
$ podman run --detach 
  --env MYSQL_DATABASE=nextcloud 
  --env MYSQL_USER=nextcloud 
  --env MYSQL_PASSWORD=DB_USER_PASSWORD 
  --env MYSQL_ROOT_PASSWORD=DB_ROOT_PASSWORD 
  --volume nextcloud-db:/var/lib/mysql 
  --network nextcloud-net 
  --restart on-failure 
  --name nextcloud-db 
  docker.io/library/mariadb:10

更新 Nextcloud 容器的工作方式完全相同。

# Update Nextcloud

$ podman pull nextcloud:20
$ podman stop nextcloud
$ podman rm nextcloud
$ podman run --detach 
  --env MYSQL_HOST=nextcloud-db.dns.podman 
  --env MYSQL_DATABASE=nextcloud 
  --env MYSQL_USER=nextcloud 
  --env MYSQL_PASSWORD=DB_USER_PASSWORD 
  --env NEXTCLOUD_ADMIN_USER=NC_ADMIN 
  --env NEXTCLOUD_ADMIN_PASSWORD=NC_PASSWORD 
  --volume nextcloud-app:/var/www/html 
  --volume nextcloud-data:/var/www/html/data 
  --network nextcloud-net 
  --restart on-failure 
  --name nextcloud 
  --publish 8080:80 
  docker.io/library/nextcloud:20

就是这样; 您的 Nextcloud 安装再次更新。

结论

使用 Podman 部署 Nextcloud 非常简单。 几分钟后,您将拥有一个非常方便的协作软件,提供文件同步、日历、联系人等等。 查看 apps.nextcloud.com,这将进一步扩展功能。