本教程适用于以下操作系统版本

  • Debian 12(Bookworm)
  • Debian 11(Bullseye)
  • Debian 10(Buster)
  • Debian 9(Stretch)
  • Debian 9(Stretch)

本页内容

  • 环境准备
  • 安装 Apache2 Web 服务器
  • 安装 UFW
  • 安装 PHP 8.2
  • 安装 MariaDB 服务器
  • 创建数据库和用户
  • 下载 Nextcloud 源代码
  • 配置 Apache2 虚拟主机
  • 使用 SSL/TLS 证书加固 Nextcloud
  • 安装 Nextcloud
  • Nextcloud 基础性能调优
  • 总结

Nextcloud 是一款用于创建公有和私有文件存储的开源软件。它允许你搭建类似 Dropbox、Google Drive 或 Mega.nz 的自托管服务。最初,它由 ownCloud 的原创始人 Frank Karlitschek 创建。2016 年,他将 ownCloud 项目分叉(fork),创建了一个名为「Nextcloud」的新项目。

如今,Nextcloud 项目发展迅速,早已不只是一个文件托管软件,更像是一个文件同步与内容协作平台。依托众多插件,Nextcloud 已成为一款功能强大的协作软件。你可以安装项目管理、视频会议、协同编辑、笔记、邮件客户端等插件。

本教程将向你展示如何在 Debian 12 服务器上安装 Nextcloud。你将使用 Apache2 Web 服务器、MariaDB 服务器和 PHP 8.2 来安装 Nextcloud。此外,你还会使用 UFW(Uncomplicated Firewall)以及来自 Letsencrypt 的 SSL/TLS 证书来加固你的安装。

环境准备

完成本教程前,请确保你具备以下条件:

  • 一台至少 4 GB 内存、2 个 CPU 的 Debian 12 服务器。
  • 一个具有管理员权限的非 root 用户。
  • 一个已解析到服务器 IP 地址的域名。

安装 Apache2 Web 服务器

第一步,你将安装用于运行 Nextcloud 的 Apache2 Web 服务器。

首先,通过以下 apt update 命令更新 Debian 的软件包索引。完成后,你将获得最新的软件包信息,从而可以安装最新版本的软件包。

sudo apt update

现在执行以下 apt install 命令安装 Apache Web 服务器。当提示确认时输入 y,然后按 ENTER 继续安装。

sudo apt install apache2

在 Debian 12 上一步步安装 Nextcloud 私有云盘

Apache2 安装完成后,执行以下 systemctl 命令来验证 apache2 服务状态。

sudo systemctl is-enabled apache2
sudo systemctl status apache2

输出 enabled 表示 apache2 服务将在系统启动时自动启动。而 active (running) 状态则确认 apache2 服务正在运行。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

安装 UFW

Apache2 安装完成后,你将安装 UFW(Uncomplicated Firewall)并为 OpenSSH、HTTP 和 HTTPS 开放端口。你将把 UFW 设置为 Debian 服务器上的默认防火墙。

通过以下 apt install 命令在 Debian 服务器上安装 ufw 软件包。输入 y 确认安装并按 ENTER 继续。

sudo apt install ufw

在 Debian 12 上一步步安装 Nextcloud 私有云盘

ufw 安装完成后,执行以下 ufw 命令以放行 ssh 服务并启用 ufw。

sudo ufw allow OpenSSH
sudo ufw enable

当询问是否启动并启用 ufw 服务时输入 y。如果成功,你将看到输出 "Firewall is active and enabled on system startup"。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

ufw 运行后,你需要添加 Apache2 Web 服务器将要使用的 HTTP 和 HTTPS 端口。

运行以下 ufw 命令获取 ufw 上可用的应用程序配置文件列表。你应该能看到 OpenSSH(用于 ssh 服务)以及 WWW Full(用于 Apache2 Web 服务器,包含 HTTP 和 HTTPS 两种协议)等配置文件。

sudo ufw app list

现在运行以下命令添加并启用 WWW Full 配置文件,然后重新加载 ufw 使更改生效。

sudo ufw allow "WWW Full"
sudo ufw reload

最后,运行以下 ufw status 命令验证 ufw 中已启用的规则。请确保 WWW Full 配置文件已启用,这意味着 HTTP 和 HTTPS 端口均已开放。

