本页内容
- 准备工作
- 安装 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 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 继续。

httpd Web 服务器安装完成后,使用以下命令启动并设置 httpd 开机自启。
sudo systemctl start httpd
sudo systemctl enable httpd
现在验证 httpd Web 服务器,确保其服务正在运行。
sudo systemctl status httpd
你应该会收到类似以下输出 —— httpd Web 服务器已启用,并将在系统启动时自动启动,且 httpd Web 服务器的状态为运行中(running)。

接下来,你必须通过运行以下命令在 firewalld 上开放 HTTP 和 HTTPS。
sudo firewall-cmd --add-service={http,https} --permanent
sudo firewall-cmd --reload
输出 ' success ' 表示操作成功。
现在使用以下命令验证防火墙上的服务列表。
sudo firewall-cmd --list-services
你应该会看到 HTTP 和 HTTPS 服务都已添加到 firewalld。

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

安装并配置 PHP 8.1
既然已经安装了 httpd Web 服务器并配置了 firewalld,现在该安装 PHP 软件包了。本节将介绍如何通过 REMI 仓库在 AlmaLinux 9 上安装 PHP 8.1。
首先,运行以下命令将 EPEL 仓库添加到你的系统。要从 REMI 仓库安装 PHP 软件包,你必须先添加 EPEL 仓库。
sudo dnf install epel-release
出现提示时输入 y 确认,然后按 ENTER。

接下来,运行以下命令为 RHEL 9 系统安装 REMI 仓库。
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
出现提示时输入 y,然后按 ENTER 继续。

添加 REMI 仓库后,运行以下命令重置当前的 PHP 仓库配置。然后,启用 ' php:remi-8.1 ' 仓库模块。
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.1 -y
预期的输出将如下所示:

现在运行以下 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。

安装完 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 )。
如果安装成功,应显示以下页面:

安装 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

添加 MariaDB 仓库后,使用以下 dnf 命令安装 MariaDB 服务器和客户端软件包。
sudo dnf install MariaDB-server MariaDB-client
出现提示时输入 y 确认,然后按 ENTER 继续。

MariaDB 安装完成后,运行以下命令启动并设置 MariaDB 服务器开机自启。
sudo systemctl start mariadb
sudo systemctl enable mariadb
然后,运行以下命令确保 MariaDB 服务正在运行并已启用。
sudo systemctl status mariadb
当 MariaDB 服务运行时,应显示以下输出。

最后,你也可以运行以下命令来验证 MariaDB 版本。
sudo mariadb --version
如果你按照本指南操作,你将看到已安装 MariaDB 服务器 10.6。

加固 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;

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

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

下载 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/'

接下来,运行以下命令以允许 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

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

现在你已经成功让 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 继续。

安装 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 安装页面:

输入你的 Nextcloud 新管理员用户名和密码。然后点击 MySQL/MariaDB 数据库,并输入 MariaDB 数据库名称、用户名和密码的详细信息。点击 Install(安装)以执行安装。
Nextcloud 安装成功后,你应该会被重定向到如下截图所示的 Nextcloud 仪表盘:

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

总结
总之,按照本指南中列出的步骤,你已成功在 AlmaLinux 9 上基于 LAMP 栈安装了 Nextcloud。你还使用了 firewalld、SELinux 以及来自 Letsencrypt 的 SSL/TLS 证书来保护 Nextcloud。
要让 Nextcloud 更上一层楼,你还可以通过 memcached 设置内存缓存、通过 fail2ban 防范暴力破解攻击,以及通过 Redis 设置文件锁。