在 Debian 9 上安装 Nextcloud
本教程将指导您如何从 Debian 9(代号 Stretch)中的源安装和配置 Nextcloud 文件共享 Web 服务。
Nextcloud 是 Owncloud 的一个分支,是一个用于文件共享的开源客户端-服务器应用程序。与 Gdrive 等其他云服务类似,Nextcloud 功能可以通过一套插件轻松扩展,这些插件可以强制云充当邮件客户端或视频通话应用程序,类似于 Skype 或其他形式的用户和应用程序。文件协作。
要求
- 在裸机或虚拟专用服务器上最小化安装 Debian 9
- 为系统网络接口卡之一配置的静态 IP 地址
- 通过 sudo 访问 root 帐户或具有 root 帐户权限的用户
- 配置了正确的 DNS 记录的私有或公共域名。如果您的场所没有配置 DNS 服务器,您仍然可以通过服务器 IP 地址配置和访问 Nextcloud Web 应用程序。
初始配置
在开始从源安装 Nextcloud 之前,首先确保系统满足编译和安装 Nextcloud 的所有软件要求。第一步,通过发出以下命令更新系统存储库和软件包。
apt update
apt upgrade
在下一步中,启动一个新命令以安装一些必要的实用程序,这些实用程序将用于从命令行进一步管理您的系统。
apt install wget unzip zip bash-completion
接下来,通过执行以下命令设置系统的名称:
hostnamectl set-hostname server.nextcloud.local
通过发出以下命令验证计算机主机名和主机文件。
hostnamectl
cat /etc/hostname
cat /etc/hosts
最后,重新启动系统以应用新的主机名。
systemctl reboot
Nextcloud 是一个使用 PHP 服务器端编程语言编写的基于 Web 的文件共享应用程序。为了运行 Nextcloud php 文件脚本,必须在系统中安装并运行 Web 服务器(例如 Apache HTTP 服务器)和 PHP 处理网关。为了安装 Apache Web 服务器和 PHP 解释器以及 Nextcloud 正常运行所需的所有 PHP 模块,请在服务器控制台中发出以下命令。
apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-gd php7.0-json php7.0-xml php7.0-mbstring php7.0-zip php7.0-curl php7.0-bz2 php7.0-intl php7.0-mcrypt php7.0-gmp php-imagick php7.0-opcache
安装 Apache 和 PHP 后,通过使用 root 权限发出以下命令来测试 Web 服务器是否已启动并运行并侦听端口 80 上的网络连接。
netstat –tlpn
如果 Debian 系统中默认未安装 netstat 网络实用程序,请执行以下命令进行安装。
apt install net-tools
通过检查 netstat 命令输出,您可以看到 apache Web 服务器正在侦听端口 80 上的传入网络连接
如果您的系统中启用了防火墙(例如 UFW 防火墙应用程序),则应通过发出以下命令添加新规则以允许 HTTP 流量通过防火墙。
ufw allow WWW
或者
ufw allow 80/tcp
接下来,通过发出以下命令启用并应用 Nextcloud Web 应用程序正常运行所需的以下 Apache 模块。
a2enmod rewrite headers env dir mime
systemctl restart apache2
最后,通过HTTP协议访问您的Debian机器IP地址,测试Apache Web服务器默认网页是否可以在您的客户端浏览器中显示,如下图所示。如果您不知道机器的 IP 地址,请执行 ifconfig 或 ip a 命令。
http://192.168.1.15
下一步,我们需要对 PHP 默认配置文件进行一些进一步的更改,以确保启用 file_uploads 变量,并且 PHP timezone 设置正确配置并匹配您的系统物理位置。打开 /etc/php/7.0/apache2/php.ini 文件进行编辑,并确保以下行设置如下。
file_uploads = On
date.timezone = Europe/London
通过查阅 PHP 文档在以下链接中提供的时区列表,根据您的物理时间替换时区变量:http://php.net/manual/en/timezones.php
接下来,通过发出以下命令备份 PHP 默认配置文件并附加 PHP 解释器的以下 OPCache 设置。
cp /etc/php/7.0/apache2/php.ini{,.backup}
echo -e "opcache.enable=1 \nopcache.enable_cli=1 \nopcache.interned_strings_buffer=8 \nopcache.max_accelerated_files=10000 \nopcache.memory_consumption=128 \nopcache.save_comments=1 \nopcache.revalidate_freq=1" >> /etc/php/7.0/apache2/php.ini
验证 PHP 配置文件的末尾以检查变量是否已正确添加。
tail /etc/php/7.0/apache2/php.ini
重新启动 apache 守护进程以反映更改
systemctl restart apache2
完成所需的更改后,创建一个 php 信息文件并重新启动 apache 守护程序以通过发出以下命令应用更改。
echo '<?php phpinfo(); ?>'| tee /var/www/html/info.php
systemctl restart apache2
通过从浏览器访问以下 URL 的 php info 脚本文件来检查 PHP 时区是否已正确配置,如下图所示。向下滚动到日期设置以检查 php 时区设置。
http://192.168.1.15/info.php
Nextcloud Web 应用程序将配置存储在 RDBMS 数据库中。在本教程中,我们将使用 MariaDB 数据库后端配置 Nextcloud。发出以下命令来安装 MariaDB 数据库和访问 mysql 数据库所需的 PHP 模块。
apt install mariadb-server php7.0-mysql
安装 MariaDB 后,通过运行 netstat 命令验证守护进程是否正在运行并侦听本地主机端口 3306 上的连接。
netstat –tlpn | grep mysql
然后,登录 MySQL 控制台并通过发出以下命令来保护 MariaDB root 帐户。
mysql -h localhost
use mysql;
update user set plugin='' where user='root';
flush privileges;
exit
下一步,通过执行 Debian 扩展存储库的安装包提供的脚本 mysql_secure_installation 来保护 MariaDB。运行脚本时会询问一系列旨在保护 MariaDB 数据库安全的问题,例如:更改 MySQL root 密码、删除匿名用户、禁用远程 root 登录以及删除测试数据库。通过发出以下命令来执行脚本,并确保对所有询问的问题都键入 yes,以完全保护 MySQL 守护程序。使用以下脚本输出(除非用作指南)。
sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
为了测试 MariaDB 的安全性,请尝试从控制台不使用 root 密码登录数据库。如果没有为 root 帐户提供密码,则应拒绝对数据库的访问。如果提供了密码,则应将登录过程授予 MySQL 控制台,如下图所示。
mysql -h localhost -u root
mysql -h localhost -u root –p
接下来,登录到 MariaDB 数据库控制台,通过发出以下命令创建用于 Nextcloud 安装的数据库以及用于管理 Nextcloud 数据库的密码的用户。相应地替换 Nextcloud 数据库名称、用户和密码。
mysql –u root -p
create database my_nextcloud;
grant all privileges on my_nextcloud.* to 'nextcloud_user'@'localhost' identified by 'nextcloud_pass';
flush privileges;
exit
为了应用迄今为止所做的所有更改,请重新启动 MySQL 和 Apache 守护程序,并通过发出以下命令来验证守护程序是否正在运行。
systemctl restart mysql apache2
systemctl status mysql apache2
安装Nextcloud
满足 Nextcloud 安装的所有系统要求后,访问 Nextcloud 官方网站 https://nextcloud.com/install/# 并通过发出 wget 实用程序获取最新版本的 Nextcloud tarball 压缩存档,如以下示例所示。
wget https://download.nextcloud.com/server/releases/nextcloud-12.0.3.zip
tarball 下载完成后,通过发出以下命令提取 Nextcloud zip 存档并将安装文件复制到您的网络服务器文档根目录。请注意,递归模式下的 cp 命令不会复制点或隐藏文件。您需要手动将隐藏文件从提取的存档复制到 Apache webroot。
unzip nextcloud-12.0.3.zip
cp -rf nextcloud/* /var/www/html/
手动复制安装隐藏文件
cp nextcloud/.htaccess /var/www/html/
cp nextcloud/.user.ini /var/www/html/
最后,在开始使用 Web 界面安装 Nextcloud 之前,执行以下命令以删除 Apache Web 服务器安装的默认 index.html 文件,并授予 Apache 运行时用户对 Nextcloud 安装路径的完全写入权限。
rm /var/www/html/index.html
chown -R www-data:www-data /var/www/html/
ls –la /var/www/html
打开浏览器并通过 HTTP 第 7 层协议导航服务器的 IP 地址或域名,继续安装 Nextcloud。在第一个安装屏幕上添加 Nextcloud 的管理员帐户和强密码。该帐户将用于通过 Web 界面进一步管理 Nextcloud。接下来,为 Nextcloud 数据文件夹添加系统路径。数据文件夹可以驻留在您的 Web 服务器 webroot (/var/www/html) 内,也可以放置在 www 根目录之外的其他目录中。使用下图作为指导。
接下来,向下滚动到此页面并添加 MySQL 数据库的凭据设置、Nexcloud MySQL 数据库的名称以及数据库运行的主机名和端口。如果 MariaDB 与 Nextcloud 安装在同一节点上,请使用 localhost 作为 MySQL 数据库主机,并且不提供端口变量。如果您更改了 MariaDB 数据库端口,请相应地更新端口号。填写完所有必填字段后,点击完成设置按钮以开始安装过程并使用所有必填数据填充 Nextcloud MariaDB 数据库,如下面的屏幕截图所示。
安装完成后,您将被重定向到 Nextcloud 默认网页,如下图所示。从弹出窗口中,您可以选择下载并安装适合您自己的操作系统的 Nextcloud Desktop 客户端应用程序。
接下来,导航到 Nextcloud 网络面板,点击右侧的设置图标并转到管理。此时,您的浏览器中应该会显示一个渐弱的消息,建议您将 Web 服务器配置为使用 HTTPS,而不是通过 HTTP 不安全协议访问 Nextcloud。
为了使用 HTTPS 协议通过安全连接访问 Nextcloud Web 界面,请发出以下命令以启用 Apache Web 服务器 SSL 模块和 SSL 站点配置文件。
a2enmod ssl
a2ensite default-ssl.conf
接下来,使用文本编辑器打开 Apache 默认 SSL 站点配置文件,并在 DocumentRoot 指令后添加以下代码行,如以下示例所示:
nano /etc/apache2/sites-enabled/default-ssl.conf
SSL站点配置文件摘录:
<Directory /var/www/html>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
先不要关闭文件,然后在 SSL 证书后面添加以下代码行,如下图所示。
Header always set Strict-Transport-Security "max-age=15552000; includeSubdomains"
关闭 SSL Apache 配置文件并进行最后的更改,以强制访问者每次从浏览器访问 Netxcloud 时都重定向到 HTTPS 协议。打开 /etc/apache2/sites-enabled/000-default.conf 文件进行编辑,并在 DocumentRoot 语句后添加以下重写规则,如下例所示。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1
最后,重新启动 Apache 守护进程以应用迄今为止配置的所有规则并访问 Nextcloud Web 面板。现在,您应该会通过 HTTPS 协议自动重定向到 Nextcloud 网页面板。由于您使用的是 Apache 在安装时自动颁发的自签名证书对,因此浏览器中应显示错误警告。接受警告以继续,然后转到管理 -> 基本设置菜单以测试是否已应用建议的安全设置,如下面的屏幕截图所示。
systemctl restart apache2
如果您的系统中启用了 UFW 防火墙,则应通过发出以下命令添加新规则以允许 HTTPS 流量通过防火墙。
ufw allow 'WWW Full'
或者
ufw allow https
或者
ufw allow 443/tcp
就这样!您已成功从 Debian 9 中的源安装和配置 Nextcloud。您现在可以启用邮件、日历、外部存储支持、LDAP 用户和组支持、视频通话、任务或组织所需的其他应用程序。有关 Nextcloud 的其他自定义配置,请访问以下链接的手册页 https://docs.nextcloud.com/server/12/user_manual/