sudo ufw status

在 Debian 12 上一步步安装 Nextcloud 私有云盘

安装 PHP 8.2

最新的 Debian 12 Bookworm 默认附带 PHP 8.2 软件包,这也是官方推荐用于安装 Nextcloud 的 PHP 版本。现在,你将安装 PHP 8.2 软件包并为 Nextcloud 安装配置 PHP。你还将启用 PHP Opcache,它将作为 Nextcloud 的内存缓存使用。

运行以下 apt install 命令在 Debian 系统上安装 PHP 软件包。该命令将安装 PHP 以及 Nextcloud 所需的一些扩展,例如 GD、MySQL、Imagick、pear 和 apcu。请查看 Nextcloud 服务器要求页面获取你需要的完整软件包列表。

sudo apt install -y php php-curl php-cli php-mysql php-gd php-common php-xml php-json php-intl php-pear php-imagick php-dev php-common php-mbstring php-zip php-soap php-bz2 php-bcmath php-gmp php-apcu libmagickcore-dev php-redis php-memcached

输入 y 确认安装,然后按 ENTER 继续。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

PHP 安装完成后,使用以下命令检查 PHP 版本和已启用的 PHP 扩展。

php --version
php -m

你应该能看到已安装 PHP 8.2,并启用了 GD、MySQL、Imagick、xml 和 zip 等扩展。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

接下来,运行以下 nano 编辑器命令打开 PHP 配置文件 /etc/php/8.2/apache2/php.ini。

sudo nano /etc/php/8.2/apache2/php.ini

取消注释 date.timezone 参数,并为 PHP 设置正确的时区。

date.timezone = Europe/Amsterdam

提高 memory_limit、upload_max_filesize、post_max_size 和 max_execution_time 等参数的默认值,根据需要自行调整。

memory_limit = 512M
upload_max_filesize = 500M
post_max_size = 600M 
max_execution_time = 300

将 file_uploads 和 allow_url_fopen 的默认值改为 On 以启用它们。

file_uploads = On
allow_url_fopen = On

将 display_errors 和 output_buffering 参数的默认值改为 Off 以禁用它们。

display_errors = Off
output_buffering = Off

取消注释 zend_extension 参数,并将其值改为 opcache,这将启用 Nextcloud 所需的 PHP OPcache。

zend_extension=opcache

在 [opcache] 段落中添加以下配置。该 OPcache 配置由 Nextcloud 官方推荐。

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

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

最后,执行以下 systemctl 命令重启 apache2 服务。每次修改 PHP 配置后,都需要重启 apache2 服务以使更改生效。

sudo systemctl restart apache2

安装 MariaDB 服务器

安装完 Apache2 Web 服务器和 PHP 8.2 后,你将安装用作 Nextcloud 数据库的 MariaDB 服务器,并通过 mariadb-secure-installation 工具配置 MariaDB root 密码。

通过以下 apt install 命令安装 MariaDB 服务器。提示时输入 y 并按 ENTER 继续安装。

sudo apt install mariadb-server

在 Debian 12 上一步步安装 Nextcloud 私有云盘

MariaDB 安装完成后,执行以下 systemctl 命令验证 mariadb 服务。

sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

输出 enabled 表示 mariadb 服务将在系统启动时自动运行。而 active (running) 输出则表示 mariadb 服务正在运行。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

MariaDB 服务器运行后,你应该加固 MariaDB 安装,这可以通过 mariadb-secure-installation 工具完成。mariadb-secure-installation 命令可帮助你设置 MariaDB root 密码和认证方式,并移除默认的匿名用户和测试数据库 test。

执行 mariadb-secure-installation 命令来加固你的 MariaDB 服务器。

sudo mariadb-secure-installation

在此过程中,输入 Y 表示同意并将配置应用到 MariaDB,输入 n 表示不同意并保留默认配置。以下是你会被询问的一些 MariaDB 配置项:

  • 当询问 MariaDB root 密码时,按 ENTER。
  • 当询问 unix_socket 认证方式时,输入 n。
  • 输入 Y 为 MariaDB root 用户设置新密码,然后输入新密码并重复确认。
  • 输入 Y 从 MariaDB 中移除默认匿名用户。
  • 然后再次输入 Y 以禁用 MariaDB root 用户的远程登录。
  • 输入 Y 移除 MariaDB 中默认的 test 数据库。
  • 最后再次输入 Y 以重新加载表权限并使更改生效。

