Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM

news/2025/2/6 9:44:42 标签: debian, mariadb, caddy, Nextcloud, PVE

前言

之前通过 docker在ubuntu上安装Nextcloud,但是现在我使用PVE安装Debian虚拟机,不想通过docker安装了。下面开始折腾。

安装过程

步骤 1:更新系统并安装必要的软件

sudo apt update && sudo apt upgrade -y
sudo apt install -y mariadb-server php php-fpm php-cli php-mysql php-curl php-gd php-intl php-mbstring php-xml php-zip php-bz2 php-bcmath php-gmp php-imagick unzip curl sudo

步骤 2:创建并配置 MariaDB 数据库

  • 启动 MariaDB 并设置安全性:
sudo systemctl enable --now mariadb
sudo mysql_secure_installation

按提示设置 root 密码并启用安全选项。

  • 登录 MariaDB:
sudo mysql -u root -p

创建 Nextcloud 数据库和用户:

CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;

可以修改自己的密码 your_secure_password。

Nextcloud__36">步骤 3:创建 Nextcloud 存储目录

确保你的硬盘已经正确挂载,并创建存储目录(假设你挂载到 /mnt/Nextcloud):

sudo mkdir -p /mnt/NextcloudDir/nextcloud_data
sudo chown -R www-data:www-data /mnt/NextcloudDir/nextcloud_data
sudo chmod 750 /mnt/NextcloudDir/nextcloud_data

Nextcloud_44">步骤 4:下载并解压 Nextcloud

获取最新的 Nextcloud 版本:

cd /var/www
sudo curl -o nextcloud.tar.bz2 https://download.nextcloud.com/server/releases/latest.tar.bz2
sudo tar -xjf nextcloud.tar.bz2
sudo rm nextcloud.tar.bz2
sudo chown -R www-data:www-data nextcloud
sudo chmod -R 755 nextcloud

Nextcloud__55">步骤 5:创建 Nextcloud 配置文件

在安装前,创建配置文件 /var/www/nextcloud/config/autoconfig.php,并指定存储位置:

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

添加以下内容:

<?php
$AUTOCONFIG = array(
  "dbtype"        => "mysql",
  "dbname"        => "nextcloud",
  "dbuser"        => "nextcloud",
  "dbpass"        => "your_secure_password",
  "dbhost"        => "localhost",
  "dbtableprefix" => "",
  "adminlogin"    => "admin",
  "adminpass"     => "your_admin_password",
  "directory"     => "/mnt/seafile/nextcloud_data",
);

可以修改 adminlogin 和 adminpass,还有 “dbpass” => “your_secure_password”。
保存并退出 (CTRL + X, 然后 Y 以及 Enter)。

步骤 6:配置 PHP-FPM

编辑 PHP 配置文件:

sudo nano /etc/php/*/fpm/php.ini

找到并修改以下参数。可以使用 Ctrl+W 查找,如果想改 1GB,就填 memory_limit = 1G,

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

重启 PHP-FPM:

sudo systemctl restart php*-fpm

步骤 7:安装并配置 Caddy

  • 安装 Caddy:
sudo apt install -y debian-keyring debian-archive-keyring
sudo curl -fsSL https://dl.cloudsmith.io/public/caddy/stable/gpg.key | sudo tee /usr/share/keyrings/caddy-keyring.asc >/dev/null
echo "deb [signed-by=/usr/share/keyrings/caddy-keyring.asc] https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main" | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
  • 配置 Caddy:
sudo nano /etc/caddy/Caddyfile

添加以下内容(请替换 yourdomain.com 为你的域名或本机 IP):

yourdomain.com {
    root * /var/www/nextcloud
    file_server
    php_fastcgi unix//run/php/php-fpm.sock
    header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    redir /.well-known/carddav /remote.php/dav 301
    redir /.well-known/caldav /remote.php/dav 301
}

我的改为:

  GNU nano 7.2                              /etc/caddy/Caddyfile                                        
# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.

:80 {
        # Set this path to your site's directory.
        root * /var/www/nextcloud

        # Enable the static file server.
        file_server
        php_fastcgi unix//run/php/php-fpm.sock
        header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        redir /.well-known/carddav /remote.php/dav 301
        redir /.well-known/caldav /remote.php/dav 301

        # Another common task is to set up a reverse proxy:
        # reverse_proxy localhost:8080

        # Or serve a PHP site through php-fpm:
        # php_fastcgi localhost:9000
}

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

保存并退出。

启动 Caddy:

sudo systemctl enable --now caddy

Nextcloud__173">步骤 8:完成 Nextcloud 安装

  1. 访问 http://yourdomain.com,Nextcloud 应该会自动完成安装。
  2. 使用 admin 和 your_admin_password 登录。

步骤 9:设置自动更新与优化

  • 配置 定时任务 让 Nextcloud 进行后台任务管理:
sudo crontab -u www-data -e

添加:

*/5 * * * * php -f /var/www/nextcloud/cron.php
  • 启用 OPcache(提高 PHP 性能):
