本教程将向您展示如何使用 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
按钮以查看新版本。
您可以运行以下命令将其下载到您的服务器上。
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
如果网页无法加载,您可能需要在防火墙中打开端口 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 证书,如下消息所示。
我发现 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+ 分数。
步骤 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
单击Finish Setup
按钮,您将看到 Nextcloud 的 Web 界面。恭喜!您可以开始将其用作您的私有云存储。
如何设置 NextCloud 电子邮件通知
如果您的 NextCloud 实例将被多人使用,则您的 NextCloud 服务器可以发送交易电子邮件,例如密码重置电子邮件,这一点很重要。首先,您应该为自己的帐户设置一个电子邮件地址。转到Settings
->Personal Info
并为您的帐户设置电子邮件地址。
然后转到设置->基本设置。您将找到电子邮件服务器设置。有两种发送模式:sendmail
和smtp
。sendmail
如果您的 NextCloud 主机有 SMTP 服务器正在运行,您可以选择该模式。
如果您想使用在另一台主机上运行的 SMTP 服务器,请选择smtp
模式并输入 SMTP 服务器地址和登录凭据,如下所示。选择 STARTTLS 进行加密。
有关如何设置电子邮件服务器,请查看以下教程。请注意,我强烈建议在全新的干净操作系统上运行 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_limit
PHP-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
提示:如果上述命令没有立即退出,您可以按 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, ),
保存并关闭文件。然后重新启动 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
现在,如果您刷新 NextCloud设置->概览页面,关于 big int 的警告应该消失了。
如何在 Ubuntu 20.04 桌面上安装 NextCloud 客户端
在 Ubuntu 20.04 桌面上运行以下命令以从默认存储库安装客户端。
sudo apt install nextcloud-client
Ubuntu 20.04 上的 NextCloud 客户端
可在Nextcloud 下载页面上找到适用于 macOS、Windows、Android 和 iOS 的客户端软件。
如何启用 OnlyOffice/Collabora Online
默认情况下,Nextcloud 支持 OnlyOffice,这是一个在线办公套件,允许您直接从 NextCloud 编辑 doc、ppt、xls 文件。我们只需要安装一个应用程序即可使用此功能。转到 Nextcloud Apps
-> Office & Text
。查找并启用该community document server
应用程序。
现在,当您单击 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。
接下来,编辑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。