使用 Apache (LAMP Stack) 在 Ubuntu 20.04 上安装 NextCloud

本教程将向您展示如何使用 Apache Web 服务器在 Ubuntu 20.04 LTS 上安装 NextCloud

NextCloud 是什么?

NextCloud是一个免费的开源自托管云存储解决方案。它在功能上类似于Dropbox。专有的云存储解决方案(Dropbox、Google Drive 等)很方便,但要付出代价:它们可用于收集个人数据,因为您的文件存储在他们的计算机上。如果您担心隐私,您可以切换到 NextCloud,您可以将其安装在您的私人家庭服务器或虚拟专用服务器 (VPS) 上。您可以通过 NextCloud 将您的文件上传到您的服务器,然后将这些文件同步到您的台式计算机、笔记本电脑或智能手机。这样您就可以完全控制您的数据。

NextCloud 功能

  • 免费和开源
  • 端到端加密,意味着文件可以在上传到服务器之前在客户端设备上加密,因此即使有人窃取了您的服务器,他们也无法读取您的文件。
  • 可以与在线办公套件(Collobora Online、OnlyOffice)集成,因此您可以直接从 NextCloud 创建和编辑您的 doc、ppt、xls 文件。
  • 应用商店包含数百个扩展功能的应用(如日历应用、通讯录应用、笔记应用、视频会议应用等)。
  • 同步客户端可在 Linux、macOS、Windows、iOS 和 android 上使用。

先决条件

NextCloud 是用 PHP 编程语言编写的。要遵循本教程,您首先需要在 Ubuntu 20.04 上安装 LAMP 堆栈。如果您还没有损坏,请查看以下内容。. 如果您还没有这样做,请查看以下教程。

您可以在您的家庭服务器或VPS(虚拟专用服务器)上安装 NextCloud 。您还需要一个域名,以便稍后您可以启用 HTTPS 来加密 HTTP 流量。我从NameCheap注册了我的域名,因为价格低廉,而且他们提供终身免费的 whois 隐私保护。Nextcloud 可以不带域名安装,但是如果不加密 HTTP 连接以防止窥探,那真的没有意义。如果您真的想修改服务器软件并充分利用它们,我建议您购买域名。

现在让我们安装 NextCloud。

第 1 步:在 Ubuntu 20.04 上下载 NextCloud

登录到您的 Ubuntu 20.04 服务器。然后将 NextCloud zip 存档下载到您的服务器上。在撰写本文时,最新的稳定版本是 21.0.1。您可能需要更改版本号。转到https://nextcloud.com/install并单击download for server按钮以查看最新版本。

在 Ubuntu 20.04 上下载 NextCloud
在 Ubuntu 20.04 上下载 NextCloud

您可以运行以下命令将其下载到您的服务器上。

wget https://download.nextcloud.com/server/releases/nextcloud- 21.0.1 .zip

您可以随时使用上述 URL 格式下载 NextCloud。如果出现新版本,只需替换21.0.1为新版本号即可。

下载后,使用unzip.

sudo apt install unzip 

sudo unzip nextcloud- 21.0.1 .zip -d /var/www/

-d选项指定目标目录。NextCloud 网络文件将被提取到/var/www/nextcloud/. 然后我们需要将这个目录的所有者更改为 ,www-data以便 Web 服务器(Apache)可以写入这个目录。

sudo chown www-data:www-data /var/www/nextcloud/ -R

第 2 步:在 MariaDB 数据库服务器中为 Nextcloud 创建数据库和用户

使用以下命令登录到 MariaDB 数据库服务器。由于 MariaDB 现在使用unix_socket插件来验证用户登录,因此不需要输入 MariaDB 的 root 密码。我们只需要在mysql命令前加上sudo.

sudo mysql

然后为 Nextcloud 创建一个数据库。本教程将数据库命名为 nextcloud。您可以使用任何您喜欢的名称。

 create database nextcloud;

创建数据库用户。同样,您可以为此用户使用您的首选名称。替换your-password为您的首选密码。

 create user nextclouduser@localhost identified by 'your-password'; 

授予此用户对nextcloud数据库的所有权限。

 grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password'; 

刷新权限并退出。

flush privileges;
exit;
创建数据库和用户
创建数据库和用户

第 3 步:为 Nextcloud 创建 Apache 虚拟主机

