自建网盘和云协作平台(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

图片[1]曙光博客-随笔小窝自建网盘和云协作平台(Nextcloud)曙光博客-随笔小窝曙光博客

原生部署采取 Apache2 + PHP + MariaDB,因此如果机器已经有如 Nginx 这样的 Web Server,在安装过程中需要自行更改 Apache2 的配置。

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

从这个流程可以看到,PHP 本身并不一直在“运行”,而是 Apache2 去调用,使用数据库管理数据。因此所有 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 80sudo ufw allow 443   

设置 Hostname (非必须)

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

示例如下

127.0.0.1 localhost127.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=128opcache.interned_strings_buffer=16opcache.max_accelerated_files=10000 opcache.revalidate_freq=1opcache.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 # 开启自动跳转 httpsRewriteEngine onRewriteCond %{SERVER_NAME} =nextcloud.ahfei.blogRewriteRule ^ 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.cerSSLCertificateKeyFile /etc/ssl/private/nextcloud.ahfei.blog.key SSLEngine on # Intermediate configuration, tweak to your needsSSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1SSLCipherSuite          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-SHA384SSLHonorCipherOrder     offSSLSessionTickets       off SSLOptions +StrictRequire # Add vhost name to log entries:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combinedLogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common </VirtualHost></IfModule>   

启用两个虚拟主机

sudo a2ensite nextcloud.ahfei.blog.confsudo 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)

© 版权声明
THE END
喜欢就支持一下吧
点赞8赞赏 分享
评论 抢沙发

    暂无评论内容