sudo nano /etc/php/*/fpm/php.ini

找到 opcache.enable=0 并修改为:

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1

然后重启 PHP-FPM:

sudo systemctl restart php*-fpm

部分问题后处理

如果没有权限

如果网页登录没有权限进入,修改文件权限

sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod -R 750 /var/www/nextcloud

然后清理缓存

sudo -u www-data php /var/www/nextcloud/occ maintenance:repair

Nextcloud__iPhone_HEIC__224">Nextcloud 预览 iPhone HEIC 图片

下面操作有点混乱,反正是一顿操作+重启,然后好使了。

确保 iPhone 端上传原始 HEIC 格式

iPhone 可能默认会上传 JPEG,而不是 HEIC。请在 iPhone 设置 中进行以下调整:

  1. 打开 iPhone 设置
  2. 进入 “照片”(Photos)
  3. 找到 “传输到 Mac 或 PC”
  4. 选择 “保留原始文件”(Keep Originals)
    这样,iPhone 上传到 Nextcloud 时不会自动转换为 JPEG。
Nextcloud__HEIC__235">允许 Nextcloud 识别 HEIC 格式

Nextcloud 可能不允许 HEIC 文件上传,手动添加 MIME 类型支持:

sudo nano /etc/mime.types

在末尾添加:

image/heic heic
image/heif heif

保存退出(Ctrl + X → Y → 回车)。

然后重启服务器:

sudo systemctl restart php8.2-fpm redis caddy
确保 Web 端可以预览 HEIC

Nextcloud 默认不支持 HEIC 预览,你可以安装 HEIC 预览插件:

sudo -u www-data php /var/www/nextcloud/occ app:install previewgenerator

启用插件:

sudo -u www-data php /var/www/nextcloud/occ app:enable previewgenerator

然后重启 Nextcloud 相关服务:

sudo systemctl restart php8.2-fpm
安装 ImageMagick 以支持 HEIC

ImageMagick 可以让 Nextcloud 生成 HEIC 预览:

sudo apt install imagemagick

检查 HEIC 是否支持:

convert -list format | grep HEIC

如果输出类似于:

 HEIC* HEIF      r--   High Efficiency Image Format

说明已支持。如果 HEIC 没有启用,需要重新编译 ImageMagick,或者使用 libheif:

sudo apt install libheif-examples

然后编辑 policy.xml:

sudo nano /etc/ImageMagick-6/policy.xml

找到:

<policy domain="coder" rights="none" pattern="HEIC" />

改成:

<policy domain="coder" rights="read | write" pattern="HEIC" />

保存退出。没有找到就新增。然后重启:

sudo systemctl restart php8.2-fpm
确保 HEIC 文件可下载

如果 Nextcloud 拦截 HEIC 文件,可能需要手动允许 .heic 上传:

sudo nano /var/www/nextcloud/.htaccess

添加:

AddType image/heic .heic

保存并退出,然后清理缓存:

sudo -u www-data php /var/www/nextcloud/occ files:scan --all
Nextcloud__340">启用 Nextcloud 预览支持

即使安装了 HEIC 解析,Nextcloud 仍然不会自动创建 HEIC 预览,需要手动开启。

1️⃣ 安装 previewgenerator 插件

sudo -u www-data php /var/www/nextcloud/occ app:install previewgenerator
sudo -u www-data php /var/www/nextcloud/occ app:enable previewgenerator

2️⃣ 允许 HEIC 预览

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

在 ); 之前添加:

'enable_previews' => true,
'preview_max_x' => 4096,
'preview_max_y' => 4096,
'preview_max_filesize_image' => 50,
'enabledPreviewProviders' => [
    'OC\Preview\HEIC',
    'OC\Preview\Image',
    'OC\Preview\JPEG',
    'OC\Preview\PNG',
    'OC\Preview\GIF',
    'OC\Preview\BMP',
    'OC\Preview\TIFF',
    'OC\\Preview\\MarkDown',
    'OC\\Preview\\MP3',
    'OC\\Preview\\TXT',
   'OC\\Preview\\XBitmap',
   'OC\\Preview\\OpenDocument',
   'OC\\Preview\\Krita',
   'OC\\Preview\\WebP',
],

保存并退出 (Ctrl + X → Y → 回车)。

3️⃣ 手动生成 HEIC 预览

sudo -u www-data php /var/www/nextcloud/occ preview:generate-all

设置定时任务自动生成 HEIC 预览:

echo "*/30 * * * * www-data php /var/www/nextcloud/occ preview:pre-generate" | sudo tee -a /