使用命令行文本编辑器(如 Nano)nextcloud.conf/etc/apache2/sites-available/目录中创建一个文件。

 sudo nano /etc/apache2/sites-available/nextcloud.conf

将以下文本复制并粘贴到文件中。替换nextcloud.example.com为您自己的首选子域。不要忘记在您的 DNS 区域编辑器中为此子域创建 DNS A 记录。如果您没有真正的域名,我建议您去NameCheap购买一个。价格低廉,他们终身免费提供whois隐私保护。

<VirtualHost *:80>
        DocumentRoot "/var/www/nextcloud"
        ServerName nextcloud.example.com

        ErrorLog ${APACHE_LOG_DIR}/nextcloud.error
        CustomLog ${APACHE_LOG_DIR}/nextcloud.access combined

        <Directory /var/www/nextcloud/>
            Require all granted
            Options FollowSymlinks MultiViews
            AllowOverride All

           <IfModule mod_dav.c>
               Dav off
           </IfModule>

        SetEnv HOME /var/www/nextcloud
        SetEnv HTTP_HOME /var/www/nextcloud
        Satisfy Any

       </Directory>

</VirtualHost>

保存并关闭文件。(要在 Nano 文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要退出,请按Ctrl+X。)

然后启用这个虚拟主机。

sudo a2ensite nextcloud.conf

运行以下命令以启用所需的 Apache 模块。

sudo a2enmod rewrite headers env dir mime setenvif ssl

然后测试Apache配置。

sudo apache2ctl -t

如果语法正常,请重新加载 Apache 以使更改生效。

sudo systemctl restart apache2

第 4 步:安装和启用 PHP 模块

运行以下命令安装 NextCloud 需要或推荐的 PHP 模块。

sudo apt install imagemagick php-imagick libapache2-mod-php7.4 php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp

重新加载 Apache 以使用这些模块。

sudo systemctl reload apache2

步骤 5:启用 HTTPS

现在,您可以通过输入 Nextcloud 安装的域名来访问 Web 浏览器中的 Nextcloud Web 安装向导。

nextcloud.example.com
启用 HTTPS
启用 HTTPS

如果网页无法加载,您可能需要在防火墙中打开端口 80。

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT

还有端口 443。

sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT

在输入任何敏感信息之前,我们应该在 Nextcloud 上启用安全的 HTTPS 连接。我们可以从 Let’s Encrypt 获得免费的 TLS 证书。从 Ubuntu 20.04 存储库安装 Let’s Encrypt 客户端 (certbot)。

sudo apt install certbot python3-certbot-apache

Python3-certbot-apache是Apache插件。接下来,运行以下命令以使用 Apache 插件获取免费的 TLS 证书。

sudo certbot --apache --agree-tos --redirect --staple-ocsp --email you@example.com -d nextcloud.example.com

在哪里:

  • –apache2:使用 Apache 身份验证器和安装程序
  • –agree-tos:同意让我们加密服务条款
  • –redirect:通过添加 301 重定向来强制执行 HTTPS。
  • –staple-ocsp:启用 OCSP 装订。
  • –email:用于注册和恢复联系人的电子邮件。
  • -d标志后跟域名列表,以逗号分隔。您最多可以添加 100 个域名。

系统会询问您是否希望接收来自 EFF(电子前沿基金会)的电子邮件。选择 Y 或 N 后,将自动为您获取和配置您的 TLS 证书,如下消息所示。

配置您的 TLS 证书
配置您的 TLS 证书

我发现 Certbot 无法在 Nextcloud 的 Apache 配置文件中自动添加 HSTS 标头。如果您想启用 HSTS(HTTP 严格传输安全),请编辑该文件。

sudo nano /etc/apache2/sites-enabled/nextcloud-le-ssl.conf

然后我们可以在 SSL 服务器块中添加以下行以启用 HSTS 标头。

Header always set Strict-Transport-Security "max-age=31536000"

像下面。

保存并关闭文件。然后文本 Apache 配置。

sudo apache2ctl -t

如果测试成功,请重新加载 Apache 以使更改生效。

sudo systemctl reload apache2

上述配置将在SSL 测试中获得 A+ 分数。

上述配置将在SSL
上述配置将在SSL

步骤 6:在 Web 浏览器中完成安装

现在您可以使用 HTTPS 连接访问 Nextcloud Web 安装向导。

https://nextcloud.example.com

