使用Apache(LAMP Stack)在Ubuntu 20.04上安装NextCloud
- 技术文档
- 2022.03.23
- 浏览:556
文章目录[隐藏]
- 接下来是什么?
- NextCloud功能
- 先决条件
- 第一步:在Ubuntu 20.04上下载NextCloud
- 步骤2:在MariaDB数据库服务器中为Nextcloud创建数据库和用户
- 步骤3:为Nextcloud创建Apache虚拟主机
- 第4步:安装并启用PHP模块
- 第5步:启用HTTPS
- 第6步:在Web浏览器中完成安装
- 如何设置NextCloud电子邮件通知
- 如何从命令行重置Nextcloud用户密码
- 如何移动数据目录
- 第7步:增加PHP内存限制
- 第8步:为NextCloud配置Redis缓存
- 添加缺少的索引
- 转换为大整数
- 如何在Ubuntu 20.04桌面上安装NextCloud客户端
- 如何启用OnlyOffice/Collabora Online
- 增加上传文件大小限制
- 启用HTTP/2协议
- 添加本地DNS条目
- 使用Cron运行后台作业
- 故障排除提示
- 升级Nextcloud
- 收尾
本教程将向您展示如何使用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然后单击下载服务器按钮查看最新版本。
可以运行以下命令将其下载到服务器上。
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;
步骤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
如果网页无法加载,您可能需要在防火墙中打开端口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证书,如下消息所示。
我发现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测试中获得+分。
第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
单击Finish Setup(完成设置)按钮,您将看到Nextcloud的Web界面。恭喜!您可以开始将其用作您的私有云存储。
如何设置NextCloud电子邮件通知
如果您的NextCloud实例将被多人使用,那么NextCloud服务器可以发送事务性电子邮件,例如密码重置电子邮件,这一点很重要。首先,你应该为自己的账户设置一个电子邮件地址。转到设置->;个人信息,并为您的帐户设置电子邮件地址。
然后进入设置->;基本设置。您将找到电子邮件服务器设置。有两种发送模式:sendmail和smtp。如果您的NextCloud主机运行SMTP服务器,则可以选择sendmail模式。
如果要使用在另一台主机上运行的SMTP服务器,请选择SMTP模式并输入SMTP服务器地址和登录凭据,如下所示。选择STARTTLS进行加密。
有关如何设置电子邮件服务器,请查看以下教程。请注意,我强烈建议在全新干净的操作系统上运行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
提示:如果上述命令没有立即退出,您可以按Q键重新控制终端。
从上面的屏幕截图中,我们可以看到它正在运行,并且自动启动已启用。如果出于任何原因,它没有运行,请执行以下命令:
sudo systemctl start redis-server
如果未启用启动时自动启动,则可以使用以下命令启用它:
sudo systemctl enable redis-server
为了将Redis配置为nextCloud的缓存,我们需要安装与Redis接口的PHP扩展。
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设置->;概述页面,关于缺少索引的警告应该消失。
转换为大整数
如果在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设置->;概述页面,关于大整数的警告应该消失。
如何在Ubuntu 20.04桌面上安装NextCloud客户端
在Ubuntu20.04桌面上运行以下命令,从默认存储库安装客户端。
sudo apt install nextcloud-client
Ubuntu 20.04上的NextCloud客户端
macOS、Windows、Android和iOS的客户端软件可以在Nextcloud下载页面上找到。
如何启用OnlyOffice/Collabora Online
默认情况下,Nextcloud附带对OnlyOffice的支持,OnlyOffice是一个在线办公套件,允许您直接从Nextcloud编辑文档、ppt和xls文件。我们只需要安装一个应用程序就可以使用这个功能。转到Nextcloud应用程序->;办公室及;文本查找并启用社区文档服务器应用程序。
现在,当您在Nextcloud中单击add按钮(+)时,您将能够从Nextcloud服务器上创建Word、电子表格和演示文档。
然而,我发现这个应用程序不是很可靠。而社区版最多只允许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。
接下来,编辑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。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?