Nextcloud – 自建网盘和云协作平台

Nextcloud 是一个强大的网盘和云协作平台,允许用户在全平台同步文件、协同编辑文档,并提供多种协作工具,如日历、联系人管理、Email、和即时音视频通话。Nextcloud 开源可自建,因此相比商业服务,更能保护隐私内容。

AhFei 最常使用它的同步功能,用来同步安卓手机和 Windows 电脑上的 Obsidian 库,取代坚果云。

指标 描述
适用系统 Debian 系发行版,包括 Ubuntu, Armbian,其他发行版稍改命令一般也可
走通流程时间 30 分钟

I might have made some mistakes, please let me know if I’ve gotten anything wrong!


官网: Nextcloud – Open source content collaboration platform
官方安装手册: Installation and server configuration — Nextcloud latest Administration Manual latest documentation

原生部署采取 Apache2 + PHP + MariaDB。

根据 AhFei 的浅薄的理解,PHP 程序的工作流程是: 访问网站时,浏览器会发送请求到服务器,Apache2 收到请求,调用 PHP 程序得到要返回的内容,然后响应用户请求。

从这个流程可以看到,PHP 本身并不一直在“运行”,而是 Apache2 去调用,使用数据库存储数据。因此所有 PHP 程序只需要将代码文件放在某个目录下,在其配置文件中编辑好数据库的信息,然后在 Apache2 中增加一个虚拟主机就可以了。

原生部署

单人使用,内存 1g 就行,建议 2g。如果想让同步丝滑,就要使用优化线路的机器。

安装目录是 /var/www/nextcloud.cufah.cloud,域名使用 nextcloud.cufah.cloud,先设置好 DNS 解析。

前置准备

更新软件

sudo apt update && sudo apt -y upgrade && sudo apt autoremove

设置 Hostname (非必须)

sudo vim /etc/hostname   # 清空,填 nextcloud.cufah.cloud
sudo hostnamectl set-hostname nextcloud.cufah.cloud
sudo vim /etc/hosts

示例如下

127.0.0.1 localhost
127.0.1.1 nextcloud.cufah.cloud

设置 Web Server——Apache2

sudo apt -y install php php-apcu php-bcmath php-cli php-common php-curl php-gd php-bz2 php-gmp php-imagick php-intl php-mbstring php-mysql php-zip php-xml libmagickcore-6.q16-6-extra

检查状态

systemctl status apache2

允许 Nextcloud 需要的一些 php 扩展

sudo phpenmod bcmath gmp imagick intl

配置 PHP

查看版本

php --version
sudo vim /etc/php/8.3/apache2/php.ini

推荐调整下面的变量

memory_limit = 512M

upload_max_filesize = 200M

# 最大执行时间,如果机器性能较弱,就不要限制了,否则备份的时候会因为超时失败
# max_execution_time = 360

post_max_size = 200M

date.timezone = Asia/Shanghai

opcache.enable=1

opcache.memory_consumption=128
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=10000

opcache.revalidate_freq=1
opcache.save_comments=1

迁移时可以复制原先的 scp -P 40527 root@1.2.3.4:/etc/php/8.3/apache2/php.ini /etc/php/8.3/apache2/php.ini

确保 php 模组开启

sudo a2enmod dir env headers mime rewrite ssl

重启 Apache

sudo systemctl restart apache2

下载 Nextcloud

如果迁移,跳过此节,参考下面迁移一节,将旧服务器数据移动新服务器

下载网址: Download and install Nextcloud ,最新版网址是固定的,因此直接执行命令即可

curl -O  https://download.nextcloud.com/server/releases/latest.tar.bz2

解压

tar -xjf latest.tar.bz2

重命名目录

mv nextcloud nextcloud.cufah.cloud

移动到合适位置

sudo mv nextcloud.cufah.cloud /var/www/

设置权限 www-data 为其所有者

sudo chown -R www-data:www-data /var/www/nextcloud.cufah.cloud

配置数据库 MariaDB

迁移的话,这一节也要全部做完,和初次安装无区别

安装 MariaDB

sudo apt -y install mariadb-server

检查状态

systemctl status mariadb

为了基本的安全,先运行下面命令

sudo mysql_secure_installation

它会询问一些问题。

  1. 首先会问 mariadb 的 root 密码,我们还没设置。因此回车即可;
  2. 然后,这个脚本会问是否设置 root 密码,设置就可
  3. 最后会询问是否移除匿名用户,禁止 root 远程登陆等,一直回车即可,默认都是同意