要完成安装,您需要创建一个管理员帐户,输入 Nextcloud 数据文件夹的路径,输入您在第 2 步中创建的数据库详细信息。您可以使用默认的localhost主机地址,也可以输入localhost:3306,因为 MariaDB 侦听端口 3306 .

数据文件夹是存储用户文件的地方。为了安全起见,最好将数据目录放在 Nextcloud webroot 目录之外。因此/var/www/nextcloud/data/,我们可以将其更改为 ,而不是将用户的文件存储在 下/var/www/nextcloud-data。可以使用以下命令创建:

sudo mkdir /var/www/nextcloud-data

然后确保 Apache 用户 ( www-data) 对数据目录具有写入权限。

sudo chown www-data:www-data /var/www/nextcloud-data -R
在 Web 浏览器中完成安装
在 Web 浏览器中完成安装

单击Finish Setup按钮,您将看到 Nextcloud 的 Web 界面。恭喜!您可以开始将其用作您的私有云存储。

如何设置 NextCloud 电子邮件通知

如果您的 NextCloud 实例将被多人使用,则您的 NextCloud 服务器可以发送交易电子邮件,例如密码重置电子邮件,这一点很重要。首先,您应该为自己的帐户设置一个电子邮件地址。转到Settings->Personal Info并为您的帐户设置电子邮件地址。

如何设置 NextCloud 电子邮件通知
如何设置 NextCloud 电子邮件通知

然后转到设置->基本设置。您将找到电子邮件服务器设置。有两种发送模式:sendmailsmtpsendmail如果您的 NextCloud 主机有 SMTP 服务器正在运行,您可以选择该模式。

如果您想使用在另一台主机上运行的 SMTP 服务器,请选择smtp模式并输入 SMTP 服务器地址和登录凭据,如下所示。选择 STARTTLS 进行加密。

nextcloud email server send mode smtp

有关如何设置电子邮件服务器,请查看以下教程。请注意,我强烈建议在全新的干净操作系统上运行 iRedMail 邮件服务器。在具有其他 Web 应用程序的操作系统上安装 iRedMail 可能会失败,并且可能会破坏现有的应用程序。

如何从命令行重置 Nextcloud 用户密码

如果您丢失了管理员帐户密码,并且您没有在 Nextcloud 中设置电子邮件传递,那么您需要通过在您的服务器上运行以下命令来重置密码。替换nextcloud_username为您的真实用户名。

sudo -u www-data php /var/www/nextcloud/occ user:resetpassword nextcloud_username

还有其他一些您可能会觉得有用的命令。列出可用命令:

sudo -u www-data php /var/www/nextcloud/occ

或者

sudo -u www-data php /var/www/nextcloud/console.php

如何移动数据目录

如果您需要移动 NextCloud 数据目录,有 4 个步骤可以完成此操作。首先,您需要使用cp命令将数据目录复制到新目录。例如,我的外置硬盘的挂载点是/media/linuxbabe/b43e4eea-9796-4ac6-9c48-2bcaa46353731. 我在外部硬盘驱动器上创建了新的数据目录。

sudo mkdir /media/linuxbabe/b43e4eea-9796-4ac6-9c48-2bcaa46353731/nextcloud-data/

然后我将原始数据目录复制到新数据目录。-R标志表示复制操作是递归的。

