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
它会询问一些问题。
- 首先会问 mariadb 的 root 密码,我们还没设置。因此回车即可;
- 然后,这个脚本会问是否设置 root 密码,设置就可
- 最后会询问是否移除匿名用户,禁止 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 都可以要
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
类似功能软件
原文链接: 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 交流依文章步骤遇到的问题。