至此,MariaDB 服务器已安装并加固完成。

创建数据库和用户

安装完 MariaDB 服务器后,现在你将创建供 Nextcloud 使用的新数据库和用户。为此,你必须通过 mariadb 客户端登录 MariaDB 服务器。

使用以下 mariadb 客户端命令登录 MariaDB 服务器。提示时输入 MariaDB root 密码。

sudo mariadb -u root -p

登录 MariaDB 后,运行以下查询为 Nextcloud 创建新的 MariaDB 数据库和用户。本例中,你将创建一个名为 nextcloud_db 的新数据库,以及用户 nextclouduser,密码为 StrongPassword。请务必将密码 StrongPassword 替换为新密码。

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

在 Debian 12 上一步步安装 Nextcloud 私有云盘

最后,运行以下查询确保用户 nextclouduser 可以访问数据库 nextcloud_db。

SHOW GRANTS FOR nextclouduser@localhost;

如果一切顺利,你应该能看到用户 nextclouduser 拥有对数据库 nextcloud_db 的权限。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

输入 quit 退出 MariaDB 服务器,完成本节内容。

下载 Nextcloud 源代码

至此,运行 Nextcloud 所需的全部软件包都已安装完成。现在你将下载最新版本的 Nextcloud 源代码并进行安装。开始前请查看 Nextcloud 下载页面以获取最新版本信息。

下载 Nextcloud 源代码之前,运行以下 apt install 命令安装 curl 和 unzip。

sudo apt install curl unzip -y

在 Debian 12 上一步步安装 Nextcloud 私有云盘

切换到 /var/www 目录,并通过以下 curl 命令下载 Nextcloud 源代码。请访问 Nextcloud 下载页面获取最新版本的 Nextcloud。

cd /var/www/
curl -o nextcloud.zip https://download.nextcloud.com/server/releases/latest.zip

在 Debian 12 上一步步安装 Nextcloud 私有云盘

现在通过 unzip 命令解压 nextcloud.zip 文件,然后将 nextcloud 目录的所有权更改为 www-data。

unzip nextcloud.zip
sudo chown -R www-data:www-data nextcloud

至此,你应该注意到 Nextcloud 安装的文档根目录(Document Root)为 /var/www/nextcloud 目录,Apache2 Web 服务器可通过 www-data 用户访问 Nextcloud 源代码。

配置 Apache2 虚拟主机

下载 Nextcloud 源代码后,你必须创建用于运行 Nextcloud 的 Apache2 虚拟主机配置。请确保你的域名已解析到 Debian 服务器 IP 地址。

使用以下 nano 命令创建新的 Apache2 虚拟主机配置文件 /etc/apache2/sites-available/nextcloud.conf。

sudo nano /etc/apache2/sites-available/nextcloud.conf

将 ServerName 参数中的域名替换为你的域名,并修改 ErrorLog 和 CustomLog 参数中日志的完整路径。

<VirtualHost *:80>
    ServerName nextcloud.howtoforge.local
    DocumentRoot /var/www/nextcloud/
    # log files
    ErrorLog /var/log/apache2/files.howtoforge.local-error.log
    CustomLog /var/log/apache2/files.howtoforge.local-access.log combined
    <Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All
        <IfModule mod_dav.c>
            Dav off
        </IfModule>
        SetEnv HOME /var/www/nextcloud
        SetEnv HTTP_HOME /var/www/nextcloud
    </Directory>
</VirtualHost>

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

接下来,运行以下 a2ensite 命令启用虚拟主机配置 nextcloud.conf,然后通过以下 apachectl 命令验证整体 Apache2 配置。

sudo a2ensite nextcloud.conf
sudo apachectl configtest

在 Debian 12 上一步步安装 Nextcloud 私有云盘

如果你的 Apache 配置正确无误,应该会看到 Syntax OK 的输出。

现在执行以下 systemctl 命令重启 apache2 服务,以应用 Nextcloud 虚拟主机配置。

sudo systemctl restart apache2

