如何在 Ubuntu 服务器上安装 Nextcloud

简介和入门
Nextcloud 是一个强大的生产力平台,为您提供一些强大的功能,例如协同编辑、云文件同步、私有音频/视频聊天、电子邮件、日历等等!最重要的是,Nextcloud 完全在您的掌控之下,并且可以完全自定义。在本文中,我们将在 Linode 上设置我们自己的 Nextcloud 服务器。或者,您也可以利用 Linode 市场启动 Nextcloud 服务器,您可以使用它一键设置 Nextcloud。但是,本文将引导您完成手动安装方法。虽然此方法步骤更多,但到最后您将从头开始构建自己的 Nextcloud 服务器,这不仅是一次宝贵的学习经历 - 您还将非常熟悉 Nextcloud 的设置过程。让我们开始吧!
为了安装 Nextcloud,我们需要一个 Linux 实例来安装它。这很容易 - Linode 上不乏 Linux,所以为了开始,我们将创建一个全新的 Ubuntu 20.04 Linode 实例作为我们的基础。自从 Ubuntu 20.04 以来,我们使用的许多命令都发生了变化,所以虽然您可能想从更新的实例开始,但这些命令都在 Ubuntu 20.04 上进行了测试。考虑到 Ubuntu 20.04 将支持到 2025 年 4 月,这仍然是一个不错的选择。
创建您的实例
在创建新的 Linode 实例的过程中,选择一个地理位置上离您最近的区域(或离您的目标受众最近的区域)。对于实例类型,请务必选择一个具有 2GB RAM(最好是 4GB)的计划。如果您需要,您可以随时稍后增加计划。您可以从共享 CPU 部分选择实例来节省一些额外的资金。对于标签,给它一个与实例指定用途相匹配的标签。一个好的名称可能是“nextcloud”之类的,但是如果您有实例的域名,您也可以使用它作为名称。
继续,您可以考虑使用标签,标签基本上是您可以添加到实例的名称值对。这完全是可选的,但是如果您需要,您可以为您的实例创建任何标签。例如,您可以拥有一个“生产”标签,或者可能是一个“开发”标签,具体取决于您是否打算将该实例用于生产。同样,这是可选的,并且没有正确或错误的实例标记方式。如果您不确定,您可以将其留空。
接下来,root
密码应该是唯一的,最好是随机生成的。特别是这个密码将是我们用来登录实例的密码,所以请确保您记住它。首选 SSH 密钥,如果您在您的个人资料中设置了一个,您可以在此页面上选中一个框将其添加到您的实例。
在构建实例时,请特别注意备份选项,如果您打算在生产环境中使用新的 Nextcloud 服务器,这可能是一个非常好的主意。我强烈建议您为您的 Nextcloud 实例设置备份,这样您每天都会获得备份,如果实例发生任何事情,这将非常有用 - 您可以将其恢复到前一天,这可以在您遇到某种问题时帮助您。
对于本节中的其他选项,您可以跳过它们或启用它们,具体取决于您的需求 - 但本节的目标是创建一个新的实例,最终成为我们的新 Nextcloud 服务器。在验证右侧的每月费用后,单击“创建 Linode”以完成该过程并开始为您的服务器配置资源。
设置 DNS(可选,但推荐)
您的 Linode 实例将自动分配一个公共 IP,并且“公共”在每个意义上都是真实的 - 您的服务器可以从公共互联网路由和访问。您可以通过其 IP 地址访问您的实例,但是如果您拥有域名 - 通常最好使用域名。如果您没有域名可以使用,您可以跳过整个部分,但强烈建议您尽可能使用域名。
如果您计划使用域名,您可以随时将 Linode 实例的 IP 地址与域名记录关联,但最好现在关联名称和 IP,因为这可能需要一些时间才能传播。也许在您完成以下步骤时,DNS 传播已经完成。这可能差异很大,但在大多数情况下不会花费太长时间。
要添加您的域名,Linode 中有一个“域名”部分可以使用,就在云仪表板中。如果您没有域名,您可以从 Hover 等服务获取域名。还有其他域名注册商,如果您希望探索替代方案。注册域名后,您可以将其添加到 Linode,以便您可以轻松地将其与您的实例集成。为此,请进入“域名”部分,并为您的新实例创建地址记录。只需将 IP 地址粘贴到相应的字段中,并确保在指定的字段中输入主机名。
连接到您的实例
在您的实例完成配置和启动后,您可以通过 SSH 或 Lish 控制台连接到它以进行配置。SSH 是首选方法,但如果您尚未安装 ssh 客户端,则 Lish 控制台可能很有用。用户名,至少在我们添加新用户之前,将是 root
,密码将是您在实例创建过程中分配的任何密码。如果您使用 SSH,您可以通过 SSH 密钥(如果您有)连接,否则您可以使用标准身份验证。
创建本地用户
一旦您登录到您的实例,并且您有一个可以输入命令的命令 shell,您就可以开始实际构建您的服务器。但是,以 root 身份运行命令通常不被认为是最佳实践,因此建议您创建一个非 root 帐户来代替使用。我们可以使用以下命令创建一个用户
adduser jay
填写您看到的每个字段,包括设置密码、全名等等。密码是必需的,但您可以跳过其他字段。接下来,我们需要授予我们的新用户 sudo
访问权限。我们可以通过运行以下命令将我们的用户添加到启用 sudo
访问权限的相应组中
usermod -aG sudo jay
此时,如果您键入 groups,然后键入用户名,您可以看到我们创建的新用户是 sudo
组的成员。
现在我们已经创建了一个非 root 用户,建议您使用您的新帐户登录并继续使用该帐户。您可以简单地注销并重新登录以开始使用新帐户。
安装更新
继续我们的初始设置,让我们安装所有可用的更新。每次我们设置新的 Linux 服务器时都应该这样做 - 我们总是希望从最新和最好的软件包开始,因为它们包含安全更新,这些更新绝对重要,需要加以利用。我们应该以新用户身份登录,所以我们将使用 sudo
作为管理命令的前缀。
要更新存储库索引,我们将输入以下命令
sudo apt update
现在我们已经更新了存储库索引,我们将运行以下命令来实际安装可用的更新
sudo apt dist-upgrade
您可以简单地按 Enter 键接受默认值,因为“Y”是大写 - 这意味着它是默认选择。在您按 Enter 键后,更新将开始安装 - 这可能需要一段时间,具体取决于有多少更新在队列中等待安装。给它一些时间,我们可以在完成后继续。
接下来,您可能不需要以下命令,但它可能对于安装更新后的潜在清理很有用
sudo apt autoremove
autoremove
选项将删除可能存在的任何孤立软件包。
设置主机名
在重新启动服务器之前,我们应该配置其主机名。它最初是 localhost,但这不是很具有描述性。编辑主机名文件,并更改主机名
sudo nano /etc/hostname
在这里,您可以将“localhost”更改为简单的主机名,甚至域名(如果您有域名)。
按 CTRL, O 然后 Enter 保存文件。按 CTRL, O, 然后 x 退出 nano。
接下来,我们将编辑 /etc/hosts 文件,该文件也包含我们服务器的主机名。我们应该在此文件中更改它,以匹配我们在 /etc/hostname 文件中命名的名称。但是,您应该在此特定文件中保留“localhost”,然后在下一行添加您服务器的实际主机名。例如
127.0.1.1 nextcloud.mydomain.org nextcloud
保存文件,然后我们应该在继续之前重新启动服务器。您可以通过单击此实例的 Linode 仪表板中的“重新启动”按钮来执行此操作。
禁用通过 SSH 的 root 登录
您可以进行许多调整以提高 Linux 服务器的安全性,但至少,我们应该禁用通过 root
对 SSH 的访问。我们绝对应该禁用它。只要您已经创建了一个非 root 用户,您就可以安全地禁用通过 SSH 的 root
访问。为此,您应该使用 nano
编辑 sshd_config
文件
sudo nano /etc/ssh/sshd_config
查找选项 PermitRootLogin
并将其设置为 no
。保存文件,然后退出 nano
。
要完成更改,请重新启动 ssh 服务
sudo systemctl restart ssh
下载 Nextcloud
为了继续,我们需要找到指向 Nextcloud 下载的 URL。您可以通过访问 Nextcloud 官方网站 找到它,并查找下载链接。目前,有一个“获取 Nextcloud”按钮,它应该将您带到正确的页面。一旦找到下载按钮,不要像平常那样用鼠标左键单击它 - 右键单击下载链接本身,并复制下载链接。
回到您的终端,使用 wget
命令下载 Nextcloud,以及下载文件的 URL。下面的命令显示了使用 wget
下载 Nextcloud 的示例,并且此命令中显示的 URL 在本文的时间戳时是正确的
wget https://download.nextcloud.com/server/releases/latest.zip
下载 Nextcloud 完成后,我们暂时将文件放在一边,稍后我们将回到它。让我们绕道而行,设置 MariaDB。
数据库设置
安装 MariaDB
接下来我们要做的就是为 Nextcloud 设置数据库服务器,我们肯定要确保在我们需要时准备就绪,所以首先我们将安装一个特殊的软件包,该软件包将使我们能够访问 MySQL 服务器(特别是 MariaDB),所以我们将通过 apt 安装 MariaDB 来开始这个过程
sudo apt install mariadb-server
一旦安装完成,这将满足我们对数据库服务器的要求。我们可以运行以下命令来检查 MariaDB 服务器的状态
systemctl status mariadb
在输出中,确保 mariadb
服务已启用,并且其状态显示为正在运行。在我们为 Nextcloud 创建所需的数据库之前,我们应该确保我们的数据库服务至少具有一些基本的安全级别,所以我们将运行以下命令来处理一些基本知识
sudo mysql_secure_installation
即使该命令的名称中包含 mysql
,它也与 MariaDB 兼容,并且仍然适合我们的目的。此命令将执行的操作是启动一个脚本,该脚本将询问各种问题,每个答案都可能有利于提高安全性。此脚本不会使服务器完全安全,但它确实代表了一个良好的起点,并且对于我们的目的来说已经足够了。首先,该命令将询问当前的 root 密码(特别是 MySQL 的 root 密码,而不是 root Linux 用户的密码)。我们尚未设置该密码,因此我们将按 Enter 键绕过此提示。接下来,脚本将询问我们是否要实际设置 root 密码(这将是一个好主意)。如果您按 Enter 键,默认情况下同意设置密码 - 然后将要求您设置密码。我建议您创建一个随机生成的密码,并将其保存在非常安全的地方。对于其余的提示,您可以通过再次为每个问题按 Enter 键来安全地接受每个问题的默认值。
创建 Nextcloud 数据库
我们将设置的下一个组件是实际的数据库本身,它将存储我们 Nextcloud 实例的信息。为此,我们将首先访问 MariaDB 控制台,我们可以通过以 root 身份或使用 sudo
运行 mariadb
命令来完成此操作
sudo mariadb
进入 shell 后,我们将运行一些 MySQL 格式的命令,这些命令将在此处(以及在视频中)以大写形式显示。虽然不是必需的,但通常的做法是以大写形式键入 MySQL 命令,这也将命令部分与元数据(例如数据库名称)区分开来。也就是说,以下命令将创建一个名为 nextcloud
的空数据库
CREATE DATABASE nextcloud;
让我们确保数据库确实在那里
SHOW DATABASES;
接下来,我们将创建一些权限,以允许 Nextcloud 应用程序访问数据库服务器。我们通过创建一个“grant”来完成此操作,该“grant”允许 nextcloud
用户访问整个数据库
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'mypassword';
最后,让我们刷新权限以确保我们的新设置生效
FLUSH PRIVILEGES;
现在我们已经设置了数据库服务器,我们可以继续进行 Web 服务器部分。
Apache Web 服务器设置
安装支持 Apache 所需的软件包
我们需要运行以下命令,以安装支持我们实例上的 Apache 所需的所有软件包
sudo apt install php php-apcu php-bcmath php-cli php-common php-curl php-gd php-gmp php-imagick php-intl php-mbstring php-mysql php-zip php-xml
接下来,让我们确保 Apache 正在运行
systemctl status apache2
为了满足 Nextcloud 的要求,我们需要启用推荐的 PHP 扩展,我们可以通过运行以下命令来完成此操作
sudo phpenmod bcmath gmp imagick intl
此外,我们还需要安装 zip
,以使我们能够解压缩我们之前下载的 Nextcloud zip 文件
sudo apt install unzip
之后,您应该能够提取下载的 Nextcloud 存档
unzip nextcloud-<version>.zip
安装 Nextcloud 的文件并设置其权限
现在我们已经解压缩了文件,让我们将文件移动到它们将被服务的位置,并设置权限
mv nextcloud nextcloud.learnlinux.cloud
我们将进行的另一个更改是确保 www-data
用户和组拥有 Nextcloud 目录以及任何注释
sudo chown -R www-data:www-data nextcloud.learnlinux.cloud
之后,我们将 Nextcloud 目录移动到其正确的位置
sudo mv nextcloud.learnlinux.cloud /var/www
最后,我们应该禁用 Apache 附带的默认站点,因为我们将不会使用它
sudo a2dissite 000-default.conf
为 Nextcloud 创建主机配置文件
接下来,我们将为 Apache 设置一个配置文件,告诉它如何服务 Nextcloud。
sudo nano /etc/apache2/sites-available/nextcloud.learnlinux.cloud.conf
将以下内容添加到文件中(请务必调整文件名以匹配您的文件名)
<VirtualHost *:80> DocumentRoot "/var/www/nextcloud.learnlinux.cloud" ServerName nextcloud.learnlinux.cloud <Directory "/var/www/nextcloud.learnlinux.cloud/"> Options MultiViews FollowSymlinks AllowOverride All Order allow,deny Allow from all </Directory> TransferLog /var/log/apache2/nextcloud.learnlinux.cloud_access.log ErrorLog /var/log/apache2/nextcloud.learnlinux.cloud_error.log </VirtualHost>
启用站点
要在 Apache 中激活我们的新站点配置,请运行以下命令
sudo a2ensite apache-config-file-name.conf
配置 PHP
快完成了!下一步将让我们更改一些 PHP 选项。首先,编辑以下文件
sudo nano /etc/php/7.4/apache2/php.ini
在该文件中调整以下参数
memory_limit = 512M upload_max_filesize = 200M max_execution_time = 360 post_max_size = 200M date.timezone = America/Detroit opcache.enable=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1
运行以下命令以确保启用了所需的 PHP 模块
sudo a2enmod dir env headers mime rewrite ssl
重新启动 Apache 以确保新的 PHP 设置生效
sudo systemctl restart apache2
获取 TLS 证书
让我们设置 Let's Encrypt 并为我们的 Nextcloud 安装获取证书。以下步骤将指导您完成该过程。
注意:说明取自此链接,如果将来说明发生更改,您可能需要访问该链接。
确保已安装 snapd
为了使用 Let's Encrypt,我们将使用 snapd
,所以首先确保已安装它
sudo apt install snapd
您还需要安装 core
snap
sudo snap install core; sudo snap refresh core
安装 Certbot
以下命令将确保安装 certbot
,这是我们将用来获取证书的工具
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
尝试获取证书(DNS 必须已经传播)
sudo certbot --apache
仔细回答提示,只要您没有忽略所有内容,您就应该拥有自己的 TLS 证书!
其他调整和修改
为了总结,我们将实施一些额外的调整,这些调整不一定适合在前面的部分中进行。
更正 config.php 文件的权限
我们绝对不希望 config.php
文件落入坏人之手,因为它包含有关我们 Nextcloud 设置的宝贵设置信息。让我们调整权限以更好地保护它。
sudo chmod 660 /var/www/<nextcloud_directory>/config/config.php
sudo chown root:www-data /var/www/<nextcloud_directory/config/config.php
启用内存缓存
编辑 Nextcloud 配置文件
sudo vim /var/www/nextcloud.learnlinux.cloud/config/config.php
在底部添加以下行
'memcache.local' => '\\OC\\Memcache\\APCu',
解决与默认电话区域相关的警告
编辑 Nextcloud 配置文件
sudo vim /var/www/nextcloud.learnlinux.cloud/config/config.php
在文件底部添加以下行
'default_phone_region' => 'US',
注意:如果您的国家/地区代码不是美国,请务必将以上示例中的“US”更改为您的两位字符的国家/地区代码。
消除 Image Magick 错误
安装 libmagickcore-6.q16-6-extra
软件包
sudo apt install libmagickcore-6.q16-6-extra
启用严格传输安全
编辑我们 Nextcloud 安装的 SSL 配置文件
sudo vim /etc/apache2/sites-available/nextcloud.learnlinux.cloud-le-ssl.conf
在 ServerName 行之后添加以下行
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule>
项目完成!
要完成的最后一项任务是访问实例,您可以通过输入实例的域名或 IP 地址来执行此操作。您应该看到一个配置页面,要求您填写一些信息,例如与数据库相关的信息。只需使用您在前面过程中使用的值,您的新 Nextcloud 实例应该就可以启动并运行了!
您可以在此处观看教程