http://www.niftyadmin.cn/n/5842839.html

相关文章

大一计算机的自学总结:数据结构设计相关题

前言 说实在的&#xff0c;感觉这种设计数据结构的题比链表题还要ex&#xff0c;尤其是当哈希表和链表一起上的时候&#xff01; 一、设计有setAll功能的哈希表 #include <bits/stdc.h> using namespace std;int cnt0,setAllTime0,setAllValue; map<int,pair<in…

AI工具如何辅助写文章(科研版)

文章总览:[YuanDaiMa2048博客文章总览](https://blog.csdn.net/2301_79288416/article/details/137397359?spm=1001.2014.3001.5501)https://blog.csdn.net/2301_79288416/article/details/137397359?spm=1001.2014.3001.5501 在科研领域,撰写论文是一个复杂且耗时的过程。…

63.网页请求与按钮禁用 C#例子 WPF例子

这是一个简单的从网页获得一些数据的代码&#xff0c;使用了按钮禁用功能防止连续点击。使用了Dispatcher.Invoke从UI线程更新。使用了throw丢出异常。 System.Windows.Application.Current.Dispatcher.Invoke(() >{TextBlock2.Text $"错误&#xff1a;{ex.Message}&q…

回溯算法简单理解

leecode每日一题 回溯算法是一种通过试错来解决问题的算法&#xff0c;当发现当前路径无法得到正确解时&#xff0c;会回溯到上一步尝试其他可能。它特别适合解决 组合问题、排列问题、子集问题、棋盘类问题 等。以下是详细解析和C实现&#xff1a; 一、回溯算法核心思想 “选…

rust安装笔记

安装笔记 安装加速cargo 国内源nightly版本安装其他目标将现有项目迁移到新版本升级 安装加速 export RUSTUP_UPDATE_ROOT"https://mirrors.ustc.edu.cn/rust-static/rustup" export RUSTUP_DIST_SERVERhttps://mirrors.tuna.tsinghua.edu.cn/rustup curl --proto h…

DeepSeek R1技术报告关键解析(8/10):DeepSeek-R1 的“aha 时刻”,AI 自主学习的新突破

1. 什么是 AI 的“aha 时刻”&#xff1f; 在强化学习过程中&#xff0c;AI 的推理能力并不是线性增长的&#xff0c;而是会经历一些关键的“顿悟”时刻&#xff0c;研究人员将其称为“aha 时刻”。 这是 AI 在训练过程中突然学会了一种新的推理方式&#xff0c;或者能够主动…

嵌入式八股文面试题(一)C语言部分

1. 变量/函数的声明和定义的区别&#xff1f; &#xff08;1&#xff09;变量 定义不仅告知编译器变量的类型和名字&#xff0c;还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型&#xff0c;但并不为它分配内存空间…

从qml端发送坐标点到c++端。使用上下文把c++的对象暴露到qml端,然后直接调用c++的函数

coordinatereceiver.h #include <QObject> #include <QPointF> #include <QVector> #include <QDebug> // 定义全局变量来存储坐标点 //QVector<QPointF> globalCoordinates;class CoordinateReceiver : public QObject {Q_OBJECT public:expli…