apache2 重启后,你的 Nextcloud 安装应该可以通过不安全的 HTTP 协议访问。访问你的 Nextcloud 域名,你应该会看到类似如下的安装页面:

在 Debian 12 上一步步安装 Nextcloud 私有云盘

使用 SSL/TLS 证书加固 Nextcloud

为了给你的 Nextcloud 增加一层安全保障,你将通过 Certbot 在 Apache2 虚拟主机配置中启用 HTTPS。Certbot 是一个用于从 Letsencrypt 获取免费 SSL/TLS 证书的命令行工具,并附带一个插件,可自动为多种 Web 服务器配置 HTTPS。

运行以下 apt install 命令安装 Certbot 和 Certbot Apache 插件。提示确认时输入 y,然后按 ENTER 继续。

sudo apt install certbot python3-certbot-apache

在 Debian 12 上一步步安装 Nextcloud 私有云盘

现在运行以下 certbot 命令为你的 Nextcloud 域名生成 SSL/TLS 证书,并在 Apache2 虚拟主机中自动配置 HTTPS。请务必将命令中的域名和邮箱地址替换为你的信息。

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

过程完成后,Nextcloud 域名应已配置 HTTPS,并由 Certbot Apache 插件管理。SSL/TLS 证书位于 /etc/letsencrypt/live/domain-name.com/ 目录中。

安装 Nextcloud

在本节中,你将通过 Web 浏览器开始 Nextcloud 安装。在此过程中,你还将创建 Nextcloud 的管理员用户。

打开你的 Web 浏览器,访问 Nextcloud 安装的域名(例如:http://nextcloud.howtoforge.local/)。你应该会被自动重定向到安全的 HTTPS 连接,并被要求创建 Nextcloud 管理员用户。

输入 Nextcloud 的新管理员用户名和密码。你也可以设置自定义数据目录,或保持默认。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

接下来,滚动到页面底部,输入数据库名称、用户名和密码等详细信息,然后点击「Finish Setup」完成安装。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

安装完成后,Nextcloud 会推荐你安装一些应用。点击「Skip」稍后再安装。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

现在你应该会看到如下的用户仪表盘:

在 Debian 12 上一步步安装 Nextcloud 私有云盘

现在点击文件夹图标,进入 Nextcloud 的文件管理器。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

最后,点击左侧菜单中的用户图标,并选择「Administration Settings」(管理设置)。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

在管理(Administration)部分,点击「Overview」(概览)。你应该能看到 Nextcloud 版本信息以及一些可应用建议,包括安全建议和性能优化项。

在 Debian 12 上一步步安装 Nextcloud 私有云盘

Nextcloud 基础性能调优

在接下来的步骤中,你将通过 OPCache 启用内存缓存,并通过 crontab 配置 cron,来为 Nextcloud 安装添加一些设置。

使用以下 nano 编辑器命令打开 Nextcloud 默认配置文件 /var/www/nextcloud/config/config.php。

sudo nano /var/www/nextcloud/config/config.php

在 $CONFIG = array 段落中,添加以下新配置以启用 Nextcloud 的内存缓存。

<?php
$CONFIG = array (
....
  # Additional configuration
  'memcache.local' => '\OC\Memcache\APCu',
);

完成后保存更改并关闭文件。

接下来,运行以下命令创建一个新的 crontab,用于运行 Nextcloud 的 crontab 脚本。使用 -u www-data 参数,是因为 Apache2 Web 服务器运行在该用户之下。

sudo crontab -u www-data -e

将以下配置添加到 crontab 文件中。

*/5  *  *  *  * php -f /var/www/nextcloud/cron.php

完成后保存并退出文件。

使用以下命令验证 www-data 用户的 crontab 列表。确保你添加的 crontab 脚本已存在。

crontab -u www-data -l

总结

大功告成!你已在 Debian 系统上完成了 Nextcloud 的安装。你使用 Apache2 Web 服务器、PHP 8.2 和 MariaDB 数据库服务器安装了 Nextcloud,并通过 Certbot 和 Letsencrypt 配合 UFW(Uncomplicated Firewall)以及 SSL/TLS 证书加固了你的 Nextcloud。

完成以上配置后,你现在可以使用 Nextcloud 安全地存储文档,或为其添加第三方数据存储。