创建 Nextcloud 数据库

sudo mariadb

进入仿 shell 界面,使用 MySQL 格式命令。创建名为 nextcloud_db 的空数据库:

CREATE DATABASE nextcloud_db;

检查所有数据库

SHOW DATABASES;

创建用户 nextcloud ,并使其能访问数据库 ,记得修改密码

GRANT ALL PRIVILEGES ON <数据库名称>.* TO '<用户名>'@'localhost' IDENTIFIED BY '用户密码';

比如 GRANT ALL PRIVILEGES ON nextcloud_db.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'sdvwaNTd42wD156';

使命令生效

FLUSH PRIVILEGES;

退出

exit

迁移的话,现在去转移数据库的数据

设置虚拟主机

HTTP

禁止默认的主机

sudo a2dissite 000-default.conf

为 Nextcloud 配置主机文件(监听 80 端口的,记得修改域名和 Nextcloud 的目录

sudo vim /etc/apache2/sites-available/nextcloud.cufah.cloud.conf
<VirtualHost *:80>

    DocumentRoot "/var/www/nextcloud.cufah.cloud"
    ServerName nextcloud.cufah.cloud

<Directory "/var/www/nextcloud.cufah.cloud/">
    Options MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all

</Directory>
   TransferLog /var/log/apache2/nextcloud.cufah.cloud_access.log
   ErrorLog /var/log/apache2/nextcloud.cufah.cloud_error.log

# 开启自动跳转 https
RewriteEngine on
RewriteCond %{SERVER_NAME} =nextcloud.cufah.cloud
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

HTTPS

sudo a2dissite default-ssl.conf

使用 acme.sh 自动获取和更新证书: [[02acme.sh]] 使用 acme.sh 申请和自动更新证书的完整指南 – 技焉洲

使用 root 申请: sudo -i

申请证书(修改域名)

acme.sh --issue -d nextcloud.cufah.cloud --apache

复制证书到指定目录(修改域名)

acme.sh --install-cert -d nextcloud.cufah.cloud \
--key-file       /etc/ssl/private/nextcloud.cufah.cloud.key  \
--fullchain-file /etc/ssl/certs/nextcloud.cufah.cloud.cer \
--reloadcmd "systemctl reload nginx"

编写 Apache2 主机文件(监听 443 端口的,记得修改域名和 Nextcloud 的目录

sudo vim /etc/apache2/sites-available/nextcloud.cufah.cloud-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>

    DocumentRoot "/var/www/nextcloud.cufah.cloud"
    ServerName nextcloud.cufah.cloud

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>

<Directory "/var/www/nextcloud.cufah.cloud/">
    Options MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all

</Directory>
   TransferLog /var/log/apache2/nextcloud.cufah.cloud_access.log
   ErrorLog /var/log/apache2/nextcloud.cufah.cloud_error.log

SSLCertificateFile /etc/ssl/certs/nextcloud.cufah.cloud.cer
SSLCertificateKeyFile /etc/ssl/private/nextcloud.cufah.cloud.key

SSLEngine on

# Intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLOptions +StrictRequire

# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common

</VirtualHost>
</IfModule>

启用两个虚拟主机

sudo a2ensite nextcloud.cufah.cloud.conf
sudo a2ensite nextcloud.cufah.cloud-le-ssl.conf
sudo systemctl reload apache2

现在就可以试一试能不能访问网页了

禁用虚拟主机的命令

sudo a2dissite nextcloud.cufah.cloud.conf
sudo a2dissite nextcloud.cufah.cloud-le-ssl.conf

迁移旧的虚拟主机

sudo scp -P 40527 root@1.2.3.4:/etc/apache2/sites-available/nextcloud.cufah.cloud.conf /etc/apache2/sites-available/
sudo scp -P 40527 root@1.2.3.4:/etc/apache2/sites-available/nextcloud.cufah.cloud-le-ssl.conf /etc/apache2/sites-available/

使用

精选的 APP 都可以要

Web

提供的 WebDAV,网址在个人首页,左下角展开查看。

Notes 这个 APP 有安卓客户端,我用来取代手机自带的备忘录、便签之类的软件。

office 套件

How to install ONLYOFFICE in Nextcloud Hub – Nextcloud

外部存储

挂载另一个 Nextcloud 的空间,用户名和密码认证即可

挂载 WebDAV,认证: 用户和密码

infini 的配置: https://toi.teracloud.jp/dav/ 远程子文件夹为 nextcloud(看实际目录) 开启 https 单独的密码

各平台客户端软件

Windows: https://download.nextcloud.com/desktop/releases/Windows/ ,只是用来同步的软件。

安卓,推荐安装 F-Droid 这个开源应用商店,在上面安装 Nextcloud 以及额外配套的 APP。

其他

修改配置文件 config.php

先修改 config.php 的权限,安全原因

sudo chmod 660 /var/www/nextcloud.cufah.cloud/config/config.php

一个一个看

sudo vim /var/www/nextcloud.cufah.cloud/config/config.php

添加邮箱(以 Gmail 为例,也可以在网页上配置)

  'mail_smtpmode' => 'smtp',
  'mail_smtpsecure' => 'ssl',
  'mail_sendmailmode' => 'smtp',
  'mail_smtpauthtype' => 'LOGIN',
  'mail_smtpauth' => 1,
  'mail_from_address' => 'vfly2nextcloud',
  'mail_domain' => 'gmail.com',
  'mail_smtphost' => 'smtp.gmail.com',
  'mail_smtpport' => '465',
  'mail_smtpname' => 'example@gmail.com',
  'mail_smtppassword' => 'password',

修改默认手机号区域

  'default_phone_region' => 'CN',

后台任务

Cron 方式

先确保手动执行有效

sudo -u www-data /usr/bin/php -f /var/www/nextcloud.cufah.cloud/cron.php

为 www-data 添加定时任务

sudo crontab -u www-data -e

粘贴此行(注意修改路径)

*/5  *  *  *  * /usr/bin/php -f /var/www/nextcloud.cufah.cloud/cron.php

检查

sudo crontab -u www-data -l

执行 occ

这里命令的含义是以 www-data 用户身份去执行某个命令,如添加数据库索引 db:add-missing-indices,occ 是个可执行文件,默认在安装目录下 /var/www/nextcloud.cufah.cloud/occ

开启维护模式

sudo -u www-data php /var/www/nextcloud.cufah.cloud/occ maintenance:mode --on

退出维护模式

sudo -u www-data php /var/www/nextcloud.cufah.cloud/occ maintenance:mode --off

更新命令

sudo -u www-data php /var/www/nextcloud.cufah.cloud/occ upgrade

数据库缺失索引

sudo -u www-data php /var/www/nextcloud.cufah.cloud/occ db:add-missing-indices

Mimetype 迁移

sudo -u www-data php /var/www/nextcloud.cufah.cloud/occ maintenance:repair --include-expensive

改变 Nextcloud 的数据目录

参照上文, Nextcloud 安装在 /var/www/nextcloud.cufah.cloud,因此数据目录默认也是它。假设移动到 /mnt/nextcloud-data/,步骤如下:

先开启维护模式

然后移动数据文件到新目录

cd /var/www/nextcloud.cufah.cloud && mv * /mnt/nextcloud-data/
mv .htaccess .ocdata /mnt/nextcloud-data   # 确保隐藏文件也被移动

修改配置文件

'datadirectory' => '/mnt/nextcloud-data',

确保新目录的所有者是 www-data

sudo chown www-data:www-data -R /mnt/nextcloud-data

关闭维护模式

更新

在网页开启更新,然后看网页提示,在终端执行 sudo -u www-data php /var/www/nextcloud.cufah.cloud/occ upgrade 命令,虽然在网页也能完成更新,但是在终端执行更快更稳。

备份

开启维护模式

sudo -u www-data php /var/www/nextcloud.cufah.cloud/occ maintenance:mode --on

备份 nextcloud 文件夹

tar -J -cvf nextcloud.tar.xz /var/www/nextcloud.cufah.cloud/ -p

解压的方法

mkdir temporary
tar -J -xf nextcloud.tar.xz -C temporary

导出数据库

mysqldump --single-transaction --default-character-set=utf8 -u nextcloud --password='&4gVUCANTd42wD@WZt' nextcloud_db > nextcloud-dump.sql

退出维护模式

sudo -u www-data php /var/www/nextcloud.cufah.cloud/occ maintenance:mode --off

迁移

迁移前可以在网页上删除回收站的文件和备份,减小体积

先看上面原生部署一节,根据指示操作。

开启维护模式

sudo -u www-data php /var/www/nextcloud.cufah.cloud/occ maintenance:mode --on

关闭 cron 任务

sudo crontab -u www-data -e

迁移 nextcloud 文件

直接迁移原服务器上的

sudo rsync -avuzP -e "ssh -p 40527" -r root@1.2.3.4:/var/www/nextcloud.cufah.cloud /var/www/

设置权限 www-data 为所有者

sudo chown -R www-data:www-data /var/www/nextcloud.cufah.cloud

检查权限

ls -l /var/www/nextcloud.cufah.cloud

迁移数据库

导出数据库

mysqldump -u nextcloud -p nextcloud_db > nextcloud-dump.sql
  • nextcloud 是数据库的用户名
  • nextcloud_db 是需要导出的数据库名称
  • nextcloud-dump.sql 是文件输出目录的文件

转移

scp -P 40527 root@1.2.3.4:/home/ahfei/nextcloud-dump.sql /home/ahfei/nextcloud-dump.sql 

导入数据库

先建一个新数据库。前面有步骤

导入上文导出的文件

mysql -u nextcloud -p nextcloud_db < ./nextcloud-dump.sql
  • nextcloud :你可以登录数据库的用户名。
  • nextcloud_db :刚刚新建的空数据库,这条命令会把数据导入到这其中。
  • nextcloud-dump.sql :是上文我们从数据库导出的 sql 文件

如果运行成功,命令行不会有任何提示。如果运行失败,命令行会提示失败原因。

要检测是否导入成功,我们可以登录到 MySQL 查看并检查数据库中的数据。

sudo mariadb

使用 USE nextcloud_db; 选择刚刚我们导入数据的新建数据库,然后使用SHOW TABLES; 查看数据库中包含的表,最后用SELECT * FROM oc_users;打开表查看内容。


如果迁移失败,可以考虑删除数据库,重新进行

DROP DATABASE nextcloud_db;

退出维护模式

sudo -u www-data php /var/www/nextcloud.ahfei.blog/occ maintenance:mode --off

遇到的问题

查看日志的方法

Nextcloud 的日志通常保存在 Nextcloud 安装目录中的 data 目录下的 nextcloud.log 文件中

tail -n 10 /var/www/nextcloud.ahfei.blog/data/nextcloud.log

硬盘空间不足,nextcloud 自动进入维护模式。

先清理硬盘,或者增加硬盘空间。找到占用硬盘最大的目录

sudo du -Sh /var/www/nextcloud.ahfei.blog | sort -rh | head -n 10

然后退出维护模式

sudo -u www-data php /var/www/nextcloud.ahfei.blog/occ maintenance:mode --off

禁用插件

# 查找 Nextcloud 中所有已安装的应用或插件
sudo -u www-data php /var/www/nextcloud.ahfei.blog/occ app:list

# 只看已启用的应用
sudo -u www-data php /var/www/nextcloud.ahfei.blog/occ app:list | grep -B1000 "Disabled apps:"

# 禁用应用
sudo -u www-data php /var/www/nextcloud.ahfei.blog/occ app:disable backup

与 Nginx 配合使用

使用 Nginx 反代,使用 Apache2 运行 nextcloud

改虚拟主机那里的端口。

另外还要改 apache2 绑定的端口,比如 443 改成 4443,否则重启时依然会尝试绑定 443 端口,但这个端口要被 Nginx 使用。

sudo vim /etc/apache2/ports.conf

然后访问 https://nextcloud.ahfei.blog:4443 ,应该可以正常使用。之后用 Nginx 反代即可


Nginx 的配置示例

sudo vim /etc/nginx/sites-available/nextcloud.cufah.cloud
server {
    listen 443 ssl;
    server_name nextcloud.cufah.cloud;

    client_max_body_size 200M;

    # 指定证书的路径
    ssl_certificate /etc/ssl/certs/nextcloud.cufah.cloud.cer;
    ssl_certificate_key /etc/ssl/private/nextcloud.cufah.cloud.key;

    # 避免阻断 acme 的自动申请
    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }

    location / {
        proxy_pass https://127.0.0.1:4443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_buffering off;
    }
}
sudo ln -s /etc/nginx/sites-available/nextcloud.cufah.cloud /etc/nginx/sites-enabled/nextcloud.cufah.cloud

检查配置,并重启生效

sudo nginx -t && sudo systemctl reload nginx

类似功能软件

专注文件同步和分享: haiwen/seafile: High performance file syncing and sharing, with also Markdown WYSIWYG editing, Wiki, file label and other knowledge management features. (github.com)


原文链接: https://yanh.tech/2024/07/nextcloud-self-hosted-network-disk-and-cloud-collaboration-platform/

版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech)

保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。

可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