sudo cp /var/www/nextcloud-data/* /media/linuxbabe/b43e4eea-9796-4ac6-9c48-2bcaa46353731/nextcloud-data/ -R

您还需要复制该.ocdata文件。

sudo cp /var/www/nextcloud-data/.ocdata /media/linuxbabe/b43e4eea-9796-4ac6-9c48-2bcaa46353731/nextcloud-data/

接下来,您需要将www-data(Apache 用户)设置为所有者。

sudo chown www-data:www-data /media/linuxbabe/b43e4eea-9796-4ac6-9c48-2bcaa46353731/nextcloud-data/ -R

最后,您需要编辑config.php文件。

sudo nano /var/www/nextcloud/config/config.php

找到以下行并更改 的值datadirectory

'datadirectory' => '/var/www/nextcloud-data',

保存并关闭文件。重新加载 NextCloud 网页,您就完成了。

步骤 7:增加 PHP 内存限制

默认的 PHP 内存限制为 128MB。NextCloud 建议使用 512MB 以获得更好的性能。要更改 PHP 内存限制,请编辑php.ini文件。

sudo nano /etc/php/7.4/apache2/php.ini

找到以下行。(第 409 行)

memory_limit = 128M

更改值。

memory_limit = 512M

保存并关闭文件。或者,您可以运行以下命令来更改值,而无需手动打开文件。

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/7.4/apache2/php.ini

然后重新加载 Apache 以使更改生效。

sudo systemctl reload apache2

如果您的服务器有该/etc/php7.4/fpm/php.ini文件,则意味着您的服务器也运行 PHP-FPM。我也建议更改memory_limitPHP-FPM 中的 。

sudo nano /etc/php/7.4/fpm/php.ini

找到memory_limit参数并更改值。保存文件后,重新加载 PHP-FPM 以使更改生效。

sudo systemctl reload php7.4-fpm

第 8 步:为 NextCloud 配置 Redis 缓存

如果您转到 NextCloud设置->概览页面,您可能会看到以下警告:

 No memory cache has been configured. To enhance your performance please configure a memcache if available.

我们将使用 Redis 为 nextCloud 启用内存缓存。运行以下命令从 Ubuntu 存储库安装 Redis 服务器。

sudo apt install redis-server

您可以通过以下方式检查版本:

redis-server -v

示例输出:

Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=636cde3b5c7a3923

现在我们可以检查 redis 服务器是否正在运行。

systemctl status redis
为 NextCloud 配置 Redis 缓存
为 NextCloud 配置 Redis 缓存

提示:如果上述命令没有立即退出,您可以按 Q 键重新获得对终端的控制权。

从上面的屏幕截图中,我们可以看到它正在运行并且启用了自动启动。如果由于某种原因它没有运行,请执行以下命令:

sudo systemctl start redis-server

如果没有开启开机自动启动,可以使用以下命令开启:

sudo systemctl enable redis-server

为了将 Redis 配置为 nextCloud 的缓存,我们需要安装 PHP 扩展以与 Redis 交互。

sudo apt install php-redis

检查扩展是否启用。

php --ri redis
检查扩展是否启用
检查扩展是否启用

我们可以看到启用了 Redis 扩展。如果未启用,请运行以下命令:

sudo phpenmod redis

如果 redis 扩展仍未启用,您可能还需要重新加载 Apache。

sudo systemctl reload apache2

接下来,编辑 nextCloud 配置文件。

sudo nano /var/www/nextcloud/config/config.php

在结束);行上方添加以下几行。

'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     ),
OC\Memcache\Redis
OC\Memcache\Redis

保存并关闭文件。然后重新启动 Apache 和 PHP-FPM。

sudo systemctl restart apache2 php7.4-fpm

现在再次转到 NextCloud设置->概览页面并刷新网页,关于内存缓存的警告应该消失了。

添加缺失的索引

如果您在 NextCloud设置->概览页面中看到以下消息,

The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically.

然后您需要手动添加这些索引。切换到 Nextcloud webroot 目录。

cd /var/www/nextcloud/

运行以下命令将索引添加到 Nextcloud 数据库。

sudo -u www-data php occ db:add-missing-indices
添加缺失的索引
添加缺失的索引

现在,如果您刷新 NextCloud设置->概览页面,关于缺少索引的警告应该消失了。

转换为big int

如果您在 NextCloud设置->概览页面中看到以下消息,

Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. 

然后您需要手动更改列类型。切换到 Nextcloud webroot 目录。

cd /var/www/nextcloud/

将您的 Nextcloud 更改为维护模式,以防止用户登录和进行更改。

sudo -u www-data php occ maintenance:mode --on

然后运行以下命令来更改列类型。

sudo -u www-data php occ db:convert-filecache-bigint

完成后,关闭维护模式。

sudo -u www-data php occ maintenance:mode --off
转换为big int
转换为big int

现在,如果您刷新 NextCloud设置->概览页面,关于 big int 的警告应该消失了。

如何在 Ubuntu 20.04 桌面上安装 NextCloud 客户端

在 Ubuntu 20.04 桌面上运行以下命令以从默认存储库安装客户端。

sudo apt install nextcloud-client

Ubuntu 20.04 上的 NextCloud 客户端

安装 NextCloud 客户端
安装 NextCloud 客户端

可在Nextcloud 下载页面上找到适用于 macOS、Windows、Android 和 iOS 的客户端软件。

如何启用 OnlyOffice/Collabora Online

默认情况下,Nextcloud 支持 OnlyOffice,这是一个在线办公套件,允许您直接从 NextCloud 编辑 doc、ppt、xls 文件。我们只需要安装一个应用程序即可使用此功能。转到 Nextcloud Apps-> Office & Text。查找并启用该community document server应用程序。

启用 OnlyOffice
启用 OnlyOffice

现在,当您单击 Nextcloud 中的添加按钮 (+) 时,您将能够直接从 Nextcloud 服务器创建 Word、电子表格和演示文稿文档。

但是,我发现这个应用程序不是很可靠。而社区版最多只允许 20 个用户。如果您的用户超过 20 个,则需要购买企业版。还有另一个基于 LibreOffice 的开源在线办公套件,称为 Collabora Online,具有相同的功能,但没有用户数量限制。您可以阅读以下文章将其与 Nextcloud 集成。

增加上传文件大小限制

如果您使用 Apache PHP 模块运行 PHP 脚本,则没有上传文件大小限制。如果使用 PHP-FPM 运行 PHP 脚本,则需要更改文件大小限制。在 PHP-FPM 中上传的默认最大文件大小为 2MB。要增加上传大小限制,请编辑 PHP 配置文件。

sudo nano /etc/php/7.4/fpm/php.ini

找到以下行(第 846 行)。

upload_max_filesize = 2M

更改值如下:

upload_max_filesize = 1024M

保存并关闭文件。或者,您可以运行以下命令来更改值,而无需手动打开文件。

sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 1024M/g' /etc/php/7.4/fpm/php.ini

然后重新启动 PHP-FPM。

sudo systemctl restart php7.4-fpm

启用 HTTP/2 协议

HTTP/2 协议可以大大提高页面加载速度。您可以阅读以下指南以在 Apache 上启用 HTTP/2 协议。

添加本地 DNS 条目

建议/etc/hosts在您的Nextcloud服务器上编辑该文件并添加以下条目,这样Nextcloud本身就不必查询公共DNS,可以提高整体稳定性。如果您的 Nextcloud 服务器无法解析nextcloud.example.com主机名,那么您可能会遇到504 网关超时错误。

127.0.0.1   localhost nextcloud.example.com

/etc/hosts文件中的 IP 地址可以有多个主机名,因此如果您在同一台机器上安装了其他应用程序,您还可以在同一行中添加其他主机名或子域,如下所示:

127.0.0.1   localhost focal ubuntu nextcloud.example.com collabora.example.com

使用 Cron 运行后台作业

默认情况下,Nextcloud 使用 AJAX 在每个页面加载时执行一个任务。您可以使用更高效的系统 cron 服务来运行后台作业。转到 Nextcloud设置->基本设置并选择Cron

使用 Cron 运行后台作业
使用 Cron 运行后台作业

接下来,编辑www-data用户的 crontab 文件。

sudo -u www-data crontab -e

在此文件中添加以下行,以便 cron 作业将每 5 分钟运行一次。

*/5 * * * * php7.4 -f /var/www/nextcloud/cron.php

