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

  • 技术文档
  • 2022.03.23
  • 浏览:556

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

接下来是什么?

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

NextCloud功能

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

先决条件

NextCloud是用PHP编程语言编写的。要学习本教程,首先需要在Ubuntu 20.04上安装LAMP stack。如果您还没有这样做,请查看以下教程。

  • 如何在Ubuntu 20.04上安装LAMP Stack(Apache、MariaDB、PHP7.4-FPM)

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

现在让我们安装NextCloud。

第一步:在Ubuntu 20.04上下载NextCloud

登录你的Ubuntu 20.04服务器。然后将NextCloud压缩文件下载到服务器上。撰写本文时,最新的稳定版本是21.0.1。您可能需要更改版本号。去https://nextcloud.com/install然后单击下载服务器按钮查看最新版本。

ubuntu 20.04 nextcloud

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

wget 21.0.1.zip

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

下载后,使用解压功能提取归档文件。

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

-d选项指定目标目录。NextCloud web文件将被提取到/var/www/NextCloud/。然后我们需要将该目录的所有者更改为www数据,以便web服务器(Apache)可以写入该目录。

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

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

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

sudo mysql

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

create database nextcloud;

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

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

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

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

刷新权限并退出。

flush privileges;  exit;

Create a Database and User for Nextcloud in MariaDB Database Server

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

创建一个nextcloud。conf文件位于/etc/apache2/sites available/directory中,带有像Nano这样的命令行文本编辑器。

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

将以下文本复制并粘贴到文件中。更换nextcloud。实例com与您自己的首选子域。不要忘记在DNS区域编辑器中为此子域创建DNS记录。如果你没有一个真正的域名,我建议你去买一个便宜的域名。价格低廉,而且他们终身免费为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

nextcloud setup wizard

如果网页无法加载,您可能需要在防火墙中打开端口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证书。从Ubuntu20.04存储库安装Let's Encrypt client(certbot)。

sudo apt install certbot python3-certbot-apache

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

sudo certbot --apache --agree-tos --redirect --staple-ocsp --email [email protected] -d nextcloud.example.com

哪里:

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

你会被问到是否想收到来自EFF(电子前沿基金会)的电子邮件。选择Y或N后,将自动获取并为您配置TLS证书,如下消息所示。

ubuntu 20.04 nextcloud certbot letsencrypt https

我发现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"

如下图所示。

nextcloud apache hsts policy

保存并关闭文件。然后发短信给Apache配置。

sudo apache2ctl -t

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

sudo systemctl reload apache2

以上配置将在SSL测试中获得+分。

nextcloud ssl report

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

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


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

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

sudo mkdir /var/www/nextcloud-data

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

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

nextcloud-ubuntu-20.04-install-guide-apache

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

set-up-nextcloud-hub-ubuntu-apache

如何设置NextCloud电子邮件通知

如果您的NextCloud实例将被多人使用,那么NextCloud服务器可以发送事务性电子邮件,例如密码重置电子邮件,这一点很重要。首先,你应该为自己的账户设置一个电子邮件地址。转到设置->;个人信息,并为您的帐户设置电子邮件地址。

nextcloud email address

然后进入设置->;基本设置。您将找到电子邮件服务器设置。有两种发送模式:sendmail和smtp。如果您的NextCloud主机运行SMTP服务器,则可以选择sendmail模式。

nextcloud email server send mode sendmail

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

nextcloud email server send mode smtp

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

  • 如何使用iRedMail在Ubuntu20.04上轻松设置功能齐全的邮件服务器

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

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

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数据(Apache用户)设置为所有者。

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

最后,您需要编辑配置。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。我还建议更改PHP-FPM中的内存限制。

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

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

sudo systemctl reload php7.4-fpm

第8步:为NextCloud配置Redis缓存

如果您进入下一步设置->;概述页面,您可能会看到以下警告:

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

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

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 memory cache redis server

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

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

sudo systemctl start redis-server

如果未启用启动时自动启动,则可以使用以下命令启用它:

sudo systemctl enable redis-server

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

sudo apt install php-redis

检查扩展是否已启用。

php --ri redis

php redis extension check

我们可以看到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,      ),

nextcloud memory cache redis local cache

保存并关闭文件。然后重启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-The-database-is-missing-some-indexes

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

转换为大整数

如果在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

nextcloud-Some-columns-in-the-database-are-missing-a-conversion-to-big-int

现在,如果刷新NextCloud设置->;概述页面,关于大整数的警告应该消失。

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

在Ubuntu20.04桌面上运行以下命令,从默认存储库安装客户端。

sudo apt install nextcloud-client

Ubuntu 20.04上的NextCloud客户端

ubuntu 18.04 nextcloud client

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

如何启用OnlyOffice/Collabora Online

默认情况下,Nextcloud附带对OnlyOffice的支持,OnlyOffice是一个在线办公套件,允许您直接从Nextcloud编辑文档、ppt和xls文件。我们只需要安装一个应用程序就可以使用这个功能。转到Nextcloud应用程序->;办公室及;文本查找并启用社区文档服务器应用程序。

nextcloud onlyoffice community document server

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

nextcloud online office

nextcloud hub onlyoffice

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

  • 将Collabora Online与Ubuntu上的Nextcloud与Docker集成

增加上传文件大小限制

如果使用ApachePHP模块运行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协议。

  • 如何在Ubuntu 20.04上使用Apache启用HTTP/2协议

添加本地DNS条目

建议在Nextcloud服务器上编辑/etc/hosts文件,并添加以下条目,这样Nextcloud本身就不必查询公共DNS,从而提高整体稳定性。如果您的Nextcloud服务器无法解析Nextcloud。实例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。

Nextcloud Use system cron service to call the cron.php file every 5 minutes

接下来,编辑www数据用户的crontab文件。

sudo -u www-data crontab -e

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

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

保存并关闭文件。

故障排除提示

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

  • Apache错误日志:/var/log/apache2/error。日志
  • Nextcloud虚拟主机的Apache错误日志:/var/log/apache2/Nextcloud。错误
  • Nextcloud应用程序日志:/var/www/Nextcloud/data/Nextcloud。日志

例如,我的Nextcloud实例和/var/log/nginx/Nextcloud上有一个“内部服务器错误”。错误文件告诉我

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。除了php redis包之外,还有4-redis。

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

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

升级Nextcloud

让你的Nextcloud服务器保持最新的安全和漏洞修复非常重要。阅读下面的教程,了解如何升级Nextcloud。

  • 2种升级Nextcloud[命令行和GUI]的方法

收尾

我希望本教程能帮助您在带有Apache的Ubuntu 20.04服务器上安装NextCloud。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?