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,因此如果机器已经有如 Nginx 这样的 Web Server,在安装过程中需要自行更改 Apache2 的配置。

如果不了解 PHP 程序的工作流程,可以看看 AhFei 的理解: 浏览器访问网站,会发送请求到服务器,Apache2 收到请求,调用 PHP 程序得到要返回的内容,然后响应用户请求。

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

个人建议使用一个 2g 内存的 VPS 安装 Apache2,专门用来托管 PHP 项目,比如 AhFei 就使用 ZgoCloud 洛杉矶 VPS 测评,AMD 7003 高性能,CMIN2 9929 优化网络 – 他山测评 (tashcp.com) 这台机器,优化网络,性能也很不错,用来托管 Nextcloud 和网页记事本。虽然 Nginx 也能运行 PHP,不过还是要比 Apache2 复杂一些。


原生部署

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

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

前置准备

更新软件

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

确保开放端口:

sudo ufw allow 80
sudo ufw allow 443

设置 Hostname (非必须)

sudo vim /etc/hostname   # 清空,填 nextcloud.ahfei.blog
sudo vim /etc/hosts

示例如下

127.0.0.1 localhost
127.0.1.1 nextcloud.ahfei.blog

设置 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.2/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=16
opcache.max_accelerated_files=10000

opcache.revalidate_freq=1
opcache.save_comments=1

迁移时可以复制原先的

scp -rP 22 vfly2@1.2.3.4:/etc/php/8.2/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

重命名目录

sudo mv nextcloud nextcloud.ahfei.blog

移动到合适位置

mv nextcloud.ahfei.blog /var/www/

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

sudo chown -R www-data:www-data /var/www/nextcloud.ahfei.blog

配置数据库 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 '&4gVUCANTd42wD@WZt';

使命令生效

FLUSH PRIVILEGES;

退出

exit

设置虚拟主机

禁止默认的主机

sudo a2dissite 000-default.conf

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

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

    DocumentRoot "/var/www/nextcloud.ahfei.blog"
    ServerName nextcloud.ahfei.blog

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

</Directory>
   TransferLog /var/log/apache2/nextcloud.ahfei.blog_access.log
   ErrorLog /var/log/apache2/nextcloud.ahfei.blog_error.log

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

使用 HTTPS

使用 root: sudo -i

安装并启用 acme.sh 脚本(修改邮箱)

apt install -y curl && \
curl https://get.acme.sh | sh -s email=vgamebox@outlook.com && \
source ~/.bashrc

切换证书签发机构

acme.sh --set-default-ca --server letsencrypt

申请证书(修改域名)

acme.sh --issue -d nextcloud.ahfei.blog --apache

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

acme.sh --install-cert -d nextcloud.ahfei.blog \
--key-file       /etc/ssl/private/nextcloud.ahfei.blog.key  \
--fullchain-file /etc/ssl/certs/nextcloud.ahfei.blog.cer

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

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

    DocumentRoot "/var/www/nextcloud.ahfei.blog"
    ServerName nextcloud.ahfei.blog

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

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

</Directory>
   TransferLog /var/log/apache2/nextcloud.ahfei.blog_access.log
   ErrorLog /var/log/apache2/nextcloud.ahfei.blog_error.log

SSLCertificateFile /etc/ssl/certs/nextcloud.ahfei.blog.cer
SSLCertificateKeyFile /etc/ssl/private/nextcloud.ahfei.blog.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.ahfei.blog.conf
sudo a2ensite nextcloud.ahfei.blog-le-ssl.conf

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

使用

精选的 APP 都可以要

一个相册 APP: pulsejet/memories: Fast, modern and advanced photo management suite. Runs as a Nextcloud app. (github.com)

Web

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

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

office 套件

How to install ONLYOFFICE in Nextcloud Hub – Nextcloud

外部存储

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

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

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

记录手机轨迹

PhoneTrack Nextcloud application

GpxPod

GpxEdit

各平台客户端软件

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

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

其他

使用 Nginx 和 PostgreSQL 的方案: Install NextCloud on Ubuntu 22.04 (Nginx + PostgreSQL + PHP8) (linuxbabe.com)

修改配置文件 config.php

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

sudo chmod 660 /var/www/nextcloud.ahfei.blog/config/config.php

一个一个看

sudo vim /var/www/nextcloud.ahfei.blog/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' => 'vfly2@gmail.com',
  'mail_smtppassword' => 'password',

修改默认手机号区域

'default_phone_region' => 'CN',

后台任务

Cron 方式

先确保手动执行有效

sudo -u www-data /usr/bin/php -f /var/www/nextcloud.ahfei.blog/cron.php

为 www-data 添加定时任务

sudo crontab -u www-data -e

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

*/5  *  *  *  * /usr/bin/php -f /var/www/nextcloud.ahfei.blog/cron.php

检查

sudo crontab -u www-data -l

执行 occ

以 www-data 用户身份去执行命令 db:add-missing-indices,occ 这个可执行文件默认在安装目录下 /var/www/nextcloud.ahfei.blog/occ

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

开启维护模式

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

退出维护模式

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

改变 Nextcloud 的数据目录

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

先开启维护模式

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

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

修改配置文件

'datadirectory' => '/mnt/nextcloud-data',
sudo chown www-data:www-data -R /mnt/nextcloud-data

关闭维护模式

维护

升级 nextcloud,在网页就能升级

手动升级: Upgrade manually — Nextcloud latest Administration Manual latest documentation

备份

开启维护模式

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

备份 nextcloud 文件夹

tar -J -cvf nextcloud.tar.xz /var/www/nextcloud.ahfei.blog/ -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.ahfei.blog/occ maintenance:mode --off

迁移

开启维护模式

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

关闭 cron 任务

crontab -u www-data -e

迁移 nextcloud 文件

先在网页上删除回收站的文件和备份,减小体积

直接迁移原服务器上的

sudo rsync -avuzP -e "ssh -p 22" -r root@1.2.3.4:/var/www/nextcloud.ahfei.blog /var/www/

设置权限 www-data 为所有者

sudo chown -R www-data:www-data /var/www/nextcloud.ahfei.blog

检查权限

ls -l /var/www/nextcloud.ahfei.blog

迁移数据库

导出数据库

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

转移

sudo rsync -avuzP -e "ssh -p 22" -r root@1.2.3.4:/home/vfly2/nextcloud-dump.sql /var/www/

导入数据库

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

导入上文导出的文件

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

类似功能软件

专注文件同步和分享: 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
小恐龙
花!
上一篇
下一篇