本页内容

  • 准备工作
  • 安装 httpd Web 服务器
  • 安装并配置 PHP 8.1
  • 安装 MariaDB 10.6
  • 加固 MariaDB 服务器
  • 为 Nextcloud 创建 MariaDB 数据库和用户
  • 下载 Nextcloud 源代码
  • 配置 SELinux
  • 为 Nextcloud 配置 httpd 虚拟主机
  • 使用 SSL/TLS(Letsencrypt)保护 Nextcloud
  • 通过 Web 安装程序安装 Nextcloud
  • 总结

Nextcloud 是一款免费的开源软件,可让你创建类似 Dropbox、Google Drive 或 Mega.nz 的文件托管服务。它由 ownCloud 最初的开发者 Frank Karlitschek 创建。2016 年,他将 ownCloud 项目分叉(fork),创建了一个名为 "Nextcloud" 的新项目。

此后,Nextcloud 项目迅速发展,已不再仅仅是一款文件托管软件。在大量插件的支持下,Nextcloud 已经成为一款协作软件。你可以安装用于项目管理、视频会议、协同编辑、笔记、邮件客户端等功能的插件。

本指南将教你如何在 AlmaLinux 9 上安装 Nextcloud。你将在一台全新/通用的 AlmaLinux 服务器上安装 Nextcloud。本指南会包含一些软件包依赖的安装,例如 httpd Web 服务器、MariaDB 数据库服务器和 PHP。在本指南结束时,你还将使用 firewalld、SELinux 以及来自 Letsencrypt 的 SSL/TLS 证书来保护 Nextcloud。

以下是安装 Nextcloud 所需的部分软件包要求:

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

准备工作

要完成本指南,你需要满足以下要求:

  • 一台运行 AlmaLinux 9 的 Linux 服务器 —— 本示例使用主机名为 ' alma-nextcloud '、IP 地址为 ' 192.168.5.25 ' 的服务器。
  • 具有 sudo/root 权限的管理员用户或非 root 用户。
  • firewalld 已运行并启用。
  • SELinux 运行于 enforcing(强制)模式。
  • 一个指向服务器 IP 地址的域名 —— 本示例使用域名 ' nextcloud.howtoforge.local '。

现在让我们开始安装。

安装 httpd Web 服务器

要让 Nextcloud 正常运行,你可以使用 Apache/httpd 或 Nginx。在本节中,你将安装用于运行 Nextcloud 的 httpd Web 服务器。在 AlmaLinux 上,httpd 软件包默认可用,你可以通过 DNF 包管理器安装它。

运行以下命令来安装 httpd Web 服务器。

sudo dnf install httpd

出现提示时输入 y 并按 ENTER 继续。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

httpd Web 服务器安装完成后,使用以下命令启动并设置 httpd 开机自启。

sudo systemctl start httpd
sudo systemctl enable httpd

现在验证 httpd Web 服务器,确保其服务正在运行。

sudo systemctl status httpd

你应该会收到类似以下输出 —— httpd Web 服务器已启用,并将在系统启动时自动启动,且 httpd Web 服务器的状态为运行中(running)。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

接下来,你必须通过运行以下命令在 firewalld 上开放 HTTP 和 HTTPS。

sudo firewall-cmd --add-service={http,https} --permanent
sudo firewall-cmd --reload

输出 ' success ' 表示操作成功。

现在使用以下命令验证防火墙上的服务列表。

sudo firewall-cmd --list-services

你应该会看到 HTTP 和 HTTPS 服务都已添加到 firewalld。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