保存并关闭文件。

故障排除提示

如果遇到错误,您可以检查以下日志文​​件之一以找出问题所在。

  • apache 错误日志: /var/log/apache2/error.log
  • Nextcloud 虚拟主机的 Apache 错误日志: /var/log/apache2/nextcloud.error
  • Nextcloud 应用日志: /var/www/nextcloud/data/nextcloud.log

例如,Internal Server Error我的 Nextcloud 实例上曾经有一个“ ”,/var/log/nginx/nextcloud.error文件告诉我

FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught OC\HintException: [0]: Memcache \OC\Memcache\Redis not available for local cache (Is the matching PHP module installed and enabled?) 

原来是因为我在我的Ubuntu服务器上使用了ppa:ondrej/php PPA,所以php7.4-redis除了安装php-redis包外还需要安装。

如果您在nextcloud.log文件中看到以下错误消息,则可以忽略它。

Could not detect any host in https:///data/htaccesstest.txt

升级 Nextcloud

使用最新的安全和错误修复使您的 Nextcloud 服务器保持最新状态非常重要。阅读下面的教程,了解如何升级 Nextcloud。

总结

我希望本教程可以帮助您在 Ubuntu 20.04 服务器上使用 Apache 安装 NextCloud。

发表评论

您的电子邮箱地址不会被公开。