配置好 firewalld 后,现在打开你的 Web 浏览器并访问服务器 IP 地址(例如:http://192.168.5.25/)。你应该会看到 httpd Web 服务器的默认 index.html 页面。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

安装并配置 PHP 8.1

既然已经安装了 httpd Web 服务器并配置了 firewalld,现在该安装 PHP 软件包了。本节将介绍如何通过 REMI 仓库在 AlmaLinux 9 上安装 PHP 8.1。

首先,运行以下命令将 EPEL 仓库添加到你的系统。要从 REMI 仓库安装 PHP 软件包,你必须先添加 EPEL 仓库。

sudo dnf install epel-release

出现提示时输入 y 确认,然后按 ENTER。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

接下来,运行以下命令为 RHEL 9 系统安装 REMI 仓库。

sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

出现提示时输入 y,然后按 ENTER 继续。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

添加 REMI 仓库后,运行以下命令重置当前的 PHP 仓库配置。然后,启用 ' php:remi-8.1 ' 仓库模块。

sudo dnf module reset php -y
sudo dnf module enable php:remi-8.1 -y

预期的输出将如下所示:

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

现在运行以下 dnf 命令,通过 REMI 仓库安装 PHP 8.1 软件包。该命令还会安装 Nextcloud 所需的一些 PHP 扩展,包括 PHP-FPM。

sudo dnf install php php-ctype php-curl php-gd php-iconv php-json php-libxml php-mbstring php-openssl php-posix php-session php-xml php-zip php-zlib php-pdo php-mysqlnd php-intl php-bcmath php-gmp php-imagick php-apcu

出现提示时输入 y,然后按 ENTER。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

安装完 PHP 后,接下来你需要对 ' php.ini ' 配置文件做一些修改,并为 Nextcloud 配置 PHP OPCache 扩展。

使用以下 nano 编辑器命令打开 ' /etc/php.ini ' 文件。

sudo nano /etc/php.ini

按照以下几行修改一些默认选项。同时,根据你服务器可用内存调整 ' memory_limit ' 的大小,并依据服务器所在位置调整 ' date.timezone ' 选项。

file_uploads = On
allow_url_fopen = On
memory_limit = 512M
upload_max_filesize = 500M
post_max_size = 600M 
max_execution_time = 300
display_errors = Off
date.timezone = Europe/Amsterdam

保存文件,完成后退出编辑器。

现在使用 nano 编辑器打开 PHP OPCache 配置文件 ' /etc/php.d/10-opcache.ini '。

sudo nano /etc/php.d/10-opcache.ini

向文件中添加以下几行,以启用并调优适用于 Nextcloud 的 PHP OPCache。

opcache.enable = 1
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.memory_consumption = 128
opcache.save_comments = 1
opcache.revalidate_freq = 1

保存文件,完成后关闭编辑器。

接下来,运行以下命令重启 httpd Web 服务器和 PHP-FPM 服务,以使更改生效。

sudo systemctl restart httpd
sudo systemctl restart php-fpm

既然已经配置好 PHP,现在可以通过创建一个 ' test.php ' 文件来验证 PHP 安装,该文件会显示你 PHP 安装的详细信息。

运行以下命令创建新文件 ' /var/www/test.php '。

echo "<?php phpinfo(); ?>" > /var/www/test.php

打开你的 Web 浏览器并访问服务器 IP 地址加文件路径 ' test.php '(例如:http://192.168.5.25/test.php )。

如果安装成功,应显示以下页面:

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

安装 MariaDB 10.6

默认情况下,Nextcloud 支持多种 RDBMS(关系型数据库管理系统),例如 MySQL/MariaDB、PostgreSQL、Oracle(企业版)和 SQLite。在本节中,你将通过官方 MariaDB 仓库安装 MariaDB 服务器 10.6。

首先,使用以下 nano 编辑器在 ' /etc/yum.repos.d/ ' 目录中创建一个新的仓库配置文件 ' MariaDB.repo ',以添加官方 MariaDB 仓库。

sudo nano /etc/yum.repos.d/MariaDB.repo

向文件中添加以下几行。

# MariaDB 10.6 RedHatEnterpriseLinux repository list
# https://mariadb.org/download/
[mariadb]
name = MariaDB
# rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# baseurl = https://rpm.mariadb.org/10.6/rhel/$releasever/$basearch
baseurl = https://mirror.23m.com/mariadb/yum/10.6/rhel/$releasever/$basearch
# gpgkey= https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgkey=https://mirror.23m.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

保存文件并退出编辑器。

使用以下命令验证可用仓库列表。

sudo dnf repolist

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

添加 MariaDB 仓库后,使用以下 dnf 命令安装 MariaDB 服务器和客户端软件包。

sudo dnf install MariaDB-server MariaDB-client

出现提示时输入 y 确认,然后按 ENTER 继续。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

MariaDB 安装完成后,运行以下命令启动并设置 MariaDB 服务器开机自启。

sudo systemctl start mariadb
sudo systemctl enable mariadb

然后,运行以下命令确保 MariaDB 服务正在运行并已启用。

sudo systemctl status mariadb

当 MariaDB 服务运行时,应显示以下输出。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

最后,你也可以运行以下命令来验证 MariaDB 版本。

sudo mariadb --version

如果你按照本指南操作,你将看到已安装 MariaDB 服务器 10.6。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

加固 MariaDB 服务器

既然已经安装了 MariaDB 服务器,现在该加固 MariaDB 部署了。本节将介绍 ' mariadb-secure-installation ' 工具的基本用法,以加固 MariaDB 部署。

你将使用 ' mariadb-secure-installation ' 工具来设置 MariaDB root 密码、禁用 root 用户的远程登录,并从部署中删除默认的匿名用户和 test 数据库。

运行以下命令来加固你的 MariaDB 部署。

sudo mariadb-secure-installation

你将会被问到以下 MariaDB 配置问题:

  • 当提示输入密码时,按 ENTER 继续。默认的 MariaDB 安装中 root 用户没有密码。
  • 当询问是否将认证方式切换为 ' unix_socket ' 时,输入 ' n ' 表示 ' 否 '。
  • 出现提示时创建一个新的 MariaDB root 密码。输入 ' Y ',然后输入新密码并重复确认。
  • 当询问是否禁用 MariaDB root 用户的远程登录时,输入 ' Y '。
  • 现在从 MariaDB 服务器中删除默认的匿名用户。输入 ' Y ' 表示 ' 是 '。
  • 再次输入 ' Y ' 以从部署中删除默认的 ' test ' 数据库。
  • 最后,再次输入 ' Y ' 以重新加载表权限并应用更改。

为 Nextcloud 创建 MariaDB 数据库和用户

既然已经加固了 MariaDB 部署,现在让我们创建一个 Nextcloud 将使用的新 MariaDB 数据库和用户。

首先,使用以下命令以 root 用户登录 MariaDB shell。出现密码提示时,输入你的 MariaDB root 密码。

sudo mariadb -u root -p

接下来,运行以下查询语句创建一个新数据库 ' nextcloud_db ' 和用户 ' nextuser@localhost '。请务必将查询中的密码替换为你自己的密码。

CREATE DATABASE netxcloud_db;
CREATE USER nextuser@localhost IDENTIFIED BY 'StrongPassword';
GRANT ALL PRIVILEGES ON netxcloud_db.* TO nextuser@localhost;
FLUSH PRIVILEGES;

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

创建数据库和用户后,运行以下查询以确保数据库 ' nextcloud_db ' 已创建。

SHOW DATABASES;

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

然后,运行以下查询以确保 MariaDB 用户 ' nextuser@localhost ' 能够访问数据库 ' nextcloud_db '。

SHOW GRANTS FOR nextuser@localhost;

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

下载 Nextcloud 源代码

如果你已经按照前面的说明操作,现在应该在 AlmaLinux 服务器上安装好了 LAMP 栈(Linux、Apache/httpd、MariaDB 和 PHP)。接下来,你将下载 Nextcloud 源代码,然后为 Nextcloud 源代码设置正确的 SELinux 标签。

首先,运行以下 dnf 命令安装 unzip、wget 以及 SELinux 故障排查工具。

sudo dnf install unzip wget setroubleshoot-server setools-console -y

现在,切换到 '/var/www/ ' 目录,并通过以下 wget 命令下载最新版本的 Nextcloud 源代码。下载完成后,你将看到 ' latest.zip ' 文件。

cd /var/www/
wget -q https://download.nextcloud.com/server/releases/latest.zip

运行以下命令解压 ' latest.zip ' 文件。解压后,Nextcloud 源代码应位于 '/var/www/nextcloud' 目录中。

sudo unzip latest.zip

现在,运行以下命令将 '/var/www/nextcloud ' 目录的所有权更改为用户 ' apache2 '。这样可以让 httpd Web 服务器访问 Nextcloud 源代码。

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

配置 SELinux

下载完 Nextcloud 源代码后,下一步是为 Nextcloud 设置 SELinux 策略和标签。

现在,让我们从运行以下命令开始,为 Nextcloud 源代码和目录设置标签。

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'
sudo restorecon -Rv '/var/www/nextcloud/'

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

接下来,运行以下命令以允许 httpd Web 服务器连接网络(这将启用服务器到服务器共享)、数据库和 Memcache。

sudo setsebool -P httpd_can_network_connect_db on
sudo setsebool -P httpd_can_network_connect on
sudo setsebool -P httpd_can_network_memcache on
sudo setsebool -P mysql_connect_http on

至此,你已经下载了 Nextcloud 源代码,允许 httpd Web 服务器访问 Nextcloud 源代码,并为 Nextcloud 配置了 SELinux 策略。接下来,你将设置 httpd 虚拟主机供 Nextcloud 使用。

在安装过程中,我遇到了 PHP-FPM 无法连接到 MySQL/MariaDB socket 的错误,这是 SELinux 拦截所致。以下是根据 ' audit.log ' 文件生成的自定义策略。

使用你喜欢的编辑器创建文件 ' my-phpfpm.te ',并向文件中添加以下几行。

module my-phpfpm 1.0;
require {
        type unconfined_service_t;
        type httpd_sys_content_t;
        type httpd_t;
        class dir write;
        class unix_stream_socket connectto;
}
#============= httpd_t ==============
#!!!! This avc is allowed in the current policy
allow httpd_t httpd_sys_content_t:dir write;
allow httpd_t unconfined_service_t:unix_stream_socket connectto;

现在,运行以下命令将文件 ' my-phpfpm.te ' 转换为策略模块 ' my-phpfpm.mod '。

sudo checkmodule -M -m -o my-phpfpm.mod my-phpfpm.te

策略模块文件 ' my-phpfpm.mod ' 创建完成后,运行以下命令将 SELinux 策略模块编译为 ' my-phpfpm.pp '

sudo semodule_package -o my-phpfpm.pp -m my-phpfpm.mod

最后,你可以通过运行以下命令应用已编译的 SELinux 策略模块 ' my-phpfpm.pp '。

sudo semodule -i my-phpfpm.pp

为 Nextcloud 配置 httpd 虚拟主机

在接下来的小节中,你将为 Nextcloud 创建一个新的 httpd 虚拟主机。因此,在继续之前,请确保你有一个指向服务器 IP 地址的域名。

运行以下 nano 命令,创建一个新的虚拟主机配置文件 '/etc/httpd/conf.d/nextcloud.conf' 。

sudo nano /etc/httpd/conf.d/nextcloud.conf

向文件中添加以下几行,并务必修改以下虚拟主机配置中的域名。

<VirtualHost *:80>
  DocumentRoot /var/www/nextcloud/
  ServerName  nexcloud.howtoforge.local
  <Directory /var/www/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews
    <IfModule mod_dav.c>
      Dav off
    </IfModule>
  </Directory>
</VirtualHost>

保存文件,然后退出编辑器。

接下来,运行以下命令验证 httpd Web 服务器,确保配置正确。从输出中可以看到 ' Syntax OK ',这确认你的 httpd 配置正确无误。

sudo apachectl configtest

现在,运行以下命令重启 httpd Web 服务器并应用新的虚拟主机配置。

sudo systemctl restart httpd

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

最后,回到你的 Web 浏览器并访问你的 Nextcloud 安装域名(例如:http://nexcloud.howtoforge.local /)。出现以下页面即表示你已成功为 Nextcloud 配置了 httpd 虚拟主机。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

现在你已经成功让 Nextcloud 在 AlmaLinux 上基于 LAMP 栈运行起来了。为了继续,你将使用来自 Letsencrypt 的 SSL/TLS 证书保护 Nextcloud。

使用 SSL/TLS(Letsencrypt)保护 Nextcloud

本节介绍如何使用来自 Letsencrypt 的 SSL/TLS 保护 Nextcloud。你将安装 Certbot 工具,设置并启用 httpd 的 mod_ssl,然后通过 Certbot 从 Letsencrypt 生成 SSL/TLS 证书。

首先,运行以下命令安装 Certbot 及其适用于 Apache/httpd Web 服务器的插件和 mod_ssl 软件包。

sudo dnf install certbot python3-certbot-apache mod_ssl

出现提示时输入 y,然后按 ENTER 继续。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

安装 mod_ssl 后,你必须为 localhost 生成 SSL 证书,否则 httpd 会报错。

输入以下命令为 localhost 生成自签名 SSL/TLS 证书。

openssl req -newkey rsa:2048 -nodes -keyout /etc/pki/tls/private/localhost.key -x509 -days 365 -out /etc/pki/tls/certs/localhost.crt

最后,运行以下命令从 Letsencrypt 生成新的 SSL/TLS 证书。请务必修改以下命令中的域名和电子邮件地址。

sudo certbot --apache --agree-tos --no-eff-email --redirect --hsts --staple-ocsp --email 
[email protected]
 -d nextcloud.howtoforge.local

Certbot 流程完成后,Nextcloud 虚拟主机配置文件 ' /etc/httpd/conf.d/nextcloud.conf ' 应会自动修改,启用 SSL/TLS 并同时开启从 HTTP 到 HTTPS 的自动重定向。

通过 Web 安装程序安装 Nextcloud

打开你的 Web 浏览器并访问你的 Nextcloud 安装域名(例如:https://nexcloud.howtoforge.local /)。当安装成功时,你应该会看到如下截图所示的 Nextcloud 安装页面:

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

输入你的 Nextcloud 新管理员用户名和密码。然后点击 MySQL/MariaDB 数据库,并输入 MariaDB 数据库名称、用户名和密码的详细信息。点击 Install(安装)以执行安装。

Nextcloud 安装成功后,你应该会被重定向到如下截图所示的 Nextcloud 仪表盘:

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

现在点击左上角的文件管理器菜单,你将进入 Nextcloud 文件管理器,可以在其中上传、创建或删除 Nextcloud 上的文件。

在 AlmaLinux 上完整安装并配置 Nextcloud 网盘

总结

总之,按照本指南中列出的步骤,你已成功在 AlmaLinux 9 上基于 LAMP 栈安装了 Nextcloud。你还使用了 firewalld、SELinux 以及来自 Letsencrypt 的 SSL/TLS 证书来保护 Nextcloud。

要让 Nextcloud 更上一层楼,你还可以通过 memcached 设置内存缓存、通过 fail2ban 防范暴力破解攻击,以及通过 Redis 设置文件锁。